RT-Thread-packages / at_device

AT component porting or samples for different devices
Apache License 2.0
215 stars 182 forks source link

[BUG反馈]ESP32-C3 AT+CIPDNS无法解析DNS地址 #183

Closed CharlesXSong closed 4 months ago

CharlesXSong commented 2 years ago

文件:at_device/class/esp32/at_device_esp32.c 行数:104~128:

    if (at_obj_exec_cmd(device->client, resp, "AT+CIPDNS?") < 0)
    {
        LOG_W("please check and update %s device firmware to support the \"AT+CIPDNS?\" cmd.", device->name);
        goto __exit;
    }

    if (at_resp_parse_line_args(resp, 1, resp_dns, dns_server1) <= 0 &&
            at_resp_parse_line_args(resp, 2, resp_dns, dns_server2) <= 0)
    {
        LOG_E("%s device prase \"AT+CIPDNS?\" cmd error.", device->name);
        goto __exit;
    }

    /* set primary DNS server address */
    if (rt_strlen(dns_server1) > 0 &&
            rt_strncmp(dns_server1, AT_ERR_DNS_SERVER, rt_strlen(AT_ERR_DNS_SERVER)) != 0)
    {
        inet_aton(dns_server1, &ip_addr);
        netdev_low_level_set_dns_server(netdev, 0, &ip_addr);
    }
    else
    {
        inet_aton(AT_DEF_DNS_SERVER, &ip_addr);
        esp32_netdev_set_dns_server(netdev, 0, &ip_addr);
    }

现象:执行AT+CIPDNS指令后,响应:

+CIPDNS:<enable>[,<"DNS IP1">][,<"DNS IP2">][,<"DNS IP3">]
OK

该响应是逗号分隔的格式,无法通过函数at_resp_parse_line_args里的vsscanf得到DNS地址,而是得到dns_server1[AT_ADDR_LEN] = 0,"192.168.1.1","8.8.8.8"这样的字符串。 接下来执行inet_aton(dns_server1, &ip_addr);时,无法正确转换DNS格式,导致此处的ip_addr为前一次的值。

yangpengya commented 9 months ago

203