A client for the SmartREST protocol from Cumulocity.

Dependencies:   SmartRest

Fork of MbedSmartRest by Vincent Wochnik

Committer:
vwochnik
Date:
Fri Apr 11 09:33:45 2014 +0000
Revision:
13:e76920d5e1ec
fix

Who changed what in which revision?

UserRevisionLine numberNew 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 }