move SOA processing into an action

This commit is contained in:
Sven M. Hallberg 2013-01-17 21:35:33 +01:00
parent 8fbc137223
commit b88d6ca34a
2 changed files with 17 additions and 8 deletions

View file

@ -79,13 +79,7 @@ void set_rdata(struct dns_rr rr, HCountedArray *rdata) {
rr.cname = *(dns_domain_t *)p->ast->user; rr.cname = *(dns_domain_t *)p->ast->user;
break; break;
case 6: // SOA case 6: // SOA
rr.soa.mname = *H_FIELD(dns_domain_t, 0); rr.soa = *(dns_rr_soa_t *)p->ast->user;
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;
break; break;
case 7: // MB case 7: // MB
rr.mb = *(dns_domain_t *)p->ast->user; 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); 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) for (size_t i=0; i<p->ast->seq->used; ++i)
rr.null[i] = p->ast->seq->elements[i]->uint; rr.null[i] = p->ast->seq->elements[i]->uint;
// XXX Where is the length stored!?
break; break;
case 11: // WKS case 11: // WKS
rr.wks.address = p->ast->seq->elements[0]->uint; rr.wks.address = p->ast->seq->elements[0]->uint;

View file

@ -43,6 +43,20 @@ const HParsedToken* act_cstr(const HParseResult *p) {
return H_MAKE_TOKEN(dns_cstr_t, cs); 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 #define RDATA_TYPE_MAX 16
const HParser* init_rdata(uint16_t type) { const HParser* init_rdata(uint16_t type) {
static const HParser *parsers[RDATA_TYPE_MAX+1]; 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 (md, domain);
H_RULE (mf, domain); H_RULE (mf, domain);
H_RULE (cname, domain); H_RULE (cname, domain);
H_RULE (soa, h_sequence(domain, // MNAME H_ARULE(soa, h_sequence(domain, // MNAME
domain, // RNAME domain, // RNAME
h_uint32(), // SERIAL h_uint32(), // SERIAL
h_uint32(), // REFRESH h_uint32(), // REFRESH