@@ -65,9 +65,6 @@ static err_t
6565TCPClient_recv_cb (void * arg , struct altcp_pcb * pcb , struct pbuf * pbuf , err_t err )
6666{
6767 tcp_connection_state * cs = (tcp_connection_state * )arg ;
68- printf ("cs->state = %d\n" , cs -> state );
69- printf ("cs->pcb = %p\n" , cs -> pcb );
70- printf ("cs->send_data = %p, len = %zu\n" , cs -> send_data , cs -> send_data_len );
7168 mrb_state * mrb = cs -> mrb ;
7269 if (err != ERR_OK ) {
7370 picorb_warn ("TCPClient_recv_cb: err=%d\n" , err );
@@ -85,21 +82,15 @@ printf("cs->send_data = %p, len = %zu\n", cs->send_data, cs->send_data_len);
8582 current_pbuf = current_pbuf -> next ;
8683 }
8784 tmpbuf [pbuf -> tot_len ] = '\0' ;
88- if (cs -> recv_data == NULL ) {
89- cs -> recv_data = picorb_alloc (mrb , pbuf -> tot_len + 1 );
90- cs -> recv_data_len = pbuf -> tot_len ;
91- memcpy (cs -> recv_data , tmpbuf , pbuf -> tot_len );
92- } else {
93- char * new_recv_data = (char * )picorb_realloc (mrb , cs -> recv_data , cs -> recv_data_len + pbuf -> tot_len + 1 );
94- if (new_recv_data == NULL ) {
95- picorb_free (mrb , tmpbuf );
96- picorb_free (mrb , cs -> recv_data );
97- return ERR_MEM ;
98- }
99- cs -> recv_data = new_recv_data ;
100- memcpy (cs -> recv_data + cs -> recv_data_len , tmpbuf , pbuf -> tot_len );
101- cs -> recv_data_len += pbuf -> tot_len ;
85+ assert (cs -> recv_data );
86+ char * new_recv_data = (char * )picorb_realloc (mrb , cs -> recv_data , cs -> recv_data_len + pbuf -> tot_len + 1 );
87+ if (new_recv_data == NULL ) {
88+ picorb_free (mrb , tmpbuf );
89+ return ERR_MEM ;
10290 }
91+ cs -> recv_data = new_recv_data ;
92+ memcpy (cs -> recv_data + cs -> recv_data_len , tmpbuf , pbuf -> tot_len );
93+ cs -> recv_data_len += pbuf -> tot_len ;
10394 picorb_free (mrb , tmpbuf );
10495 altcp_recved (pcb , pbuf -> tot_len );
10596 cs -> state = NET_TCP_STATE_PACKET_RECVED ;
@@ -121,9 +112,6 @@ static err_t
121112TCPClient_connected_cb (void * arg , struct altcp_pcb * pcb , err_t err )
122113{
123114 tcp_connection_state * cs = (tcp_connection_state * )arg ;
124- printf ("cs->state = %d\n" , cs -> state );
125- printf ("cs->pcb = %p\n" , cs -> pcb );
126- printf ("cs->send_data = %p, len = %zu\n" , cs -> send_data , cs -> send_data_len );
127115 mrb_state * mrb = cs -> mrb ;
128116 if (err != ERR_OK ) {
129117 picorb_warn ("TCPClient_connected_cb: err=%d\n" , err );
@@ -137,9 +125,6 @@ static err_t
137125TCPClient_poll_cb (void * arg , struct altcp_pcb * pcb )
138126{
139127 tcp_connection_state * cs = (tcp_connection_state * )arg ;
140- printf ("cs->state = %d\n" , cs -> state );
141- printf ("cs->pcb = %p\n" , cs -> pcb );
142- printf ("cs->send_data = %p, len = %zu\n" , cs -> send_data , cs -> send_data_len );
143128 mrb_state * mrb = cs -> mrb ;
144129 picorb_warn ("TCPClient_poll_cb (timeout)\n" );
145130 cs -> state = NET_TCP_STATE_TIMEOUT ;
@@ -151,9 +136,6 @@ TCPClient_err_cb(void *arg, err_t err)
151136{
152137 if (!arg ) return ;
153138 tcp_connection_state * cs = (tcp_connection_state * )arg ;
154- printf ("cs->state = %d\n" , cs -> state );
155- printf ("cs->pcb = %p\n" , cs -> pcb );
156- printf ("cs->send_data = %p, len = %zu\n" , cs -> send_data , cs -> send_data_len );
157139 mrb_state * mrb = cs -> mrb ;
158140 picorb_warn ("Error with: %d\n" , err );
159141 cs -> state = NET_TCP_STATE_ERROR ;
@@ -189,6 +171,7 @@ TCPClient_new_tls_connection(mrb_state *mrb, const net_request_t *req, net_respo
189171 cs -> pcb = altcp_tls_new (tls_config , IPADDR_TYPE_V4 );
190172 if (!cs -> pcb ) {
191173 picorb_warn ("altcp_tls_new failed\n" );
174+ altcp_tls_free_config (tls_config );
192175 picorb_free (mrb , cs );
193176 return NULL ;
194177 }
@@ -271,31 +254,35 @@ TCPClient_poll_impl(tcp_connection_state **pcs)
271254 return cs -> state ;
272255}
273256
274- void
257+ bool
275258TCPClient_send (mrb_state * mrb , const net_request_t * req , net_response_t * res )
276259{
260+ bool ret = false;
277261 ip_addr_t ip ;
278262 ip4_addr_set_zero (& ip );
279263 Net_get_ip (req -> host , & ip );
280- if (!ip4_addr_isloopback (& ip )) {
264+ if (!ip4_addr_isloopback (& ip )) {
281265 char ip_str [16 ];
282266 ipaddr_ntoa_r (& ip , ip_str , 16 );
283267 tcp_connection_state * cs = TCPClient_connect_impl (mrb , & ip , req , res );
284268 if (cs ) {
285- int max_wait = 1000 ;
269+ int max_wait = 200 ;
286270 while (TCPClient_poll_impl (& cs ) && 0 < max_wait -- ) {
287271 // res->recv_data is ready after connection is complete
288272 Net_sleep_ms (100 );
289273 }
290274 if (max_wait <= 0 ) {
291275 picorb_warn ("TCPClient_send: timeout\n" );
292- picorb_free (mrb , cs -> recv_data );
293276 } else {
294277 res -> recv_data = cs -> recv_data ;
295278 res -> recv_data_len = cs -> recv_data_len ;
296279 }
297- TCPClient_close (cs );
280+ if (cs -> state == NET_TCP_STATE_FINISHED ) {
281+ ret = true;
282+ }
283+ TCPClient_close (cs );
298284 }
299285 }
286+ return ret ;
300287}
301288
0 commit comments