X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/a55e57248b809678d3ac3ac716972def07c2c493..80e150e167ae5a88c7630ec7fffb25e16ca1bacc:/src/res.c diff --git a/src/res.c b/src/res.c index 677e53e..2a36776 100644 --- a/src/res.c +++ b/src/res.c @@ -79,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); @@ -100,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]; @@ -116,7 +116,7 @@ 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; @@ -128,7 +128,7 @@ static int res_ourserver(const struct irc_sockaddr_storage *inp) for (ns = 0; ns < irc_nscount; ns++) { - const struct irc_sockaddr_storage *srv = &irc_nsaddr_list[ns]; + const struct rb_sockaddr_storage *srv = &irc_nsaddr_list[ns]; #ifdef IPV6 v6 = (struct sockaddr_in6 *)srv; #endif @@ -172,12 +172,12 @@ static int res_ourserver(const struct irc_sockaddr_storage *inp) static time_t timeout_query_list(time_t now) { rb_dlink_node *ptr; - rb_dlink_node *rb_free(; + rb_dlink_node *next_ptr; struct reslist *request; time_t next_time = 0; time_t timeout = 0; - RB_DLINK_FOREACH_SAFE(ptr, rb_free(, request_list.head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, request_list.head) { request = ptr->data; timeout = request->sentat + request->timeout; @@ -212,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,12 +228,12 @@ static void start_resolver(void) if (res_fd <= 0) /* there isn't any such thing as fd 0, that's just a myth. */ { 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); } } @@ -241,7 +243,7 @@ static void start_resolver(void) void init_resolver(void) { #ifdef HAVE_SRAND48 - srand48(CurrentTime); + srand48(rb_current_time()); #endif start_resolver(); } @@ -252,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(); } @@ -287,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); } /* @@ -296,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. */ @@ -317,10 +319,10 @@ static struct reslist *make_request(struct DNSQuery *query) void delete_resolver_queries(const struct DNSQuery *query) { rb_dlink_node *ptr; - rb_dlink_node *rb_free(; + rb_dlink_node *next_ptr; struct reslist *request; - RB_DLINK_FOREACH_SAFE(ptr, rb_free(, request_list.head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, request_list.head) { if ((request = ptr->data) != NULL) { @@ -351,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; } @@ -392,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); } @@ -411,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; } @@ -424,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; @@ -432,8 +434,8 @@ 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) @@ -651,7 +653,7 @@ 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); @@ -662,7 +664,7 @@ static int proc_answer(struct reslist *request, HEADER * header, char *buf, char 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)); @@ -718,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 @@ -734,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; @@ -831,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); } } @@ -848,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));