1 #include "private.h"
2 
3 #include <wdns.h>
4 
5 bool loadfunc(uint8_t *, size_t);
6 void freefunc(void);
7 bool testfunc(void);
8 
9 wdns_message_t m;
10 
11 bool
loadfunc(uint8_t * data,size_t len)12 loadfunc(uint8_t *data, size_t len)
13 {
14 	wdns_res res;
15 	res = wdns_parse_message(&m, data, len);
16 	if (res != wdns_res_success)
17 		return (false);
18 	return (true);
19 }
20 
21 void
freefunc(void)22 freefunc(void)
23 {
24 	wdns_clear_message(&m);
25 }
26 
27 
28 static void
print_data(const uint8_t * d,size_t len)29 print_data(const uint8_t *d, size_t len) {
30         while (len-- != 0)
31                 fprintf(stderr, "%02x", *(d++));
32         fprintf(stderr, "\n");
33 }
34 
35 bool
testfunc(void)36 testfunc(void)
37 {
38 	wdns_rrset_array_t *a;
39 	wdns_rrset_t *rrset;
40 	size_t sz;
41 	uint8_t *buf;
42 
43 	for (size_t sec = WDNS_MSG_SEC_ANSWER; sec < WDNS_MSG_SEC_MAX; sec++) {
44 		a = &m.sections[sec];
45 		for (size_t n = 0; n < a->n_rrsets; n++) {
46 			rrset = &a->rrsets[n];
47 			wdns_serialize_rrset(rrset, NULL, &sz);
48 			buf = alloca(sz);
49 			wdns_serialize_rrset(rrset, buf, NULL);
50 			print_data(buf, sz);
51 		}
52 	}
53 	return (true);
54 }
55