summaryrefslogtreecommitdiff
path: root/pjlib-util/src/pjlib-util/dns.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjlib-util/src/pjlib-util/dns.c')
-rw-r--r--pjlib-util/src/pjlib-util/dns.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/pjlib-util/src/pjlib-util/dns.c b/pjlib-util/src/pjlib-util/dns.c
index 71bad5b6..a3c3217b 100644
--- a/pjlib-util/src/pjlib-util/dns.c
+++ b/pjlib-util/src/pjlib-util/dns.c
@@ -340,11 +340,7 @@ static pj_status_t parse_rr(pj_dns_parsed_rr *rr, pj_pool_t *pool,
/* Parse some well known records */
if (rr->type == PJ_DNS_TYPE_A) {
- pj_in_addr ip_addr;
-
- pj_memcpy(&ip_addr, p, 4);
- pj_strdup2(pool, &rr->rdata.a.ip_addr, pj_inet_ntoa(ip_addr));
-
+ pj_memcpy(&rr->rdata.a.ip_addr, p, 4);
p += 4;
} else if (rr->type == PJ_DNS_TYPE_CNAME ||
@@ -587,7 +583,7 @@ static void copy_rr(pj_pool_t *pool, pj_dns_parsed_rr *dst,
apply_name_table(nametable_count, nametable, &src->rdata.srv.target,
pool, &dst->rdata.srv.target);
} else if (src->type == PJ_DNS_TYPE_A) {
- pj_strdup(pool, &dst->rdata.a.ip_addr, &src->rdata.a.ip_addr);
+ dst->rdata.a.ip_addr.s_addr = src->rdata.a.ip_addr.s_addr;
} else if (src->type == PJ_DNS_TYPE_CNAME) {
pj_strdup(pool, &dst->rdata.cname.name, &src->rdata.cname.name);
} else if (src->type == PJ_DNS_TYPE_NS) {
@@ -602,6 +598,7 @@ static void copy_rr(pj_pool_t *pool, pj_dns_parsed_rr *dst,
*/
PJ_DEF(void) pj_dns_packet_dup(pj_pool_t *pool,
const pj_dns_parsed_packet*p,
+ unsigned options,
pj_dns_parsed_packet **p_dst)
{
pj_dns_parsed_packet *dst;
@@ -630,7 +627,7 @@ PJ_DEF(void) pj_dns_packet_dup(pj_pool_t *pool,
/* Copy query section */
- if (p->hdr.qdcount) {
+ if (p->hdr.qdcount && (options & PJ_DNS_NO_QD)==0) {
dst->q = pj_pool_alloc(pool, p->hdr.qdcount *
sizeof(pj_dns_parsed_query));
for (i=0; i<p->hdr.qdcount; ++i) {
@@ -641,7 +638,7 @@ PJ_DEF(void) pj_dns_packet_dup(pj_pool_t *pool,
}
/* Copy answer section */
- if (p->hdr.anscount) {
+ if (p->hdr.anscount && (options & PJ_DNS_NO_ANS)==0) {
dst->ans = pj_pool_alloc(pool, p->hdr.anscount *
sizeof(pj_dns_parsed_rr));
for (i=0; i<p->hdr.anscount; ++i) {
@@ -652,7 +649,7 @@ PJ_DEF(void) pj_dns_packet_dup(pj_pool_t *pool,
}
/* Copy NS section */
- if (p->hdr.nscount) {
+ if (p->hdr.nscount && (options & PJ_DNS_NO_NS)==0) {
dst->ns = pj_pool_alloc(pool, p->hdr.nscount *
sizeof(pj_dns_parsed_rr));
for (i=0; i<p->hdr.nscount; ++i) {
@@ -663,7 +660,7 @@ PJ_DEF(void) pj_dns_packet_dup(pj_pool_t *pool,
}
/* Copy additional info section */
- if (p->hdr.arcount) {
+ if (p->hdr.arcount && (options & PJ_DNS_NO_AR)==0) {
dst->arr = pj_pool_alloc(pool, p->hdr.arcount *
sizeof(pj_dns_parsed_rr));
for (i=0; i<p->hdr.arcount; ++i) {