move SOA processing into an action
This commit is contained in:
parent
8fbc137223
commit
b88d6ca34a
2 changed files with 17 additions and 8 deletions
|
|
@ -79,13 +79,7 @@ void set_rdata(struct dns_rr rr, HCountedArray *rdata) {
|
|||
rr.cname = *(dns_domain_t *)p->ast->user;
|
||||
break;
|
||||
case 6: // SOA
|
||||
rr.soa.mname = *H_FIELD(dns_domain_t, 0);
|
||||
rr.soa.rname = *H_FIELD(dns_domain_t, 1);
|
||||
rr.soa.serial = p->ast->seq->elements[2]->uint;
|
||||
rr.soa.refresh = p->ast->seq->elements[3]->uint;
|
||||
rr.soa.retry = p->ast->seq->elements[4]->uint;
|
||||
rr.soa.expire = p->ast->seq->elements[5]->uint;
|
||||
rr.soa.minimum = p->ast->seq->elements[6]->uint;
|
||||
rr.soa = *(dns_rr_soa_t *)p->ast->user;
|
||||
break;
|
||||
case 7: // MB
|
||||
rr.mb = *(dns_domain_t *)p->ast->user;
|
||||
|
|
@ -100,6 +94,7 @@ void set_rdata(struct dns_rr rr, HCountedArray *rdata) {
|
|||
rr.null = h_arena_malloc(rdata->arena, sizeof(uint8_t)*p->ast->seq->used);
|
||||
for (size_t i=0; i<p->ast->seq->used; ++i)
|
||||
rr.null[i] = p->ast->seq->elements[i]->uint;
|
||||
// XXX Where is the length stored!?
|
||||
break;
|
||||
case 11: // WKS
|
||||
rr.wks.address = p->ast->seq->elements[0]->uint;
|
||||
|
|
|
|||
|
|
@ -43,6 +43,20 @@ const HParsedToken* act_cstr(const HParseResult *p) {
|
|||
return H_MAKE_TOKEN(dns_cstr_t, cs);
|
||||
}
|
||||
|
||||
const HParsedToken* act_soa(const HParseResult *p) {
|
||||
dns_rr_soa_t *soa = H_MAKE(dns_rr_soa_t);
|
||||
|
||||
soa->mname = *H_FIELD(dns_domain_t, 0);
|
||||
soa->rname = *H_FIELD(dns_domain_t, 1);
|
||||
soa->serial = p->ast->seq->elements[2]->uint;
|
||||
soa->refresh = p->ast->seq->elements[3]->uint;
|
||||
soa->retry = p->ast->seq->elements[4]->uint;
|
||||
soa->expire = p->ast->seq->elements[5]->uint;
|
||||
soa->minimum = p->ast->seq->elements[6]->uint;
|
||||
|
||||
return H_MAKE_TOKEN(dns_rr_soa_t, soa);
|
||||
}
|
||||
|
||||
#define RDATA_TYPE_MAX 16
|
||||
const HParser* init_rdata(uint16_t type) {
|
||||
static const HParser *parsers[RDATA_TYPE_MAX+1];
|
||||
|
|
@ -63,7 +77,7 @@ const HParser* init_rdata(uint16_t type) {
|
|||
H_RULE (md, domain);
|
||||
H_RULE (mf, domain);
|
||||
H_RULE (cname, domain);
|
||||
H_RULE (soa, h_sequence(domain, // MNAME
|
||||
H_ARULE(soa, h_sequence(domain, // MNAME
|
||||
domain, // RNAME
|
||||
h_uint32(), // SERIAL
|
||||
h_uint32(), // REFRESH
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue