Lines Matching refs:lookup

59 lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event);
63 dns_lookup_t *lookup = event->ev_arg; in fetch_done() local
68 REQUIRE(VALID_LOOKUP(lookup)); in fetch_done()
69 REQUIRE(lookup->task == task); in fetch_done()
71 REQUIRE(fevent->fetch == lookup->fetch); in fetch_done()
73 lookup_find(lookup, fevent); in fetch_done()
77 start_fetch(dns_lookup_t *lookup) { in start_fetch() argument
84 REQUIRE(lookup->fetch == NULL); in start_fetch()
87 lookup->view->resolver, dns_fixedname_name(&lookup->name), in start_fetch()
88 lookup->type, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, in start_fetch()
89 lookup->task, fetch_done, lookup, &lookup->rdataset, in start_fetch()
90 &lookup->sigrdataset, &lookup->fetch); in start_fetch()
96 build_event(dns_lookup_t *lookup) { in build_event() argument
101 name = isc_mem_get(lookup->mctx, sizeof(dns_name_t)); in build_event()
103 dns_name_dup(dns_fixedname_name(&lookup->name), lookup->mctx, name); in build_event()
105 if (dns_rdataset_isassociated(&lookup->rdataset)) { in build_event()
106 rdataset = isc_mem_get(lookup->mctx, sizeof(dns_rdataset_t)); in build_event()
108 dns_rdataset_clone(&lookup->rdataset, rdataset); in build_event()
111 if (dns_rdataset_isassociated(&lookup->sigrdataset)) { in build_event()
112 sigrdataset = isc_mem_get(lookup->mctx, sizeof(dns_rdataset_t)); in build_event()
114 dns_rdataset_clone(&lookup->sigrdataset, sigrdataset); in build_event()
117 lookup->event->name = name; in build_event()
118 lookup->event->rdataset = rdataset; in build_event()
119 lookup->event->sigrdataset = sigrdataset; in build_event()
125 view_find(dns_lookup_t *lookup, dns_name_t *foundname) { in view_find() argument
127 dns_name_t *name = dns_fixedname_name(&lookup->name); in view_find()
130 if (lookup->type == dns_rdatatype_rrsig) { in view_find()
133 type = lookup->type; in view_find()
136 result = dns_view_find(lookup->view, name, type, 0, 0, false, false, in view_find()
137 &lookup->event->db, &lookup->event->node, in view_find()
138 foundname, &lookup->rdataset, in view_find()
139 &lookup->sigrdataset); in view_find()
144 lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event) { in lookup_find() argument
157 REQUIRE(VALID_LOOKUP(lookup)); in lookup_find()
159 LOCK(&lookup->lock); in lookup_find()
162 name = dns_fixedname_name(&lookup->name); in lookup_find()
165 lookup->restarts++; in lookup_find()
169 if (event == NULL && !lookup->canceled) { in lookup_find()
171 INSIST(!dns_rdataset_isassociated(&lookup->rdataset)); in lookup_find()
173 &lookup->sigrdataset)); in lookup_find()
177 if (lookup->event->node != NULL) { in lookup_find()
178 INSIST(lookup->event->db != NULL); in lookup_find()
179 dns_db_detachnode(lookup->event->db, in lookup_find()
180 &lookup->event->node); in lookup_find()
182 if (lookup->event->db != NULL) { in lookup_find()
183 dns_db_detach(&lookup->event->db); in lookup_find()
185 result = view_find(lookup, fname); in lookup_find()
191 if (lookup->event->node != NULL) { in lookup_find()
192 INSIST(lookup->event->db != NULL); in lookup_find()
193 dns_db_detachnode(lookup->event->db, in lookup_find()
194 &lookup->event->node); in lookup_find()
196 if (lookup->event->db != NULL) { in lookup_find()
197 dns_db_detach(&lookup->event->db); in lookup_find()
199 result = start_fetch(lookup); in lookup_find()
208 dns_resolver_destroyfetch(&lookup->fetch); in lookup_find()
209 INSIST(event->rdataset == &lookup->rdataset); in lookup_find()
210 INSIST(event->sigrdataset == &lookup->sigrdataset); in lookup_find()
218 if (lookup->canceled) { in lookup_find()
224 result = build_event(lookup); in lookup_find()
229 dns_db_attach(event->db, &lookup->event->db); in lookup_find()
232 dns_db_attachnode(lookup->event->db, in lookup_find()
234 &lookup->event->node); in lookup_find()
242 result = dns_rdataset_first(&lookup->rdataset); in lookup_find()
246 dns_rdataset_current(&lookup->rdataset, &rdata); in lookup_find()
264 result = dns_rdataset_first(&lookup->rdataset); in lookup_find()
268 dns_rdataset_current(&lookup->rdataset, &rdata); in lookup_find()
291 if (dns_rdataset_isassociated(&lookup->rdataset)) { in lookup_find()
292 dns_rdataset_disassociate(&lookup->rdataset); in lookup_find()
294 if (dns_rdataset_isassociated(&lookup->sigrdataset)) { in lookup_find()
295 dns_rdataset_disassociate(&lookup->sigrdataset); in lookup_find()
312 if (want_restart && lookup->restarts == MAX_RESTARTS) { in lookup_find()
320 lookup->event->result = result; in lookup_find()
321 lookup->event->ev_sender = lookup; in lookup_find()
322 isc_task_sendanddetach(&lookup->task, in lookup_find()
323 (isc_event_t **)&lookup->event); in lookup_find()
324 dns_view_detach(&lookup->view); in lookup_find()
327 UNLOCK(&lookup->lock); in lookup_find()
366 dns_lookup_t *lookup; in dns_lookup_create() local
369 lookup = isc_mem_get(mctx, sizeof(*lookup)); in dns_lookup_create()
370 lookup->mctx = NULL; in dns_lookup_create()
371 isc_mem_attach(mctx, &lookup->mctx); in dns_lookup_create()
372 lookup->options = options; in dns_lookup_create()
374 ievent = isc_event_allocate(mctx, lookup, DNS_EVENT_LOOKUPDONE, action, in dns_lookup_create()
375 arg, sizeof(*lookup->event)); in dns_lookup_create()
376 lookup->event = (dns_lookupevent_t *)ievent; in dns_lookup_create()
377 lookup->event->ev_destroy = levent_destroy; in dns_lookup_create()
378 lookup->event->ev_destroy_arg = mctx; in dns_lookup_create()
379 lookup->event->result = ISC_R_FAILURE; in dns_lookup_create()
380 lookup->event->name = NULL; in dns_lookup_create()
381 lookup->event->rdataset = NULL; in dns_lookup_create()
382 lookup->event->sigrdataset = NULL; in dns_lookup_create()
383 lookup->event->db = NULL; in dns_lookup_create()
384 lookup->event->node = NULL; in dns_lookup_create()
386 lookup->task = NULL; in dns_lookup_create()
387 isc_task_attach(task, &lookup->task); in dns_lookup_create()
389 isc_mutex_init(&lookup->lock); in dns_lookup_create()
391 dns_fixedname_init(&lookup->name); in dns_lookup_create()
393 dns_name_copynf(name, dns_fixedname_name(&lookup->name)); in dns_lookup_create()
395 lookup->type = type; in dns_lookup_create()
396 lookup->view = NULL; in dns_lookup_create()
397 dns_view_attach(view, &lookup->view); in dns_lookup_create()
398 lookup->fetch = NULL; in dns_lookup_create()
399 lookup->restarts = 0; in dns_lookup_create()
400 lookup->canceled = false; in dns_lookup_create()
401 dns_rdataset_init(&lookup->rdataset); in dns_lookup_create()
402 dns_rdataset_init(&lookup->sigrdataset); in dns_lookup_create()
403 lookup->magic = LOOKUP_MAGIC; in dns_lookup_create()
405 *lookupp = lookup; in dns_lookup_create()
407 lookup_find(lookup, NULL); in dns_lookup_create()
413 dns_lookup_cancel(dns_lookup_t *lookup) { in dns_lookup_cancel() argument
414 REQUIRE(VALID_LOOKUP(lookup)); in dns_lookup_cancel()
416 LOCK(&lookup->lock); in dns_lookup_cancel()
418 if (!lookup->canceled) { in dns_lookup_cancel()
419 lookup->canceled = true; in dns_lookup_cancel()
420 if (lookup->fetch != NULL) { in dns_lookup_cancel()
421 INSIST(lookup->view != NULL); in dns_lookup_cancel()
422 dns_resolver_cancelfetch(lookup->fetch); in dns_lookup_cancel()
426 UNLOCK(&lookup->lock); in dns_lookup_cancel()
431 dns_lookup_t *lookup; in dns_lookup_destroy() local
434 lookup = *lookupp; in dns_lookup_destroy()
436 REQUIRE(VALID_LOOKUP(lookup)); in dns_lookup_destroy()
437 REQUIRE(lookup->event == NULL); in dns_lookup_destroy()
438 REQUIRE(lookup->task == NULL); in dns_lookup_destroy()
439 REQUIRE(lookup->view == NULL); in dns_lookup_destroy()
440 if (dns_rdataset_isassociated(&lookup->rdataset)) { in dns_lookup_destroy()
441 dns_rdataset_disassociate(&lookup->rdataset); in dns_lookup_destroy()
443 if (dns_rdataset_isassociated(&lookup->sigrdataset)) { in dns_lookup_destroy()
444 dns_rdataset_disassociate(&lookup->sigrdataset); in dns_lookup_destroy()
447 isc_mutex_destroy(&lookup->lock); in dns_lookup_destroy()
448 lookup->magic = 0; in dns_lookup_destroy()
449 isc_mem_putanddetach(&lookup->mctx, lookup, sizeof(*lookup)); in dns_lookup_destroy()