A client for the SmartREST protocol from Cumulocity.

Dependencies:   HTTPClient SmartRest

Revision:
2:1038411466a6
Child:
3:ce2f116369bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTTPBuffer.cpp	Fri Jan 24 11:39:32 2014 +0000
@@ -0,0 +1,77 @@
+#include "HTTPBuffer.h"
+#include <stdlib.h>
+
+HTTPBuffer::HTTPBuffer()
+{
+    _rptr = _wptr = _buf = NULL;
+    bufferSize(HTTPBUFFER_INITIAL_SIZE);
+}
+
+HTTPBuffer::~HTTPBuffer()
+{
+    if (_buf != NULL)
+        free(_buf);
+}
+
+char HTTPBuffer::read()
+{
+    if (_rptr == _wptr)
+        return 0;
+    return *_rptr++;
+}
+
+uint8_t HTTPBuffer::status()
+{
+    if (_rptr == _wptr)
+        return DS_STATUS_CLOSED;
+    return DS_STATUS_OK;
+}
+
+void HTTPBuffer::writeReset()
+{
+    _rptr = _wptr = _buf;
+    bufferSize(HTTPBUFFER_INITIAL_SIZE);
+}
+
+int HTTPBuffer::write(const char* buf, size_t len)
+{
+    if (_wptr - _buf + len > _len) {
+        size_t newLen = _len;
+        while (_wptr - _buf + len > newLen)
+            newLen += HTTPBUFFER_INCREMENT;
+        bufferSize(newLen);
+    }
+    memcpy(_wbuf, buf, len);
+    _wbuf += len;
+}
+
+void HTTPBuffer::setDataType(const char* type)
+{
+}
+
+void HTTPBuffer::setIsChunked(bool chunked)
+{
+}
+
+void HTTPBuffer::setDataLen(size_t len)
+{
+    bufferSize(len);
+}
+
+
+void HTTPBuffer::bufferSize(size_t length)
+{
+    if (_len == length)
+        return;
+    
+    char *buf = (char*)realloc(_buf, length);
+    if (buf == NULL)
+        return;
+    
+    // set pointers
+    _wptr = buf + (_wptr - _buf);
+    _rptr = buf + (_rptr - _buf);
+    _buf = buf;
+
+    _len = len;
+}