diff --git a/examples/dns.c b/examples/dns.c index 0456223..f591591 100644 --- a/examples/dns.c +++ b/examples/dns.c @@ -97,12 +97,7 @@ void set_rdata(struct dns_rr rr, HCountedArray *rdata) { // XXX Where is the length stored!? break; case 11: // WKS - rr.wks.address = p->ast->seq->elements[0]->uint; - rr.wks.protocol = p->ast->seq->elements[1]->uint; - rr.wks.len = p->ast->seq->elements[2]->seq->used; - rr.wks.bit_map = h_arena_malloc(rdata->arena, sizeof(uint8_t)*p->ast->seq->elements[2]->seq->used); - for (size_t i=0; iast->seq->elements[2]->seq->elements[i]->uint; + rr.wks = *(dns_rr_wks_t *)p->ast->user; break; case 12: // PTR rr.ptr = *(dns_domain_t *)p->ast->user; diff --git a/examples/rr.c b/examples/rr.c index 5752fe9..83241d8 100644 --- a/examples/rr.c +++ b/examples/rr.c @@ -57,6 +57,19 @@ const HParsedToken* act_soa(const HParseResult *p) { return H_MAKE_TOKEN(dns_rr_soa_t, soa); } +const HParsedToken* act_wks(const HParseResult *p) { + dns_rr_wks_t *wks = H_MAKE(dns_rr_wks_t); + + wks->address = p->ast->seq->elements[0]->uint; + wks->protocol = p->ast->seq->elements[1]->uint; + wks->len = p->ast->seq->elements[2]->seq->used; + wks->bit_map = h_arena_malloc(p->arena, sizeof(uint8_t)*wks->len); + for (size_t i=0; ilen; ++i) + wks->bit_map[i] = p->ast->seq->elements[2]->seq->elements[i]->uint; + + return H_MAKE_TOKEN(dns_rr_wks_t, wks); +} + #define RDATA_TYPE_MAX 16 const HParser* init_rdata(uint16_t type) { static const HParser *parsers[RDATA_TYPE_MAX+1];