Lines Matching refs:lookup

1 /*	$NetBSD: lookup.c,v 1.1 2024/02/18 20:57:32 christos Exp $	*/
28 #include <dns/lookup.h>
61 lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event);
65 dns_lookup_t *lookup = event->ev_arg;
70 REQUIRE(VALID_LOOKUP(lookup));
71 REQUIRE(lookup->task == task);
73 REQUIRE(fevent->fetch == lookup->fetch);
75 lookup_find(lookup, fevent);
79 start_fetch(dns_lookup_t *lookup) {
83 * The caller must be holding the lookup's lock.
86 REQUIRE(lookup->fetch == NULL);
89 lookup->view->resolver, dns_fixedname_name(&lookup->name),
90 lookup->type, NULL, NULL, NULL, NULL, 0, 0, 0, NULL,
91 lookup->task, fetch_done, lookup, &lookup->rdataset,
92 &lookup->sigrdataset, &lookup->fetch);
98 build_event(dns_lookup_t *lookup) {
103 name = isc_mem_get(lookup->mctx, sizeof(dns_name_t));
105 dns_name_dup(dns_fixedname_name(&lookup->name), lookup->mctx, name);
107 if (dns_rdataset_isassociated(&lookup->rdataset)) {
108 rdataset = isc_mem_get(lookup->mctx, sizeof(dns_rdataset_t));
110 dns_rdataset_clone(&lookup->rdataset, rdataset);
113 if (dns_rdataset_isassociated(&lookup->sigrdataset)) {
114 sigrdataset = isc_mem_get(lookup->mctx, sizeof(dns_rdataset_t));
116 dns_rdataset_clone(&lookup->sigrdataset, sigrdataset);
119 lookup->event->name = name;
120 lookup->event->rdataset = rdataset;
121 lookup->event->sigrdataset = sigrdataset;
127 view_find(dns_lookup_t *lookup, dns_name_t *foundname) {
129 dns_name_t *name = dns_fixedname_name(&lookup->name);
132 if (lookup->type == dns_rdatatype_rrsig) {
135 type = lookup->type;
138 result = dns_view_find(lookup->view, name, type, 0, 0, false, false,
139 &lookup->event->db, &lookup->event->node,
140 foundname, &lookup->rdataset,
141 &lookup->sigrdataset);
146 lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event) {
159 REQUIRE(VALID_LOOKUP(lookup));
161 LOCK(&lookup->lock);
164 name = dns_fixedname_name(&lookup->name);
167 lookup->restarts++;
171 if (event == NULL && !lookup->canceled) {
173 INSIST(!dns_rdataset_isassociated(&lookup->rdataset));
175 &lookup->sigrdataset));
179 if (lookup->event->node != NULL) {
180 INSIST(lookup->event->db != NULL);
181 dns_db_detachnode(lookup->event->db,
182 &lookup->event->node);
184 if (lookup->event->db != NULL) {
185 dns_db_detach(&lookup->event->db);
187 result = view_find(lookup, fname);
193 if (lookup->event->node != NULL) {
194 INSIST(lookup->event->db != NULL);
195 dns_db_detachnode(lookup->event->db,
196 &lookup->event->node);
198 if (lookup->event->db != NULL) {
199 dns_db_detach(&lookup->event->db);
201 result = start_fetch(lookup);
210 dns_resolver_destroyfetch(&lookup->fetch);
211 INSIST(event->rdataset == &lookup->rdataset);
212 INSIST(event->sigrdataset == &lookup->sigrdataset);
220 if (lookup->canceled) {
226 result = build_event(lookup);
231 dns_db_attach(event->db, &lookup->event->db);
234 dns_db_attachnode(lookup->event->db,
236 &lookup->event->node);
241 * Copy the CNAME's target into the lookup's
244 result = dns_rdataset_first(&lookup->rdataset);
248 dns_rdataset_current(&lookup->rdataset, &rdata);
266 result = dns_rdataset_first(&lookup->rdataset);
270 dns_rdataset_current(&lookup->rdataset, &rdata);
293 if (dns_rdataset_isassociated(&lookup->rdataset)) {
294 dns_rdataset_disassociate(&lookup->rdataset);
296 if (dns_rdataset_isassociated(&lookup->sigrdataset)) {
297 dns_rdataset_disassociate(&lookup->sigrdataset);
314 if (want_restart && lookup->restarts == MAX_RESTARTS) {
322 lookup->event->result = result;
323 lookup->event->ev_sender = lookup;
324 isc_task_sendanddetach(&lookup->task,
325 (isc_event_t **)(void *)&lookup->event);
326 dns_view_detach(&lookup->view);
329 UNLOCK(&lookup->lock);
368 dns_lookup_t *lookup;
371 lookup = isc_mem_get(mctx, sizeof(*lookup));
372 lookup->mctx = NULL;
373 isc_mem_attach(mctx, &lookup->mctx);
374 lookup->options = options;
376 ievent = isc_event_allocate(mctx, lookup, DNS_EVENT_LOOKUPDONE, action,
377 arg, sizeof(*lookup->event));
378 lookup->event = (dns_lookupevent_t *)ievent;
379 lookup->event->ev_destroy = levent_destroy;
380 lookup->event->ev_destroy_arg = mctx;
381 lookup->event->result = ISC_R_FAILURE;
382 lookup->event->name = NULL;
383 lookup->event->rdataset = NULL;
384 lookup->event->sigrdataset = NULL;
385 lookup->event->db = NULL;
386 lookup->event->node = NULL;
388 lookup->task = NULL;
389 isc_task_attach(task, &lookup->task);
391 isc_mutex_init(&lookup->lock);
393 dns_fixedname_init(&lookup->name);
395 dns_name_copynf(name, dns_fixedname_name(&lookup->name));
397 lookup->type = type;
398 lookup->view = NULL;
399 dns_view_attach(view, &lookup->view);
400 lookup->fetch = NULL;
401 lookup->restarts = 0;
402 lookup->canceled = false;
403 dns_rdataset_init(&lookup->rdataset);
404 dns_rdataset_init(&lookup->sigrdataset);
405 lookup->magic = LOOKUP_MAGIC;
407 *lookupp = lookup;
409 lookup_find(lookup, NULL);
415 dns_lookup_cancel(dns_lookup_t *lookup) {
416 REQUIRE(VALID_LOOKUP(lookup));
418 LOCK(&lookup->lock);
420 if (!lookup->canceled) {
421 lookup->canceled = true;
422 if (lookup->fetch != NULL) {
423 INSIST(lookup->view != NULL);
424 dns_resolver_cancelfetch(lookup->fetch);
428 UNLOCK(&lookup->lock);
433 dns_lookup_t *lookup;
436 lookup = *lookupp;
438 REQUIRE(VALID_LOOKUP(lookup));
439 REQUIRE(lookup->event == NULL);
440 REQUIRE(lookup->task == NULL);
441 REQUIRE(lookup->view == NULL);
442 if (dns_rdataset_isassociated(&lookup->rdataset)) {
443 dns_rdataset_disassociate(&lookup->rdataset);
445 if (dns_rdataset_isassociated(&lookup->sigrdataset)) {
446 dns_rdataset_disassociate(&lookup->sigrdataset);
449 isc_mutex_destroy(&lookup->lock);
450 lookup->magic = 0;
451 isc_mem_putanddetach(&lookup->mctx, lookup, sizeof(*lookup));