8 #ifndef CPP_UTILS_WEBSERVER_H_
9 #define CPP_UTILS_WEBSERVER_H_
14 #include "sdkconfig.h"
16 #ifdef CONFIG_MONGOOSE_PRESENT
19 #define MAX_CHUNK_LENGTH 4090 // 4 kilobytes
35 HTTPRequest(
struct http_message* message);
36 const char* getMethod()
const;
37 const char* getPath()
const;
38 const char* getBody()
const;
39 size_t getMethodLen()
const;
40 size_t getPathLen()
const;
41 size_t getBodyLen()
const;
42 std::map<std::string, std::string> getQuery()
const;
43 std::vector<std::string> pathSplit()
const;
46 struct http_message* m_message;
55 HTTPResponse(
struct mg_connection* nc);
56 void addHeader(
const std::string& name,
const std::string& value);
57 void addHeader(std::string&& name, std::string&& value);
58 void setStatus(
int status);
59 void setHeaders(
const std::map<std::string, std::string>& headers);
60 void setHeaders(std::map<std::string, std::string>&& headers);
61 void sendData(
const std::string& data);
62 void sendData(
const uint8_t* pData,
size_t length);
63 void sendData(
const char* pData,
size_t length);
64 const std::string& getRootPath()
const;
65 void setRootPath(
const std::string& path);
66 void setRootPath(std::string&& path);
68 void sendChunk(
const char* pData,
size_t length);
69 void closeConnection();
72 struct mg_connection* m_nc;
73 std::string m_rootPath;
75 std::map<std::string, std::string> m_headers;
77 std::string buildHeaders();
102 class HTTPMultiPart {
104 virtual ~HTTPMultiPart() =
default;
105 virtual void begin(
const std::string& varName,
const std::string& fileName);
107 virtual void data(
const std::string& data);
108 virtual void multipartEnd();
109 virtual void multipartStart();
149 class HTTPMultiPartFactory {
155 virtual HTTPMultiPart* newInstance() = 0;
165 PathHandler(
const std::string& method,
const std::string& pathPattern,
void (*webServerRequestHandler) (WebServer::HTTPRequest* pHttpRequest, WebServer::HTTPResponse* pHttpResponse));
166 PathHandler(std::string&& method,
const std::string& pathPattern,
void (*webServerRequestHandler) (WebServer::HTTPRequest* pHttpRequest, WebServer::HTTPResponse* pHttpResponse));
167 bool match(
const char* method,
size_t method_len,
const char* path);
168 void invoke(HTTPRequest* request, HTTPResponse* response);
171 std::string m_method;
172 std::regex m_pattern;
173 void (*m_requestHandler)(WebServer::HTTPRequest* pHttpRequest, WebServer::HTTPResponse* pHttpResponse);
183 virtual void onMessage(
const std::string& message);
185 void sendData(
const std::string& message);
186 void sendData(
const uint8_t* data, uint32_t size);
190 struct mg_connection* m_mgConnection;
194 class WebSocketHandlerFactory {
201 virtual ~WebServer();
202 void addPathHandler(
const std::string& method,
const std::string& pathExpr,
void (*webServerRequestHandler) (WebServer::HTTPRequest* pHttpRequest, WebServer::HTTPResponse* pHttpResponse));
203 void addPathHandler(std::string&& method,
const std::string& pathExpr,
void (*webServerRequestHandler) (WebServer::HTTPRequest* pHttpRequest, WebServer::HTTPResponse* pHttpResponse));
204 const std::string& getRootPath();
205 void setMultiPartFactory(HTTPMultiPartFactory* pMultiPartFactory);
206 void setRootPath(
const std::string& path);
207 void setRootPath(std::string&& path);
208 void setWebSocketHandlerFactory(WebSocketHandlerFactory* pWebSocketHandlerFactory);
209 void start(
unsigned short port = 80);
210 void processRequest(
struct mg_connection* mgConnection,
struct http_message* message);
211 void continueConnection(
struct mg_connection* mgConnection);
212 HTTPMultiPartFactory* m_pMultiPartFactory;
213 WebSocketHandlerFactory* m_pWebSocketHandlerFactory;
216 std::string m_rootPath;
217 std::vector<PathHandler> m_pathHandlers;
218 std::map<sock_t, FILE*> unfinishedConnection;
222 #endif // CONFIG_MONGOOSE_PRESENT
Handle path matching for an incoming HTTP request.
Definition: HttpServer.h:27
Definition: WebSocket.h:47