-/**/
+/*
+ * Copyright (C)1998 Ian Jackson.
+ * This version provided for review and comment only.
+ *
+ * $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
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) */
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 */
* Must always be non-null pointer;
* If *query_io is 0 to start with then any query may be returned;
* If *query_io is !0 adns_query then only that query may be returned.
+ * If the call is successful, *query_io, *answer_r, and *context_r
+ * will all be set.
* Errors:
* Return values are 0 or an errno value;
* Seriously fatal system errors (eg, failure to create sockets,
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);
* }
*/
+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