@ -243,15 +243,14 @@ sendtxbuffer(serbridgeConnData *conn)
{
sint8 result = ESPCONN_OK ;
if ( conn - > txbufferlen ! = 0 ) {
os_printf ( " TX %p %d \n " , conn , conn - > txbufferlen ) ;
//os_printf("TX %p %d\n", conn, conn->txbufferlen);
conn - > readytosend = false ;
result = espconn_sent ( conn - > conn , ( uint8_t * ) conn - > txbuffer , conn - > txbufferlen ) ;
conn - > txbufferlen = 0 ;
if ( result ! = ESPCONN_OK ) {
# ifdef SERBR_DBG
os_printf ( " sendtxbuffer: espconn_sent error %d on conn %p \n " , result , conn ) ;
# endif
conn - > txbufferlen = 0 ;
if ( ! conn - > txoverflow_at ) conn - > txoverflow_at = system_get_time ( ) ;
} else {
conn - > sentbuffer = conn - > txbuffer ;
conn - > txbuffer = NULL ;
@ -269,12 +268,7 @@ sendtxbuffer(serbridgeConnData *conn)
static sint8 ICACHE_FLASH_ATTR
espbuffsend ( serbridgeConnData * conn , const char * data , uint16 len )
{
if ( conn - > txbufferlen > = MAX_TXBUFFER ) {
# ifdef SERBR_DBG
os_printf ( " espbuffsend: txbuffer full on conn %p \n " , conn ) ;
# endif
return - 128 ;
}
if ( conn - > txbufferlen > = MAX_TXBUFFER ) goto overflow ;
// make sure we indeed have a buffer
if ( conn - > txbuffer = = NULL ) conn - > txbuffer = os_zalloc ( MAX_TXBUFFER ) ;
@ -298,10 +292,25 @@ espbuffsend(serbridgeConnData *conn, const char *data, uint16 len)
// we sent the prior buffer, so try again
return espbuffsend ( conn , data + avail , len - avail ) ;
}
os_printf ( " espbuffsend: txbuffer full on conn %p \n " , conn ) ;
return - 128 ;
goto overflow ;
}
return result ;
overflow :
if ( conn - > txoverflow_at ) {
// we've already been overflowing
if ( system_get_time ( ) - conn - > txoverflow_at > 10 * 1000 * 1000 ) {
// no progress in 10 seconds, kill the connection
os_printf ( " serbridge: killing overlowing stuck conn %p \n " , conn ) ;
espconn_disconnect ( conn - > conn ) ;
}
// else be silent, we already printed an error
} else {
// print 1-time message and take timestamp
os_printf ( " serbridge: txbuffer full, conn %p \n " , conn ) ;
conn - > txoverflow_at = system_get_time ( ) ;
}
return - 128 ;
}
//callback after the data are sent
@ -315,6 +324,7 @@ serbridgeSentCb(void *arg)
if ( conn - > sentbuffer ! = NULL ) os_free ( conn - > sentbuffer ) ;
conn - > sentbuffer = NULL ;
conn - > readytosend = true ;
conn - > txoverflow_at = 0 ;
sendtxbuffer ( conn ) ; // send possible new data in txbuffer
}