chiark / gitweb /
Import changes from chiark: cvs rdiff -u -r tochiark-1998-11-08 -r
[adns.git] / src / adns.h
index f71230a3487be336c945e46f5848a16113439857..a80081377d31085d3ce5b64aa7df752c61270394 100644 (file)
@@ -4,6 +4,23 @@
  *
  * $Id$
  */
+/*
+ *  This file is part of adns, which is Copyright (C) 1997, 1998 Ian Jackson
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
 
 #ifndef ADNS_H_INCLUDED
 #define ADNS_H_INCLUDED
@@ -105,6 +122,7 @@ typedef enum {
   adns_s_norecurse,
   adns_s_serverfaulty,
   adns_s_unknownreply,
+  adns_s_invaliddata,
   adns_s_max_tempfail= 99,
   adns_s_inconsistent, /* PTR gives domain whose A does not match */
   adns_s_cname, /* CNAME found where data eg A expected (not if _qf_loosecname) */
@@ -145,9 +163,11 @@ typedef struct {
 typedef struct {
   adns_status status;
   char *cname; /* always NULL if query was for CNAME records */
-  adns_rrtype type;
-  int nrrs;
+  adns_rrtype type; /* guaranteed to be same as in query */
+  int nrrs, rrsz;
   union {
+    void *untyped;
+    unsigned char *bytes;
     char *(*str);                  /* ns_raw, cname, ptr, ptr_raw, txt, <any>_mf */
     struct in_addr *inaddr;        /* a */
     adns_rr_dmaddr *dmaddr;        /* ns */
@@ -214,9 +234,12 @@ int adns_wait(adns_state ads,
              void **context_r);
 /* Might return EINTR - if so, try again */
 
-void adns_cancel(adns_state ads, adns_query query);
+void adns_cancel(adns_query query);
 
 int adns_finish(adns_state);
+/* You may call this even if you have queries outstanding;
+ * they will be cancelled.
+ */
 
 int adns_callback(adns_state, int maxfd, const fd_set *readfds, const fd_set *writefds,
                  const fd_set *exceptfds);
@@ -265,6 +288,34 @@ void adns_interest(adns_state, int *maxfd_io, fd_set *readfds_io,
  *  }
  */
 
+adns_status adns_rr_info(adns_rrtype type,
+                        const char **rrtname_r, const char **fmtname_r,
+                        int *len_r,
+                        const void *datap, char **data_r);
+/* Gets information in human-readable (but non-i18n) form
+ * for eg debugging purposes.  type must be specified,
+ * and the official name of the corresponding RR type will
+ * be returned in *rrtname_r, and information about the processing
+ * style in *fmtname_r.  The length of the table entry in an answer
+ * for that type will be returned in in *len_r.
+ * Any or all of rrtname_r, fmtname_r and len_r may be 0.
+ * If fmtname_r is non-null then *fmtname_r may be
+ * null on return, indicating that no special processing is
+ * involved.
+ *
+ * data_r be must be non-null iff datap is.  In this case
+ * *data_r will be set to point to a human-readable text
+ * string representing the RR data.  The text will have
+ * been obtained from malloc() and must be freed by the caller.
+ *
+ * Usually this routine will succeed.  Possible errors include:
+ *  adns_s_nomemory
+ *  adns_s_notimplemented (RR type not known)
+ *  adns_s_invaliddata (*datap contained garbage)
+ * If an error occurs then no memory has been allocated,
+ * and *rrtname_r, *fmtname_r, *len_r and *data_r are undefined.
+ */
+
 const char *adns_strerror(adns_status st);
 
 #endif