From 2b502fb1a99fd8c73075594a2b40a05263f7b3ce Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Thu, 14 Oct 2010 10:56:02 +0000 Subject: Misc (re #1134): fixed failed unit tests due to changes in DNS resolver code in r3344 git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3346 74dad513-b988-da41-8d7b-12977e46ad98 --- pjlib-util/src/pjlib-util/resolver.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'pjlib-util') diff --git a/pjlib-util/src/pjlib-util/resolver.c b/pjlib-util/src/pjlib-util/resolver.c index 00308619..1143143c 100644 --- a/pjlib-util/src/pjlib-util/resolver.c +++ b/pjlib-util/src/pjlib-util/resolver.c @@ -842,7 +842,7 @@ PJ_DEF(pj_status_t) pj_dns_parse_a_response(const pj_dns_parsed_packet *pkt, pj_dns_a_record *rec) { enum { MAX_SEARCH = 20 }; - pj_str_t hostname, alias = {NULL, 0}; + pj_str_t hostname, alias = {NULL, 0}, *resname; unsigned bufstart = 0; unsigned bufleft = sizeof(rec->buf_); unsigned i, ansidx, search_cnt=0; @@ -888,23 +888,25 @@ PJ_DEF(pj_status_t) pj_dns_parse_a_response(const pj_dns_parsed_packet *pkt, if (ansidx == pkt->hdr.anscount) return PJLIB_UTIL_EDNSNOANSWERREC; + resname = &hostname; + /* Keep following CNAME records. */ while (pkt->ans[ansidx].type == PJ_DNS_TYPE_CNAME && search_cnt++ < MAX_SEARCH) { + resname = &pkt->ans[ansidx].rdata.cname.name; + if (!alias.slen) - alias = pkt->ans[ansidx].rdata.cname.name; + alias = *resname; - for (i=ansidx+1; i < pkt->hdr.anscount; ++i) { - if (pj_stricmp(&pkt->ans[ansidx].rdata.cname.name, - &pkt->ans[i].name)==0) - { + for (i=0; i < pkt->hdr.anscount; ++i) { + if (pj_stricmp(resname, &pkt->ans[i].name)==0) { break; } } if (i==pkt->hdr.anscount) - return PJLIB_UTIL_EDNSINANSWER; + return PJLIB_UTIL_EDNSNOANSWERREC; ansidx = i; } @@ -928,10 +930,15 @@ PJ_DEF(pj_status_t) pj_dns_parse_a_response(const pj_dns_parsed_packet *pkt, bufleft -= alias.slen; } - /* Retrieve the IP address. */ - if (rec->addr_count < PJ_DNS_MAX_IP_IN_A_REC) { - rec->addr[rec->addr_count++].s_addr = - pkt->ans[i].rdata.a.ip_addr.s_addr; + /* Get the IP addresses. */ + for (i=0; i < pkt->hdr.anscount; ++i) { + if (pkt->ans[i].type == PJ_DNS_TYPE_A && + pj_stricmp(&pkt->ans[i].name, resname)==0 && + rec->addr_count < PJ_DNS_MAX_IP_IN_A_REC) + { + rec->addr[rec->addr_count++].s_addr = + pkt->ans[i].rdata.a.ip_addr.s_addr; + } } if (rec->addr_count == 0) -- cgit v1.2.3