Skip to content

Commit 1597592

Browse files
committed
Pint: recvfrom: return IP address and port.
1 parent 4c7bc9e commit 1597592

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

micropython/modules/pint/pint.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,16 @@ mp_obj_t ip_to_tuple(byte *ip) {
171171
return mp_obj_new_tuple(4, _ip_tuple);
172172
}
173173

174+
void tuple_to_ip(mp_obj_t tuple_in, byte *ip) {
175+
if(mp_obj_is_exact_type(tuple_in, &mp_type_tuple)) {
176+
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR2(tuple_in, mp_obj_tuple_t);
177+
ip[0] = mp_obj_get_int(tuple->items[0]);
178+
ip[1] = mp_obj_get_int(tuple->items[1]);
179+
ip[2] = mp_obj_get_int(tuple->items[2]);
180+
ip[3] = mp_obj_get_int(tuple->items[3]);
181+
}
182+
}
183+
174184
int network_pint_socket_bind(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) {
175185
debug_printf("socket_bind(%d, %d)\n", socket->fileno, port);
176186

@@ -307,6 +317,14 @@ mp_uint_t network_pint_socket_recvfrom(mod_network_socket_obj_t *socket, byte *b
307317
mp_obj_t result = call_method(nic->socket_recvfrom, 4, (mp_obj_t)socket->_private, _buf, _ip, _port);
308318
if (result != mp_const_none) {
309319
*_errno = 0;
320+
if(mp_obj_is_exact_type(result, &mp_type_tuple)) {
321+
// Expect length, (0, 0, 0, 0), port
322+
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR2(result, mp_obj_tuple_t);
323+
tuple_to_ip(tuple->items[1], ip);
324+
*port = mp_obj_get_int(tuple->items[2]);
325+
return mp_obj_get_int(tuple->items[0]);
326+
}
327+
// Just a length
310328
return mp_obj_get_int(result);
311329
}
312330

0 commit comments

Comments
 (0)