98a3f706 |
1 | /**/ |
2 | |
3 | #include "internal.h" |
4 | |
5 | #define TYRRSZ(rrtype,size,func) { (rrtype), (size), (func) } |
6 | |
7 | #define TYRRSZ(sizememb) (sizeof(((adns_answer*)0)->rrs.sizememb)) |
8 | |
9 | static const typeinfo typeinfos[] = { |
10 | /* Must be in ascending order of rrtype ! */ |
11 | |
12 | { adns_r_a, TYRR(inaddr), rpf_inaddr }, |
13 | { adns_r_ns_raw, TYRR(str), rpf_domain_raw }, |
14 | { adns_r_cname, TYRR(str), rpf_domain_raw }, |
15 | { adns_r_soa_raw, TYRR(soa), rpf_soa }, |
16 | { adns_r_null, 0, rpf_null }, |
17 | { adns_r_ptr_raw, TYRR(str), rpf_domain_raw }, |
18 | { adns_r_hinfo, TYRR(strpair), rpf_hinfo }, |
19 | { adns_r_mx_raw, TYRR(intstr), rpf_mx_raw }, |
20 | { adns_r_txt, TYRR(str), rpf_txt }, |
21 | { adns_r_rp_raw, TYRR(strpair), rpf_rp }, |
22 | |
23 | { adns_r_ns, TYRR(dmaddr), rpf_dmaddr }, |
24 | { adns_r_ptr, TYRR(str), rpf_ptr }, |
25 | { adns_r_mx, TYRR(intdmaddr), rpf_mx }, |
26 | |
27 | { adns_r_soa, TYRR(soa), rpf_soa }, |
28 | { adns_r_rp, TYRR(strpair), rpf_rp }, |
29 | }; |
30 | |
31 | const typeinfo adns__findtype(adns_rrtype type) { |
32 | const typeinfo *begin, *end; |
33 | |
34 | begin= typeinfos; end= typeinfos+(sizeof(typeinfos)/sizeof(typeinfo)); |
35 | |
36 | while (begin < end) { |
37 | mid= begin + ((end-begin)>>1); |
38 | if (mid->type == type) return mid; |
39 | if (type > mid->type) begin= mid+1; |
40 | else end= mid; |
41 | } |
42 | return 0; |
43 | } |