@@ -642,18 +642,35 @@ void common_hal_wifi_radio_gc_collect(wifi_radio_obj_t *self) {
642642
643643mp_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}
0 commit comments