X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=include%2Fres.h;h=6ca91ce48d204682b290cc6b3c75dc073803414a;hb=79035436c61e2b58004b47f250ab1e54744a88d6;hp=05c037ba5f40df1025d067b1bcae40ce2c71e423;hpb=c6f463e89d3c49006457befa5c3fe774394c1044;p=ircu2.10.12-pk.git diff --git a/include/res.h b/include/res.h index 05c037b..6ca91ce 100644 --- a/include/res.h +++ b/include/res.h @@ -1,51 +1,108 @@ /* - * irc2.7.2/ircd/res.h (C)opyright 1992 Darren Reed. + * include/ircd_res.h for referencing functions in ircd/ircd_res.c * * $Id$ */ + #ifndef INCLUDED_res_h #define INCLUDED_res_h -#ifndef INCLUDED_sys_types_h -#include /* time_t */ -#define INCLUDED_sys_types_h +#include "listener.h" +#include "ircd_addrinfo.h" + +#ifndef INADDR_NONE +#define INADDR_NONE ((uint32_t)-1) #endif -struct Client; -struct hostent; +struct StatDesc; -struct DNSReply { - struct hostent* hp; /* hostent struct */ - int ref_count; /* reference count */ +/* Here we define some values lifted from nameser.h */ +#define NS_NOTIFY_OP 4 +#define NS_INT16SZ 2 +#define NS_IN6ADDRSZ 16 +#define NS_INADDRSZ 4 +#define NS_INT32SZ 4 +#define NS_CMPRSFLGS 0xc0 +#define NS_MAXCDNAME 255 +#define QUERY 0 +#define IQUERY 1 +#define NO_ERRORS 0 +#define SERVFAIL 2 +#define T_A 1 +#define T_AAAA 28 +#define T_PTR 12 +#define T_CNAME 5 +#define T_NULL 10 +#define C_IN 1 +#define QFIXEDSZ 4 +#define RRFIXEDSZ 10 +#define HFIXEDSZ 12 + +struct irc_ssaddr +{ + struct sockaddr_storage ss; + size_t ss_len; }; -struct DNSQuery { - void* vptr; /* pointer used by callback to identify request */ - void (*callback)(void* vptr, struct DNSReply* reply); /* callback to call */ +struct DNSReply +{ + char *h_name; + int h_addrtype; + struct irc_ssaddr addr; }; -extern int ResolverFileDescriptor; /* GLOBAL - file descriptor (s_bsd.c) */ +struct DNSQuery +{ + void *vptr; /* pointer used by callback to identify request */ + void (*callback)(void* vptr, struct DNSReply *reply); /* callback to call */ +}; -extern void get_res(void); -extern struct DNSReply* gethost_byname(const char* name, - const struct DNSQuery* req); -extern struct DNSReply* gethost_byaddr(const char* name, - const struct DNSQuery* req); -extern int init_resolver(void); -extern void restart_resolver(void); -extern time_t timeout_resolver(time_t now); -/* - * delete_resolver_queries - delete all outstanding queries for the - * pointer arg, DO NOT call this from a resolver callback function the - * resolver will delete the query itself for the affected client. - */ -extern void delete_resolver_queries(const void* vptr); -extern size_t cres_mem(struct Client* cptr); -extern int m_dns(struct Client* cptr, struct Client* sptr, - int parc, char* parv[]); -extern int resolver_read(void); -extern void resolver_read_multiple(int count); -extern void flush_resolver_cache(void); +typedef struct +{ + unsigned id :16; /* query identification number */ +#ifdef WORDS_BIGENDIAN + /* fields in third byte */ + unsigned qr: 1; /* response flag */ + unsigned opcode: 4; /* purpose of message */ + unsigned aa: 1; /* authoritive answer */ + unsigned tc: 1; /* truncated message */ + unsigned rd: 1; /* recursion desired */ + /* fields in fourth byte */ + unsigned ra: 1; /* recursion available */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ad: 1; /* authentic data from named */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned rcode :4; /* response code */ +#else + /* fields in third byte */ + unsigned rd :1; /* recursion desired */ + unsigned tc :1; /* truncated message */ + unsigned aa :1; /* authoritive answer */ + unsigned opcode :4; /* purpose of message */ + unsigned qr :1; /* response flag */ + /* fields in fourth byte */ + unsigned rcode :4; /* response code */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned ad: 1; /* authentic data from named */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ra :1; /* recursion available */ +#endif + /* remaining bytes */ + unsigned qdcount :16; /* number of question entries */ + unsigned ancount :16; /* number of answer entries */ + unsigned nscount :16; /* number of authority entries */ + unsigned arcount :16; /* number of resource entries */ +} HEADER; -#endif /* INCLUDED_res_h */ +extern int init_resolver(void); +extern void restart_resolver(void); +extern void add_local_domain(char *hname, size_t size); +extern size_t cres_mem(struct Client* cptr); +extern void delete_resolver_queries(const void *vptr); +extern void report_dns_servers(struct Client *source_p, struct StatDesc *sd, int stat, char *param); +extern void gethost_byname_type(const char *name, const struct DNSQuery *query, int type); +extern void gethost_byname(const char *name, const struct DNSQuery *query); +extern void gethost_byaddr(const struct irc_ssaddr *addr, const struct DNSQuery *query); +extern void gethost_byinaddr(const struct in_addr *addr, const struct DNSQuery *query); +#endif