private fork
Fork of GSwifiInterface by
Diff: GSwifi/GSwifi_httpd.cpp
- Revision:
- 15:086d1a33a197
- Parent:
- 12:057089026a20
- Child:
- 16:105b56570533
--- a/GSwifi/GSwifi_httpd.cpp Fri Jan 10 14:23:33 2014 +0000 +++ b/GSwifi/GSwifi_httpd.cpp Thu Jan 30 15:10:14 2014 +0000 @@ -46,6 +46,7 @@ _con[cid].buf = new CircBuffer<char>(CFG_DATA_SIZE); _httpd[cid].buf = _con[cid].buf; _httpd[cid].buf->flush(); + _httpd[cid].keepalive = 0; if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { _httpd[cid].buf->queue(c); _httpd[cid].mode = HTTPDMODE_REQUEST_STR; @@ -81,9 +82,8 @@ _httpd[cid].buf->flush(); #ifdef CFG_ENABLE_WEBSOCKET if (_httpd[cid].websocket) { - INFO("MODE_WEBSOCKET"); - wsAccept(cid); - _httpd[cid].mode = HTTPDMODE_WEBSOCKET; + INFO("MODE_WEBSOCKET_BEGIN"); + _httpd[cid].mode = HTTPDMODE_WEBSOCKET_BEGIN; } else #endif if (_httpd[cid].length) { @@ -137,7 +137,7 @@ // file httpdFile(cid, _httpd_handler[i].dir); } else - if (_httpd_handler[i].func) { + if (_httpd_handler[i].func && !_httpd_handler[i].ws) { // cgi _httpd_handler[i].func(cid); // _httpd[cid].keepalive = 0; @@ -157,14 +157,18 @@ _httpd[cid].mode = HTTPDMODE_REQUEST; #ifdef CFG_ENABLE_WEBSOCKET } else + if (_httpd[cid].mode == HTTPDMODE_WEBSOCKET_BEGIN) { + wsAccept(cid); + _httpd[cid].mode = HTTPDMODE_WEBSOCKET; + } else if (_httpd[cid].mode == HTTPDMODE_WEBSOCKET_ENTER) { wsParseRequest(cid); _httpd[cid].mode = HTTPDMODE_WEBSOCKET; #endif } - } - } + } // PROTO_HTTPD + } // for } int GSwifi::httpdParseRequest (int cid) { @@ -260,8 +264,9 @@ } void GSwifi::reqConnection (int cid, const char *buf) { - if (strnicmp(&buf[12], "Keep-Alive", 10) == 0 && _httpd[cid].keepalive == 0) { - _httpd[cid].keepalive = CFG_HTTPD_KEEPALIVE; + if (strnicmp(&buf[12], "Keep-Alive", 10) == 0) { + if (_httpd[cid].keepalive == 0) + _httpd[cid].keepalive = CFG_HTTPD_KEEPALIVE; } else { _httpd[cid].keepalive = 0; }