Own fork of MbedSmartRest
Dependents: MbedSmartRestMain MbedSmartRestMain
Fork of MbedSmartRest by
Diff: SmartRest.cpp
- Revision:
- 20:505d29d5bdfc
- Parent:
- 18:16192696c106
- Child:
- 21:207549b3711e
--- a/SmartRest.cpp Fri Mar 20 14:26:52 2015 +0000 +++ b/SmartRest.cpp Mon Apr 13 14:24:44 2015 +0000 @@ -29,56 +29,40 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> +#include "rtos.h" #include "SmartRest.h" - +#include "SmartRestConf.h" /*-------------------------------------------------------------------------*/ -SmartRest::SmartRest(AbstractClient& client, const char *identifier) : - _client(client), - _identifier(identifier) +SmartRest::SmartRest(AbstractClient& client) : + _client(client) { _source = NULL; _mogid[0] = 0; } /*-------------------------------------------------------------------------*/ -uint8_t SmartRest::setAuthorization(const char *username, const char *password) -{ - uint8_t res; - - res = _client.setAuthorization(username, password); - if (res != CLIENT_OK) - return SMARTREST_INTERNAL_ERROR; - return SMARTREST_SUCCESS; -} -/*-------------------------------------------------------------------------*/ #ifdef SMARTREST_TRANSACTIONAL /*-------------------------------------------------------------------------*/ uint8_t SmartRest::request(const DataGenerator& generator, const char *overrideIdentifier) { - uint8_t res; - - res = send(generator, overrideIdentifier); + uint8_t res = send(generator, overrideIdentifier); stop(); return res; } /*-------------------------------------------------------------------------*/ uint8_t SmartRest::request(const DataGenerator& generator, Aggregator& aggregator, const char *overrideIdentifier) { - uint8_t res; - if (!aggregator.managed()) return SMARTREST_INTERNAL_ERROR; - res = send(generator, overrideIdentifier); - if (res != SMARTREST_SUCCESS) - { + uint8_t res = send(generator, overrideIdentifier); + if (res != SMARTREST_SUCCESS) { stop(); return res; } ParsedRecord recvd; - while ((res = receive(recvd)) == SMARTREST_SUCCESS) - { + while ((res = receive(recvd)) == SMARTREST_SUCCESS) { if (!aggregator.add(recvd)) return SMARTREST_INTERNAL_ERROR; } @@ -93,20 +77,18 @@ /*-------------------------------------------------------------------------*/ uint8_t SmartRest::bootstrap(const DataGenerator& generator) { - ParsedRecord record; - int8_t ret; - - ret = beginRequest(NULL, NULL); + int8_t ret = beginRequest(NULL, NULL); if (ret != SMARTREST_SUCCESS) return ret; ret = awaitResponse(); if (ret != SMARTREST_SUCCESS) return ret; + + ParsedRecord record; ret = receive(record); if (ret != SMARTREST_SUCCESS) return ret; - if (!record) - { + if (!record) { return SMARTREST_INTERNAL_ERROR; } stop(); @@ -133,9 +115,7 @@ /*-------------------------------------------------------------------------*/ uint8_t SmartRest::send(const DataGenerator& generator, const char *overrideIdentifier) { - uint8_t res; - - res = beginRequest(NULL, overrideIdentifier); + uint8_t res = beginRequest(NULL, overrideIdentifier); if (res != SMARTREST_SUCCESS) return res; @@ -143,11 +123,23 @@ return awaitResponse(); } /*-------------------------------------------------------------------------*/ +uint8_t SmartRest::sendAndClose(const DataGenerator& generator, const char *overrideIdentifier) +{ + uint8_t res = beginRequest(NULL, overrideIdentifier); + if (res != SMARTREST_SUCCESS) + return res; + + _client.sendData(generator); + if (_client.endRequest() == CLIENT_OK) { + return SMARTREST_SUCCESS; + } else { + return SMARTREST_INTERNAL_ERROR; + } +} +/*-------------------------------------------------------------------------*/ uint8_t SmartRest::stream(const char *uri, const Record& record, const char *overrideIdentifier) { - uint8_t res; - - res = beginRequest(uri, overrideIdentifier); + uint8_t res = beginRequest(uri, overrideIdentifier); if (res != SMARTREST_SUCCESS) return res; @@ -157,23 +149,17 @@ /*-------------------------------------------------------------------------*/ uint8_t SmartRest::receive(ParsedRecord& record) { - uint8_t res; - if (_source == NULL) return SMARTREST_INTERNAL_ERROR; - res = _parser.readFrom(*_source, record); - + uint8_t res = _parser.readFrom(*_source, record); switch (res) { - case PARSER_SUCCESS: - return SMARTREST_SUCCESS; - case PARSER_END_OF_RESPONSE: - return SMARTREST_END_OF_RESPONSE; - case PARSER_TIMEOUT_ERROR: - return SMARTREST_TIMEOUT_ERROR; + case PARSER_SUCCESS: return SMARTREST_SUCCESS; + case PARSER_END_OF_RESPONSE: return SMARTREST_END_OF_RESPONSE; + case PARSER_TIMEOUT_ERROR: return SMARTREST_TIMEOUT_ERROR; + default: return SMARTREST_INTERNAL_ERROR; } - return SMARTREST_INTERNAL_ERROR; } /*-------------------------------------------------------------------------*/ void SmartRest::stop() @@ -182,51 +168,42 @@ _client.stop(); } /*-------------------------------------------------------------------------*/ -const char * SmartRest::getIdentifier() +const char * SmartRest::getIdentifier() const { if (*_mogid) return _mogid; - return _identifier; + else + return NULL; } /*-------------------------------------------------------------------------*/ uint8_t SmartRest::beginRequest(const char *uri, const char *overrideIdentifier) { int res; - - if (uri != NULL) - { + if (uri) { res = _client.beginStream(uri); - } - else - { + } else { res = _client.beginRequest(); } - if (res == CLIENT_CONNECTION_ERROR) - { + if (res == CLIENT_CONNECTION_ERROR) { return SMARTREST_CONNECTION_FAILED; - } - else if (res != CLIENT_OK) - { + } else if (res != CLIENT_OK) { return SMARTREST_INTERNAL_ERROR; } - if (overrideIdentifier != NULL) - { - if (_client.sendIdentifier(overrideIdentifier) != CLIENT_OK) - return SMARTREST_INTERNAL_ERROR; - } - else - { - if (_client.sendIdentifier(getIdentifier()) != CLIENT_OK) - return SMARTREST_INTERNAL_ERROR; - } - return SMARTREST_SUCCESS; + if (overrideIdentifier != NULL) { + if (_client.sendIdentifier(overrideIdentifier) != CLIENT_OK) + return SMARTREST_INTERNAL_ERROR; + } else { + if (_client.sendIdentifier(::getIdentifier()) != CLIENT_OK) + return SMARTREST_INTERNAL_ERROR; + } + return SMARTREST_SUCCESS; } /*-------------------------------------------------------------------------*/ uint8_t SmartRest::awaitResponse() { if ((_client.endRequest() != CLIENT_OK) || - (_client.awaitResponse() != CLIENT_OK)) { + (_client.awaitResponse() != CLIENT_OK)) { return SMARTREST_INTERNAL_ERROR; } _source = &_client.receiveData(); @@ -242,7 +219,7 @@ return false; if ((record.value(1).valueType() != VALUE_INTEGER) || - (record.value(1).integerValue() <= 0)) + (record.value(1).integerValue() <= 0)) return false; mogid = record.rawValue(1); @@ -253,4 +230,4 @@ return true; } -/*-------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------*/ \ No newline at end of file