Closed CharlesXSong closed 4 months 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为前一次的值。
at_resp_parse_line_args
vsscanf
0,"192.168.1.1","8.8.8.8"
inet_aton(dns_server1, &ip_addr);
ip_addr
文件:at_device/class/esp32/at_device_esp32.c 行数:104~128:
现象:执行AT+CIPDNS指令后,响应:
该响应是逗号分隔的格式,无法通过函数
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
为前一次的值。