Team E1

Fork of HTTPServer by Sam Kirsch

Committer:
leihen
Date:
Sat Jun 01 06:24:43 2013 +0000
Revision:
5:dc88012caef1
Parent:
4:d065642c32cc
Child:
7:cb7fec1265b5
Now also supporting RPC get requests

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 1:6b7472d5e9ee 1 /* HTTPRequestHandler.h */
leihen 3:d6224049b3bf 2 /*
leihen 3:d6224049b3bf 3 Copyright (c) 2013 Henry Leinen (henry[dot]leinen [at] online [dot] de)
leihen 3:d6224049b3bf 4
leihen 3:d6224049b3bf 5 Permission is hereby granted, free of charge, to any person obtaining a copy
leihen 3:d6224049b3bf 6 of this software and associated documentation files (the "Software"), to deal
leihen 3:d6224049b3bf 7 in the Software without restriction, including without limitation the rights
leihen 3:d6224049b3bf 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
leihen 3:d6224049b3bf 9 copies of the Software, and to permit persons to whom the Software is
leihen 3:d6224049b3bf 10 furnished to do so, subject to the following conditions:
leihen 3:d6224049b3bf 11
leihen 3:d6224049b3bf 12 The above copyright notice and this permission notice shall be included in
leihen 3:d6224049b3bf 13 all copies or substantial portions of the Software.
leihen 3:d6224049b3bf 14
leihen 3:d6224049b3bf 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
leihen 3:d6224049b3bf 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
leihen 3:d6224049b3bf 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
leihen 3:d6224049b3bf 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
leihen 3:d6224049b3bf 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
leihen 3:d6224049b3bf 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
leihen 3:d6224049b3bf 21 THE SOFTWARE.
leihen 3:d6224049b3bf 22 */
leihen 1:6b7472d5e9ee 23 #ifndef __HTTPREQUESTHANDLER_H__
leihen 1:6b7472d5e9ee 24 #define __HTTPREQUESTHANDLER_H__
leihen 1:6b7472d5e9ee 25
leihen 1:6b7472d5e9ee 26 #include "mbed.h"
leihen 1:6b7472d5e9ee 27 #include "HTTPConnection.h"
leihen 1:6b7472d5e9ee 28
leihen 3:d6224049b3bf 29 #include <map>
leihen 3:d6224049b3bf 30
leihen 3:d6224049b3bf 31 typedef std::map<const char*,const char*> HTTPHeaders;
leihen 3:d6224049b3bf 32
leihen 5:dc88012caef1 33 typedef enum {
leihen 5:dc88012caef1 34 HTTP_Continue = 100, // 100
leihen 5:dc88012caef1 35 HTTP_SwitchingProtocols = 101, // 101
leihen 5:dc88012caef1 36 HTTP_Ok = 200, // 200
leihen 5:dc88012caef1 37 HTTP_Created = 201, // 201
leihen 5:dc88012caef1 38 HTTP_Accepted = 202, // 202
leihen 5:dc88012caef1 39 HTTP_NonAuthoritativeInformation = 203, // 203
leihen 5:dc88012caef1 40 HTTP_NoContent = 204, // 204
leihen 5:dc88012caef1 41 HTTP_ResetContent = 205, // 205
leihen 5:dc88012caef1 42 HTTP_PartialContent = 206, // 206
leihen 5:dc88012caef1 43 HTTP_MultipleChoices = 300, // 300
leihen 5:dc88012caef1 44 HTTP_MovedPermanently = 301, // 301
leihen 5:dc88012caef1 45 HTTP_Found = 302, // 302
leihen 5:dc88012caef1 46 HTTP_SeeOther = 303, // 303
leihen 5:dc88012caef1 47 HTTP_NotModified = 304, // 304
leihen 5:dc88012caef1 48 HTTP_UseProxy = 305, // 305
leihen 5:dc88012caef1 49 HTTP_TemporaryRedirect = 307, // 307
leihen 5:dc88012caef1 50 HTTP_BadRequest = 400, // 400
leihen 5:dc88012caef1 51 HTTP_Unauthorized = 401, // 401
leihen 5:dc88012caef1 52 HTTP_PaymentRequired = 402, // 402
leihen 5:dc88012caef1 53 HTTP_Forbidden = 403, // 403
leihen 5:dc88012caef1 54 HTTP_NotFound = 404, // 404
leihen 5:dc88012caef1 55 HTTP_MethodNotAllowed = 405, // 405
leihen 5:dc88012caef1 56 HTTP_NotAcceptable = 406, // 406
leihen 5:dc88012caef1 57 HTTP_ProxyAuthRequired = 407, // 407
leihen 5:dc88012caef1 58 HTTP_RequestTimeOut = 408, // 408
leihen 5:dc88012caef1 59 HTTP_Conflict = 409, // 409
leihen 5:dc88012caef1 60 HTTP_Gone = 410, // 410
leihen 5:dc88012caef1 61 HTTP_LengthRequired = 411, // 411
leihen 5:dc88012caef1 62 HTTP_PreconditionFailed = 412, // 412
leihen 5:dc88012caef1 63 HTTP_RequestEntityTooLarge = 413, // 413
leihen 5:dc88012caef1 64 HTTP_RequestURITooLarge = 414, // 414
leihen 5:dc88012caef1 65 HTTP_UnsupportedMediaType = 415, // 415
leihen 5:dc88012caef1 66 HTTP_RequestedRangeNotSatisfiable = 416, // 416
leihen 5:dc88012caef1 67 HTTP_ExpectationFailed = 417, // 417
leihen 5:dc88012caef1 68 HTTP_InternalServerError = 500, // 500
leihen 5:dc88012caef1 69 HTTP_NotImplemented = 501, // 501
leihen 5:dc88012caef1 70 HTTP_BadGateway = 502, // 502
leihen 5:dc88012caef1 71 HTTP_ServiceUnavailable = 503, // 503
leihen 5:dc88012caef1 72 HTTP_GatewayTimeout = 504, // 504
leihen 5:dc88012caef1 73 HTTP_HTTPVersionNotSupported = 505, // 505
leihen 5:dc88012caef1 74 } HTTPResponseCode;
leihen 5:dc88012caef1 75
leihen 3:d6224049b3bf 76 /** class HTTPRequestHandler is the base class for HTTP Handler request implementations.
leihen 3:d6224049b3bf 77 *
leihen 3:d6224049b3bf 78 */
leihen 1:6b7472d5e9ee 79 class HTTPRequestHandler
leihen 1:6b7472d5e9ee 80 {
leihen 3:d6224049b3bf 81 protected:
leihen 3:d6224049b3bf 82 HTTPConnection::HTTPMessage& msg;
leihen 3:d6224049b3bf 83 TCPSocketConnection& tcp;
leihen 3:d6224049b3bf 84
leihen 1:6b7472d5e9ee 85 public:
leihen 3:d6224049b3bf 86 /** Constructor for HTTPRequestHandler objects.
leihen 1:6b7472d5e9ee 87 */
leihen 3:d6224049b3bf 88 HTTPRequestHandler(HTTPConnection::HTTPMessage&, TCPSocketConnection&);
leihen 3:d6224049b3bf 89
leihen 3:d6224049b3bf 90 /** Destructor for HTTPRequestHandler objects.
leihen 3:d6224049b3bf 91 */
leihen 3:d6224049b3bf 92 virtual ~HTTPRequestHandler();
leihen 3:d6224049b3bf 93
leihen 3:d6224049b3bf 94 /** Handler function which will be used by the HTTPServer to serve requests.
leihen 4:d065642c32cc 95 * The default version of this function will dispatch respective handler member
leihen 4:d065642c32cc 96 * functions according to the request type given in the HTTPMessage object.
leihen 4:d065642c32cc 97 * The list of possible functions dispatched is :
leihen 4:d065642c32cc 98 * * handleGetRequest
leihen 4:d065642c32cc 99 * * handlePostRequest
leihen 4:d065642c32cc 100 * * handlePutRequest
leihen 3:d6224049b3bf 101 */
leihen 3:d6224049b3bf 102 virtual void handleRequest();
leihen 1:6b7472d5e9ee 103
leihen 3:d6224049b3bf 104 /** Handler function which will handle errors and return errors correctly
leihen 3:d6224049b3bf 105 * @param errorCode : The error code returned by the HTTP Server to represent the error condition.
leihen 3:d6224049b3bf 106 * @param msg : Request Message information.
leihen 3:d6224049b3bf 107 * @param tcp : The socket which represents the active connection to the client.
leihen 3:d6224049b3bf 108 */
leihen 3:d6224049b3bf 109 virtual void handleError(int errorCode, HTTPHeaders* header = NULL);
leihen 3:d6224049b3bf 110
leihen 3:d6224049b3bf 111 /** Function sends the response header which consists of the return code and the headers section
leihen 3:d6224049b3bf 112 * the response header also contains the length (in bytes) of the body. You need to send the body
leihen 3:d6224049b3bf 113 * right after calling this function. Please note that you do not need to consider the terminating
leihen 3:d6224049b3bf 114 * CR+LF after your last CR+LF. This will be sent automatically once \c endResponse is called. Also
leihen 3:d6224049b3bf 115 * the Length given in \c nLen does not need to consider this additional chars. It will also be
leihen 3:d6224049b3bf 116 * automatically added in \c startResponse. if you need to change the headers, please do NOT
leihen 3:d6224049b3bf 117 * specify the \c Content-Length Header. This is done automatically be the function.
leihen 3:d6224049b3bf 118 */
leihen 3:d6224049b3bf 119 void startResponse(int returnCode, int nLen, HTTPHeaders* header = NULL);
leihen 3:d6224049b3bf 120 void processResponse(int nLen, char* body );
leihen 3:d6224049b3bf 121 void endResponse();
leihen 3:d6224049b3bf 122
leihen 3:d6224049b3bf 123 protected:
leihen 4:d065642c32cc 124 /** Handler function to serve GET requests. Download ressource from server from \c uri location.
leihen 3:d6224049b3bf 125 */
leihen 3:d6224049b3bf 126 virtual int handleGetRequest() = 0;
leihen 1:6b7472d5e9ee 127
leihen 4:d065642c32cc 128 /** Handler function to serve PUT requests. Upload ressource to server to \c uri location.
leihen 3:d6224049b3bf 129 */
leihen 4:d065642c32cc 130 virtual int handlePutRequest() = 0;
leihen 1:6b7472d5e9ee 131
leihen 4:d065642c32cc 132 /** Handler function to serve POST requests. Send data to webserver. Can also be appended to uri.
leihen 3:d6224049b3bf 133 */
leihen 4:d065642c32cc 134 virtual int handlePostRequest() = 0;
leihen 1:6b7472d5e9ee 135 };
leihen 1:6b7472d5e9ee 136
leihen 1:6b7472d5e9ee 137 #endif // __HTTPREQUESTHANDLER_H__