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.
86 lines
2.3 KiB
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
|