@@ -106,6 +106,10 @@ STATIC NORETURN void mbedtls_raise_error(int err) {
106106 #endif
107107}
108108
109+ // Because ssl_socket_send and ssl_socket_recv_into are callbacks from mbedtls code,
110+ // it is not OK to exit them by raising an exception (nlr_jump'ing through
111+ // foreign code is not permitted). Instead, preserve the error number of any OSError
112+ // and turn anything else into -MP_EINVAL.
109113STATIC int call_method_errno (size_t n_args , const mp_obj_t * args ) {
110114 nlr_buf_t nlr ;
111115 mp_int_t result = - MP_EINVAL ;
@@ -140,28 +144,28 @@ static int ssl_socket_recv_into(ssl_sslsocket_obj_t *self, byte *buf, size_t len
140144 return call_method_errno (1 , self -> recv_into_args );
141145}
142146
143- static int ssl_socket_connect (ssl_sslsocket_obj_t * self , mp_obj_t addr_in ) {
147+ static void ssl_socket_connect (ssl_sslsocket_obj_t * self , mp_obj_t addr_in ) {
144148 self -> connect_args [2 ] = addr_in ;
145- return call_method_errno ( 1 , self -> connect_args );
149+ mp_call_method_n_kw ( 1 , 0 , self -> connect_args );
146150}
147151
148- static int ssl_socket_bind (ssl_sslsocket_obj_t * self , mp_obj_t addr_in ) {
152+ static void ssl_socket_bind (ssl_sslsocket_obj_t * self , mp_obj_t addr_in ) {
149153 self -> bind_args [2 ] = addr_in ;
150- return call_method_errno ( 1 , self -> bind_args );
154+ mp_call_method_n_kw ( 1 , 0 , self -> bind_args );
151155}
152156
153- static int ssl_socket_close (ssl_sslsocket_obj_t * self ) {
154- return call_method_errno ( 0 , self -> close_args );
157+ static void ssl_socket_close (ssl_sslsocket_obj_t * self ) {
158+ mp_call_method_n_kw ( 0 , 0 , self -> close_args );
155159}
156160
157161static void ssl_socket_settimeout (ssl_sslsocket_obj_t * self , mp_obj_t timeout_obj ) {
158162 self -> settimeout_args [2 ] = timeout_obj ;
159- return mp_call_method_n_kw (1 , 0 , self -> settimeout_args );
163+ mp_call_method_n_kw (1 , 0 , self -> settimeout_args );
160164}
161165
162- static int ssl_socket_listen (ssl_sslsocket_obj_t * self , mp_int_t backlog ) {
166+ static void ssl_socket_listen (ssl_sslsocket_obj_t * self , mp_int_t backlog ) {
163167 self -> listen_args [2 ] = MP_OBJ_NEW_SMALL_INT (backlog );
164- return call_method_errno ( 1 , self -> listen_args );
168+ mp_call_method_n_kw ( 1 , 0 , self -> listen_args );
165169}
166170
167171static mp_obj_t ssl_socket_accept (ssl_sslsocket_obj_t * self ) {
@@ -179,13 +183,10 @@ STATIC int _mbedtls_ssl_send(void *ctx, const byte *buf, size_t len) {
179183 if (mp_is_nonblocking_error (err )) {
180184 return MBEDTLS_ERR_SSL_WANT_WRITE ;
181185 }
182- return - err ; // convert an MP_ERRNO to something mbedtls passes through as error
183- } else {
184- return out_sz ;
185186 }
187+ return out_sz ;
186188}
187189
188- // _mbedtls_ssl_recv is called by mbedtls to receive bytes from the underlying socket
189190STATIC int _mbedtls_ssl_recv (void * ctx , byte * buf , size_t len ) {
190191 ssl_sslsocket_obj_t * self = (ssl_sslsocket_obj_t * )ctx ;
191192
@@ -196,10 +197,8 @@ STATIC int _mbedtls_ssl_recv(void *ctx, byte *buf, size_t len) {
196197 if (mp_is_nonblocking_error (err )) {
197198 return MBEDTLS_ERR_SSL_WANT_READ ;
198199 }
199- return - err ;
200- } else {
201- return out_sz ;
202200 }
201+ return out_sz ;
203202}
204203
205204
@@ -361,8 +360,8 @@ mp_uint_t common_hal_ssl_sslsocket_send(ssl_sslsocket_obj_t *self, const uint8_t
361360 mbedtls_raise_error (ret );
362361}
363362
364- size_t common_hal_ssl_sslsocket_bind (ssl_sslsocket_obj_t * self , mp_obj_t addr_in ) {
365- return ssl_socket_bind (self , addr_in );
363+ void common_hal_ssl_sslsocket_bind (ssl_sslsocket_obj_t * self , mp_obj_t addr_in ) {
364+ ssl_socket_bind (self , addr_in );
366365}
367366
368367void common_hal_ssl_sslsocket_close (ssl_sslsocket_obj_t * self ) {
@@ -426,7 +425,7 @@ bool common_hal_ssl_sslsocket_get_connected(ssl_sslsocket_obj_t *self) {
426425 return !self -> closed ;
427426}
428427
429- bool common_hal_ssl_sslsocket_listen (ssl_sslsocket_obj_t * self , int backlog ) {
428+ void common_hal_ssl_sslsocket_listen (ssl_sslsocket_obj_t * self , int backlog ) {
430429 return ssl_socket_listen (self , backlog );
431430}
432431
0 commit comments