Use HTTP method table from ESP-IDF's nghttp (#4900)
Fixes: #4884 * Use HTTP method table from ESP-IDF's nghttp * Parse methods using IDF's HTTP method list * Make example's loops to allow the CPU to switch tasks
This commit is contained in:
		
							parent
							
								
									dd834b3372
								
							
						
					
					
						commit
						f7fc8ab377
					
				| @ -125,6 +125,7 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
| 
 | ||||
| void drawGraph() { | ||||
|  | ||||
| @ -300,4 +300,5 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -70,4 +70,5 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -56,4 +56,5 @@ void setup() { | ||||
| void loop() { | ||||
|   ArduinoOTA.handle(); | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -38,4 +38,5 @@ void setup() { | ||||
| void loop() { | ||||
|   ArduinoOTA.handle(); | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -53,4 +53,5 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -310,4 +310,5 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -129,4 +129,5 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -65,5 +65,5 @@ void setup(void) { | ||||
| 
 | ||||
| void loop(void) { | ||||
|   server.handleClient(); | ||||
|   delay(1); | ||||
|   delay(2);//allow the cpu to switch to other tasks
 | ||||
| } | ||||
|  | ||||
| @ -1,15 +1,9 @@ | ||||
| #ifndef _HTTP_Method_H_ | ||||
| #define _HTTP_Method_H_ | ||||
| 
 | ||||
| typedef enum { | ||||
|   HTTP_GET     = 0b00000001, | ||||
|   HTTP_POST    = 0b00000010, | ||||
|   HTTP_DELETE  = 0b00000100, | ||||
|   HTTP_PUT     = 0b00001000, | ||||
|   HTTP_PATCH   = 0b00010000, | ||||
|   HTTP_HEAD    = 0b00100000, | ||||
|   HTTP_OPTIONS = 0b01000000, | ||||
|   HTTP_ANY     = 0b01111111, | ||||
| } HTTPMethod; | ||||
| #include "http_parser.h" | ||||
| 
 | ||||
| typedef enum http_method HTTPMethod; | ||||
| #define HTTP_ANY (HTTPMethod)(255) | ||||
| 
 | ||||
| #endif /* _HTTP_Method_H_ */ | ||||
|  | ||||
| @ -30,6 +30,14 @@ | ||||
| #define WEBSERVER_MAX_POST_ARGS 32 | ||||
| #endif | ||||
| 
 | ||||
| #define __STR(a) #a | ||||
| #define _STR(a) __STR(a) | ||||
| const char * _http_method_str[] = { | ||||
| #define XX(num, name, string) _STR(name), | ||||
|   HTTP_METHOD_MAP(XX) | ||||
| #undef XX | ||||
| }; | ||||
| 
 | ||||
| static const char Content_Type[] PROGMEM = "Content-Type"; | ||||
| static const char filename[] PROGMEM = "filename"; | ||||
| 
 | ||||
| @ -96,17 +104,17 @@ bool WebServer::_parseRequest(WiFiClient& client) { | ||||
|   _currentUri = url; | ||||
|   _chunked = false; | ||||
| 
 | ||||
|   HTTPMethod method = HTTP_GET; | ||||
|   if (methodStr == F("POST")) { | ||||
|     method = HTTP_POST; | ||||
|   } else if (methodStr == F("DELETE")) { | ||||
|     method = HTTP_DELETE; | ||||
|   } else if (methodStr == F("OPTIONS")) { | ||||
|     method = HTTP_OPTIONS; | ||||
|   } else if (methodStr == F("PUT")) { | ||||
|     method = HTTP_PUT; | ||||
|   } else if (methodStr == F("PATCH")) { | ||||
|     method = HTTP_PATCH; | ||||
|   HTTPMethod method = HTTP_ANY; | ||||
|   size_t num_methods = sizeof(_http_method_str) / sizeof(const char *); | ||||
|   for (size_t i=0; i<num_methods; i++) { | ||||
|     if (methodStr == _http_method_str[i]) { | ||||
|       method = (HTTPMethod)i; | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|   if (method == HTTP_ANY) { | ||||
|     log_e("Unknown HTTP Method: %s", methodStr.c_str()); | ||||
|     return false; | ||||
|   } | ||||
|   _currentMethod = method; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user