From d2d89505e918388ff16933b0fd2ca4c92097982b Mon Sep 17 00:00:00 2001 From: Karai Csaba Date: Thu, 12 May 2016 18:41:08 +0200 Subject: [PATCH] Implemented: JSON response from MCU --- httpd/httpd.c | 29 +++++++++++++++++++++++++++++ httpd/httpd.h | 1 + web-server/web-server.c | 21 +++++++++++++-------- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/httpd/httpd.c b/httpd/httpd.c index 2dfacfa..73c187c 100644 --- a/httpd/httpd.c +++ b/httpd/httpd.c @@ -626,3 +626,32 @@ void ICACHE_FLASH_ATTR httpdInit(HttpdBuiltInUrl *fixedUrls, int port) { espconn_accept(&httpdConn); espconn_tcp_set_max_con_allow(&httpdConn, MAX_CONN); } + +int ICACHE_FLASH_ATTR httpdNotify(uint8_t * ip, int port, const void * cgiArg) { + int i; + + for (i = 0; iconn == NULL) + continue; + if (conn->cgi == NULL) + continue; + if (conn->conn->proto.tcp->remote_port != port ) + continue; + if (os_memcmp(conn->conn->proto.tcp->remote_ip, ip, 4) != 0) + continue; + + char sendBuff[MAX_SENDBUFF_LEN]; + conn->priv->sendBuff = sendBuff; + conn->priv->sendBuffLen = 0; + + conn->cgiArg = cgiArg; + httpdProcessRequest(conn); + conn->cgiArg = NULL; + + return HTTPD_CGI_DONE; + } + return HTTPD_CGI_NOTFOUND; +} diff --git a/httpd/httpd.h b/httpd/httpd.h index 33a0700..1b0ed38 100644 --- a/httpd/httpd.h +++ b/httpd/httpd.h @@ -66,5 +66,6 @@ void ICACHE_FLASH_ATTR httpdEndHeaders(HttpdConnData *conn); int ICACHE_FLASH_ATTR httpdGetHeader(HttpdConnData *conn, char *header, char *ret, int retLen); int ICACHE_FLASH_ATTR httpdSend(HttpdConnData *conn, const char *data, int len); void ICACHE_FLASH_ATTR httpdFlush(HttpdConnData *conn); +int ICACHE_FLASH_ATTR httpdNotify(uint8_t * ip, int port, const void * cgiArg); #endif diff --git a/web-server/web-server.c b/web-server/web-server.c index 5ce1de8..8597dcb 100644 --- a/web-server/web-server.c +++ b/web-server/web-server.c @@ -177,6 +177,18 @@ int ICACHE_FLASH_ATTR WEB_CgiJsonHook(HttpdConnData *connData) connData->cgiData = (void *)1; } + if( connData->cgiArg != NULL ) // arrived data from MCU + { + noCacheHeaders(connData, 200); + httpdHeader(connData, "Content-Type", "application/json"); + char cl[16]; + os_sprintf(cl, "%d", os_strlen(connData->cgiArg)); + httpdHeader(connData, "Content-Length", cl); + httpdEndHeaders(connData); + httpdSend(connData, connData->cgiArg, os_strlen(connData->cgiArg)); + return HTTPD_CGI_DONE; + } + return HTTPD_CGI_MORE; } @@ -185,25 +197,18 @@ void ICACHE_FLASH_ATTR WEB_JsonData(CmdPacket *cmd) CmdRequest req; cmdRequest(&req, cmd); - os_printf("JSON data\n"); // TODO - if (cmdGetArgc(&req) != 3) return; uint8_t ip[4]; cmdPopArg(&req, ip, 4); - os_printf("IP:%d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]); // TODO uint16_t port; cmdPopArg(&req, &port, 2); - os_printf("Port:%d\n", port); // TODO int16_t len = cmdArgLen(&req); - os_printf("Len:%d\n", len); // TODO uint8_t json[len+1]; json[len] = 0; cmdPopArg(&req, json, len); - os_printf("%s\n", json); // TODO - - // TODO + httpdNotify(ip, port, json); }