summaryrefslogtreecommitdiffstats
path: root/src/windows/include/resolv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/include/resolv.h')
-rw-r--r--src/windows/include/resolv.h284
1 files changed, 284 insertions, 0 deletions
diff --git a/src/windows/include/resolv.h b/src/windows/include/resolv.h
new file mode 100644
index 0000000000..929795957d
--- /dev/null
+++ b/src/windows/include/resolv.h
@@ -0,0 +1,284 @@
+/*! \file resolv.h
+ * WSHelper DNS/Hesiod Library header
+ * This file contains the function declaration for:\n
+ * res_init() \n
+ * res_search() \n
+ * dn_comp() \n
+ * rdn_expand() \n \n
+ * and unsupported functions: \n
+ * res_setopts() \n
+ * res_getopts() \n
+ * res_querydomain() \n
+ * res_mkquery() \n
+ * res_send() \n
+*/
+
+#ifndef _RESOLV_H_
+#define _RESOLV_H_
+
+#include <windows.h>
+#ifndef MAXDNAME
+#include <arpa/nameser.h>
+#endif
+
+/*! \def MAXNS
+ * max # name servers we'll track
+ */
+#define MAXNS 3
+
+/*! \def MAXDFLSRCH
+ * # default domain levels to try
+ */
+#define MAXDFLSRCH 3
+
+/*! \def MAXDNSRCH
+ * max # domains in search path
+ */
+#define MAXDNSRCH 6
+
+/*! \def LOCALDOMAINPARTS
+ * min levels in name that is "local"
+ */
+#define LOCALDOMAINPARTS 2
+
+/*! \def RES_TIMEOUT
+ * min. seconds between retries
+ */
+#define RES_TIMEOUT 5
+
+/*! \def MAXMXRECS
+ * number of records in the preference array in the MX record
+ */
+#define MAXMXRECS 8
+
+/*! \struct mxent
+ * structure to hold the MX record
+ */
+struct mxent {
+ /*! number of records in the preference field */
+ int numrecs;
+ /*! holds a 16 bit integer which specifies the preference given to this RR */
+ u_short pref[MAXMXRECS];
+ /*! a host willing to act as a mail exchange */
+ char ** hostname;
+};
+
+
+/*! \struct state
+ * This structure holds the state for the resolver query
+ */
+struct state {
+ /*! retransmition time interval */
+ int retrans;
+ /*! number of times to retransmit */
+ int retry;
+ /*! field option flags - see below. */
+ long options;
+ /*! field number of name servers */
+ int nscount;
+ /*! address of name server */
+ struct sockaddr_in nsaddr_list[MAXNS];
+#define nsaddr nsaddr_list[0]
+ /*! current packet id */
+ u_short id;
+ /*! field default domain */
+ char defdname[MAXDNAME];
+ /*! field components of domain to search */
+ char *dnsrch[MAXDNSRCH+1];
+};
+
+/*! \def RES_INIT
+ * resolver option: address initialized
+ */
+#define RES_INIT 0x0001
+
+/*! \def RES_DEBUG
+ * resolver option: print debug messages
+ */
+#define RES_DEBUG 0x0002
+
+/*! \def RES_AAONLY
+ * resolver option: authoritative answers only
+ */
+#define RES_AAONLY 0x0004
+
+/*! \def RES_USEVC
+ * resolver option: use virtual circuit
+ */
+#define RES_USEVC 0x0008
+
+/*! \def RES_PRIMARY
+ * resolver option: query primary server only
+ */
+#define RES_PRIMARY 0x0010
+
+/*! \def RES_IGNTC
+ * resolver option: ignore trucation errors
+ */
+#define RES_IGNTC 0x0020
+
+/*! \def RES_RECURSE
+ * resolver option: recursion desired
+ */
+#define RES_RECURSE 0x0040
+
+/*! \def RES_DEFNAMES
+ * resolver option: use default domain name
+ */
+#define RES_DEFNAMES 0x0080
+
+/*! \def RES_STAYOPEN
+ * resolver option: Keep TCP socket ope
+ */
+#define RES_STAYOPEN 0x0100
+
+/*! \def RES_DNSRCH
+ * resolver option: search up local domain tree
+ */
+#define RES_DNSRCH 0x0200
+
+/*! \def RES_DEFAULT
+ * resolver option: Default RES options (RES_RECURSE + RES_DEFNAMES + RES_DNSRCH)
+ */
+#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
+
+extern struct state _res;
+
+#include <stdio.h>
+
+/* Private routines shared between libc/net, named, nslookup and others. */
+#define fp_query __fp_query
+#define hostalias __hostalias
+#define putlong __putlong
+#define putshort __putshort
+#define p_class __p_class
+#define p_time __p_time
+#define p_type __p_type
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! \fn int WINAPI res_init()
+ * \brief retrieves the default domain name and search order. It will look to see if an environment variable LOCALDOMAIN is defined. Otherwise,
+ * the domain associated with the local host is used. Otherwise, it will try to find the domain name from the registry
+ *
+ * defined in res_init.c
+ *
+ * \retval The return value is 0 if the operation was successful. Otherwise the value -1 is returned.
+ */
+int WINAPI res_init();
+
+
+/*! \fn int WINAPI res_search(const char* name, int qclass, int type, u_char* answer, int anslen)
+ * \brief a generic query interface to the DNS name space. The query is performed with the dnsapi and
+ * the answer buffer is populated based on the returned RR set.
+ *
+ * defined in res_quer.c
+
+ * \param[in] name domain name
+ * \param[in] qclass class of query(such as DNS_CLASS_INTERNET, DNS_CLASS_CSNET, DNS_CLASS_CHAOS,
+ * DNS_CLASS_HESIOD. Defined in windns.h)
+ * \param[in] type type of query(such as DNS_TYPE_A, DNS_TYPE_NS, DNS_TYPE_MX, DNS_TYPE_SRV. Defined in
+ * windns.h)
+ * \param[in] answer buffer to put answer in
+ * \param[in] anslen size of the answer buffer. compare the anslen with the return value, if the return
+ * value is bigger than anslen, it means the answer buffer doesn't contain the complete
+ * response. You will need to call this function again with a bigger answer buffer if
+ * you care about the complete response
+ *
+ * \retval return the size of the response on success, -1 on error
+ *
+ */
+int WINAPI res_search(const char *name,
+ int qclass, int type,
+ u_char *answer, int anslen);
+
+/*! \fn int WINAPI dn_comp(const u_char* exp_dn, u_char* comp_dn, int length, u_char** dnptrs, u_char** lastdnptr)
+ * \brief Compress domain name 'exp_dn' into 'comp_dn'
+ *
+ * defined in res_comp.c
+ *
+ * \param[in] exp_dn name to compress
+ * \param[in, out] comp_dn result of the compression
+ * \param[in] length the size of the array pointed to by 'comp_dn'.
+ * \param[in, out] dnptrs a list of pointers to previous compressed names. dnptrs[0]
+ * is a pointer to the beginning of the message. The list ends with NULL.
+ * \param[in] lastdnptr a pointer to the end of the arrary pointed to by 'dnptrs'. Side effect
+ * is to update the list of pointers for labels inserted into the
+ * message as we compress the name. If 'dnptr' is NULL, we don't try to
+ * compress names. If 'lastdnptr' is NULL, we don't update the list.
+ * \retval Return the size of the compressed name or -1
+ */
+int WINAPI dn_comp(const u_char *exp_dn,
+ u_char *comp_dn,
+ int length, u_char **dnptrs,
+ u_char * *lastdnptr);
+
+/*! \fn int WINAPI rdn_expand(const u_char *msg, const u_char *eomorig, const u_char *comp_dn, u_char *exp_dn,
+ int length);
+ * \brief replacement for dn_expand called rdn_expand. Older versions of the DLL used to this as dn_expand
+ * but this has caused some conflict with more recent versions of the MSDEV libraries. rdn_expand()
+ * expands the compressed domain name comp_dn to a full domain name. Expanded names are converted to upper case.
+ *
+ * defined in res_comp.c
+ *
+ * \param[in] msg msg is a pointer to the beginning of the message
+ * \param[in] eomorig
+ * \param[in] comp_dn the compressed domain name.
+ * \param[in, out] exp_dn a pointer to the result buffer
+ * \param[in] length size of the result in expn_dn
+ * \retval the size of compressed name is returned or -1 if there was an error.
+*/
+int WINAPI rdn_expand(const u_char *msg,
+ const u_char *eomorig,
+ const u_char *comp_dn,
+ u_char *exp_dn,
+ int length);
+/* Microsoft includes an implementation of dn_expand() in winsock */
+/* Make sure we do not use it. jaltman@columbia.edu */
+#define dn_expand(a,b,c,d,e) rdn_expand(a,b,c,d,e)
+
+
+/*! \fn void WINAPI res_setopts(long opts)
+ * unsupported
+*/
+void WINAPI res_setopts(long opts);
+
+/*! \fn long WINAPI res_getopts(void)
+ * unsupported
+*/
+long WINAPI res_getopts(void);
+
+/*! \fn int WINAPI res_mkquery(int op, const char *dname, int qclass, int type, const char *data, int datalen,
+ * const struct rrec *newrr, char *buf, int buflen)
+ * unsupported
+ */
+int WINAPI res_mkquery(int op, const char *dname,
+ int qclass, int type,
+ const char *data, int datalen,
+ const struct rrec *newrr,
+ char *buf, int buflen);
+
+/*! \fn int WINAPI res_send(const char *msg, int msglen, char *answer, int anslen)
+ * unsupported
+*/
+int WINAPI res_send(const char *msg, int msglen,
+ char *answer, int anslen);
+
+/*! \fn int WINAPI res_querydomain(const char *name, const char *domain, int qclass, int type,
+ u_char *answer, int anslen);
+* unsupported
+*/
+int WINAPI res_querydomain(const char *name,
+ const char *domain,
+ int qclass, int type,
+ u_char *answer, int anslen);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RESOLV_H_ */