Skip to content
This repository has been archived by the owner on Jan 20, 2025. It is now read-only.

add AsyncTCPbuffer #1

Merged
merged 11 commits into from
Jan 29, 2016
3 changes: 0 additions & 3 deletions keywords.txt

This file was deleted.

51 changes: 47 additions & 4 deletions src/ESPAsyncTCP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,10 @@ void AsyncClient::close(){
_close_pcb = true;
}

void AsyncClient::stop() {
close();
}

bool AsyncClient::free(){
if(!_pcb)
return true;
Expand All @@ -150,8 +154,15 @@ bool AsyncClient::free(){
return false;
}

size_t AsyncClient::write(const char* data) {
if(data == NULL) {
return 0;
}
return write(data, strlen(data));
}

size_t AsyncClient::write(const char* data, size_t size) {
if(!_pcb || size == 0)
if(!_pcb || size == 0 || data == NULL)
return 0;
if(!canSend())
return 0;
Expand Down Expand Up @@ -200,12 +211,16 @@ int8_t AsyncClient::_connected(void* pcb, int8_t err){
}

void AsyncClient::_error(int8_t err) {
if(_error_cb)
if(_error_cb) {
_error_cb(_error_cb_arg, this, err);
}
if(err){
_pcb->state = (tcp_state)0;
if(_discard_cb)
if(_pcb) {
_pcb->state = (tcp_state)0;
}
if(_discard_cb) {
_discard_cb(_discard_cb_arg, this);
}
}
}

Expand Down Expand Up @@ -364,6 +379,34 @@ uint16_t AsyncClient::getLocalPort() {
return _pcb->local_port;
}

IPAddress AsyncClient::remoteIP() {
if(!_pcb) {
return IPAddress(0U);
}
return IPAddress(_pcb->remote_ip.addr);
}

uint16_t AsyncClient::remotePort() {
if(!_pcb) {
return 0;
}
return _pcb->remote_port;
}

IPAddress AsyncClient::localIP() {
if(!_pcb) {
return IPAddress(0U);
}
return IPAddress(_pcb->local_ip.addr);
}

uint16_t AsyncClient::localPort() {
if(!_pcb) {
return 0;
}
return _pcb->local_port;
}

uint8_t AsyncClient::state() {
if(!_pcb) return 0;
return _pcb->state;
Expand Down
11 changes: 9 additions & 2 deletions src/ESPAsyncTCP.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ struct tcp_pcb;
struct pbuf;

class AsyncClient {
private:
protected:
friend class AsyncTCPbuffer;
tcp_pcb* _pcb;
AcConnectHandler _connect_cb;
void* _connect_cb_arg;
Expand Down Expand Up @@ -99,12 +100,14 @@ class AsyncClient {
bool connect(IPAddress ip, uint16_t port);
bool connect(const char* host, uint16_t port);
void close();
void stop();
//int8_t _close();
int8_t abort();
bool free();

bool canSend();//ack is not pending
size_t space();
size_t write(const char* data);
size_t write(const char* data, size_t size); //only when canSend() == true

uint8_t state();
Expand All @@ -123,6 +126,10 @@ class AsyncClient {
uint32_t getLocalAddress();
uint16_t getLocalPort();

IPAddress remoteIP();
uint16_t remotePort();
IPAddress localIP();
uint16_t localPort();

void onConnect(AcConnectHandler cb, void* arg = 0); //on successful connect
void onDisconnect(AcConnectHandler cb, void* arg = 0); //disconnected
Expand All @@ -137,7 +144,7 @@ class AsyncClient {
};

class AsyncServer {
private:
protected:
uint16_t _port;
IPAddress _addr;
tcp_pcb* _pcb;
Expand Down
Loading