Skip to content

Commit d3e5501

Browse files
committed
Use stronger types in lwip_tcp_event_packet_t
1 parent 2c8ad8b commit d3e5501

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

src/AsyncTCP.cpp

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ typedef enum {
9191

9292
typedef struct {
9393
lwip_tcp_event_t event;
94-
void *arg;
94+
AsyncClient *client;
9595
union {
9696
struct {
9797
tcp_pcb *pcb;
@@ -117,7 +117,7 @@ typedef struct {
117117
tcp_pcb *pcb;
118118
} poll;
119119
struct {
120-
AsyncClient *client;
120+
AsyncServer *server;
121121
} accept;
122122
struct {
123123
const char *name;
@@ -206,7 +206,7 @@ static inline bool _get_async_event(lwip_tcp_event_packet_t **e) {
206206
lwip_tcp_event_packet_t *next_pkt = NULL;
207207
while (xQueuePeek(_async_queue, &next_pkt, 0) == pdPASS) {
208208
// if the next event that will come is a poll event for the same connection, we can discard it and continue
209-
if (next_pkt->arg == (*e)->arg && next_pkt->event == LWIP_TCP_POLL) {
209+
if (next_pkt->client == (*e)->client && next_pkt->event == LWIP_TCP_POLL) {
210210
if (xQueueReceive(_async_queue, &next_pkt, 0) == pdPASS) {
211211
free(next_pkt);
212212
next_pkt = NULL;
@@ -239,7 +239,7 @@ static inline bool _get_async_event(lwip_tcp_event_packet_t **e) {
239239
return false;
240240
}
241241

242-
static bool _remove_events_with_arg(void *arg) {
242+
static bool _remove_events_for_client(AsyncClient *client) {
243243
if (!_async_queue) {
244244
return false;
245245
}
@@ -253,7 +253,7 @@ static bool _remove_events_with_arg(void *arg) {
253253
return false;
254254
}
255255
// discard packet if matching
256-
if ((uintptr_t)first_packet->arg == (uintptr_t)arg) {
256+
if ((uintptr_t)first_packet->client == (uintptr_t)client) {
257257
free(first_packet);
258258
first_packet = NULL;
259259
} else if (xQueueSend(_async_queue, &first_packet, 0) != pdPASS) {
@@ -270,7 +270,7 @@ static bool _remove_events_with_arg(void *arg) {
270270
if (xQueueReceive(_async_queue, &packet, 0) != pdPASS) {
271271
return false;
272272
}
273-
if ((uintptr_t)packet->arg == (uintptr_t)arg) {
273+
if ((uintptr_t)packet->client == (uintptr_t)client) {
274274
// remove matching event
275275
free(packet);
276276
packet = NULL;
@@ -287,35 +287,35 @@ static bool _remove_events_with_arg(void *arg) {
287287
}
288288

289289
void AsyncTCP_detail::handle_async_event(lwip_tcp_event_packet_t *e) {
290-
if (e->arg == NULL) {
290+
if (e->client == NULL) {
291291
// do nothing when arg is NULL
292292
// ets_printf("event arg == NULL: 0x%08x\n", e->recv.pcb);
293293
} else if (e->event == LWIP_TCP_CLEAR) {
294-
_remove_events_with_arg(e->arg);
294+
_remove_events_for_client(e->client);
295295
} else if (e->event == LWIP_TCP_RECV) {
296296
// ets_printf("-R: 0x%08x\n", e->recv.pcb);
297-
reinterpret_cast<AsyncClient *>(e->arg)->_recv(e->recv.pcb, e->recv.pb, e->recv.err);
297+
e->client->_recv(e->recv.pcb, e->recv.pb, e->recv.err);
298298
} else if (e->event == LWIP_TCP_FIN) {
299299
// ets_printf("-F: 0x%08x\n", e->fin.pcb);
300-
reinterpret_cast<AsyncClient *>(e->arg)->_fin(e->fin.pcb, e->fin.err);
300+
e->client->_fin(e->fin.pcb, e->fin.err);
301301
} else if (e->event == LWIP_TCP_SENT) {
302302
// ets_printf("-S: 0x%08x\n", e->sent.pcb);
303-
reinterpret_cast<AsyncClient *>(e->arg)->_sent(e->sent.pcb, e->sent.len);
303+
e->client->_sent(e->sent.pcb, e->sent.len);
304304
} else if (e->event == LWIP_TCP_POLL) {
305305
// ets_printf("-P: 0x%08x\n", e->poll.pcb);
306-
reinterpret_cast<AsyncClient *>(e->arg)->_poll(e->poll.pcb);
306+
e->client->_poll(e->poll.pcb);
307307
} else if (e->event == LWIP_TCP_ERROR) {
308-
// ets_printf("-E: 0x%08x %d\n", e->arg, e->error.err);
309-
reinterpret_cast<AsyncClient *>(e->arg)->_error(e->error.err);
308+
// ets_printf("-E: 0x%08x %d\n", e->client, e->error.err);
309+
e->client->_error(e->error.err);
310310
} else if (e->event == LWIP_TCP_CONNECTED) {
311-
// ets_printf("C: 0x%08x 0x%08x %d\n", e->arg, e->connected.pcb, e->connected.err);
312-
reinterpret_cast<AsyncClient *>(e->arg)->_connected(e->connected.pcb, e->connected.err);
311+
// ets_printf("C: 0x%08x 0x%08x %d\n", e->client, e->connected.pcb, e->connected.err);
312+
e->client->_connected(e->connected.pcb, e->connected.err);
313313
} else if (e->event == LWIP_TCP_ACCEPT) {
314-
// ets_printf("A: 0x%08x 0x%08x\n", e->arg, e->accept.client);
315-
reinterpret_cast<AsyncServer *>(e->arg)->_accepted(e->accept.client);
314+
// ets_printf("A: 0x%08x 0x%08x\n", e->client, e->accept.client);
315+
e->accept.server->_accepted(e->client);
316316
} else if (e->event == LWIP_TCP_DNS) {
317-
// ets_printf("D: 0x%08x %s = %s\n", e->arg, e->dns.name, ipaddr_ntoa(&e->dns.addr));
318-
reinterpret_cast<AsyncClient *>(e->arg)->_dns_found(&e->dns.addr);
317+
// ets_printf("D: 0x%08x %s = %s\n", e->client, e->dns.name, ipaddr_ntoa(&e->dns.addr));
318+
e->client->_dns_found(&e->dns.addr);
319319
}
320320
free((void *)(e));
321321
}
@@ -384,14 +384,14 @@ static bool _start_async_task() {
384384
* LwIP Callbacks
385385
* */
386386

387-
static int8_t _tcp_clear_events(void *arg) {
387+
static int8_t _tcp_clear_events(AsyncClient *client) {
388388
lwip_tcp_event_packet_t *e = (lwip_tcp_event_packet_t *)malloc(sizeof(lwip_tcp_event_packet_t));
389389
if (!e) {
390390
log_e("Failed to allocate event packet");
391391
return ERR_MEM;
392392
}
393393
e->event = LWIP_TCP_CLEAR;
394-
e->arg = arg;
394+
e->client = client;
395395
if (!_prepend_async_event(&e)) {
396396
free((void *)(e));
397397
return ERR_TIMEOUT;
@@ -407,7 +407,7 @@ static int8_t _tcp_connected(void *arg, tcp_pcb *pcb, int8_t err) {
407407
return ERR_MEM;
408408
}
409409
e->event = LWIP_TCP_CONNECTED;
410-
e->arg = arg;
410+
e->client = reinterpret_cast<AsyncClient *>(arg);
411411
e->connected.pcb = pcb;
412412
e->connected.err = err;
413413
if (!_prepend_async_event(&e)) {
@@ -432,7 +432,7 @@ int8_t AsyncTCP_detail::tcp_poll(void *arg, struct tcp_pcb *pcb) {
432432
return ERR_MEM;
433433
}
434434
e->event = LWIP_TCP_POLL;
435-
e->arg = arg;
435+
e->client = reinterpret_cast<AsyncClient *>(arg);
436436
e->poll.pcb = pcb;
437437
// poll events are not critical 'cause those are repetitive, so we may not wait the queue in any case
438438
if (!_send_async_event(&e, 0)) {
@@ -448,7 +448,7 @@ int8_t AsyncTCP_detail::tcp_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *pb
448448
log_e("Failed to allocate event packet");
449449
return ERR_MEM;
450450
}
451-
e->arg = arg;
451+
e->client = reinterpret_cast<AsyncClient *>(arg);
452452
if (pb) {
453453
// ets_printf("+R: 0x%08x\n", pcb);
454454
e->event = LWIP_TCP_RECV;
@@ -478,7 +478,7 @@ int8_t AsyncTCP_detail::tcp_sent(void *arg, struct tcp_pcb *pcb, uint16_t len) {
478478
return ERR_MEM;
479479
}
480480
e->event = LWIP_TCP_SENT;
481-
e->arg = arg;
481+
e->client = reinterpret_cast<AsyncClient *>(arg);
482482
e->sent.pcb = pcb;
483483
e->sent.len = len;
484484
if (!_send_async_event(&e)) {
@@ -510,7 +510,7 @@ void AsyncTCP_detail::tcp_error(void *arg, int8_t err) {
510510
return;
511511
}
512512
e->event = LWIP_TCP_ERROR;
513-
e->arg = arg;
513+
e->client = client;
514514
e->error.err = err;
515515
if (!_send_async_event(&e)) {
516516
::free((void *)(e));
@@ -525,7 +525,7 @@ static void _tcp_dns_found(const char *name, struct ip_addr *ipaddr, void *arg)
525525
}
526526
// ets_printf("+DNS: name=%s ipaddr=0x%08x arg=%x\n", name, ipaddr, arg);
527527
e->event = LWIP_TCP_DNS;
528-
e->arg = arg;
528+
e->client = reinterpret_cast<AsyncClient *>(arg);
529529
e->dns.name = name;
530530
if (ipaddr) {
531531
memcpy(&e->dns.addr, ipaddr, sizeof(struct ip_addr));
@@ -1581,8 +1581,8 @@ int8_t AsyncTCP_detail::tcp_accept(void *arg, tcp_pcb *pcb, int8_t err) {
15811581
lwip_tcp_event_packet_t *e = (lwip_tcp_event_packet_t *)malloc(sizeof(lwip_tcp_event_packet_t));
15821582
if (e) {
15831583
e->event = LWIP_TCP_ACCEPT;
1584-
e->arg = arg;
1585-
e->accept.client = c;
1584+
e->accept.server = server;
1585+
e->client = c;
15861586
if (_prepend_async_event(&e)) {
15871587
return ERR_OK; // success
15881588
}

0 commit comments

Comments
 (0)