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

86 lines
2.3 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_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<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];
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