A client for the SmartREST protocol from Cumulocity.
Fork of MbedSmartRest by
MbedDataSource.cpp@13:e76920d5e1ec, 2014-04-11 (annotated)
- Committer:
- vwochnik
- Date:
- Fri Apr 11 09:33:45 2014 +0000
- Revision:
- 13:e76920d5e1ec
fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vwochnik | 13:e76920d5e1ec | 1 | #include "MbedDataSource.h" |
vwochnik | 13:e76920d5e1ec | 2 | #include "stdio.h" |
vwochnik | 13:e76920d5e1ec | 3 | |
vwochnik | 13:e76920d5e1ec | 4 | MbedDataSource::MbedDataSource(TCPSocketConnection& sock) : _sock(sock) |
vwochnik | 13:e76920d5e1ec | 5 | { |
vwochnik | 13:e76920d5e1ec | 6 | _offset = _len = 0; |
vwochnik | 13:e76920d5e1ec | 7 | _timeout = false; |
vwochnik | 13:e76920d5e1ec | 8 | } |
vwochnik | 13:e76920d5e1ec | 9 | |
vwochnik | 13:e76920d5e1ec | 10 | MbedDataSource::~MbedDataSource() |
vwochnik | 13:e76920d5e1ec | 11 | { |
vwochnik | 13:e76920d5e1ec | 12 | } |
vwochnik | 13:e76920d5e1ec | 13 | |
vwochnik | 13:e76920d5e1ec | 14 | char MbedDataSource::read() |
vwochnik | 13:e76920d5e1ec | 15 | { |
vwochnik | 13:e76920d5e1ec | 16 | while (_offset == _len) { |
vwochnik | 13:e76920d5e1ec | 17 | if (!receive()) |
vwochnik | 13:e76920d5e1ec | 18 | return 0; |
vwochnik | 13:e76920d5e1ec | 19 | } |
vwochnik | 13:e76920d5e1ec | 20 | |
vwochnik | 13:e76920d5e1ec | 21 | return _buf[_offset++]; |
vwochnik | 13:e76920d5e1ec | 22 | } |
vwochnik | 13:e76920d5e1ec | 23 | |
vwochnik | 13:e76920d5e1ec | 24 | uint8_t MbedDataSource::status() |
vwochnik | 13:e76920d5e1ec | 25 | { |
vwochnik | 13:e76920d5e1ec | 26 | if (!_sock.is_connected()) |
vwochnik | 13:e76920d5e1ec | 27 | return DS_STATUS_CLOSED; |
vwochnik | 13:e76920d5e1ec | 28 | |
vwochnik | 13:e76920d5e1ec | 29 | if (_timeout) |
vwochnik | 13:e76920d5e1ec | 30 | return DS_STATUS_TIMEOUT; |
vwochnik | 13:e76920d5e1ec | 31 | |
vwochnik | 13:e76920d5e1ec | 32 | return DS_STATUS_OK; |
vwochnik | 13:e76920d5e1ec | 33 | } |
vwochnik | 13:e76920d5e1ec | 34 | |
vwochnik | 13:e76920d5e1ec | 35 | bool MbedDataSource::receive() |
vwochnik | 13:e76920d5e1ec | 36 | { |
vwochnik | 13:e76920d5e1ec | 37 | int ret; |
vwochnik | 13:e76920d5e1ec | 38 | |
vwochnik | 13:e76920d5e1ec | 39 | if (status() != DS_STATUS_OK) |
vwochnik | 13:e76920d5e1ec | 40 | return false; |
vwochnik | 13:e76920d5e1ec | 41 | |
vwochnik | 13:e76920d5e1ec | 42 | _sock.set_blocking(true, 60000); |
vwochnik | 13:e76920d5e1ec | 43 | ret = _sock.receive(_buf, MBED_SOURCE_BUFFER_SIZE); |
vwochnik | 13:e76920d5e1ec | 44 | |
vwochnik | 13:e76920d5e1ec | 45 | if (ret < 0) { |
vwochnik | 13:e76920d5e1ec | 46 | _timeout = true; |
vwochnik | 13:e76920d5e1ec | 47 | return false; |
vwochnik | 13:e76920d5e1ec | 48 | } |
vwochnik | 13:e76920d5e1ec | 49 | |
vwochnik | 13:e76920d5e1ec | 50 | _len = (size_t)ret; |
vwochnik | 13:e76920d5e1ec | 51 | _offset = 0; |
vwochnik | 13:e76920d5e1ec | 52 | |
vwochnik | 13:e76920d5e1ec | 53 | return true; |
vwochnik | 13:e76920d5e1ec | 54 | } |
vwochnik | 13:e76920d5e1ec | 55 | |
vwochnik | 13:e76920d5e1ec | 56 | void MbedDataSource::reset() |
vwochnik | 13:e76920d5e1ec | 57 | { |
vwochnik | 13:e76920d5e1ec | 58 | _len = _offset = 0; |
vwochnik | 13:e76920d5e1ec | 59 | _timeout = false; |
vwochnik | 13:e76920d5e1ec | 60 | } |