extmod/modusocket: Support additional args to getaddrinfo.
Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
1aac151d68
commit
9438fb7321
|
@ -472,18 +472,41 @@ STATIC const mp_obj_type_t socket_type = {
|
||||||
// usocket module
|
// usocket module
|
||||||
|
|
||||||
// function usocket.getaddrinfo(host, port)
|
// 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;
|
size_t hlen;
|
||||||
const char *host = mp_obj_str_get_data(host_in, &hlen);
|
const char *host = mp_obj_str_get_data(args[0], &hlen);
|
||||||
mp_int_t port = mp_obj_get_int(port_in);
|
mp_int_t port = mp_obj_get_int(args[1]);
|
||||||
uint8_t out_ip[MOD_NETWORK_IPADDR_BUF_SIZE];
|
uint8_t out_ip[MOD_NETWORK_IPADDR_BUF_SIZE];
|
||||||
bool have_ip = false;
|
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) {
|
if (hlen > 0) {
|
||||||
// check if host is already in IP form
|
// check if host is already in IP form
|
||||||
nlr_buf_t nlr;
|
nlr_buf_t nlr;
|
||||||
if (nlr_push(&nlr) == 0) {
|
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;
|
have_ip = true;
|
||||||
nlr_pop();
|
nlr_pop();
|
||||||
} else {
|
} 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);
|
tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_BIG);
|
||||||
return mp_obj_new_list(1, (mp_obj_t *)&tuple);
|
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[] = {
|
STATIC const mp_rom_map_elem_t mp_module_usocket_globals_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },
|
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },
|
||||||
|
|
Loading…
Reference in New Issue