#ifndef _UDPTCPNETWORK_WEBUTILS_H_ #define _UDPTCPNETWORK_WEBUTILS_H_ #include "UDPTCPNetwork.h" #include #include /*********************************************************************************/ #define WEB_READ_BUFFER_SIZE 0x10000 enum { // request types WEB_REQUEST_UNSUPPORTED, WEB_REQUEST_GET, WEB_REQUEST_POST, WEB_REQUEST_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]; std::string DocumentRoot; protected: WebRequestBuffer ReqBuffer; public: WebServerClient(); ~WebServerClient(); void SetDecoumentRoot(std::string path) { DocumentRoot = path; }; // 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); std::string CreateHeader(WebRequestBuffer *request, int errcode, std::string doc_type, int doc_size, std::string addheader); int SendResponseData (WebRequestBuffer *request, std::string data, std::string addheader); std::string GetFileType (std::string fname); std::string Get_WebFile_FullPath(std::string file); int SendResponseFile (WebRequestBuffer *request, std::string fname, std::string addheader); virtual int Loop(); virtual int HandleRequest (); }; #endif