Experimental: rr types as pointer to struct, not enum. abandon.1998-10-04.rrtypenoenum
authorian <ian>
Sun, 4 Oct 1998 17:13:45 +0000 (17:13 +0000)
committerian <ian>
Sun, 4 Oct 1998 17:13:45 +0000 (17:13 +0000)
src/adns.h
src/internal.h
src/reply.c

index 90b166b..24c2188 100644 (file)
@@ -10,6 +10,7 @@
 
 typedef struct adns__state *adns_state;
 typedef struct adns__query *adns_query;
+typedef const struct adns__rrtype *adns_rrtype;
 
 typedef enum {
   adns_if_noenv=        0x0001, /* do not look at environment */
@@ -27,49 +28,69 @@ typedef enum {
   adns_qf_nocname=    0x0010, /* don't follow CNAMEs, instead give _s_cname */
 } adns_queryflags;
 
+typedef const struct adns__rrtype adns__rrtype_indicator[1];
+
+extern adns__rrtype_indicator
+  adns_r_none,
+  adns_r_null,     adns_r_null_mf,
+  adns_r_a,        adns_r_a_mf,
+  adns_r_ns,       adns_r_ns_mf,      adns_r_ns_raw,
+  adns_r_soa,      adns_r_soa_mf,     adns_r_soa_raw,
+  adns_r_cname,    adns_r_cname_mf,
+  adns_r_ptr,      adns_r_ptr_mf,     adns_r_ptr_raw,
+  adns_r_hinfo,    adns_r_hinfo_mf,
+  adns_r_mx_raw,
+  adns_r_mx,
+  adns_r_txt,
+  adns_r_mx_mf,
+  adns_r_rp_raw,
+  adns_r_txt_mf,
+  adns_r_rp,
+  adns_r_rp_mf;
+
 typedef enum {
   adns__rrt_typemask=  0x0ffff,
   adns__qtf_deref=     0x10000, /* dereference domains and perhaps produce extra data */
   adns__qtf_mail822=   0x20000, /* make mailboxes be in RFC822 rcpt field format */
   adns__qtf_masterfmt= 0x80000, /* convert RRs to master file format, return as str */
-  
+
   adns_r_none=               0,
-  
+
   adns_r_a=                  1,
   adns_r_a_mf=                  adns_r_a|adns__qtf_masterfmt,
-  
+
   adns_r_ns_raw=             2,
   adns_r_ns=                    adns_r_ns_raw|adns__qtf_deref,
   adns_r_ns_mf=                 adns_r_ns_raw|adns__qtf_masterfmt,
-  
+
   adns_r_cname=              5,
   adns_r_cname_mf=              adns_r_cname|adns__qtf_masterfmt,
-  
+
   adns_r_soa_raw=            6,
-  adns_r_soa=                   adns_r_soa_raw|adns__qtf_mail822, 
+  adns_r_soa=                   adns_r_soa_raw|adns__qtf_mail822,
   adns_r_soa_mf=                adns_r_soa_raw|adns__qtf_masterfmt,
-  
+
   adns_r_null=              10,
   adns_r_null_mf=               adns_r_null|adns__qtf_masterfmt,
-  
+
   adns_r_ptr_raw=           12,
   adns_r_ptr=                   adns_r_ptr_raw|adns__qtf_deref,
   adns_r_ptr_mf=                adns_r_ptr_raw|adns__qtf_masterfmt,
-  
-  adns_r_hinfo=             13,  
+
+  adns_r_hinfo=             13,
   adns_r_hinfo_mf=              adns_r_hinfo|adns__qtf_masterfmt,
-  
+
   adns_r_mx_raw=            15,
   adns_r_mx=                    adns_r_mx_raw|adns__qtf_deref,
   adns_r_mx_mf=                 adns_r_mx_raw|adns__qtf_masterfmt,
-  
+
   adns_r_txt=               16,
   adns_r_txt_mf=                adns_r_txt|adns__qtf_masterfmt,
-  
+
   adns_r_rp_raw=            17,
   adns_r_rp=                    adns_r_rp_raw|adns__qtf_mail822,
   adns_r_rp_mf=                 adns_r_rp_raw|adns__qtf_masterfmt
-  
+
 } adns_rrtype;
 
 /* In queries without qtf_anyquote, all domains must have standard
index 5b5097b..87c39a8 100644 (file)
@@ -14,6 +14,17 @@ typedef unsigned char byte;
 
 #include "adns.h"
 
+typedef enum {
+  rtf_deref=     0x1, /* dereference domains and perhaps produce extra data */
+  rtf_mail822=   0x2, /* make mailboxes be in RFC822 rcpt field format */
+} rrtype_flags;
+
+struct adns__rrtype {
+  int qtype;
+  rrtype_flags rflags;
+  void (*recv_fn)(void);
+};
+
 /* Configuration and constants */
 
 #define MAXSERVERS 5
index 63b7033..7823bc7 100644 (file)
@@ -5,4 +5,22 @@
 void adns__procdgram(adns_state ads, const byte *dgram, int len, int serv) {
   /* FIXME do something with incoming datagrams */
   adns__diag(ads,serv,"received datagram size %d",len);
+
+  
 }
+
+struct adns__rrtype adns_r_a       [1]= {{  1, rcf_a             }};
+struct adns__rrtype adns_r_ns      [1]= {{  2, rcf_ns            }};
+struct adns__rrtype adns_r_ns_raw  [1]= {{  2, rcf_domain        }};
+struct adns__rrtype adns_r_ns      [1]= {{  5, rcf_cname         }};
+struct adns__rrtype adns_r_soa     [1]= {{  5, rcf_soa           }};
+struct adns__rrtype adns_r_soa_raw [1]= {{  6, rcf_soa_raw       }};
+struct adns__rrtype adns_r_null    [1]= {{ 10, rcf_null          }};
+struct adns__rrtype adns_r_ptr     [1]= {{ 12, rcf_ptr           }};
+struct adns__rrtype adns_r_ptr_raw [1]= {{ 12, rcf_ptr_raw       }};
+struct adns__rrtype adns_r_hinfo   [1]= {{ 13, rcf_hinfo         }};
+struct adns__rrtype adns_r_mx      [1]= {{ 15, rcf_mx            }};
+struct adns__rrtype adns_r_mx_raw  [1]= {{ 15, rcf_mx_raw        }};
+struct adns__rrtype adns_r_txt     [1]= {{ 16, rcf_txt           }};
+struct adns__rrtype adns_r_rp      [1]= {{ 17, rcf_rp_raw        }};
+struct adns__rrtype adns_r_rp_raw  [1]= {{ 17, rcf_rp_raw        }};