@@ -43,7 +43,7 @@ static void dump_bytes(const uint8_t *p, uint32_t len)
4343}
4444
4545
46- err_t wolf_TCPclose (WOLF_SOCKET_T * sock )
46+ int wolf_TCPclose (WOLF_SOCKET_T sock )
4747{
4848 err_t err = ERR_OK ;
4949 if (sock -> tcp_pcb != NULL )
@@ -65,7 +65,7 @@ err_t wolf_TCPclose(WOLF_SOCKET_T *sock)
6565 return err ;
6666}
6767
68- static err_t tcp_result (WOLF_SOCKET_T * sock , int status )
68+ static err_t tcp_result (WOLF_SOCKET_T sock , int status )
6969{
7070 if (status == 0 ) {
7171 DEBUG_printf ("test success\n" );
@@ -78,7 +78,7 @@ static err_t tcp_result(WOLF_SOCKET_T *sock, int status)
7878
7979static err_t lwip_cb_client_sent (void * arg , struct tcp_pcb * tpcb , u16_t len )
8080{
81- WOLF_SOCKET_T * sock = (WOLF_SOCKET_T * )arg ;
81+ WOLF_SOCKET_T sock = (WOLF_SOCKET_T )arg ;
8282
8383 sock -> sent_len += len ;
8484
@@ -102,7 +102,8 @@ static err_t lwip_cb_client_sent(void *arg, struct tcp_pcb *tpcb, u16_t len)
102102
103103static err_t lwip_cb_client_connected (void * arg , struct tcp_pcb * tpcb , err_t err )
104104{
105- WOLF_SOCKET_T * sock = (WOLF_SOCKET_T * )arg ;
105+ WOLF_SOCKET_T sock = (WOLF_SOCKET_T )arg ;
106+
106107 if (err != ERR_OK )
107108 {
108109 DEBUG_printf ("connect failed %d\n" , err );
@@ -127,14 +128,13 @@ static void lwip_cb_client_err(void *arg, err_t err)
127128
128129static err_t lwip_cb_client_recv (void * arg , struct tcp_pcb * tpcb , struct pbuf * p , err_t err )
129130{
130- WOLF_SOCKET_T * sock = (WOLF_SOCKET_T * )arg ;
131+ WOLF_SOCKET_T sock = (WOLF_SOCKET_T )arg ;
131132 if (!p ) {
132133 return ERR_OK ;
133134 }
134135
135136 cyw43_arch_lwip_check ();
136- if (p -> tot_len > 0 )
137- {
137+ if (p -> tot_len > 0 ) {
138138 const uint16_t buffer_left = BUF_SIZE - sock -> buffer_len ;
139139 sock -> buffer_len += pbuf_copy_partial (p , sock -> buffer + sock -> buffer_len ,
140140 p -> tot_len > buffer_left ? buffer_left : p -> tot_len , 0 );
@@ -144,10 +144,26 @@ static err_t lwip_cb_client_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p
144144 return ERR_OK ;
145145}
146146
147- bool wolf_TCPconnect (WOLF_SOCKET_T * sock , const char * ip , uint32_t port )
147+ int wolf_inet_pton (int af , const char * ip_str , void * ip_dst )
148+ {
149+ (void )af ;
150+ struct sockaddr_in * addr = (struct sockaddr_in * )ip_dst ;
151+
152+ return ip4addr_aton (ip_str , ip_dst );
153+ }
154+
155+ static u32_t swapBytes (u16_t a )
156+ {
157+ u8_t * p = (u8_t * )& a ;
158+ return p [0 ] << 8 | p [1 ];
159+ }
160+
161+ int wolf_TCPconnect (WOLF_SOCKET_T sock , const struct sockaddr * addr , socklen_t addrlen )
148162{
149- ip4addr_aton (ip , & sock -> remote_addr );
150- sock -> tcp_pcb = tcp_new_ip_type (IP_GET_TYPE (& sock -> remote_addr ));
163+ int err ;
164+ struct sockaddr_in * addr_in = (struct sockaddr_in * )addr ;
165+
166+ sock -> tcp_pcb = tcp_new_ip_type (IP_GET_TYPE (& addr_in -> sin_addr ));
151167 if (!sock -> tcp_pcb ) {
152168 DEBUG_printf ("failed to create pcb\n" );
153169 return false;
@@ -162,32 +178,35 @@ bool wolf_TCPconnect(WOLF_SOCKET_T *sock, const char *ip, uint32_t port)
162178 sock -> buffer_len = 0 ;
163179
164180 cyw43_arch_lwip_begin ();
165- err_t err = tcp_connect (sock -> tcp_pcb , & sock -> remote_addr , port , lwip_cb_client_connected );
181+ err = tcp_connect (sock -> tcp_pcb , (const ip_addr_t * )& addr_in -> sin_addr ,
182+ swapBytes (addr_in -> sin_port ), lwip_cb_client_connected );
166183 cyw43_arch_lwip_end ();
167184 if (err != ERR_OK ) {
168185 DEBUG_printf ("wolf_TCPconnect: Failed" );
169186 return WOLF_FAIL ;
170187 }
171- while (sock -> connected != true) {
188+ sock -> connected = false;
189+
190+ while (sock -> connected != true)
191+ {
172192 cyw43_arch_poll ();
173193 cyw43_arch_wait_for_work_until (make_timeout_time_ms (1000 ));
174194 }
175195 return WOLF_SUCCESS ;
176196}
177197
178198// get a new TCP client
179- WOLF_SOCKET_T * wolf_TCPsocket ()
199+ WOLF_SOCKET_T wolf_TCPsocket ()
180200{
181- WOLF_SOCKET_T * sock = calloc (1 , sizeof (WOLF_SOCKET_T ));
201+ WOLF_SOCKET_T sock = calloc (1 , sizeof (* sock ));
182202 if (!sock ) {
183203 DEBUG_printf ("failed to allocate state\n" );
184204 return NULL ;
185205 }
186-
187206 return sock ;
188207}
189208
190- int wolf_TCPwrite (WOLF_SOCKET_T * sock , const unsigned char * buff , long unsigned int len )
209+ int wolf_TCPwrite (WOLF_SOCKET_T sock , const unsigned char * buff , long unsigned int len )
191210{
192211 int ret ;
193212 int i ;
@@ -198,23 +217,19 @@ int wolf_TCPwrite(WOLF_SOCKET_T *sock, const unsigned char *buff, long unsigned
198217 if (ret == ERR_OK ) {
199218 tcp_output (sock -> tcp_pcb );
200219 }
201- while (sock -> sent_len < len ) {
202- cyw43_arch_poll ();
203- cyw43_arch_wait_for_work_until (make_timeout_time_ms (1000 ));
204- }
220+ sock -> sent_len = 0 ;
205221 return (int )len ;
206222}
207223
208- int wolf_TCPread (WOLF_SOCKET_T * sock , unsigned char * buff , long unsigned int len )
224+ int wolf_TCPread (WOLF_SOCKET_T sock , unsigned char * buff , long unsigned int len )
209225{
210226 int recv_len ;
211227 int remained ;
212228 int i ;
213- #define POLLING 200
214229
215- for ( i = 0 ; i < POLLING ; i ++ ) {
230+ while ( 1 ) { /* no timeout for now */
216231 if (sock -> buffer_len > 0 ) {
217- recv_len = len < sock -> buffer_len ? len : sock -> buffer_len ;
232+ recv_len = len <= sock -> buffer_len ? len : sock -> buffer_len ;
218233 memcpy (buff , sock -> buffer , recv_len );
219234 if (recv_len >= len ) {
220235 remained = sock -> buffer_len - recv_len ;
@@ -226,6 +241,6 @@ int wolf_TCPread(WOLF_SOCKET_T *sock, unsigned char *buff, long unsigned int len
226241 return recv_len ;
227242 }
228243 cyw43_arch_poll ();
229- cyw43_arch_wait_for_work_until (make_timeout_time_ms (1000 ));
244+ cyw43_arch_wait_for_work_until (make_timeout_time_ms (10 ));
230245 }
231246}
0 commit comments