diff options
Diffstat (limited to 'src/windows/include/resolv.h')
-rw-r--r-- | src/windows/include/resolv.h | 284 |
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_ */ |