Added a new state to the state machine for consistency

This commit is contained in:
Th3maz1ng 2019-12-25 21:07:11 +01:00
parent 82db9489f7
commit 1eaa1c1361

View File

@ -15,7 +15,7 @@ class WEBServer : public TCPServer<T>
enum HttpVersion {UNKNOWN, HTTP_0_9, HTTP_1_1, HTTP_1_0, HTTP_2_0}; enum HttpVersion {UNKNOWN, HTTP_0_9, HTTP_1_1, HTTP_1_0, HTTP_2_0};
enum HttpMIMEType{UNKNOWN_MIME, TEXT_PLAIN, TEXT_CSS, TEXT_HTML, TEXT_JAVASCRIPT, APPLICATION_JSON, APPLICATION_X_WWW_FORM_URLENCODED, IMAGE_PNG, IMAGE_JPEG, AUDIO_MPEG, APPLICATION_OCTET_STREAM}; enum HttpMIMEType{UNKNOWN_MIME, TEXT_PLAIN, TEXT_CSS, TEXT_HTML, TEXT_JAVASCRIPT, APPLICATION_JSON, APPLICATION_X_WWW_FORM_URLENCODED, IMAGE_PNG, IMAGE_JPEG, AUDIO_MPEG, APPLICATION_OCTET_STREAM};
enum HttpParserStatus {HTTP_VERB, HTTP_RESSOURCE, HTTP_VERSION, HTTP_PARAMS, POST_DATA, HEADER_PARAMS}; enum HttpParserStatus {HTTP_VERB, HTTP_RESSOURCE, HTTP_VERSION, HTTP_PARAMS, POST_DATA, HEADER_PARAMS};
enum WEBClientState {ACCEPTED, QUERY_PARSED, RESPONSE_SENT, DONE}; enum WEBClientState {ACCEPTED, PARSING, QUERY_PARSED, RESPONSE_SENT, DONE};
enum HTTP_CODE {_100, _101, _200, _400, _401, _403, _404, _405, _500, _501}; enum HTTP_CODE {_100, _101, _200, _400, _401, _403, _404, _405, _500, _501};
struct HttpRequestData struct HttpRequestData
@ -82,6 +82,9 @@ class WEBServer : public TCPServer<T>
#ifdef DEBUG_WEBS #ifdef DEBUG_WEBS
Serial.println("WEBServer : ACCEPTED"); Serial.println("WEBServer : ACCEPTED");
#endif #endif
client->_WEBClientState = WEBClientState::PARSING;
break;
case PARSING:
queryParser(client); queryParser(client);
break; break;
case QUERY_PARSED: case QUERY_PARSED:
@ -142,7 +145,6 @@ class WEBServer : public TCPServer<T>
{ {
sendInfoResponse(HTTP_CODE::_400, client, "The server could not understand the request due to invalid syntax"); sendInfoResponse(HTTP_CODE::_400, client, "The server could not understand the request due to invalid syntax");
client->_clientState = TCPClient::ClientState::DISCARDED; client->_clientState = TCPClient::ClientState::DISCARDED;
break;
} }
} }
break; break;
@ -202,6 +204,9 @@ class WEBServer : public TCPServer<T>
case HttpParserStatus::HTTP_VERSION: case HttpParserStatus::HTTP_VERSION:
{ {
char *pEndline = strstr((char *)client->_data, "\r\n"); char *pEndline = strstr((char *)client->_data, "\r\n");
if(pEndline == NULL) pEndline = strstr((char *)client->_data, "\n");
char *pVers = strstr((char *)client->_data, "HTTP/"); char *pVers = strstr((char *)client->_data, "HTTP/");
if(pEndline != NULL && pVers!= NULL) if(pEndline != NULL && pVers!= NULL)
@ -390,6 +395,9 @@ class WEBServer : public TCPServer<T>
} }
else //nothing to parse or done else //nothing to parse or done
{ {
#ifdef DEBUG_WEBS
Serial.println("Nothing to parse or done");
#endif
return false; return false;
} }