Skip to content

Commit bc2e6b4

Browse files
committed
Finish turning dns into a tuple
to accomodate multiple servers some day
1 parent 85153da commit bc2e6b4

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

ports/espressif/common-hal/wifi/Radio.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -642,18 +642,35 @@ void common_hal_wifi_radio_gc_collect(wifi_radio_obj_t *self) {
642642

643643
mp_obj_t common_hal_wifi_radio_get_dns(wifi_radio_obj_t *self) {
644644
if (!esp_netif_is_netif_up(self->netif)) {
645-
return mp_const_none;
645+
return mp_const_empty_tuple;
646646
}
647647

648648
esp_netif_get_dns_info(self->netif, ESP_NETIF_DNS_MAIN, &self->dns_info);
649649

650-
return espaddr_to_str(&self->dns_info.ip);
650+
if (self->dns_info.ip.type == ESP_IPADDR_TYPE_V4 && self->dns_info.ip.u_addr.ip4.addr == INADDR_NONE) {
651+
return mp_const_empty_tuple;
652+
}
653+
654+
mp_obj_t args[] = {
655+
espaddr_to_str(&self->dns_info.ip),
656+
};
657+
658+
return mp_obj_new_tuple(1, args);
651659
}
652660

653-
void common_hal_wifi_radio_set_dns(wifi_radio_obj_t *self, mp_obj_t dns_addr_obj) {
654-
struct sockaddr_storage addr_storage;
655-
socketpool_resolve_host_or_throw(AF_UNSPEC, SOCK_STREAM, mp_obj_str_get_str(dns_addr_obj), &addr_storage, 1);
661+
void common_hal_wifi_radio_set_dns(wifi_radio_obj_t *self, mp_obj_t dns_addrs_obj) {
662+
mp_int_t len = mp_obj_get_int(mp_obj_len(dns_addrs_obj));
663+
mp_arg_validate_length_max(len, 1, MP_QSTR_dns);
656664
esp_netif_dns_info_t dns_info;
657-
sockaddr_to_espaddr(&addr_storage, &dns_info.ip);
665+
if (len == 0) {
666+
// clear DNS server
667+
dns_info.ip.type = ESP_IPADDR_TYPE_V4;
668+
dns_info.ip.u_addr.ip4.addr = INADDR_NONE;
669+
} else {
670+
mp_obj_t dns_addr_obj = mp_obj_subscr(dns_addrs_obj, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL);
671+
struct sockaddr_storage addr_storage;
672+
socketpool_resolve_host_or_throw(AF_UNSPEC, SOCK_STREAM, mp_obj_str_get_str(dns_addr_obj), &addr_storage, 1);
673+
sockaddr_to_espaddr(&addr_storage, &dns_info.ip);
674+
}
658675
esp_netif_set_dns_info(self->netif, ESP_NETIF_DNS_MAIN, &dns_info);
659676
}

ports/raspberrypi/common-hal/wifi/Radio.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,15 @@ mp_obj_t common_hal_wifi_radio_get_dns(wifi_radio_obj_t *self) {
555555
return mp_obj_new_tuple(MP_ARRAY_SIZE(args), args);
556556
}
557557

558-
void common_hal_wifi_radio_set_dns(wifi_radio_obj_t *self, mp_obj_t dns_addr) {
558+
void common_hal_wifi_radio_set_dns(wifi_radio_obj_t *self, mp_obj_t dns_addrs_obj) {
559+
mp_int_t len = mp_obj_get_int(mp_obj_len(dns_addrs_obj));
560+
mp_arg_validate_length_max(len, 1, MP_QSTR_dns);
559561
ip_addr_t addr;
560-
socketpool_resolve_host_raise(dns_addr, &addr);
562+
if (len == 0) {
563+
addr.addr = IPADDR_NONE;
564+
} else {
565+
mp_obj_t dns_addr_obj = mp_obj_subscr(dns_addrs_obj, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL);
566+
socketpool_resolve_host_raise(dns_addr_obj, &addr);
567+
}
561568
dns_setserver(0, &addr);
562569
}

shared-bindings/wifi/Radio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ MP_PROPERTY_GETSET(wifi_radio_ipv4_dns_obj,
661661
(mp_obj_t)&wifi_radio_get_ipv4_dns_obj,
662662
(mp_obj_t)&wifi_radio_set_ipv4_dns_obj);
663663

664-
//| dns: str
664+
//| dns: Sequence[str]
665665
//| """Address of the DNS server to be used."""
666666
static mp_obj_t wifi_radio_get_dns(mp_obj_t self) {
667667
return common_hal_wifi_radio_get_dns(self);

0 commit comments

Comments
 (0)