aboutsummaryrefslogtreecommitdiff
path: root/extmod/modusocket.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2022-01-21 12:44:49 +1100
committerDamien George <damien@micropython.org>2022-01-21 13:40:06 +1100
commit9438fb7321f1f0fb9faae666808e86d7f47b8619 (patch)
treed57714acd9b339e9d58c921cf54c78424bf81bf0 /extmod/modusocket.c
parent1aac151d6894cf892c0ff7bb38e5589580d6c080 (diff)
extmod/modusocket: Support additional args to getaddrinfo.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'extmod/modusocket.c')
-rw-r--r--extmod/modusocket.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/extmod/modusocket.c b/extmod/modusocket.c
index 10c818bf5..b6bab72e7 100644
--- a/extmod/modusocket.c
+++ b/extmod/modusocket.c
@@ -472,18 +472,41 @@ STATIC const mp_obj_type_t socket_type = {
// usocket module
// function usocket.getaddrinfo(host, port)
-STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
+STATIC mp_obj_t mod_usocket_getaddrinfo(size_t n_args, const mp_obj_t *args) {
size_t hlen;
- const char *host = mp_obj_str_get_data(host_in, &hlen);
- mp_int_t port = mp_obj_get_int(port_in);
+ const char *host = mp_obj_str_get_data(args[0], &hlen);
+ mp_int_t port = mp_obj_get_int(args[1]);
uint8_t out_ip[MOD_NETWORK_IPADDR_BUF_SIZE];
bool have_ip = false;
+ // if constraints were passed then check they are compatible with the supported params
+ if (n_args > 2) {
+ mp_int_t family = mp_obj_get_int(args[2]);
+ mp_int_t type = 0;
+ mp_int_t proto = 0;
+ mp_int_t flags = 0;
+ if (n_args > 3) {
+ type = mp_obj_get_int(args[3]);
+ if (n_args > 4) {
+ proto = mp_obj_get_int(args[4]);
+ if (n_args > 5) {
+ flags = mp_obj_get_int(args[5]);
+ }
+ }
+ }
+ if (!((family == 0 || family == MOD_NETWORK_AF_INET)
+ && (type == 0 || type == MOD_NETWORK_SOCK_STREAM)
+ && proto == 0
+ && flags == 0)) {
+ mp_warning(MP_WARN_CAT(RuntimeWarning), "unsupported getaddrinfo constraints");
+ }
+ }
+
if (hlen > 0) {
// check if host is already in IP form
nlr_buf_t nlr;
if (nlr_push(&nlr) == 0) {
- netutils_parse_ipv4_addr(host_in, out_ip, NETUTILS_BIG);
+ netutils_parse_ipv4_addr(args[0], out_ip, NETUTILS_BIG);
have_ip = true;
nlr_pop();
} else {
@@ -519,7 +542,7 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_BIG);
return mp_obj_new_list(1, (mp_obj_t *)&tuple);
}
-STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_usocket_getaddrinfo_obj, mod_usocket_getaddrinfo);
+STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_usocket_getaddrinfo_obj, 2, 6, mod_usocket_getaddrinfo);
STATIC const mp_rom_map_elem_t mp_module_usocket_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },