private fork

Fork of GSwifiInterface by gs fan

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;
     }