summaryrefslogtreecommitdiff
path: root/Libraries/WiShield/WiServer.h
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/WiShield/WiServer.h')
-rw-r--r--Libraries/WiShield/WiServer.h272
1 files changed, 272 insertions, 0 deletions
diff --git a/Libraries/WiShield/WiServer.h b/Libraries/WiShield/WiServer.h
new file mode 100644
index 0000000..a8d9e4b
--- /dev/null
+++ b/Libraries/WiShield/WiServer.h
@@ -0,0 +1,272 @@
+/******************************************************************************
+
+ Filename: WiSever.h
+ Description: Main header file for the WiServer library
+
+ ******************************************************************************
+
+ Copyright(c) 2009 Mark A. Patel All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Contact Information:
+
+ Author Date Comment
+ ---------------------------------------------------------------
+ Mark A. Patel 05/27/2009 Initial version
+
+ Mark A. Patel 06/05/2009 Revised to work with stack version 1.1,
+ plus added various enhancements such as
+ multi-pass transmission, local client
+ checks, activity LED support, etc.
+
+ Mark A. Patel 06/22/2009 Revised client API
+
+
+ *****************************************************************************/
+
+#ifndef WISERVER_H_
+#define WISERVER_H_
+
+extern "C" {
+ #include "witypes.h"
+ #include "server.h"
+ #include "config.h"
+ #include "uip.h"
+}
+
+#include "Print.h"
+
+
+/*
+ * Function for handling data returned by a POST or GET request
+ */
+typedef void (*returnFunction)(char* data, int len);
+
+/*
+ * Function for serving web pages
+ */
+typedef boolean (*pageServingFunction)(char* URL);
+
+/*
+ * Function for providing the body of a POST request
+ */
+typedef void (*bodyFunction)();
+
+
+
+#ifdef ENABLE_CLIENT_MODE
+/*********** Classes for client-mode functionality *********/
+
+/*
+ * Class that encapsulates an HTTP GET request
+ */
+class GETrequest
+ {
+ public:
+
+ /*
+ * Creates a new GETrequest with the provided IP, port, host name and URL
+ */
+ GETrequest(uint8* ipAddr, int port, char* hostName, char* URL);
+
+ /*
+ * Submits the request and prevents further changes to the request until it has been
+ * processed.
+ */
+ void submit();
+
+ /*
+ * Sets the function that should be called with data returned by the server.
+ */
+ void setReturnFunc(returnFunction func);
+
+ /*
+ * Sets the authorization string for the request. Calls to this method will be ignored if the request
+ * has been submitted and is still being processed by WiServer.
+ */
+ void setAuth(char* auth);
+
+ /*
+ * Checks if this request is currently being processed by the WiServer (i.e. it is awaiting a connection
+ * or is currently connected and communicating with the server). If it is, any calls that attempt
+ * to change the properties of the request will be ignored.
+ */
+ boolean isActive();
+
+ /*
+ * Sets the URL for the request. Calls to this method will be ignored if the request
+ * has been submitted and is currently being processed by WiServer.
+ */
+ void setURL(char* URL);
+
+ // Server IP address (network byte order)
+ uip_ipaddr_t ipAddr;
+ // Server port number
+ int port;
+ // Server domain name
+ char* hostName;
+ // Request URL
+ char* URL;
+ // Authorization string (may be NULL)
+ char* auth;
+ // Return value callback function (may be NULL)
+ returnFunction returnFunc;
+ // Indicates if the request is currently active (i.e. has a connection)
+ boolean active;
+ // Body data callback function (may be NULL)
+ bodyFunction body;
+ // Body preamble (may be NULL)
+ char* bodyPreamble;
+ // Pointer to the next request in the queue
+ GETrequest* next;
+ };
+
+
+/*
+ * Class that encapsulates aN HTTP POST request
+ */
+class POSTrequest : public GETrequest
+ {
+ public:
+
+ /*
+ * Creates a new POSTrequest with the provided IP, port, host name, URL and body function.
+ */
+ POSTrequest(uint8* ipAddr, int port, char* hostName, char* URL, bodyFunction body);
+
+ void setBodyFunc(bodyFunction body);
+
+ };
+
+
+/*
+ * Class that encapsulates a TWEET request (basically a POST request populated with Twitter-specific data)
+ */
+class TWEETrequest : public POSTrequest
+ {
+ public:
+
+ /*
+ * Creates a new TWEETrequest with the provided auth string and message function.
+ * The body function will be called to provide the contents of the message; the
+ * 'status=' prefix is automatically inserted before the message.
+ */
+ TWEETrequest(char* auth, bodyFunction message);
+ };
+
+#endif // ENABLE_CLIENT_MODE
+
+
+class Server: public Print
+{
+ public:
+
+ /**
+ * Inits the server with the provided page serving function
+ *
+ * @param pageServerFunc name of the sketch's page serving function
+ */
+ void init(pageServingFunction function);
+
+ /*
+ * Enables or disables verbose mode. If verbose mode is true, then WiServer
+ * will output log info via the Serial class. Verbose mode is disabled by
+ * default, but is automatically enabled if DEBUG is defined
+ */
+ void enableVerboseMode(boolean enable);
+
+ /**
+ * The server task method (must be called in the main loop to run the WiServer)
+ */
+ void server_task();
+
+ /**
+ * Writes a single byte to the current connection buffer
+ */
+ virtual void write(uint8_t);
+
+ /**
+ * Prints a string that is stored in program memory
+ */
+ void print_P(const char[]);
+
+ /**
+ * Prints a string that is stored in program memory followed by a line feed
+ */
+ void println_P(const char[]);
+
+ /**
+ * Writes data of a specified length that is stored in program memory
+ */
+ void write_P(const char[], int len);
+
+ /**
+ * Prints a time value in the form HH:MM:SS. The time value is in milliseconds.
+ *
+ */
+ void printTime(long t);
+
+ /**
+ * Indicates if a page is currently being sent, and that a subsequent call to the page
+ * serving function may occur to request more data or to retransmit data that was lost
+ * in the network. Changes to the content of the page should only be made if this method
+ * returns false.
+ */
+ boolean sendInProgress();
+
+ /**
+ * Checks if the client for the current server request resides on the same local network
+ * as the server. This information can be used to control access to data
+ * and capabilities based on where the client is located. The check is made
+ * by comparing the server and client addresses using the subnet mask.
+ * <br>
+ * For example, a web page front-end for a HVAC system might display read-only data
+ * to all clients, but may restrict changes to the settings to only those clients
+ * connected via the building's local network.
+ * <br>
+ * Note that security checks based on the client IP address are not 100% reliable,
+ * so this feature should not be relied upon to control access to sensitive data!
+ */
+ boolean clientIsLocal();
+
+ /**
+ * Sets the pins used to indicate TX and RX activity over the network.
+ * These pins will be set to a HIGH output when activity occurs, and may
+ * be connected to LEDs via a suitable resistor to provide indicator lights.
+ * A value of -1 disables activity indication.
+ */
+ void setIndicatorPins(int tx, int rx);
+
+#ifdef ENABLE_CLIENT_MODE
+
+ /*
+ * Called by request classes to submit themselves to the queue
+ */
+ void submitRequest(GETrequest *req);
+
+ char* base64encode(char* data);
+
+
+
+#endif // ENABLE_CLIENT_MODE
+
+};
+
+// Single instance of the Server
+extern Server WiServer;
+
+
+
+#endif /* WISERVER_H_ */