ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/src/res.c
(Generate patch)

Comparing:
ircd-hybrid/trunk/src/res.c (file contents), Revision 3347 by michael, Sun Apr 20 14:03:06 2014 UTC vs.
ircd-hybrid/branches/8.2.x/src/res.c (file contents), Revision 4235 by michael, Tue Jul 15 17:32:14 2014 UTC

# Line 70 | Line 70
70   static PF res_readreply;
71  
72   #define MAXPACKET      1024  /* rfc sez 512 but we expand names so ... */
73 #define RES_MAXALIASES 35    /* maximum aliases allowed */
74 #define RES_MAXADDRS   35    /* maximum addresses allowed */
73   #define AR_TTL         600   /* TTL in seconds for dns cache entries */
74  
75   /* RFC 1104/1105 wasn't very helpful about what these fields
# Line 195 | Line 193 | res_ourserver(const struct irc_ssaddr *i
193   * there too long without being resolved.
194   */
195   static time_t
196 < timeout_query_list(time_t now)
196 > timeout_query_list(void)
197   {
198    dlink_node *ptr = NULL, *ptr_next = NULL;
199 <  struct reslist *request;
199 >  struct reslist *request = NULL;
200    time_t next_time = 0;
201    time_t timeout   = 0;
202  
# Line 207 | Line 205 | timeout_query_list(time_t now)
205      request = ptr->data;
206      timeout = request->sentat + request->timeout;
207  
208 <    if (now >= timeout)
208 >    if (CurrentTime >= timeout)
209      {
210        if (--request->retries <= 0)
211        {
# Line 217 | Line 215 | timeout_query_list(time_t now)
215        }
216        else
217        {
218 <        request->sentat = now;
218 >        request->sentat = CurrentTime;
219          request->timeout += request->timeout;
220          resend_query(request);
221        }
# Line 227 | Line 225 | timeout_query_list(time_t now)
225        next_time = timeout;
226    }
227  
228 <  return (next_time > now) ? next_time : (now + AR_TTL);
228 >  return (next_time > CurrentTime) ? next_time : (CurrentTime + AR_TTL);
229   }
230  
231   /*
# Line 236 | Line 234 | timeout_query_list(time_t now)
234   static void
235   timeout_resolver(void *notused)
236   {
237 <  timeout_query_list(CurrentTime);
237 >  timeout_query_list();
238   }
239  
240   /*
# Line 256 | Line 254 | start_resolver(void)
254  
255      /* At the moment, the resolver FD data is global .. */
256      comm_setselect(&ResolverFileDescriptor, COMM_SELECT_READ, res_readreply, NULL, 0);
259    eventAdd("timeout_resolver", timeout_resolver, NULL, 1);
257    }
258   }
259  
# Line 266 | Line 263 | start_resolver(void)
263   void
264   init_resolver(void)
265   {
266 +  static struct event event_timeout_resolver =
267 +  {
268 +    .name = "timeout_resolver",
269 +    .handler = timeout_resolver,
270 +    .when = 1
271 +  };
272 +
273    dns_pool = mp_pool_new(sizeof(struct reslist), MP_CHUNK_SIZE_DNS);
274    memset(&ResolverFileDescriptor, 0, sizeof(fde_t));
275    start_resolver();
276 +
277 +  event_add(&event_timeout_resolver, NULL);
278   }
279  
280   /*
# Line 278 | Line 284 | void
284   restart_resolver(void)
285   {
286    fd_close(&ResolverFileDescriptor);
281  eventDelete(timeout_resolver, NULL);
287    start_resolver();
288   }
289  
# Line 304 | Line 309 | make_request(dns_callback_fnc callback,
309   {
310    struct reslist *request = mp_pool_get(dns_pool);
311  
307  memset(request, 0, sizeof(*request));
312    request->sentat       = CurrentTime;
313    request->retries      = 2;
314    request->resend       = 1;
# Line 431 | Line 435 | do_query_name(dns_callback_fnc callback,
435    if (request == NULL)
436    {
437      request       = make_request(callback, ctx);
438 <    request->name = MyMalloc(strlen(host_name) + 1);
438 >    request->name = MyCalloc(strlen(host_name) + 1);
439      request->type = type;
440      strcpy(request->name, host_name);
441   #ifdef IPV6
# Line 497 | Line 501 | do_query_number(dns_callback_fnc callbac
501      request       = make_request(callback, ctx);
502      request->type = T_PTR;
503      memcpy(&request->addr, addr, sizeof(struct irc_ssaddr));
504 <    request->name = MyMalloc(HOSTLEN + 1);
504 >    request->name = MyCalloc(HOSTLEN + 1);
505    }
506  
507    query_name(ipbuf, C_IN, T_PTR, request);
# Line 833 | Line 837 | res_readreply(fde_t *fd, void *data)
837       */
838      assert(0);
839  
840 +    (*request->callback)(request->callback_ctx, NULL, NULL);
841      /* XXX don't leak it */
842      rem_request(request);
843    }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)