-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathBufferedSocket.cpp
73 lines (55 loc) · 1.58 KB
/
BufferedSocket.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "BufferedSocket.h"
#include <stdio.h>
#include <string.h>
void BufferedSocket::init(uint16_t bufferCapacity){
this->recvBuffer = (uint8_t*)malloc(bufferCapacity);
if (recvBuffer == NULL)
this->bufferCapacity = 0;
else
this->bufferCapacity = bufferCapacity;
this->bufferSize = 0;
}
BufferedSocket::BufferedSocket(char* server, uint16_t port, DNSHandler* dns,
uint16_t bufferSize) :
Socket(server,port,dns){
init(bufferSize);
}
BufferedSocket::BufferedSocket(uint8_t* remoteIP, uint16_t remotePort,
uint16_t bufferSize):
Socket(remoteIP,remotePort){
init(bufferSize);
}
BufferedSocket::BufferedSocket(uint16_t listenPort, uint16_t bufferSize):
Socket(listenPort){
init(bufferSize);
}
BufferedSocket::~BufferedSocket(){
if (recvBuffer != NULL)
free(recvBuffer);
}
#include <Arduino.h>
bool BufferedSocket::onDataReceived(Buffer* buf){
if ((this->bufferSize + buf->size()) > this->bufferCapacity)
return false;
uint8_t* ptr = recvBuffer+bufferSize;
if (buf->read(0,ptr,buf->size())){
bufferSize+=buf->size();
return true;
}
return false;
}
uint16_t BufferedSocket::dataAvailable(){
return this->bufferSize;
}
uint16_t BufferedSocket::read(void* data, uint16_t length){
if (length > this->bufferSize)
length = this->bufferSize;
memcpy(data,recvBuffer,length);
if (bufferCapacity > 1)
memmove(recvBuffer,recvBuffer+length,this->bufferSize-length);
this->bufferSize -= length;
return length;
}
uint16_t BufferedSocket::getApplicationWindowSize(){
return this->bufferCapacity - this->bufferSize;
}