| 
					
				 | 
			
			
				@@ -5,6 +5,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "httpd.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "config.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "boardinfo_esp.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "lwip/sockets.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "lwip/inet.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <incbin.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <unzipLIB.h> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -142,9 +144,49 @@ static const char *http_dos_date(uint32_t dos_date) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static const char text_plain[] = "text/plain; charset=\"UTF-8\""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void httpd_print_request(const httpd_req_t *req) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void httpd_print_request(httpd_req_t *req) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    printf("[HTTP] %s %s\n", http_method_str(req->method), req->uri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Get the client address */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    union { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct sockaddr sa; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct sockaddr_in sin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct sockaddr_in6 sin6; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct sockaddr_storage ss; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } sa = { }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    char addrbuf[64]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    char *p = addrbuf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const char * const endp = addrbuf + sizeof addrbuf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int sock = httpd_req_to_sockfd(req); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    socklen_t sa_len = sizeof sa; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (getpeername(sock, &sa.sa, &sa_len)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sa.sa.sa_family = AF_UNSPEC; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* lwip lacks getnameinfo() */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (sa.sa.sa_family) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case AF_INET: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	inet_ntop(AF_INET, &sa.sin.sin_addr, p, endp - p); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	p = strchr(p, '\0'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	p += sprintf(p, ":%u", ntohs(sa.sin.sin_port)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case AF_INET6: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	*p++ = '['; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	inet_ntop(AF_INET6, &sa.sin6.sin6_addr, p, endp - p); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	p = strchr(p, '\0'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	p += sprintf(p, "]:%u", ntohs(sa.sin6.sin6_port)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case AF_UNSPEC: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	strcpy(p, "[not a socket?]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	p += sprintf(p, "[AF %u?]", sa.sa.sa_family); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* sa.sin.sin_port == sa.sin6.sin6_port */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    printf("[HTTP] %s %s %s\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   addrbuf, http_method_str(req->method), req->uri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static char *httpd_req_get_hdr(httpd_req_t *req, const char *field, size_t *lenp) 
			 |