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/src/irc_res.c (file contents), Revision 1155 by michael, Tue Aug 9 20:27:45 2011 UTC vs.
ircd-hybrid/trunk/src/irc_res.c (file contents), Revision 1834 by michael, Fri Apr 19 19:50:27 2013 UTC

# Line 21 | Line 21
21  
22   #include "stdinc.h"
23   #include "list.h"
24 #include "balloc.h"
24   #include "client.h"
25   #include "event.h"
26   #include "irc_string.h"
28 #include "sprintf_irc.h"
27   #include "ircd.h"
28   #include "numeric.h"
29   #include "rng_mt.h"
30   #include "fdlist.h"
33 #include "fileio.h" /* for fbopen / fbclose / fbputs */
31   #include "s_bsd.h"
32 < #include "s_log.h"
32 > #include "log.h"
33 > #include "s_misc.h"
34   #include "send.h"
35   #include "memory.h"
36 + #include "mempool.h"
37   #include "irc_res.h"
38   #include "irc_reslib.h"
40 #include "common.h"
39  
40   #if (CHAR_BIT != 8)
41   #error this code needs to be able to address individual octets
# Line 92 | Line 90 | struct reslist
90  
91   static fde_t ResolverFileDescriptor;
92   static dlink_list request_list = { NULL, NULL, 0 };
93 < static BlockHeap *dns_heap = NULL;
93 > static mp_pool_t *dns_pool = NULL;
94  
95   static void rem_request(struct reslist *);
96   static struct reslist *make_request(dns_callback_fnc, void *);
# Line 130 | Line 128 | res_ourserver(const struct irc_ssaddr *i
128    const struct sockaddr_in *v4in = (const struct sockaddr_in *)inp;
129    int ns;
130  
131 <  for (ns = 0; ns < irc_nscount; ns++)
131 >  for (ns = 0; ns < irc_nscount; ++ns)
132    {
133      const struct irc_ssaddr *srv = &irc_nsaddr_list[ns];
134   #ifdef IPV6
# Line 148 | Line 146 | res_ourserver(const struct irc_ssaddr *i
146        case AF_INET6:
147          if (srv->ss.ss_family == inp->ss.ss_family)
148            if (v6->sin6_port == v6in->sin6_port)
149 <            if ((memcmp(&v6->sin6_addr.s6_addr, &v6in->sin6_addr.s6_addr,
150 <                    sizeof(struct in6_addr)) == 0) ||
153 <                (memcmp(&v6->sin6_addr.s6_addr, &in6addr_any,
154 <                        sizeof(struct in6_addr)) == 0))
149 >            if (!memcmp(&v6->sin6_addr.s6_addr, &v6in->sin6_addr.s6_addr,
150 >                        sizeof(struct in6_addr)))
151                return 1;
152          break;
153   #endif
154        case AF_INET:
155          if (srv->ss.ss_family == inp->ss.ss_family)
156            if (v4->sin_port == v4in->sin_port)
157 <            if ((v4->sin_addr.s_addr == INADDR_ANY) ||
162 <                (v4->sin_addr.s_addr == v4in->sin_addr.s_addr))
157 >            if (v4->sin_addr.s_addr == v4in->sin_addr.s_addr)
158                return 1;
159          break;
160        default:
# Line 248 | Line 243 | start_resolver(void)
243   void
244   init_resolver(void)
245   {
246 <  dns_heap = BlockHeapCreate("dns", sizeof(struct reslist), DNS_HEAP_SIZE);
246 >  dns_pool = mp_pool_new(sizeof(struct reslist), MP_CHUNK_SIZE_DNS);
247    memset(&ResolverFileDescriptor, 0, sizeof(fde_t));
248    start_resolver();
249   }
# Line 275 | Line 270 | rem_request(struct reslist *request)
270    dlinkDelete(&request->node, &request_list);
271  
272    MyFree(request->name);
273 <  BlockHeapFree(dns_heap, request);
273 >  mp_pool_release(request);
274   }
275  
276   /*
# Line 284 | Line 279 | rem_request(struct reslist *request)
279   static struct reslist *
280   make_request(dns_callback_fnc callback, void *ctx)
281   {
282 <  struct reslist *request = BlockHeapAlloc(dns_heap);
282 >  struct reslist *request = mp_pool_get(dns_pool);
283  
284 +  memset(request, 0, sizeof(*request));
285    request->sentat       = CurrentTime;
286    request->retries      = 3;
287    request->resend       = 1;
# Line 679 | Line 675 | proc_answer(struct reslist *request, HEA
675           * but its possible its just a broken nameserver with still
676           * valid answers. But lets do some rudimentary logging for now...
677           */
678 <        ilog(L_ERROR, "irc_res.c bogus type %d", type);
678 >        ilog(LOG_TYPE_IRCD, "irc_res.c bogus type %d", type);
679          break;
680      }
681    }

Diff Legend

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