Team E1
Fork of HTTPServer by
Diff: HTTPConnection.h
- Revision:
- 3:d6224049b3bf
- Parent:
- 2:8653bbcf7e58
- Child:
- 4:d065642c32cc
--- a/HTTPConnection.h Sun May 26 23:22:36 2013 +0000 +++ b/HTTPConnection.h Tue May 28 01:56:14 2013 +0000 @@ -1,4 +1,25 @@ /* HTTPConnection.h */ +/* +Copyright (c) 2013 Henry Leinen (henry[dot]leinen [at] online [dot] de) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ #ifndef __HTTPConnection_H__ #define __HTTPConnection_H__ @@ -10,60 +31,76 @@ class HTTPServer; -enum HTTPRequestType +/** Type HTTPRequestType enumerates request types +*/ +typedef enum { - HTTP_RT_GET, - HTTP_RT_POST, - HTTP_RT_PUT, - HTTP_RT_OPTIONS, - HTTP_RT_HEAD, - HTTP_RT_DELETE, - HTTP_RT_TRACE, - HTTP_RT_CONNECT -}; + HTTP_RT_GET, /*!< GET request */ + HTTP_RT_POST, /*!< POST request */ + HTTP_RT_PUT, /*!< PUT request */ + HTTP_RT_OPTIONS, /*!< OPTIONS request */ + HTTP_RT_HEAD, /*!< HEAD request */ + HTTP_RT_DELETE, /*!< DELETE request */ + HTTP_RT_TRACE, /*!< TRACE request */ + HTTP_RT_CONNECT /*!< CONNECT request */ +} HTTPRequestType; -struct HTTPMessage -{ - HTTPRequestType request; - std::string uri; - std::string version; - std::map<string, string> headers; -}; /** class HTTPConnection, encapsulates one connection being made throught the HTTPServer * */ class HTTPConnection { public: - /** public constructor - * - */ - HTTPConnection (); - ~HTTPConnection(); - - /** function to close this connection. To be called from internally. - */ - void close(); - - /** query if this connection is closed and can be deleted. - @returns true if connection is closed. - */ - bool is_closed(); - - /** - Polling function - @returns -1 if connection is not required anymore. Can happen if a fault occured or if the connection is not needed anymore. - */ - int poll(); + + /** HTTPMessage contains all the details of the request received by external HTTP client. + */ + typedef struct + { + /** Specifies the request type received + */ + HTTPRequestType request; + /** The uri associated with the request. + */ + std::string uri; + /** Contains the HTTP/1.1 or HTTP/1.0 version requested by client. + */ + std::string version; + /** Map of headers provided by the client in the form <HeaderName>:<HeaderValue> + */ + std::map<std::string, std::string> headers; + } HTTPMessage; + /** Public constructor for HTTPConnection objects. + * + */ + HTTPConnection (); + + /** Destructor for HTTPConnection objects. + * + */ + ~HTTPConnection(); + + /** Query if this connection is already closed and can be deleted. + @returns true, if connection is closed. + */ + bool is_closed(); + + /** Polling function for the connection. + * @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. + */ + int poll(); protected: + + /** Function to close this connection. To be called from internally. + */ + void close(); + friend class HTTPServer; TCPSocketConnection m_Tcp; HTTPMessage m_Msg; - int parse(char *buffer); - int parseHeader(const char *buffer); + int parseHeader(char *buffer); int receiveHeaders(const char* buffer, int nBuffSize); int receiveLine(char* szLine, int nMaxLen, int nTimeout = -1, char szLineTerm = '\n');