diff options
Diffstat (limited to 'ares_private.h')
-rw-r--r-- | ares_private.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/ares_private.h b/ares_private.h new file mode 100644 index 0000000..2fc70fb --- /dev/null +++ b/ares_private.h @@ -0,0 +1,145 @@ +/* $Id$ */ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include <stdio.h> +#include <sys/types.h> + +#ifdef WIN32 + +#else +#include <netinet/in.h> +/* We define closesocket() here so that we can use this function all over + the source code for closing sockets. */ +#define closesocket(x) close(x) +#endif + +#define DEFAULT_TIMEOUT 5 +#define DEFAULT_TRIES 4 +#ifndef INADDR_NONE +#define INADDR_NONE 0xffffffff +#endif + +#ifdef WIN32 + +#define IsNT ((int)GetVersion()>0) +#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP" +#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters" +#define NAMESERVER "NameServer" +#define DHCPNAMESERVER "DhcpNameServer" +#define PATH_HOSTS_NT "\\drivers\\etc\\hosts" +#define PATH_HOSTS_9X "\\hosts" + +#else + +#define PATH_RESOLV_CONF "/etc/resolv.conf" +#ifdef ETC_INET +#define PATH_HOSTS "/etc/inet/hosts" +#else +#define PATH_HOSTS "/etc/hosts" +#endif + +#endif + +struct send_request { + /* Remaining data to send */ + const char *data; + int len; + + /* Next request in queue */ + struct send_request *next; +}; + +struct server_state { + struct in_addr addr; + int udp_socket; + int tcp_socket; + + /* Mini-buffer for reading the length word */ + unsigned char tcp_lenbuf[2]; + int tcp_lenbuf_pos; + int tcp_length; + + /* Buffer for reading actual TCP data */ + unsigned char *tcp_buffer; + int tcp_buffer_pos; + + /* TCP output queue */ + struct send_request *qhead; + struct send_request *qtail; +}; + +struct query { + /* Query ID from qbuf, for faster lookup, and current timeout */ + unsigned short qid; + time_t timeout; + + /* Query buf with length at beginning, for TCP transmission */ + char *tcpbuf; + int tcplen; + + /* Arguments passed to ares_send() (qbuf points into tcpbuf) */ + const char *qbuf; + int qlen; + ares_callback callback; + void *arg; + + /* Query status */ + int try; + int server; + int *skip_server; + int using_tcp; + int error_status; + + /* Next query in chain */ + struct query *next; +}; + +/* An IP address pattern; matches an IP address X if X & mask == addr */ +struct apattern { + struct in_addr addr; + struct in_addr mask; +}; + +struct ares_channeldata { + /* Configuration data */ + int flags; + int timeout; + int tries; + int ndots; + int udp_port; + int tcp_port; + char **domains; + int ndomains; + struct apattern *sortlist; + int nsort; + char *lookups; + + /* Server addresses and communications state */ + struct server_state *servers; + int nservers; + + /* ID to use for next query */ + unsigned short next_id; + + /* Active queries */ + struct query *queries; +}; + +void ares__send_query(ares_channel channel, struct query *query, time_t now); +void ares__close_sockets(struct server_state *server); +int ares__get_hostent(FILE *fp, struct hostent **host); +int ares__read_line(FILE *fp, char **buf, int *bufsize); |