dns: fixed assertion when dns server address is set to ANY (patch #8692)

This commit is contained in:
sg 2015-08-18 21:30:46 +02:00
parent 877fcb35f4
commit 21815a1427

View File

@ -114,7 +114,7 @@ static u16_t dns_txid;
/** DNS server IP address */
#ifndef DNS_SERVER_ADDRESS
#if LWIP_IPV4
#define DNS_SERVER_ADDRESS(ipaddr) ip_addr_set_ip4_u32(ipaddr, ipaddr_addr("208.67.222.222")) /* resolver1.opendns.com */
#define DNS_SERVER_ADDRESS(ipaddr) ip_addr_set_ip4_u32(ipaddr, 0)//ipaddr_addr("208.67.222.222")) /* resolver1.opendns.com */
#else
#define DNS_SERVER_ADDRESS(ipaddr) ipaddr_aton("2001:4860:4860::8888", ipaddr)
#endif
@ -283,6 +283,7 @@ static void dns_init_local(void);
/* forward declarations */
static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
static void dns_check_entries(void);
static void dns_call_found(u8_t idx, ip_addr_t* addr);
/*-----------------------------------------------------------------------------
* Globals
@ -673,11 +674,11 @@ dns_parse_name(struct pbuf* p, u16_t query_idx)
/**
* Send a DNS query packet.
*
* @param entry the DNS table entry for which to send a request
* @param idx the DNS table entry index for which to send a request
* @return ERR_OK if packet is sent; an err_t indicating the problem otherwise
*/
static err_t
dns_send(struct dns_table_entry* entry)
dns_send(u8_t idx)
{
err_t err;
struct dns_hdr hdr;
@ -687,11 +688,19 @@ dns_send(struct dns_table_entry* entry)
const char *hostname, *hostname_part;
u8_t n;
u8_t pcb_idx;
struct dns_table_entry* entry = &dns_table[idx];
LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n",
(u16_t)(entry->server_idx), entry->name));
LWIP_ASSERT("dns server out of array", entry->server_idx < DNS_MAX_SERVERS);
LWIP_ASSERT("dns server has no IP address set", !ip_addr_isany(&dns_servers[entry->server_idx]));
if (ip_addr_isany(&dns_servers[entry->server_idx])) {
/* DNS server not valid anymore, e.g. PPP netif has been shut down */
/* call specified callback function if provided */
dns_call_found(idx, NULL);
/* flush this entry */
entry->state = DNS_STATE_UNUSED;
return ERR_OK;
}
/* if here, we have either a new query or a retry on a previous query to process */
p = pbuf_alloc(PBUF_TRANSPORT, (u16_t)(SIZEOF_DNS_HDR + strlen(entry->name) + 2 +
@ -835,7 +844,7 @@ dns_call_found(u8_t idx, ip_addr_t* addr)
if (dns_requests[i].found && (dns_requests[i].dns_table_idx == idx)) {
(*dns_requests[i].found)(dns_table[idx].name, addr, dns_requests[i].arg);
/* flush this entry */
dns_requests[i].found = NULL;
dns_requests[i].found = NULL;
}
}
#else
@ -919,7 +928,7 @@ dns_check_entry(u8_t i)
entry->retries = 0;
/* send DNS packet for this entry */
err = dns_send(entry);
err = dns_send(i);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING,
("dns_send returned error: %s\n", lwip_strerr(err)));
@ -950,7 +959,7 @@ dns_check_entry(u8_t i)
entry->tmr = entry->retries;
/* send DNS packet for this entry */
err = dns_send(entry);
err = dns_send(i);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING,
("dns_send returned error: %s\n", lwip_strerr(err)));