Switch HTTP Server
This commit is contained in:
74
lib/PsychicHttp/src/PsychicWebHandler.cpp
Normal file
74
lib/PsychicHttp/src/PsychicWebHandler.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
#include "PsychicWebHandler.h"
|
||||
|
||||
PsychicWebHandler::PsychicWebHandler() :
|
||||
PsychicHandler(),
|
||||
_requestCallback(NULL),
|
||||
_onOpen(NULL),
|
||||
_onClose(NULL)
|
||||
{}
|
||||
PsychicWebHandler::~PsychicWebHandler() {}
|
||||
|
||||
bool PsychicWebHandler::canHandle(PsychicRequest *request) {
|
||||
return true;
|
||||
}
|
||||
|
||||
esp_err_t PsychicWebHandler::handleRequest(PsychicRequest *request)
|
||||
{
|
||||
//lookup our client
|
||||
PsychicClient *client = checkForNewClient(request->client());
|
||||
if (client->isNew)
|
||||
openCallback(client);
|
||||
|
||||
/* Request body cannot be larger than a limit */
|
||||
if (request->contentLength() > request->server()->maxRequestBodySize)
|
||||
{
|
||||
ESP_LOGE(PH_TAG, "Request body too large : %d bytes", request->contentLength());
|
||||
|
||||
/* Respond with 400 Bad Request */
|
||||
char error[60];
|
||||
sprintf(error, "Request body must be less than %lu bytes!", request->server()->maxRequestBodySize);
|
||||
httpd_resp_send_err(request->request(), HTTPD_400_BAD_REQUEST, error);
|
||||
|
||||
/* Return failure to close underlying connection else the incoming file content will keep the socket busy */
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
//get our body loaded up.
|
||||
esp_err_t err = request->loadBody();
|
||||
if (err != ESP_OK)
|
||||
return err;
|
||||
|
||||
//load our params in.
|
||||
request->loadParams();
|
||||
|
||||
//okay, pass on to our callback.
|
||||
if (this->_requestCallback != NULL)
|
||||
err = this->_requestCallback(request);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
PsychicWebHandler * PsychicWebHandler::onRequest(PsychicHttpRequestCallback fn) {
|
||||
_requestCallback = fn;
|
||||
return this;
|
||||
}
|
||||
|
||||
void PsychicWebHandler::openCallback(PsychicClient *client) {
|
||||
if (_onOpen != NULL)
|
||||
_onOpen(client);
|
||||
}
|
||||
|
||||
void PsychicWebHandler::closeCallback(PsychicClient *client) {
|
||||
if (_onClose != NULL)
|
||||
_onClose(getClient(client));
|
||||
}
|
||||
|
||||
PsychicWebHandler * PsychicWebHandler::onOpen(PsychicClientCallback fn) {
|
||||
_onOpen = fn;
|
||||
return this;
|
||||
}
|
||||
|
||||
PsychicWebHandler * PsychicWebHandler::onClose(PsychicClientCallback fn) {
|
||||
_onClose = fn;
|
||||
return this;
|
||||
}
|
||||
Reference in New Issue
Block a user