mbed.org implementation of the abstract SmartREST library for the Cumulocity Platform SmartREST protocol.
Dependents: MbedSmartRestMain MbedSmartRestMain
Diff: SmartRest.cpp
- Revision:
- 5:2b74510900da
- Parent:
- 4:059b8b90e0d9
- Child:
- 6:cd7ba1ddb664
diff -r 059b8b90e0d9 -r 2b74510900da SmartRest.cpp --- a/SmartRest.cpp Wed Jul 09 15:37:19 2014 +0200 +++ b/SmartRest.cpp Thu Jul 10 16:20:31 2014 +0200 @@ -48,6 +48,79 @@ return SMARTREST_SUCCESS; } +#ifdef SMARTREST_TRANSACTIONAL +uint8_t SmartRest::request(const DataGenerator& generator, const char *overrideIdentifier) +{ + uint8_t res; + + res = send(generator, overrideIdentifier); + stop(); + return res; +} + +uint8_t SmartRest::request(const DataGenerator& generator, Aggregator& aggregator, const char *overrideIdentifier) +{ + uint8_t res; + + if (!aggregator.isManaged()) + return SMARTREST_INTERNAL_ERROR; + + res = send(generator, overrideIdentifier); + if (res != SMARTREST_SUCCESS) { + stop(); + return res; + } + + ParsedRecord recvd; + while ((res = receive(recvd)) == SMARTREST_SUCCESS) + aggregator.add(recvd); + + stop(); + if (res == SMARTREST_END_OF_RESPONSE) + return SMARTREST_SUCCESS; + return res; +} +#endif + +uint8_t SmartRest::bootstrap(const DataGenerator& generator) +{ + ParsedRecord record; + int8_t ret; + + ret = beginRequest(NULL); + if (ret != SMARTREST_SUCCESS) + return ret; + ret = awaitResponse(); + if (ret != SMARTREST_SUCCESS) + return ret; + ret = receive(record); + if (ret != SMARTREST_SUCCESS) + return ret; + if (!record) { + return SMARTREST_INTERNAL_ERROR; + } + stop(); + + if (setMoGid(record)) + return SMARTREST_SUCCESS; + + if (record.value(0).integerValue() != 40) + return SMARTREST_INTERNAL_ERROR; + + ret = send(generator, NULL); + if (ret != SMARTREST_SUCCESS) + return ret; + ret = receive(record); + if (ret != SMARTREST_SUCCESS) + return ret; + stop(); + + if (!setMoGid(record)) + return SMARTREST_INTERNAL_ERROR; + + return SMARTREST_SUCCESS; +} + uint8_t SmartRest::send(const DataGenerator& generator, const char *overrideIdentifier) { uint8_t res; @@ -80,45 +153,6 @@ return SMARTREST_INTERNAL_ERROR; } -uint8_t SmartRest::bootstrap(const DataGenerator& generator) -{ - ParsedRecord record; - int8_t ret; - - ret = beginRequest(NULL); - if (ret != SMARTREST_SUCCESS) - return ret; - ret = awaitResponse(); - if (ret != SMARTREST_SUCCESS) - return ret; - ret = receive(record); - if (ret != SMARTREST_SUCCESS) - return ret; - if (!record) { - return SMARTREST_INTERNAL_ERROR; - } - stop(); - - if (setMoGid(record)) - return SMARTREST_SUCCESS; - - if (record.value(0).integerValue() != 40) - return SMARTREST_INTERNAL_ERROR; - - ret = send(generator); - if (ret != SMARTREST_SUCCESS) - return ret; - ret = receive(record); - if (ret != SMARTREST_SUCCESS) - return ret; - stop(); - - if (!setMoGid(record)) - return SMARTREST_INTERNAL_ERROR; - - return SMARTREST_SUCCESS; -} - void SmartRest::stop() { _source = NULL;