#include "res.h"
#include "reslib.h"
#include "irc_string.h"
-#include "sprintf_irc.h"
#include "numeric.h"
#include "client.h" /* SNO_* */
struct DNSQuery *query; /* query callback for this request */
};
-static int res_fd;
+static rb_fde_t *res_fd;
static rb_dlink_list request_list = { NULL, NULL, 0 };
static void rem_request(struct reslist *request);
*/
static int res_ourserver(const struct rb_sockaddr_storage *inp)
{
-#ifdef IPV6
- struct sockaddr_in6 *v6;
- struct sockaddr_in6 *v6in = (struct sockaddr_in6 *)inp;
+#ifdef RB_IPV6
+ const struct sockaddr_in6 *v6;
+ const struct sockaddr_in6 *v6in = (const struct sockaddr_in6 *)inp;
#endif
- struct sockaddr_in *v4;
- struct sockaddr_in *v4in = (struct sockaddr_in *)inp;
+ const struct sockaddr_in *v4;
+ const struct sockaddr_in *v4in = (const struct sockaddr_in *)inp;
int ns;
for (ns = 0; ns < irc_nscount; ns++)
{
const struct rb_sockaddr_storage *srv = &irc_nsaddr_list[ns];
-#ifdef IPV6
- v6 = (struct sockaddr_in6 *)srv;
+#ifdef RB_IPV6
+ v6 = (const struct sockaddr_in6 *)srv;
#endif
- v4 = (struct sockaddr_in *)srv;
+ v4 = (const struct sockaddr_in *)srv;
/* could probably just memcmp(srv, inp, srv.ss_len) here
* but we'll air on the side of caution - stu
*/
switch (srv->ss_family)
{
-#ifdef IPV6
+#ifdef RB_IPV6
case AF_INET6:
if (srv->ss_family == inp->ss_family)
if (v6->sin6_port == v6in->sin6_port)
timeout_query_list(rb_current_time());
}
+static struct ev_entry *timeout_resolver_ev = NULL;
+
/*
* start_resolver - do everything we need to read the resolv.conf file
* and initialize the resolver file descriptor if needed
{
irc_res_init();
- if (res_fd <= 0) /* there isn't any such thing as fd 0, that's just a myth. */
+ if (res_fd == NULL)
{
if ((res_fd = rb_socket(irc_nsaddr_list[0].ss_family, SOCK_DGRAM, 0,
- "UDP resolver socket")) == -1)
+ "UDP resolver socket")) == NULL)
return;
/* At the moment, the resolver FD data is global .. */
- rb_setselect(res_fd, FDLIST_NONE, COMM_SELECT_READ, res_readreply, NULL, 0);
- rb_event_add("timeout_resolver", timeout_resolver, NULL, 1);
+ rb_setselect(res_fd, RB_SELECT_READ, res_readreply, NULL);
+ timeout_resolver_ev = rb_event_add("timeout_resolver", timeout_resolver, NULL, 1);
}
}
void restart_resolver(void)
{
rb_close(res_fd);
- res_fd = -1;
- eventDelete(timeout_resolver, NULL); /* -ddosen */
+ res_fd = NULL;
+ rb_event_delete(timeout_resolver_ev); /* -ddosen */
start_resolver();
}
for (i = 0; sent < max_queries && i < irc_nscount; i++)
{
- if (sendto(res_fd, msg, len, 0,
+ if (sendto(rb_get_fd(res_fd), msg, len, 0,
(struct sockaddr *)&(irc_nsaddr_list[i]),
- GET_SS_LEN(irc_nsaddr_list[i])) == len)
+ GET_SS_LEN(&irc_nsaddr_list[i])) == len)
++sent;
}
{
char host_name[HOSTLEN + 1];
- strlcpy(host_name, name, HOSTLEN + 1);
+ rb_strlcpy(host_name, name, HOSTLEN + 1);
add_local_domain(host_name, HOSTLEN);
if (request == NULL)
request->state = REQ_A;
}
- strlcpy(request->queryname, host_name, sizeof(request->queryname));
+ rb_strlcpy(request->queryname, host_name, sizeof(request->queryname));
request->type = type;
query_name(request);
}
if (addr->ss_family == AF_INET)
{
- struct sockaddr_in *v4 = (struct sockaddr_in *)addr;
+ const struct sockaddr_in *v4 = (const struct sockaddr_in *)addr;
cp = (const unsigned char *)&v4->sin_addr.s_addr;
rb_sprintf(request->queryname, "%u.%u.%u.%u.in-addr.arpa", (unsigned int)(cp[3]),
(unsigned int)(cp[2]), (unsigned int)(cp[1]), (unsigned int)(cp[0]));
}
-#ifdef IPV6
+#ifdef RB_IPV6
else if (addr->ss_family == AF_INET6)
{
- struct sockaddr_in6 *v6 = (struct sockaddr_in6 *)addr;
+ const struct sockaddr_in6 *v6 = (const struct sockaddr_in6 *)addr;
cp = (const unsigned char *)&v6->sin6_addr.s6_addr;
(void)sprintf(request->queryname, "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x."
do_query_number(NULL, &request->addr, request);
break;
case T_A:
-#ifdef IPV6
+#ifdef RB_IPV6
case T_AAAA:
#endif
do_query_name(NULL, request->name, request, request->type);
int n; /* temp count */
int rd_length;
struct sockaddr_in *v4; /* conversion */
-#ifdef IPV6
+#ifdef RB_IPV6
struct sockaddr_in6 *v6;
#endif
current = (unsigned char *)buf + sizeof(HEADER);
if (rd_length != sizeof(struct in_addr))
return (0);
v4 = (struct sockaddr_in *)&request->addr;
- SET_SS_LEN(request->addr, sizeof(struct sockaddr_in));
+ SET_SS_LEN(&request->addr, sizeof(struct sockaddr_in));
v4->sin_family = AF_INET;
memcpy(&v4->sin_addr, current, sizeof(struct in_addr));
return (1);
break;
-#ifdef IPV6
+#ifdef RB_IPV6
case T_AAAA:
if (request->type != T_AAAA)
return (0);
if (rd_length != sizeof(struct in6_addr))
return (0);
- SET_SS_LEN(request->addr, sizeof(struct sockaddr_in6));
+ SET_SS_LEN(&request->addr, sizeof(struct sockaddr_in6));
v6 = (struct sockaddr_in6 *)&request->addr;
v6->sin6_family = AF_INET6;
memcpy(&v6->sin6_addr, current, sizeof(struct in6_addr));
else if (n == 0)
return (0); /* no more answers left */
- strlcpy(request->name, hostbuf, HOSTLEN + 1);
+ rb_strlcpy(request->name, hostbuf, HOSTLEN + 1);
return (1);
break;
/*
* res_readreply - read a dns reply from the nameserver and process it.
*/
-static void res_readreply(int fd, void *data)
+static void res_readreply(rb_fde_t *F, void *data)
{
char buf[sizeof(HEADER) + MAXPACKET]
/* Sparc and alpha need 16bit-alignment for accessing header->id
socklen_t len = sizeof(struct rb_sockaddr_storage);
struct rb_sockaddr_storage lsin;
- rc = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&lsin, &len);
+ rc = recvfrom(rb_get_fd(F), buf, sizeof(buf), 0, (struct sockaddr *)&lsin, &len);
/* Re-schedule a read *after* recvfrom, or we'll be registering
* interest where it'll instantly be ready for read :-) -- adrian
*/
- rb_setselect(fd, FDLIST_NONE, COMM_SELECT_READ, res_readreply, NULL, 0);
+ rb_setselect(F, RB_SELECT_READ, res_readreply, NULL);
/* Better to cast the sizeof instead of rc */
if (rc <= (int)(sizeof(HEADER)))
return;
* ip#.
*
*/
-#ifdef IPV6
+#ifdef RB_IPV6
if (request->addr.ss_family == AF_INET6)
gethost_byname_type(request->name, request->query, T_AAAA);
else
for (i = 0; i < irc_nscount; i++)
{
- if (!inetntop_sock((struct sockaddr *)&(irc_nsaddr_list[i]),
+ if (!rb_inet_ntop_sock((struct sockaddr *)&(irc_nsaddr_list[i]),
ipaddr, sizeof ipaddr))
- strlcpy(ipaddr, "?", sizeof ipaddr);
+ rb_strlcpy(ipaddr, "?", sizeof ipaddr);
sendto_one_numeric(source_p, RPL_STATSDEBUG,
"A %s", ipaddr);
}