]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/res.c
Fix some warnings in the resolver code.
[irc/rqf/shadowircd.git] / src / res.c
index f829459670e79529f30d15912a603b22c6672acd..8d0d94f3d98962dae425bd5b247c7c7e9a97d1f3 100644 (file)
--- a/src/res.c
+++ b/src/res.c
 #include "ircd_defs.h"
 #include "common.h"
 #include "ircd.h"
-#include "commio.h"
 #include "res.h"
 #include "reslib.h"
-#include "tools.h"
-#include "event.h"
 #include "irc_string.h"
 #include "sprintf_irc.h"
 #include "numeric.h"
@@ -82,18 +79,18 @@ struct reslist
        char resend;            /* send flag. 0 == dont resend */
        time_t sentat;
        time_t timeout;
-       struct irc_sockaddr_storage addr;
+       struct rb_sockaddr_storage addr;
        char *name;
        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 struct reslist *make_request(struct DNSQuery *query);
 static void do_query_name(struct DNSQuery *query, const char *name, struct reslist *request, int);
-static void do_query_number(struct DNSQuery *query, const struct irc_sockaddr_storage *,
+static void do_query_number(struct DNSQuery *query, const struct rb_sockaddr_storage *,
                            struct reslist *request);
 static void query_name(struct reslist *request);
 static int send_res_msg(const char *buf, int len, int count);
@@ -103,7 +100,7 @@ static int proc_answer(struct reslist *request, HEADER * header, char *, char *)
 static struct reslist *find_id(int id);
 static struct DNSReply *make_dnsreply(struct reslist *request);
 
-extern struct irc_sockaddr_storage irc_nsaddr_list[IRCD_MAXNS];
+extern struct rb_sockaddr_storage irc_nsaddr_list[IRCD_MAXNS];
 extern int irc_nscount;
 extern char irc_domain[HOSTLEN + 1];
 
@@ -119,30 +116,30 @@ extern char irc_domain[HOSTLEN + 1];
  *      paul vixie, 29may94
  *      revised for ircd, cryogen(stu) may03
  */
-static int res_ourserver(const struct irc_sockaddr_storage *inp)
+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 irc_sockaddr_storage *srv = &irc_nsaddr_list[ns];
-#ifdef IPV6
-               v6 = (struct sockaddr_in6 *)srv;
+               const struct rb_sockaddr_storage *srv = &irc_nsaddr_list[ns];
+#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)
@@ -180,7 +177,7 @@ static time_t timeout_query_list(time_t now)
        time_t next_time = 0;
        time_t timeout = 0;
 
-       DLINK_FOREACH_SAFE(ptr, next_ptr, request_list.head)
+       RB_DLINK_FOREACH_SAFE(ptr, next_ptr, request_list.head)
        {
                request = ptr->data;
                timeout = request->sentat + request->timeout;
@@ -215,9 +212,11 @@ static time_t timeout_query_list(time_t now)
  */
 static void timeout_resolver(void *notused)
 {
-       timeout_query_list(CurrentTime);
+       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
@@ -226,15 +225,15 @@ static void start_resolver(void)
 {
        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);
-               eventAdd("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);
        }
 }
 
@@ -244,7 +243,7 @@ static void start_resolver(void)
 void init_resolver(void)
 {
 #ifdef HAVE_SRAND48
-       srand48(CurrentTime);
+       srand48(rb_current_time());
 #endif
        start_resolver();
 }
@@ -255,8 +254,8 @@ void init_resolver(void)
 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();
 }
 
@@ -290,8 +289,8 @@ void add_local_domain(char *hname, size_t size)
 static void rem_request(struct reslist *request)
 {
        rb_dlinkDelete(&request->node, &request_list);
-       MyFree(request->name);
-       MyFree(request);
+       rb_free(request->name);
+       rb_free(request);
 }
 
 /*
@@ -299,9 +298,9 @@ static void rem_request(struct reslist *request)
  */
 static struct reslist *make_request(struct DNSQuery *query)
 {
-       struct reslist *request = MyMalloc(sizeof(struct reslist));
+       struct reslist *request = rb_malloc(sizeof(struct reslist));
 
-       request->sentat = CurrentTime;
+       request->sentat = rb_current_time();
        request->retries = 3;
        request->resend = 1;
        request->timeout = 4;   /* start at 4 and exponential inc. */
@@ -323,7 +322,7 @@ void delete_resolver_queries(const struct DNSQuery *query)
        rb_dlink_node *next_ptr;
        struct reslist *request;
 
-       DLINK_FOREACH_SAFE(ptr, next_ptr, request_list.head)
+       RB_DLINK_FOREACH_SAFE(ptr, next_ptr, request_list.head)
        {
                if ((request = ptr->data) != NULL)
                {
@@ -354,9 +353,9 @@ static int send_res_msg(const char *msg, int len, int rcount)
 
        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;
        }
 
@@ -371,7 +370,7 @@ static struct reslist *find_id(int id)
        rb_dlink_node *ptr;
        struct reslist *request;
 
-       DLINK_FOREACH(ptr, request_list.head)
+       RB_DLINK_FOREACH(ptr, request_list.head)
        {
                request = ptr->data;
 
@@ -395,7 +394,7 @@ void gethost_byname_type(const char *name, struct DNSQuery *query, int type)
 /*
  * gethost_byaddr - get host name from address
  */
-void gethost_byaddr(const struct irc_sockaddr_storage *addr, struct DNSQuery *query)
+void gethost_byaddr(const struct rb_sockaddr_storage *addr, struct DNSQuery *query)
 {
        do_query_number(query, addr, NULL);
 }
@@ -414,7 +413,7 @@ static void do_query_name(struct DNSQuery *query, const char *name, struct resli
        if (request == NULL)
        {
                request = make_request(query);
-               request->name = (char *)MyMalloc(strlen(host_name) + 1);
+               request->name = (char *)rb_malloc(strlen(host_name) + 1);
                strcpy(request->name, host_name);
                request->state = REQ_A;
        }
@@ -427,7 +426,7 @@ static void do_query_name(struct DNSQuery *query, const char *name, struct resli
 /*
  * do_query_number - Use this to do reverse IP# lookups.
  */
-static void do_query_number(struct DNSQuery *query, const struct irc_sockaddr_storage *addr,
+static void do_query_number(struct DNSQuery *query, const struct rb_sockaddr_storage *addr,
                            struct reslist *request)
 {
        const unsigned char *cp;
@@ -435,22 +434,22 @@ static void do_query_number(struct DNSQuery *query, const struct irc_sockaddr_st
        if (request == NULL)
        {
                request = make_request(query);
-               memcpy(&request->addr, addr, sizeof(struct irc_sockaddr_storage));
-               request->name = (char *)MyMalloc(HOSTLEN + 1);
+               memcpy(&request->addr, addr, sizeof(struct rb_sockaddr_storage));
+               request->name = (char *)rb_malloc(HOSTLEN + 1);
        }
 
        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."
@@ -533,7 +532,7 @@ static void resend_query(struct reslist *request)
                  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);
@@ -578,7 +577,7 @@ static int proc_answer(struct reslist *request, HEADER * header, char *buf, char
        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);
@@ -654,18 +653,18 @@ static int proc_answer(struct reslist *request, HEADER * header, char *buf, char
                          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));
@@ -721,7 +720,7 @@ static int proc_answer(struct reslist *request, HEADER * header, char *buf, char
 /*
  * 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 
@@ -737,15 +736,15 @@ static void res_readreply(int fd, void *data)
        struct DNSReply *reply = NULL;
        int rc;
        int answer_count;
-       socklen_t len = sizeof(struct irc_sockaddr_storage);
-       struct irc_sockaddr_storage lsin;
+       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;
@@ -819,7 +818,7 @@ static void res_readreply(int fd, void *data)
                         * ip#. 
                         *
                         */
-#ifdef IPV6
+#ifdef RB_IPV6
                        if (request->addr.ss_family == AF_INET6)
                                gethost_byname_type(request->name, request->query, T_AAAA);
                        else
@@ -834,7 +833,7 @@ static void res_readreply(int fd, void *data)
                         */
                        reply = make_dnsreply(request);
                        (*request->query->callback) (request->query->ptr, reply);
-                       MyFree(reply);
+                       rb_free(reply);
                        rem_request(request);
                }
        }
@@ -851,7 +850,7 @@ static struct DNSReply *make_dnsreply(struct reslist *request)
        struct DNSReply *cp;
        s_assert(request != 0);
 
-       cp = (struct DNSReply *)MyMalloc(sizeof(struct DNSReply));
+       cp = (struct DNSReply *)rb_malloc(sizeof(struct DNSReply));
 
        cp->h_name = request->name;
        memcpy(&cp->addr, &request->addr, sizeof(cp->addr));