chiark / gitweb /
spec for adns_r_unknown
[adns] / src / adns.h
index abeba060792d37c5bfeb2055c182f268cfc86f9d..0494124a4b6d6768be50d94b7e6c6d70c3f26097 100644 (file)
@@ -51,7 +51,7 @@
  *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
  *
- *  $Id: adns.h,v 1.88 2006/04/03 22:49:32 ian Exp $
+ *  $Id: adns.h,v 1.93 2006/04/06 18:59:53 ian Exp $
  */
 
 #ifndef ADNS_H_INCLUDED
@@ -105,8 +105,23 @@ typedef enum { /* In general, or together the desired flags: */
 
 typedef enum {
  adns__rrt_typemask=0x0ffff,
- adns__qtf_deref=   0x10000, /* dereference domains; perhaps get extra data */
- adns__qtf_mail822= 0x20000, /* return mailboxes in RFC822 rcpt field fmt   */
+ adns__qtf_deref=    0x10000,/* dereference domains; perhaps get extra data */
+ adns__qtf_mail822=  0x20000,/* return mailboxes in RFC822 rcpt field fmt   */
+
+ adns_r_unknown=     0x40000,
+   /* To use this, ask for records of type   <rr-type-code>|adns_r_unknown.
+    * adns will not process the RDATA at all - you'll get intstr's, where
+    * the int is the length and the char* points to the data.  String
+    * representation of the RR data is as in RFC3597.  adns_rr_info
+    * will not return the type name in *rrtname_r (due to memory management
+    * problems); *fmtname_r will be set to "unknown".
+    *
+    * Do not specify adns_r_unknown along with a known RR type which
+    * requires domain name uncompression.  Domain names will not be
+    * uncompressed and the resulting data will be useless.  Asking for
+    * meta-RR types via adns_r_unknown will not work properly either
+    * and may make adns complain about server misbehaviour.
+    */
                     
  adns_r_none=             0,
                     
@@ -132,6 +147,12 @@ typedef enum {
                     
  adns_r_rp_raw=          17,
  adns_r_rp=                  adns_r_rp_raw|adns__qtf_mail822,
+
+ /* For SRV records, query domain without _qf_quoteok_query must look
+  * as expected from SRV RFC with hostname-like Name.  _With_
+  * _quoteok_query, any query domain is allowed. */
+ adns_r_srv_raw=         33,
+ adns_r_srv=                 adns_r_srv_raw|adns__qtf_deref,
                     
  adns_r_addr=                adns_r_a|adns__qtf_deref
  
@@ -301,6 +322,16 @@ typedef struct {
   unsigned long serial, refresh, retry, expire, minimum;
 } adns_rr_soa;
 
+typedef struct {
+  int priority, weight, port;
+  char *host;
+} adns_rr_srvraw;
+
+typedef struct {
+  int priority, weight, port;
+  adns_rr_hostaddr ha;
+} adns_rr_srvha;
+
 typedef struct {
   adns_status status;
   char *cname; /* always NULL if query was for CNAME records */
@@ -319,8 +350,10 @@ typedef struct {
     adns_rr_intstrpair *intstrpair;  /* hinfo */
     adns_rr_strpair *strpair;        /* rp, rp_raw */
     adns_rr_inthostaddr *inthostaddr;/* mx */
-    adns_rr_intstr *intstr;          /* mx_raw */
+    adns_rr_intstr *intstr;          /* mx_raw, ...|unknown */
     adns_rr_soa *soa;                /* soa, soa_raw */
+    adns_rr_srvraw *srvraw;          /* srv_raw */
+    adns_rr_srvha *srvha;/* srv */
   } rrs;
 } adns_answer;
 
@@ -340,7 +373,8 @@ typedef struct {
  *
  *  For _init, _init_strcfg, _submit and _synchronous, system errors
  *  (eg, failure to create sockets, malloc failure, etc.) return errno
- *  values.
+ *  values.  EINVAL from _init et al means the configuration file
+ *  is erroneous and cannot be parsed.
  * 
  *  For _wait and _check failures are reported in the answer
  *  structure, and only 0, ESRCH or (for _check) EAGAIN is