summaryrefslogtreecommitdiff
path: root/pjlib-util
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2010-10-14 10:56:02 +0000
committerBenny Prijono <bennylp@teluu.com>2010-10-14 10:56:02 +0000
commit2b502fb1a99fd8c73075594a2b40a05263f7b3ce (patch)
tree60ca46ade1ea5c871499d5d768b259fc0216d402 /pjlib-util
parent1263f0530a87646c17f73924481a010032a1d0a6 (diff)
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
Diffstat (limited to 'pjlib-util')
-rw-r--r--pjlib-util/src/pjlib-util/resolver.c29
1 files changed, 18 insertions, 11 deletions
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)