@@ -36,6 +36,8 @@ static int isDataSentCount = 0;
3636bool pending_close = false;
3737bool pending_accept = false;
3838
39+ static err_t tcp_data_sent (void * arg , struct tcp_pcb * pcb , u16_t len );
40+
3941static void atcp_init ()
4042{
4143 pending_close = false;
@@ -48,12 +50,16 @@ static void ard_tcp_destroy(struct ttcp* ttcp) {
4850 err_t err = ERR_OK ;
4951 DUMP_TCP_STATE (ttcp );
5052
53+ if (getSock (ttcp )== -1 )
54+ WARN ("ttcp already deallocated!\n" );
55+
5156 if (ttcp -> tpcb ) {
5257 tcp_arg (ttcp -> tpcb , NULL );
5358 tcp_sent (ttcp -> tpcb , NULL );
5459 tcp_recv (ttcp -> tpcb , NULL );
5560 tcp_err (ttcp -> tpcb , NULL );
56- err = tcp_close (ttcp -> tpcb );
61+ //TEMPORAQARY
62+ //err = tcp_close(ttcp->tpcb);
5763 INFO_TCP ("Closing tpcb: state:0x%x err:%d\n" , ttcp -> tpcb -> state , err );
5864 }
5965
@@ -118,6 +124,7 @@ static void ard_tcp_done(struct ttcp* ttcp, int result) {
118124 ttcp -> done_cb (ttcp -> opaque , result );
119125
120126 ard_tcp_destroy (ttcp );
127+ clearMapSockTcp (getSock (ttcp ));
121128}
122129
123130static void
@@ -233,8 +240,16 @@ static void atcp_conn_cli_err_cb(void *arg, err_t err) {
233240
234241 if (ifStatus == false)
235242 printk ("Abort connection\n" );
236- ard_tcp_destroy (_ttcp );
237- cleanSockState_cb (_ttcp );
243+
244+ if ((_ttcp )&& (err == ERR_ABRT ))
245+ {
246+ WARN ("TTCP [%p]: free memory\n" , _ttcp );
247+ tcp_poll_retries = 0 ;
248+ cleanSockState_cb (_ttcp );
249+ if (_ttcp -> payload )
250+ free (_ttcp -> payload );
251+ free (_ttcp );
252+ }
238253
239254 pending_close = false;
240255}
@@ -269,7 +284,7 @@ void closeConnections()
269284 _ttcp -> tpcb , _ttcp -> tpcb -> state , _ttcp -> lpcb , _ttcp -> lpcb -> state );
270285 //tcp_close(_ttcp->tpcb);
271286 ard_tcp_destroy (_ttcp );
272- cleanSockState_cb ( _ttcp );
287+ clearMapSockTcp ( getSock ( _ttcp ) );
273288 }
274289 }
275290}
@@ -305,6 +320,8 @@ static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
305320 close_conn (ttcp );
306321 }
307322
323+ if (err != ERR_OK )
324+ WARN ("err=%d p=%p\n" , err , p );
308325 return ERR_OK ;
309326}
310327
@@ -352,21 +369,18 @@ static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) {
352369 struct ttcp * _ttcp = arg ;
353370 ++ tcp_poll_retries ;
354371
355- if (tcp_poll_retries > 4 ) {
356- WARN ("ARD TCP [%p] arg=%p retries=%d\n" ,
357- pcb , arg , tcp_poll_retries );
372+ if (tcp_poll_retries > 8 ) {
373+ WARN ("ARD TCP [%p-%p ] arg=%p retries=%d\n" ,
374+ pcb , _ttcp -> tpcb , arg , tcp_poll_retries );
358375 tcp_poll_retries = 0 ;
359376 tcp_abort (pcb );
360- ard_tcp_destroy (_ttcp );
361- cleanSockState_cb (_ttcp );
362- pending_close = false;
363- return ERR_ABRT ;
377+ return ERR_ABRT ;
364378 }
365379
366- WARN ("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d\n" , (_ttcp )?_ttcp -> tpcb :0 , pcb , arg ,
367- tcp_poll_retries , pending_close );
380+ WARN ("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d conn:%d \n" , (_ttcp )?_ttcp -> tpcb :0 , pcb , arg ,
381+ tcp_poll_retries , pending_close , _connected );
368382
369- if (_ttcp ) tcp_send_data (_ttcp );
383+ if (( _ttcp ) && ( _connected ) ) tcp_send_data (_ttcp );
370384
371385 if (pending_close )
372386 {
@@ -377,7 +391,12 @@ static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) {
377391 }
378392 else
379393 {
394+ cleanSockState_cb (_ttcp );
395+ if (_ttcp -> payload )
396+ free (_ttcp -> payload );
397+ free (_ttcp );
380398 pending_close = false;
399+
381400 }
382401
383402 INFO_TCP ("ARD TCP [%p-%p] try to close pending:%d\n" , pcb , (_ttcp )?_ttcp -> tpcb :0 , pending_close );
@@ -423,7 +442,7 @@ static int atcp_start(struct ttcp* ttcp) {
423442 WARN ("TTCP [%p]: could not allocate pcb\n" , ttcp );
424443 return -1 ;
425444 }
426- INFO_TCP ( "tcp:%x\n" , ttcp -> tpcb );
445+
427446 ttcp -> payload = malloc (ttcp -> buflen );
428447 if (ttcp -> payload == NULL ) {
429448 WARN ("TTCP [%p]: could not allocate payload\n" , ttcp );
@@ -436,14 +455,14 @@ static int atcp_start(struct ttcp* ttcp) {
436455 if (ttcp -> mode == TTCP_MODE_TRANSMIT ) {
437456 tcp_err (ttcp -> tpcb , atcp_conn_cli_err_cb );
438457 tcp_recv (ttcp -> tpcb , atcp_recv_cb );
439- tcp_poll (ttcp -> tpcb , atcp_poll , 4 );
458+ tcp_sent (ttcp -> tpcb , tcp_data_sent );
459+ tcp_poll (ttcp -> tpcb , atcp_poll_conn , 4 );
440460 _connected = false;
441- INFO_TCP ("[tpcb]- %p\n" , ttcp -> tpcb );
461+ INFO_TCP ("[tpcb]-%p payload: %p\n" , ttcp -> tpcb , ttcp -> payload );
442462 DUMP_TCP_STATE (ttcp );
443463 if (tcp_connect (ttcp -> tpcb , & ttcp -> addr , ttcp -> port , tcp_connect_cb )
444464 != ERR_OK ) {
445465 WARN ("TTCP [%p]: tcp connect failed\n" , ttcp );
446- atcp_conn_err_cb (ttcp , err );
447466 return -1 ;
448467 }
449468
@@ -681,13 +700,15 @@ void ard_tcp_stop(void* ttcp) {
681700 INFO_TCP ("Destroy TCP connection...state:%d\n" , _ttcp -> tpcb -> state );
682701 ard_tcp_destroy (_ttcp );
683702 clearMapSockTcp (getSock (_ttcp ));
703+ tcp_poll_retries = 0 ;
684704 }else {
685705 INFO_TCP ("Closing connection...state:%d\n" , _ttcp -> tpcb -> state );
686706 DUMP_TCP_STATE (_ttcp );
687707 if ((_ttcp )&& (_ttcp -> tpcb )&& (_ttcp -> tpcb -> state != LAST_ACK )&& (_ttcp -> tpcb -> state != CLOSED ))
688708 {
689709 close_conn (_ttcp );
690710 }
711+ pending_accept = false;
691712 }
692713}
693714
@@ -756,7 +777,7 @@ int sendTcpData(void* p, uint8_t* buf, uint16_t len) {
756777
757778 if (_ttcp == NULL )
758779 {
759- WARN ("ttcp == NULL!" );
780+ WARN ("ttcp == NULL!\n " );
760781 return WL_FAILURE ;
761782 }
762783
0 commit comments