@@ -59,6 +59,9 @@ AsyncClient::AsyncClient(tcp_pcb* pcb):
59
59
, _pcb_sent_at(0 )
60
60
, _close_pcb(false )
61
61
, _ack_pcb(true )
62
+ , _tx_unacked_len(0 )
63
+ , _tx_acked_len(0 )
64
+ , _tx_unsent_len(0 )
62
65
, _rx_last_packet(0 )
63
66
, _rx_since_timeout(0 )
64
67
, _ack_timeout(ASYNC_MAX_ACK_TIME)
@@ -234,8 +237,10 @@ size_t AsyncClient::add(const char* data, size_t size, uint8_t apiflags) {
234
237
#if ASYNC_TCP_SSL_ENABLED
235
238
if (_pcb_secure){
236
239
int sent = tcp_ssl_write (_pcb, (uint8_t *)data, size);
237
- if (sent >= 0 )
240
+ if (sent >= 0 ){
241
+ _tx_unacked_len += sent;
238
242
return sent;
243
+ }
239
244
_close ();
240
245
return 0 ;
241
246
}
@@ -244,6 +249,7 @@ size_t AsyncClient::add(const char* data, size_t size, uint8_t apiflags) {
244
249
int8_t err = tcp_write (_pcb, data, will_send, apiflags);
245
250
if (err != ERR_OK)
246
251
return 0 ;
252
+ _tx_unsent_len += will_send;
247
253
return will_send;
248
254
}
249
255
@@ -255,8 +261,11 @@ bool AsyncClient::send(){
255
261
if (tcp_output (_pcb) == ERR_OK){
256
262
_pcb_busy = true ;
257
263
_pcb_sent_at = millis ();
264
+ _tx_unacked_len += _tx_unsent_len;
265
+ _tx_unsent_len = 0 ;
258
266
return true ;
259
267
}
268
+ _tx_unsent_len = 0 ;
260
269
return false ;
261
270
}
262
271
@@ -354,9 +363,14 @@ void AsyncClient::_ssl_error(int8_t err){
354
363
int8_t AsyncClient::_sent (tcp_pcb* pcb, uint16_t len) {
355
364
_rx_last_packet = millis ();
356
365
ASYNC_TCP_DEBUG (" _sent: %u\n " , len);
357
- _pcb_busy = false ;
358
- if (_sent_cb)
359
- _sent_cb (_sent_cb_arg, this , len, (millis () - _pcb_sent_at));
366
+ _tx_unacked_len -= len;
367
+ _tx_acked_len += len;
368
+ if (_tx_unacked_len == 0 ){
369
+ _pcb_busy = false ;
370
+ if (_sent_cb)
371
+ _sent_cb (_sent_cb_arg, this , _tx_acked_len, (millis () - _pcb_sent_at));
372
+ _tx_acked_len = 0 ;
373
+ }
360
374
return ERR_OK;
361
375
}
362
376
0 commit comments