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
Diff: operation/ControlParser.cpp
- 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)