mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-06 03:50:13 +02:00
Update AsyncTCP to v3.3.6
This commit is contained in:
parent
d754937a4e
commit
545fceb4cc
5 changed files with 46 additions and 28 deletions
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "AsyncTCP",
|
||||
"version": "3.3.5",
|
||||
"version": "3.3.6",
|
||||
"description": "Asynchronous TCP Library for ESP32",
|
||||
"keywords": "async,tcp",
|
||||
"repository": {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
name=Async TCP
|
||||
includes=AsyncTCP.h
|
||||
version=3.3.5
|
||||
version=3.3.6
|
||||
author=ESP32Async
|
||||
maintainer=ESP32Async
|
||||
sentence=Async TCP Library for ESP32
|
||||
|
|
|
@ -23,8 +23,6 @@ extern "C" {
|
|||
#include <NetworkInterface.h>
|
||||
#endif
|
||||
|
||||
#define TAG "AsyncTCP"
|
||||
|
||||
// https://github.com/espressif/arduino-esp32/issues/10526
|
||||
#ifdef CONFIG_LWIP_TCPIP_CORE_LOCKING
|
||||
#define TCP_MUTEX_LOCK() \
|
||||
|
@ -450,8 +448,22 @@ static int8_t _tcp_sent(void *arg, struct tcp_pcb *pcb, uint16_t len) {
|
|||
return ERR_OK;
|
||||
}
|
||||
|
||||
static void _tcp_error(void *arg, int8_t err) {
|
||||
void AsyncClient::_tcp_error(void *arg, int8_t err) {
|
||||
// ets_printf("+E: 0x%08x\n", arg);
|
||||
AsyncClient *client = reinterpret_cast<AsyncClient *>(arg);
|
||||
if (client && client->_pcb) {
|
||||
tcp_arg(client->_pcb, NULL);
|
||||
if (client->_pcb->state == LISTEN) {
|
||||
tcp_sent(client->_pcb, NULL);
|
||||
tcp_recv(client->_pcb, NULL);
|
||||
tcp_err(client->_pcb, NULL);
|
||||
tcp_poll(client->_pcb, NULL, 0);
|
||||
}
|
||||
client->_pcb = nullptr;
|
||||
client->_free_closed_slot();
|
||||
}
|
||||
|
||||
// enqueue event to be processed in the async task for the user callback
|
||||
lwip_tcp_event_packet_t *e = (lwip_tcp_event_packet_t *)malloc(sizeof(lwip_tcp_event_packet_t));
|
||||
if (!e) {
|
||||
log_e("Failed to allocate event packet");
|
||||
|
@ -461,7 +473,7 @@ static void _tcp_error(void *arg, int8_t err) {
|
|||
e->arg = arg;
|
||||
e->error.err = err;
|
||||
if (!_send_async_event(&e)) {
|
||||
free((void *)(e));
|
||||
::free((void *)(e));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1048,19 +1060,6 @@ int8_t AsyncClient::_connected(tcp_pcb *pcb, int8_t err) {
|
|||
}
|
||||
|
||||
void AsyncClient::_error(int8_t err) {
|
||||
if (_pcb) {
|
||||
TCP_MUTEX_LOCK();
|
||||
tcp_arg(_pcb, NULL);
|
||||
if (_pcb->state == LISTEN) {
|
||||
tcp_sent(_pcb, NULL);
|
||||
tcp_recv(_pcb, NULL);
|
||||
tcp_err(_pcb, NULL);
|
||||
tcp_poll(_pcb, NULL, 0);
|
||||
}
|
||||
TCP_MUTEX_UNLOCK();
|
||||
_free_closed_slot();
|
||||
_pcb = NULL;
|
||||
}
|
||||
if (_error_cb) {
|
||||
_error_cb(_error_cb_arg, this, err);
|
||||
}
|
||||
|
@ -1616,21 +1615,37 @@ void AsyncServer::end() {
|
|||
|
||||
// runs on LwIP thread
|
||||
int8_t AsyncServer::_accept(tcp_pcb *pcb, int8_t err) {
|
||||
// ets_printf("+A: 0x%08x\n", pcb);
|
||||
if (!pcb) {
|
||||
log_e("_accept failed: pcb is NULL");
|
||||
return ERR_ABRT;
|
||||
}
|
||||
if (_connect_cb) {
|
||||
AsyncClient *c = new (std::nothrow) AsyncClient(pcb);
|
||||
if (c) {
|
||||
if (c && c->pcb()) {
|
||||
c->setNoDelay(_noDelay);
|
||||
const int8_t err = _tcp_accept(this, c);
|
||||
if (err != ERR_OK) {
|
||||
tcp_abort(pcb);
|
||||
delete c;
|
||||
if (_tcp_accept(this, c) == ERR_OK) {
|
||||
return ERR_OK; // success
|
||||
}
|
||||
return err;
|
||||
// Couldn't allocate accept event
|
||||
// We can't let the client object call in to close, as we're on the LWIP thread; it could deadlock trying to RPC to itself
|
||||
c->_pcb = nullptr;
|
||||
tcp_abort(pcb);
|
||||
log_e("_accept failed: couldn't accept client");
|
||||
return ERR_ABRT;
|
||||
}
|
||||
if (c) {
|
||||
// Couldn't complete setup
|
||||
// pcb has already been aborted
|
||||
delete c;
|
||||
pcb = nullptr;
|
||||
log_e("_accept failed: couldn't complete setup");
|
||||
return ERR_ABRT;
|
||||
}
|
||||
log_e("_accept failed: couldn't allocate client");
|
||||
} else {
|
||||
log_e("_accept failed: no onConnect callback");
|
||||
}
|
||||
tcp_abort(pcb);
|
||||
log_d("_accept failed");
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -239,6 +239,7 @@ public:
|
|||
static int8_t _s_sent(void *arg, struct tcp_pcb *tpcb, uint16_t len);
|
||||
static int8_t _s_connected(void *arg, struct tcp_pcb *tpcb, int8_t err);
|
||||
static void _s_dns_found(const char *name, struct ip_addr *ipaddr, void *arg);
|
||||
static void _tcp_error(void *arg, int8_t err);
|
||||
|
||||
int8_t _recv(tcp_pcb *pcb, pbuf *pb, int8_t err);
|
||||
tcp_pcb *pcb() {
|
||||
|
@ -246,6 +247,8 @@ public:
|
|||
}
|
||||
|
||||
protected:
|
||||
friend class AsyncServer;
|
||||
|
||||
bool _connect(ip_addr_t addr, uint16_t port);
|
||||
|
||||
tcp_pcb *_pcb;
|
||||
|
|
|
@ -12,7 +12,7 @@ extern "C" {
|
|||
/** Minor version number (x.X.x) */
|
||||
#define ASYNCTCP_VERSION_MINOR 3
|
||||
/** Patch version number (x.x.X) */
|
||||
#define ASYNCTCP_VERSION_PATCH 5
|
||||
#define ASYNCTCP_VERSION_PATCH 6
|
||||
|
||||
/**
|
||||
* Macro to convert version number into an integer
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue