#ifndef _UDPTCPNETWORK_WEBUTILS_H_ #define _UDPTCPNETWORK_WEBUTILS_H_ #include "UDPTCPNetwork.h" #include #include /*********************************************************************************/ #define WEB_READ_BUFFER_SIZE 0x10000 enum { // request types WEB_REQEST_UNSUPPORTED, WEB_REQEST_GET, WEB_REQEST_POST, WEB_REQEST_MAX // not set }; /*************************************************************************************** * WebHeaderLine */ class WebHeaderLine { public: WebHeaderLine() { Clear(); }; ~WebHeaderLine() {}; void Clear () { parameter = ""; value = ""; }; std::string parameter; std::string value; }; /*************************************************************************************** * WebRequestBuffer */ class WebRequestBuffer { private: char *buffer_ptr; int buffer_size; // allocated size int buffer_len; // current len int request_type; std::string request; std::string protocol_version; std::list headerlines; int buffer_pos_data; public: WebRequestBuffer(); ~WebRequestBuffer(); int AddBuffer (char *b, int len); int GetBuffer (char **dstptr, int *max); bool RequestComplete(); void Clear() { buffer_len = 0; }; int GetType() { return request_type; }; std::string GetRequestRaw() { return request; }; std::string GetRequest(); std::string GetProtocolVersion() { return protocol_version; }; int GetRequestCmdObj(std::string *cmd, std::string *obj, JSONParse *jp); std::string GetCookie(std::string name); }; class WebServerClient { private: std::string ssl_key; std::string ssl_cert; TCP *tcp; SSLSocket *ssl; // only set if SSL is used char buffer[WEB_READ_BUFFER_SIZE]; public: WebServerClient(); ~WebServerClient(); // will handle the request and send the response // on error reply with ERROR 500 int Accept (TCP *socket, std::string _ssl_key, std::string _ssl_cert); int Accept (TCP *socket); virtual int HandleRequest (WebRequestBuffer *req) { return 0; }; virtual int Loop(); }; #endif