chiark
/
gitweb
/
~mdw
/
adns
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Reorganise types.c
[adns]
/
src
/
reply.c
diff --git
a/src/reply.c
b/src/reply.c
index c0772b9aa509ecb44e3bd2964490160f51d939a2..ceeaceeeb4d7390523c9b734ae46946515fc3d7f 100644
(file)
--- a/
src/reply.c
+++ b/
src/reply.c
@@
-39,6
+39,7
@@
void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
adns_status st;
vbuf tempvb;
byte *newquery, *rrsdata;
adns_status st;
vbuf tempvb;
byte *newquery, *rrsdata;
+ parseinfo pai;
if (dglen<DNS_HDRSIZE) {
adns__diag(ads,serv,0,"received datagram too short for message header (%d)",dglen);
if (dglen<DNS_HDRSIZE) {
adns__diag(ads,serv,0,"received datagram too short for message header (%d)",dglen);
@@
-258,9
+259,17
@@
void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
typei= qu->typei;
cbyte= anstart;
rrsdata= qu->answer->rrs.bytes;
typei= qu->typei;
cbyte= anstart;
rrsdata= qu->answer->rrs.bytes;
-
- nrrs= 0;
- for (rri=0; rri<ancount; rri++) {
+
+ pai.ads= qu->ads;
+ pai.qu= qu;
+ pai.serv= serv;
+ pai.dgram= dgram;
+ pai.dglen= dglen;
+ pai.nsstart= nsstart;
+ pai.nscount= nscount;
+ pai.arcount= arcount;
+
+ for (rri=0, nrrs=0; rri<ancount; rri++) {
st= adns__findrr(qu,serv, dgram,dglen,&cbyte,
&rrtype,&rrclass,&rdlength,&rdstart,
&ownermatched);
st= adns__findrr(qu,serv, dgram,dglen,&cbyte,
&rrtype,&rrclass,&rdlength,&rdstart,
&ownermatched);
@@
-269,8
+278,7
@@
void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
rrtype != (qu->typei->type & adns__rrt_typemask) ||
!ownermatched)
continue;
rrtype != (qu->typei->type & adns__rrt_typemask) ||
!ownermatched)
continue;
- st= typei->parse(qu,serv, dgram,dglen, rdstart,rdstart+rdlength,
- nsstart,&arstart, rrsdata+nrrs*typei->rrsz);
+ st= typei->parse(&pai, rdstart,rdstart+rdlength, rrsdata+nrrs*typei->rrsz);
if (st) { adns__query_fail(qu,st); return; }
if (rdstart==-1) goto x_truncated;
nrrs++;
if (st) { adns__query_fail(qu,st); return; }
if (rdstart==-1) goto x_truncated;
nrrs++;