A client for the SmartREST protocol from Cumulocity.
Dependencies: HTTPClient SmartRest
MbedClient.cpp@9:3bbb83e7cbfd, 2014-02-02 (annotated)
- Committer:
- vwochnik
- Date:
- Sun Feb 02 16:40:14 2014 +0000
- Revision:
- 9:3bbb83e7cbfd
- Parent:
- 7:26524a6a04a1
- Child:
- 10:478414cc15a4
fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vwochnik | 3:ce2f116369bd | 1 | #include "MbedClient.h" |
vwochnik | 5:ab909221d22d | 2 | #include <stdlib.h> |
vwochnik | 5:ab909221d22d | 3 | |
vwochnik | 9:3bbb83e7cbfd | 4 | #include <stdio.h> |
vwochnik | 9:3bbb83e7cbfd | 5 | |
vwochnik | 5:ab909221d22d | 6 | #define STATE_INIT 0 |
vwochnik | 5:ab909221d22d | 7 | #define STATE_IN_REQUEST 1 |
vwochnik | 5:ab909221d22d | 8 | #define STATE_SENT_ID 2 |
vwochnik | 5:ab909221d22d | 9 | #define STATE_SENT_DATA 3 |
vwochnik | 5:ab909221d22d | 10 | #define STATE_REQ_COMPLETE 4 |
vwochnik | 5:ab909221d22d | 11 | #define STATE_RECVD_RESPONSE 5 |
vwochnik | 5:ab909221d22d | 12 | #define STATE_RECV_DATA 6 |
vwochnik | 5:ab909221d22d | 13 | |
vwochnik | 5:ab909221d22d | 14 | const char * const cXidHeader = "X-Id"; |
vwochnik | 3:ce2f116369bd | 15 | |
vwochnik | 3:ce2f116369bd | 16 | MbedClient::MbedClient(const char* url, const char* username, const char* password) |
vwochnik | 3:ce2f116369bd | 17 | : _url(url), _username(username), _password(password) |
vwochnik | 3:ce2f116369bd | 18 | { |
vwochnik | 5:ab909221d22d | 19 | _state = STATE_INIT; |
vwochnik | 5:ab909221d22d | 20 | _headers[0] = cXidHeader; |
vwochnik | 5:ab909221d22d | 21 | _headers[1] = NULL; |
vwochnik | 5:ab909221d22d | 22 | } |
vwochnik | 5:ab909221d22d | 23 | |
vwochnik | 5:ab909221d22d | 24 | MbedClient::~MbedClient() |
vwochnik | 5:ab909221d22d | 25 | { |
vwochnik | 5:ab909221d22d | 26 | if (_generator != NULL) |
vwochnik | 5:ab909221d22d | 27 | delete _generator; |
vwochnik | 3:ce2f116369bd | 28 | } |
vwochnik | 3:ce2f116369bd | 29 | |
vwochnik | 3:ce2f116369bd | 30 | uint8_t MbedClient::beginRequest() |
vwochnik | 3:ce2f116369bd | 31 | { |
vwochnik | 5:ab909221d22d | 32 | if (_state != STATE_INIT) |
vwochnik | 5:ab909221d22d | 33 | return CLIENT_INTERNAL_ERROR; |
vwochnik | 5:ab909221d22d | 34 | _client.basicAuth(_username, _password); |
vwochnik | 5:ab909221d22d | 35 | _client.customHeaders(NULL, 0); |
vwochnik | 5:ab909221d22d | 36 | _state = STATE_IN_REQUEST; |
vwochnik | 5:ab909221d22d | 37 | return CLIENT_OK; |
vwochnik | 3:ce2f116369bd | 38 | } |
vwochnik | 3:ce2f116369bd | 39 | |
vwochnik | 5:ab909221d22d | 40 | uint8_t MbedClient::sendIdentifier(const char* identifier) |
vwochnik | 3:ce2f116369bd | 41 | { |
vwochnik | 5:ab909221d22d | 42 | if (_state != STATE_IN_REQUEST) |
vwochnik | 5:ab909221d22d | 43 | return CLIENT_INTERNAL_ERROR; |
vwochnik | 5:ab909221d22d | 44 | _headers[1] = identifier; |
vwochnik | 5:ab909221d22d | 45 | _client.customHeaders(_headers, 1); |
vwochnik | 5:ab909221d22d | 46 | _state = STATE_SENT_ID; |
vwochnik | 5:ab909221d22d | 47 | return CLIENT_OK; |
vwochnik | 3:ce2f116369bd | 48 | } |
vwochnik | 3:ce2f116369bd | 49 | |
vwochnik | 3:ce2f116369bd | 50 | uint8_t MbedClient::sendData(DataGenerator& generator) |
vwochnik | 3:ce2f116369bd | 51 | { |
vwochnik | 5:ab909221d22d | 52 | if ((_state != STATE_IN_REQUEST) && (_state != STATE_SENT_ID)) |
vwochnik | 5:ab909221d22d | 53 | return CLIENT_INTERNAL_ERROR; |
vwochnik | 5:ab909221d22d | 54 | _generator = new HTTPGeneratorWrapper(generator); |
vwochnik | 5:ab909221d22d | 55 | _state = STATE_SENT_DATA; |
vwochnik | 5:ab909221d22d | 56 | return CLIENT_OK; |
vwochnik | 3:ce2f116369bd | 57 | } |
vwochnik | 3:ce2f116369bd | 58 | |
vwochnik | 3:ce2f116369bd | 59 | uint8_t MbedClient::endRequest() |
vwochnik | 3:ce2f116369bd | 60 | { |
vwochnik | 5:ab909221d22d | 61 | if ((_state != STATE_IN_REQUEST) && (_state != STATE_SENT_ID) && (_state != STATE_SENT_DATA)) |
vwochnik | 5:ab909221d22d | 62 | return CLIENT_INTERNAL_ERROR; |
vwochnik | 5:ab909221d22d | 63 | _state = STATE_REQ_COMPLETE; |
vwochnik | 7:26524a6a04a1 | 64 | return CLIENT_OK; |
vwochnik | 3:ce2f116369bd | 65 | } |
vwochnik | 3:ce2f116369bd | 66 | |
vwochnik | 3:ce2f116369bd | 67 | uint8_t MbedClient::awaitResponse() |
vwochnik | 3:ce2f116369bd | 68 | { |
vwochnik | 5:ab909221d22d | 69 | HTTPResult result; |
vwochnik | 5:ab909221d22d | 70 | |
vwochnik | 5:ab909221d22d | 71 | if (_state != STATE_REQ_COMPLETE) |
vwochnik | 5:ab909221d22d | 72 | return CLIENT_INTERNAL_ERROR; |
vwochnik | 9:3bbb83e7cbfd | 73 | puts("Sending data..."); |
vwochnik | 5:ab909221d22d | 74 | result = _client.post(_url, *_generator, &_buffer); |
vwochnik | 9:3bbb83e7cbfd | 75 | printf("Result: %d\r\n", result); |
vwochnik | 5:ab909221d22d | 76 | if (result != 0) |
vwochnik | 5:ab909221d22d | 77 | return CLIENT_CONNECTION_ERROR; |
vwochnik | 5:ab909221d22d | 78 | _state = STATE_RECVD_RESPONSE; |
vwochnik | 5:ab909221d22d | 79 | return CLIENT_OK; |
vwochnik | 3:ce2f116369bd | 80 | } |
vwochnik | 3:ce2f116369bd | 81 | |
vwochnik | 3:ce2f116369bd | 82 | AbstractDataSource& MbedClient::receiveData() |
vwochnik | 3:ce2f116369bd | 83 | { |
vwochnik | 3:ce2f116369bd | 84 | return _buffer; |
vwochnik | 3:ce2f116369bd | 85 | } |
vwochnik | 3:ce2f116369bd | 86 | |
vwochnik | 3:ce2f116369bd | 87 | void MbedClient::stop() |
vwochnik | 3:ce2f116369bd | 88 | { |
vwochnik | 3:ce2f116369bd | 89 | _buffer.writeReset(); |
vwochnik | 5:ab909221d22d | 90 | _headers[1] = NULL; |
vwochnik | 5:ab909221d22d | 91 | if (_generator != NULL) |
vwochnik | 5:ab909221d22d | 92 | delete _generator; |
vwochnik | 5:ab909221d22d | 93 | _generator = NULL; |
vwochnik | 7:26524a6a04a1 | 94 | _state = STATE_INIT; |
vwochnik | 3:ce2f116369bd | 95 | } |