WebSocket client library

Revision:
15:79bfbc0ad6bc
Parent:
14:c5ac3e26998f
Child:
16:d4518b50f653
--- a/Websocket.cpp	Tue Aug 30 11:47:56 2011 +0000
+++ b/Websocket.cpp	Tue Sep 06 16:44:56 2011 +0000
@@ -32,10 +32,10 @@
         server_ip = dr.resolveName(ip_domain);
         printf("\r\nserver with dns=%i.%i.%i.%i\r\n",server_ip[0],server_ip[1],server_ip[2],server_ip[3]);
     }
-    
+
     IpAddr ipt = eth.getIp();
     printf("\r\nmbed IP Address is %d.%d.%d.%d\r\n", ipt[0], ipt[1], ipt[2], ipt[3]);
-    
+
     sock.setOnEvent(this, &Websocket::onTCPSocketEvent);
 }
 
@@ -116,7 +116,7 @@
 
         //open the connection
         sprintf(cmd, "open %s %s\r\n", ip_domain, port);
-        if (!wifi->Send(cmd, "OPEN")) {
+        if (!wifi->Send(cmd, "OPEN*")) {
             printf("Websocket::connect cannot open\r\n");
             return false;
         }
@@ -155,14 +155,14 @@
 
         Timer tmr;
         tmr.start();
-        
+
         Timer stop;
         stop.start();
 
         int i = 0;
         while (true) {
             Net::poll();
-            if(stop.read() > 3)
+            if (stop.read() > 3)
                 return false;
             if (tmr.read() > 0.01) {
                 tmr.reset();
@@ -245,21 +245,32 @@
     int i = 0;
 
     if (wifi_use) {
-        char char_read;
-        if (!wifi->readable()) {
+
+        wifi->read(message);
+        //printf("msg: %s  strlen: %d\r\n", message + 1, strlen(message + 1) - 1);
+
+        //we check if the first byte is 0x00
+        if (message == NULL || message[0] != 0x00) {
+            message = NULL;
+            return false;
+        }
+        
+        while(message[i + 1] != 0xff && i < strlen(message + 1))
+            i++;
+        
+        if(message[i+1] == 0xff)
+        {
+            message[i+1] = 0;
+            memcpy(message, message + 1, strlen(message + 1) + 1);
+        }
+        else
+        {
             message = NULL;
             return false;
         }
 
-        if (wifi->getc() != 0x00) {
-            message = NULL;
-            return false;
-        }
-
-        while ( (char_read = wifi->getc()) != 0xff)
-            message[i++] = char_read;
-        message[i] = 0;
     } else if (eth_use) {
+        Net::poll();
 
         if (eth_rx[0] != 0x00) {
             message = NULL;
@@ -305,8 +316,7 @@
         }
         wait(0.25);
 
-        wifi->Send("show c\r\n", "NO");
-        wifi->read(str);
+        wifi->Send("show c\r\n", "NO", str);
 
         if (str[3] == '1') {
             if (!wifi->exit()) {