Official reference client implementation for Cumulocity SmartREST on u-blox C027.

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Vincent Wochnik

Revision:
99:e369fc75c000
Parent:
96:5dfdc8568e9f
Child:
101:dbcd3bc51758
--- a/operation/ControlParser.cpp	Mon Apr 27 13:30:21 2015 +0000
+++ b/operation/ControlParser.cpp	Thu May 07 09:57:55 2015 +0000
@@ -5,10 +5,11 @@
 #include "LCDDisplay.h"
 #include "logging.h"
 
-void ControlParser::handleControlMessage(const char *buf)
+void ControlParser::parse(const char *buf)
 {
         if (buf == NULL) return;
         const char *p = skipHTTPHeader(buf);
+        if (p == NULL) return;
         Token tok;
         ptrPF = &ControlParser::parseGetOp;
         do {
@@ -57,9 +58,11 @@
         if (tok.type == Token::STRING) {
                 if (strncmp(strPending, tok.p, tok.len)==0) {
                         Operation *p = opool.alloc();
-                        p->identifier = op.identifier;
-                        p->state = OPERATION_EXECUTING;
-                        opool.put(p);
+                        if (p) {
+                                p->identifier = op.identifier;
+                                p->state = OPERATION_EXECUTING;
+                                opool.put(p);
+                        }
                         ptrPF = &ControlParser::parseOpType;
                 } else {
                         parseError(tok);
@@ -135,6 +138,15 @@
 void ControlParser::parseBayeuxAdvice(Token& tok)
 {
         if (strncmp("86", tok.p, tok.len) == 0) {
+                ptrPF = &ControlParser::parseRowNumber;
+        } else {
+                parseError(tok);
+        }
+}
+
+void ControlParser::parseRowNumber(Token& tok)
+{
+        if (tok.type == Token::INT || tok.type == Token::NONE) {
                 ptrPF = &ControlParser::parseAdviceTimeout;
         } else {
                 parseError(tok);
@@ -157,19 +169,10 @@
 void ControlParser::parseAdviceInterval(Token& tok)
 {
         if (tok.type == Token::NONE) {
-                bayeuxInterval = -1;
-                ptrPF = &ControlParser::parseUnknownInt;
+                bayeuxInterval = 0;
+                ptrPF = &ControlParser::parseAdvicePolicy;
         } else if (tok.type == Token::INT) {
                 sscanf(tok.p, "%d", &bayeuxInterval);
-                ptrPF = &ControlParser::parseUnknownInt;
-        } else {
-                parseError(tok);
-        }
-}
-
-void ControlParser::parseUnknownInt(Token& tok)
-{
-        if (tok.type == Token::INT) {
                 ptrPF = &ControlParser::parseAdvicePolicy;
         } else {
                 parseError(tok);
@@ -196,7 +199,7 @@
 void ControlParser::parseError(Token& tok)
 {
         aError("(%d) %.*s\n", tok.type, (int)tok.len, tok.p);
-        ptrPF = &ControlParser::parseRecover;
+        parseRecover(tok);
 }
 
 void ControlParser::parseRecover(Token& tok)