A client for the SmartREST protocol from Cumulocity.

Dependencies:   HTTPClient SmartRest

Committer:
vwochnik
Date:
Fri Jan 24 11:39:32 2014 +0000
Revision:
2:1038411466a6
Child:
3:ce2f116369bd
added abstraction

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 2:1038411466a6 1 #include "HTTPBuffer.h"
vwochnik 2:1038411466a6 2 #include <stdlib.h>
vwochnik 2:1038411466a6 3
vwochnik 2:1038411466a6 4 HTTPBuffer::HTTPBuffer()
vwochnik 2:1038411466a6 5 {
vwochnik 2:1038411466a6 6 _rptr = _wptr = _buf = NULL;
vwochnik 2:1038411466a6 7 bufferSize(HTTPBUFFER_INITIAL_SIZE);
vwochnik 2:1038411466a6 8 }
vwochnik 2:1038411466a6 9
vwochnik 2:1038411466a6 10 HTTPBuffer::~HTTPBuffer()
vwochnik 2:1038411466a6 11 {
vwochnik 2:1038411466a6 12 if (_buf != NULL)
vwochnik 2:1038411466a6 13 free(_buf);
vwochnik 2:1038411466a6 14 }
vwochnik 2:1038411466a6 15
vwochnik 2:1038411466a6 16 char HTTPBuffer::read()
vwochnik 2:1038411466a6 17 {
vwochnik 2:1038411466a6 18 if (_rptr == _wptr)
vwochnik 2:1038411466a6 19 return 0;
vwochnik 2:1038411466a6 20 return *_rptr++;
vwochnik 2:1038411466a6 21 }
vwochnik 2:1038411466a6 22
vwochnik 2:1038411466a6 23 uint8_t HTTPBuffer::status()
vwochnik 2:1038411466a6 24 {
vwochnik 2:1038411466a6 25 if (_rptr == _wptr)
vwochnik 2:1038411466a6 26 return DS_STATUS_CLOSED;
vwochnik 2:1038411466a6 27 return DS_STATUS_OK;
vwochnik 2:1038411466a6 28 }
vwochnik 2:1038411466a6 29
vwochnik 2:1038411466a6 30 void HTTPBuffer::writeReset()
vwochnik 2:1038411466a6 31 {
vwochnik 2:1038411466a6 32 _rptr = _wptr = _buf;
vwochnik 2:1038411466a6 33 bufferSize(HTTPBUFFER_INITIAL_SIZE);
vwochnik 2:1038411466a6 34 }
vwochnik 2:1038411466a6 35
vwochnik 2:1038411466a6 36 int HTTPBuffer::write(const char* buf, size_t len)
vwochnik 2:1038411466a6 37 {
vwochnik 2:1038411466a6 38 if (_wptr - _buf + len > _len) {
vwochnik 2:1038411466a6 39 size_t newLen = _len;
vwochnik 2:1038411466a6 40 while (_wptr - _buf + len > newLen)
vwochnik 2:1038411466a6 41 newLen += HTTPBUFFER_INCREMENT;
vwochnik 2:1038411466a6 42 bufferSize(newLen);
vwochnik 2:1038411466a6 43 }
vwochnik 2:1038411466a6 44 memcpy(_wbuf, buf, len);
vwochnik 2:1038411466a6 45 _wbuf += len;
vwochnik 2:1038411466a6 46 }
vwochnik 2:1038411466a6 47
vwochnik 2:1038411466a6 48 void HTTPBuffer::setDataType(const char* type)
vwochnik 2:1038411466a6 49 {
vwochnik 2:1038411466a6 50 }
vwochnik 2:1038411466a6 51
vwochnik 2:1038411466a6 52 void HTTPBuffer::setIsChunked(bool chunked)
vwochnik 2:1038411466a6 53 {
vwochnik 2:1038411466a6 54 }
vwochnik 2:1038411466a6 55
vwochnik 2:1038411466a6 56 void HTTPBuffer::setDataLen(size_t len)
vwochnik 2:1038411466a6 57 {
vwochnik 2:1038411466a6 58 bufferSize(len);
vwochnik 2:1038411466a6 59 }
vwochnik 2:1038411466a6 60
vwochnik 2:1038411466a6 61
vwochnik 2:1038411466a6 62 void HTTPBuffer::bufferSize(size_t length)
vwochnik 2:1038411466a6 63 {
vwochnik 2:1038411466a6 64 if (_len == length)
vwochnik 2:1038411466a6 65 return;
vwochnik 2:1038411466a6 66
vwochnik 2:1038411466a6 67 char *buf = (char*)realloc(_buf, length);
vwochnik 2:1038411466a6 68 if (buf == NULL)
vwochnik 2:1038411466a6 69 return;
vwochnik 2:1038411466a6 70
vwochnik 2:1038411466a6 71 // set pointers
vwochnik 2:1038411466a6 72 _wptr = buf + (_wptr - _buf);
vwochnik 2:1038411466a6 73 _rptr = buf + (_rptr - _buf);
vwochnik 2:1038411466a6 74 _buf = buf;
vwochnik 2:1038411466a6 75
vwochnik 2:1038411466a6 76 _len = len;
vwochnik 2:1038411466a6 77 }