You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libUDPTCPNetwork/UDPTCPNetwork-webutils.h

102 lines
3.0 KiB

#ifndef _UDPTCPNETWORK_WEBUTILS_H_
#define _UDPTCPNETWORK_WEBUTILS_H_
#include "UDPTCPNetwork.h"
#include <string>
#include <list>
/*********************************************************************************/
#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<WebHeaderLine> 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 HandleRequest (WebRequestBuffer *req) { return 0; };
virtual int Loop();
virtual int HandleRequest ();
};
#endif