Team E1

Fork of HTTPServer by Sam Kirsch

Committer:
leihen
Date:
Tue May 28 01:56:14 2013 +0000
Revision:
3:d6224049b3bf
Parent:
2:8653bbcf7e58
Child:
4:d065642c32cc
First beta version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 0:7a2421e63e74 1 /* HTTPConnection.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 0:7a2421e63e74 23 #ifndef __HTTPConnection_H__
leihen 0:7a2421e63e74 24 #define __HTTPConnection_H__
leihen 0:7a2421e63e74 25
leihen 0:7a2421e63e74 26 #include "mbed.h"
leihen 0:7a2421e63e74 27 #include "TCPSocketConnection.h"
leihen 0:7a2421e63e74 28
leihen 0:7a2421e63e74 29 #include <string>
leihen 0:7a2421e63e74 30 #include <map>
leihen 0:7a2421e63e74 31
leihen 1:6b7472d5e9ee 32 class HTTPServer;
leihen 1:6b7472d5e9ee 33
leihen 3:d6224049b3bf 34 /** Type HTTPRequestType enumerates request types
leihen 3:d6224049b3bf 35 */
leihen 3:d6224049b3bf 36 typedef enum
leihen 0:7a2421e63e74 37 {
leihen 3:d6224049b3bf 38 HTTP_RT_GET, /*!< GET request */
leihen 3:d6224049b3bf 39 HTTP_RT_POST, /*!< POST request */
leihen 3:d6224049b3bf 40 HTTP_RT_PUT, /*!< PUT request */
leihen 3:d6224049b3bf 41 HTTP_RT_OPTIONS, /*!< OPTIONS request */
leihen 3:d6224049b3bf 42 HTTP_RT_HEAD, /*!< HEAD request */
leihen 3:d6224049b3bf 43 HTTP_RT_DELETE, /*!< DELETE request */
leihen 3:d6224049b3bf 44 HTTP_RT_TRACE, /*!< TRACE request */
leihen 3:d6224049b3bf 45 HTTP_RT_CONNECT /*!< CONNECT request */
leihen 3:d6224049b3bf 46 } HTTPRequestType;
leihen 0:7a2421e63e74 47
leihen 0:7a2421e63e74 48
leihen 0:7a2421e63e74 49 /** class HTTPConnection, encapsulates one connection being made throught the HTTPServer
leihen 0:7a2421e63e74 50 *
leihen 0:7a2421e63e74 51 */
leihen 0:7a2421e63e74 52 class HTTPConnection {
leihen 0:7a2421e63e74 53 public:
leihen 3:d6224049b3bf 54
leihen 3:d6224049b3bf 55 /** HTTPMessage contains all the details of the request received by external HTTP client.
leihen 3:d6224049b3bf 56 */
leihen 3:d6224049b3bf 57 typedef struct
leihen 3:d6224049b3bf 58 {
leihen 3:d6224049b3bf 59 /** Specifies the request type received
leihen 3:d6224049b3bf 60 */
leihen 3:d6224049b3bf 61 HTTPRequestType request;
leihen 3:d6224049b3bf 62 /** The uri associated with the request.
leihen 3:d6224049b3bf 63 */
leihen 3:d6224049b3bf 64 std::string uri;
leihen 3:d6224049b3bf 65 /** Contains the HTTP/1.1 or HTTP/1.0 version requested by client.
leihen 3:d6224049b3bf 66 */
leihen 3:d6224049b3bf 67 std::string version;
leihen 3:d6224049b3bf 68 /** Map of headers provided by the client in the form <HeaderName>:<HeaderValue>
leihen 3:d6224049b3bf 69 */
leihen 3:d6224049b3bf 70 std::map<std::string, std::string> headers;
leihen 3:d6224049b3bf 71 } HTTPMessage;
leihen 3:d6224049b3bf 72 /** Public constructor for HTTPConnection objects.
leihen 3:d6224049b3bf 73 *
leihen 3:d6224049b3bf 74 */
leihen 3:d6224049b3bf 75 HTTPConnection ();
leihen 3:d6224049b3bf 76
leihen 3:d6224049b3bf 77 /** Destructor for HTTPConnection objects.
leihen 3:d6224049b3bf 78 *
leihen 3:d6224049b3bf 79 */
leihen 3:d6224049b3bf 80 ~HTTPConnection();
leihen 3:d6224049b3bf 81
leihen 3:d6224049b3bf 82 /** Query if this connection is already closed and can be deleted.
leihen 3:d6224049b3bf 83 @returns true, if connection is closed.
leihen 3:d6224049b3bf 84 */
leihen 3:d6224049b3bf 85 bool is_closed();
leihen 3:d6224049b3bf 86
leihen 3:d6224049b3bf 87 /** Polling function for the connection.
leihen 3:d6224049b3bf 88 * @returns -1 if connection is not required anymore. In the current version of this library this should be the normal case. This may change in future versions.
leihen 3:d6224049b3bf 89 */
leihen 3:d6224049b3bf 90 int poll();
leihen 0:7a2421e63e74 91
leihen 0:7a2421e63e74 92 protected:
leihen 3:d6224049b3bf 93
leihen 3:d6224049b3bf 94 /** Function to close this connection. To be called from internally.
leihen 3:d6224049b3bf 95 */
leihen 3:d6224049b3bf 96 void close();
leihen 3:d6224049b3bf 97
leihen 1:6b7472d5e9ee 98 friend class HTTPServer;
leihen 1:6b7472d5e9ee 99
leihen 0:7a2421e63e74 100 TCPSocketConnection m_Tcp;
leihen 1:6b7472d5e9ee 101 HTTPMessage m_Msg;
leihen 2:8653bbcf7e58 102 int parse(char *buffer);
leihen 3:d6224049b3bf 103 int parseHeader(char *buffer);
leihen 0:7a2421e63e74 104 int receiveHeaders(const char* buffer, int nBuffSize);
leihen 0:7a2421e63e74 105 int receiveLine(char* szLine, int nMaxLen, int nTimeout = -1, char szLineTerm = '\n');
leihen 0:7a2421e63e74 106
leihen 0:7a2421e63e74 107 };
leihen 0:7a2421e63e74 108
leihen 0:7a2421e63e74 109 #endif // __HTTPConnection_H__