@@ -274,79 +274,63 @@ STATIC mp_obj_t socketpool_socket_recv_into(size_t n_args, const mp_obj_t *args)
274
274
}
275
275
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (socketpool_socket_recv_into_obj , 2 , 3 , socketpool_socket_recv_into );
276
276
277
- // //| def sendto(self, bytes: ReadableBuffer, address: tuple) -> int:
278
- // //| """Send some bytes to a specific address.
279
- // //| Suits sockets of type SOCK_DGRAM
280
- // //|
281
- // //| :param ~bytes bytes: some bytes to send
282
- // //| :param ~tuple address: tuple of (remote_address, remote_port)"""
283
- // //| ...
284
- // //|
285
-
286
- // STATIC mp_obj_t socketpool_socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_in) {
287
- // // mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
277
+ //| def sendto(self, bytes: ReadableBuffer, address: tuple) -> int:
278
+ //| """Send some bytes to a specific address.
279
+ //| Suits sockets of type SOCK_DGRAM
280
+ //|
281
+ //| :param ~bytes bytes: some bytes to send
282
+ //| :param ~tuple address: tuple of (remote_address, remote_port)"""
283
+ //| ...
284
+ //|
288
285
289
- // // // get the data
290
- // // mp_buffer_info_t bufinfo;
291
- // // mp_get_buffer_raise(data_in, &bufinfo, MP_BUFFER_READ);
286
+ STATIC mp_obj_t socketpool_socket_sendto (mp_obj_t self_in , mp_obj_t data_in , mp_obj_t addr_in ) {
287
+ socketpool_socket_obj_t * self = MP_OBJ_TO_PTR (self_in );
292
288
293
- // // // get address
294
- // // uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE] ;
295
- // // mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG );
289
+ // get the data
290
+ mp_buffer_info_t bufinfo ;
291
+ mp_get_buffer_raise ( data_in , & bufinfo , MP_BUFFER_READ );
296
292
297
- // // // check if we need to select a NIC
298
- // // socket_select_nic(self, ip );
293
+ mp_obj_t * addr_items ;
294
+ mp_obj_get_array_fixed_n ( addr_in , 2 , & addr_items );
299
295
300
- // // // call the NIC to sendto
301
- // // int _errno;
302
- // // mp_int_t ret = self->nic_type->sendto(self, bufinfo.buf, bufinfo.len, ip, port, &_errno);
303
- // // if (ret == -1) {
304
- // // mp_raise_OSError(_errno);
305
- // // }
306
- // mp_int_t ret = 0;
296
+ size_t hostlen ;
297
+ const char * host = mp_obj_str_get_data (addr_items [0 ], & hostlen );
298
+ mp_int_t port = mp_obj_get_int (addr_items [1 ]);
307
299
308
- // return mp_obj_new_int(ret);
309
- // }
310
- // STATIC MP_DEFINE_CONST_FUN_OBJ_3(socketpool_socket_sendto_obj, socketpool_socket_sendto);
300
+ mp_int_t ret = common_hal_socketpool_socket_sendto (self , host , hostlen , port , bufinfo .buf , bufinfo .len );
301
+ if (!ok ) {
302
+ mp_raise_OSError (0 );
303
+ }
311
304
312
- // //| def recvfrom(self, bufsize: int) -> Tuple[bytes, tuple]:
313
- // //| """Reads some bytes from the connected remote address.
314
- // //| Suits sockets of type SOCK_STREAM
315
- // //|
316
- // //| Returns a tuple containing
317
- // //| * a bytes() of length <= bufsize
318
- // //| * a remote_address, which is a tuple of ip address and port number
319
- // //|
320
- // //| :param ~int bufsize: maximum number of bytes to receive"""
321
- // //| ...
322
- // //|
305
+ return mp_obj_new_int_from_uint (ret );
306
+ }
307
+ STATIC MP_DEFINE_CONST_FUN_OBJ_3 (socketpool_socket_sendto_obj , socketpool_socket_sendto );
323
308
324
- // STATIC mp_obj_t socketpool_socket_recvfrom_into(mp_obj_t self_in, mp_obj_t len_in) {
325
- // // mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
326
- // // if (self->nic == MP_OBJ_NULL) {
327
- // // // not connected
328
- // // mp_raise_OSError(MP_ENOTCONN);
329
- // // }
330
- // // vstr_t vstr;
331
- // // vstr_init_len(&vstr, mp_obj_get_int(len_in));
332
- // // byte ip[4];
333
- // // mp_uint_t port;
334
- // // int _errno;
335
- // // mp_int_t ret = self->nic_type->recvfrom(self, (byte*)vstr.buf, vstr.len, ip, &port, &_errno);
336
- // // if (ret == -1) {
337
- // // mp_raise_OSError(_errno);
338
- // // }
339
- // mp_obj_t tuple[2];
340
- // // if (ret == 0) {
341
- // // tuple[0] = mp_const_empty_bytes;
342
- // // } else {
343
- // // vstr.len = ret;
344
- // // tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
345
- // // }
346
- // // tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
347
- // return mp_obj_new_tuple(2, tuple);
348
- // }
349
- // STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_recvfrom_into_obj, socketpool_socket_recvfrom_into);
309
+ //| def recvfrom_into(self, buffer) -> Tuple[int, tuple]:
310
+ //| """Reads some bytes from a remote address.
311
+ //|
312
+ //| Returns a tuple containing
313
+ //| * the number of bytes received into the given buffer
314
+ //| * a remote_address, which is a tuple of ip address and port number
315
+ //|
316
+ //| :param object buffer: buffer to read into"""
317
+ //| ...
318
+ //|
319
+ STATIC mp_obj_t socketpool_socket_recvfrom_into (mp_obj_t self_in , mp_obj_t data_in ) {
320
+ socketpool_socket_obj_t * self = MP_OBJ_TO_PTR (self_in );
321
+ mp_buffer_info_t bufinfo ;
322
+ mp_get_buffer_raise (data_in , & bufinfo , MP_BUFFER_WRITE );
323
+
324
+ byte ip [4 ];
325
+ mp_uint_t port ;
326
+ mp_int_t ret = common_hal_socketpool_socket_recvfrom_into (self ,
327
+ (byte * )bufinfo .buf , len , ip , & port );
328
+ mp_obj_t tuple_contents [2 ];
329
+ tuple_contents [0 ] = mp_obj_new_int_from_uint (ret );
330
+ tuple_contents [1 ] = netutils_format_inet_addr (ip , port , NETUTILS_BIG );
331
+ return mp_obj_new_tuple (2 , tuple );
332
+ }
333
+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (socketpool_socket_recvfrom_into_obj , socketpool_socket_recvfrom_into );
350
334
351
335
// //| def setsockopt(self, level: int, optname: int, value: int) -> None:
352
336
// //| """Sets socket options"""
@@ -449,8 +433,8 @@ STATIC const mp_rom_map_elem_t socketpool_socket_locals_dict_table[] = {
449
433
// { MP_ROM_QSTR(MP_QSTR_accept), MP_ROM_PTR(&socketpool_socket_accept_obj) },
450
434
{ MP_ROM_QSTR (MP_QSTR_connect ), MP_ROM_PTR (& socketpool_socket_connect_obj ) },
451
435
{ MP_ROM_QSTR (MP_QSTR_send ), MP_ROM_PTR (& socketpool_socket_send_obj ) },
452
- // { MP_ROM_QSTR(MP_QSTR_sendto), MP_ROM_PTR(&socketpool_socket_sendto_obj) },
453
- // { MP_ROM_QSTR(MP_QSTR_recvfrom_into), MP_ROM_PTR(&socketpool_socket_recvfrom_into_obj) },
436
+ { MP_ROM_QSTR (MP_QSTR_sendto ), MP_ROM_PTR (& socketpool_socket_sendto_obj ) },
437
+ { MP_ROM_QSTR (MP_QSTR_recvfrom_into ), MP_ROM_PTR (& socketpool_socket_recvfrom_into_obj ) },
454
438
{ MP_ROM_QSTR (MP_QSTR_recv_into ), MP_ROM_PTR (& socketpool_socket_recv_into_obj ) },
455
439
// { MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&socketpool_socket_setsockopt_obj) },
456
440
{ MP_ROM_QSTR (MP_QSTR_settimeout ), MP_ROM_PTR (& socketpool_socket_settimeout_obj ) },
0 commit comments