@@ -642,18 +642,35 @@ void common_hal_wifi_radio_gc_collect(wifi_radio_obj_t *self) {
642
642
643
643
mp_obj_t common_hal_wifi_radio_get_dns (wifi_radio_obj_t * self ) {
644
644
if (!esp_netif_is_netif_up (self -> netif )) {
645
- return mp_const_none ;
645
+ return mp_const_empty_tuple ;
646
646
}
647
647
648
648
esp_netif_get_dns_info (self -> netif , ESP_NETIF_DNS_MAIN , & self -> dns_info );
649
649
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 );
651
659
}
652
660
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 );
656
664
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
+ }
658
675
esp_netif_set_dns_info (self -> netif , ESP_NETIF_DNS_MAIN , & dns_info );
659
676
}
0 commit comments