Own fork of MbedSmartRestMain

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

Revision:
129:dc9e37d4bc05
Parent:
126:871e6eb0fa76
Child:
134:c4009ecaf5c0
--- a/operation/PollThread.cpp	Wed Jun 03 09:51:47 2015 +0000
+++ b/operation/PollThread.cpp	Mon Jun 29 11:14:27 2015 +0000
@@ -3,18 +3,13 @@
 #include "PollThread.h"
 #include "logging.h"
 
-static size_t _volSend = 0;
-static size_t _volRecv = 0;
-
 bool PollThread::handshake()
 {
         int l = snprintf(buf2, sizeof(buf2), "%s", "80\r\n");
         l = snprintf(buf, sizeof(buf), fmtSmartRest, uri, l, buf2);
         sock.setBlocking(3000);
-        _volSend += l;
         l = sock.sendAndReceive(buf, l, sizeof(buf));
         if (l <= 0) return false;
-        _volRecv += l;
         const char* p = skipHTTPHeader(buf);
         if (p == NULL) return false;
         size_t i = 0;
@@ -30,10 +25,8 @@
         int l = snprintf(buf2, sizeof(buf2), "81,%s,%s\r\n", bayeuxId, chn);
         l = snprintf(buf, sizeof(buf), fmtSmartRest, uri, l, buf2);
         sock.setBlocking(3000);
-        _volSend += l;
         l = sock.sendAndReceive(buf, l, sizeof(buf));
         if (l <= 0) return false;
-        _volRecv += l;
         const char *p = skipHTTPHeader(buf);
         if (p == NULL) return false;
         for (; *p && !isgraph(*p); ++p);
@@ -45,11 +38,36 @@
         int l = snprintf(buf2, sizeof(buf2), "83,%s\r\n", bayeuxId);
         l = snprintf(buf, sizeof(buf), fmtSmartRest, uri, l, buf2);
         sock.setBlocking(610000); // Timeout after 10m:10s
-        _volSend += l;
-        aInfo("[SEND] poll: %d\n", _volSend);
-        l = sock.sendAndReceive(buf, l, sizeof(buf));
-        _volRecv += l;
-        aInfo("[RECV] poll: %d\n", _volRecv);
+//        sock.setBlocking(-1);
+//        l = sock.sendAndReceive(buf, l, sizeof(buf));
+        int c = sock.connect();
+        if (c < 0) {
+                sock.close();
+                return false;
+        }
+        c = sock.send(buf, l);
+        if (c < 0) {
+                sock.close();
+                return false;
+        }
+        // Avoid heartbeat message overflows the buffer
+        l = 0;
+        for (unsigned short i = 0; i < 200; ++i) {
+                int l2 = sock.receive(buf+l, sizeof(buf)-l);
+                printf("l2: %d\n", l2);
+                if (l2 > 0) {
+                        printf("poll: %.*s\n", l2, buf+l);
+                        l += l2;
+                } else if (!sock.is_connected()) {
+                        break;
+                } else {
+                        l = l2;
+                        break;
+                }
+        }
+        if (l >= 0)
+                buf[l] = 0;
+        sock.close();
         return l>0;
 }