From 4d4094049320ed938408c7c46aef7c8092bcaa15 Mon Sep 17 00:00:00 2001
From: "Sven M. Hallberg" <pesco@khjk.org>
Date: Thu, 17 Jan 2013 21:39:32 +0100
Subject: [PATCH] move WKS into action

---
 examples/dns.c |  7 +------
 examples/rr.c  | 13 +++++++++++++
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/examples/dns.c b/examples/dns.c
index 0456223b..f5915912 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; i<rr.wks.len; ++i)
-      rr.wks.bit_map[i] = p->ast->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 5752fe91..83241d84 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; i<wks->len; ++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];
-- 
GitLab