• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/bind9-45.101/bind9/lib/dns/

Lines Matching refs:lookup

18 /* $Id: lookup.c,v 1.21 2007/06/18 23:47:40 tbox Exp $ */
32 #include <dns/lookup.h>
64 static void lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event);
68 dns_lookup_t *lookup = event->ev_arg;
73 REQUIRE(VALID_LOOKUP(lookup));
74 REQUIRE(lookup->task == task);
76 REQUIRE(fevent->fetch == lookup->fetch);
78 lookup_find(lookup, fevent);
82 start_fetch(dns_lookup_t *lookup) {
86 * The caller must be holding the lookup's lock.
89 REQUIRE(lookup->fetch == NULL);
91 result = dns_resolver_createfetch(lookup->view->resolver,
92 dns_fixedname_name(&lookup->name),
93 lookup->type,
95 lookup->task, fetch_done, lookup,
96 &lookup->rdataset,
97 &lookup->sigrdataset,
98 &lookup->fetch);
104 build_event(dns_lookup_t *lookup) {
110 name = isc_mem_get(lookup->mctx, sizeof(dns_name_t));
116 result = dns_name_dup(dns_fixedname_name(&lookup->name),
117 lookup->mctx, name);
121 if (dns_rdataset_isassociated(&lookup->rdataset)) {
122 rdataset = isc_mem_get(lookup->mctx, sizeof(dns_rdataset_t));
128 dns_rdataset_clone(&lookup->rdataset, rdataset);
131 if (dns_rdataset_isassociated(&lookup->sigrdataset)) {
132 sigrdataset = isc_mem_get(lookup->mctx,
139 dns_rdataset_clone(&lookup->sigrdataset, sigrdataset);
142 lookup->event->name = name;
143 lookup->event->rdataset = rdataset;
144 lookup->event->sigrdataset = sigrdataset;
151 dns_name_free(name, lookup->mctx);
152 isc_mem_put(lookup->mctx, name, sizeof(dns_name_t));
157 isc_mem_put(lookup->mctx, rdataset, sizeof(dns_rdataset_t));
163 view_find(dns_lookup_t *lookup, dns_name_t *foundname) {
165 dns_name_t *name = dns_fixedname_name(&lookup->name);
168 if (lookup->type == dns_rdatatype_rrsig)
171 type = lookup->type;
173 result = dns_view_find(lookup->view, name, type, 0, 0, ISC_FALSE,
174 &lookup->event->db, &lookup->event->node,
175 foundname, &lookup->rdataset,
176 &lookup->sigrdataset);
181 lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event) {
194 REQUIRE(VALID_LOOKUP(lookup));
196 LOCK(&lookup->lock);
199 name = dns_fixedname_name(&lookup->name);
202 lookup->restarts++;
206 if (event == NULL && !lookup->canceled) {
209 INSIST(!dns_rdataset_isassociated(&lookup->rdataset));
211 (&lookup->sigrdataset));
214 if (lookup->event->node != NULL) {
215 INSIST(lookup->event->db != NULL);
216 dns_db_detachnode(lookup->event->db,
217 &lookup->event->node);
219 if (lookup->event->db != NULL)
220 dns_db_detach(&lookup->event->db);
221 result = view_find(lookup, fname);
227 if (lookup->event->node != NULL) {
228 INSIST(lookup->event->db != NULL);
229 dns_db_detachnode(lookup->event->db,
230 &lookup->event->node);
232 if (lookup->event->db != NULL)
233 dns_db_detach(&lookup->event->db);
234 result = start_fetch(lookup);
242 dns_resolver_destroyfetch(&lookup->fetch);
243 INSIST(event->rdataset == &lookup->rdataset);
244 INSIST(event->sigrdataset == &lookup->sigrdataset);
251 if (lookup->canceled)
256 result = build_event(lookup);
260 dns_db_attach(event->db, &lookup->event->db);
262 dns_db_attachnode(lookup->event->db,
264 &lookup->event->node);
268 * Copy the CNAME's target into the lookup's
271 result = dns_rdataset_first(&lookup->rdataset);
274 dns_rdataset_current(&lookup->rdataset, &rdata);
293 result = dns_rdataset_first(&lookup->rdataset);
296 dns_rdataset_current(&lookup->rdataset, &rdata);
319 if (dns_rdataset_isassociated(&lookup->rdataset))
320 dns_rdataset_disassociate(&lookup->rdataset);
321 if (dns_rdataset_isassociated(&lookup->sigrdataset))
322 dns_rdataset_disassociate(&lookup->sigrdataset);
336 if (want_restart && lookup->restarts == MAX_RESTARTS) {
345 lookup->event->result = result;
346 lookup->event->ev_sender = lookup;
347 isc_task_sendanddetach(&lookup->task,
348 (isc_event_t **)&lookup->event);
349 dns_view_detach(&lookup->view);
352 UNLOCK(&lookup->lock);
390 dns_lookup_t *lookup;
393 lookup = isc_mem_get(mctx, sizeof(*lookup));
394 if (lookup == NULL)
396 lookup->mctx = mctx;
397 lookup->options = options;
399 ievent = isc_event_allocate(mctx, lookup, DNS_EVENT_LOOKUPDONE,
400 action, arg, sizeof(*lookup->event));
405 lookup->event = (dns_lookupevent_t *)ievent;
406 lookup->event->ev_destroy = levent_destroy;
407 lookup->event->ev_destroy_arg = mctx;
408 lookup->event->result = ISC_R_FAILURE;
409 lookup->event->name = NULL;
410 lookup->event->rdataset = NULL;
411 lookup->event->sigrdataset = NULL;
412 lookup->event->db = NULL;
413 lookup->event->node = NULL;
415 lookup->task = NULL;
416 isc_task_attach(task, &lookup->task);
418 result = isc_mutex_init(&lookup->lock);
422 dns_fixedname_init(&lookup->name);
424 result = dns_name_copy(name, dns_fixedname_name(&lookup->name), NULL);
428 lookup->type = type;
429 lookup->view = NULL;
430 dns_view_attach(view, &lookup->view);
431 lookup->fetch = NULL;
432 lookup->restarts = 0;
433 lookup->canceled = ISC_FALSE;
434 dns_rdataset_init(&lookup->rdataset);
435 dns_rdataset_init(&lookup->sigrdataset);
436 lookup->magic = LOOKUP_MAGIC;
438 *lookupp = lookup;
440 lookup_find(lookup, NULL);
445 DESTROYLOCK(&lookup->lock);
448 ievent = (isc_event_t *)lookup->event;
450 lookup->event = NULL;
452 isc_task_detach(&lookup->task);
455 isc_mem_put(mctx, lookup, sizeof(*lookup));
461 dns_lookup_cancel(dns_lookup_t *lookup) {
462 REQUIRE(VALID_LOOKUP(lookup));
464 LOCK(&lookup->lock);
466 if (!lookup->canceled) {
467 lookup->canceled = ISC_TRUE;
468 if (lookup->fetch != NULL) {
469 INSIST(lookup->view != NULL);
470 dns_resolver_cancelfetch(lookup->fetch);
474 UNLOCK(&lookup->lock);
479 dns_lookup_t *lookup;
482 lookup = *lookupp;
483 REQUIRE(VALID_LOOKUP(lookup));
484 REQUIRE(lookup->event == NULL);
485 REQUIRE(lookup->task == NULL);
486 REQUIRE(lookup->view == NULL);
487 if (dns_rdataset_isassociated(&lookup->rdataset))
488 dns_rdataset_disassociate(&lookup->rdataset);
489 if (dns_rdataset_isassociated(&lookup->sigrdataset))
490 dns_rdataset_disassociate(&lookup->sigrdataset);
492 DESTROYLOCK(&lookup->lock);
493 lookup->magic = 0;
494 isc_mem_put(lookup->mctx, lookup, sizeof(*lookup));