From b88d6ca34a3ee82d6c6fb57e3094b90fbebfae5f Mon Sep 17 00:00:00 2001 From: "Sven M. Hallberg" <pesco@khjk.org> Date: Thu, 17 Jan 2013 21:35:33 +0100 Subject: [PATCH] move SOA processing into an action --- examples/dns.c | 9 ++------- examples/rr.c | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/examples/dns.c b/examples/dns.c index 3f4ed9b1..0456223b 100644 --- a/examples/dns.c +++ b/examples/dns.c @@ -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; diff --git a/examples/rr.c b/examples/rr.c index 42b46481..5752fe91 100644 --- a/examples/rr.c +++ b/examples/rr.c @@ -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 -- GitLab