lwsearch.h revision 170223
1235783Skib/*
2235783Skib * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
3235783Skib * Copyright (C) 2000, 2001  Internet Software Consortium.
4235783Skib *
5235783Skib * Permission to use, copy, modify, and distribute this software for any
6235783Skib * purpose with or without fee is hereby granted, provided that the above
7235783Skib * copyright notice and this permission notice appear in all copies.
8235783Skib *
9235783Skib * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10235783Skib * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11235783Skib * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12235783Skib * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13235783Skib * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14235783Skib * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15235783Skib * PERFORMANCE OF THIS SOFTWARE.
16235783Skib */
17235783Skib
18235783Skib/* $Id: lwsearch.h,v 1.5.18.2 2005/04/29 00:15:36 marka Exp $ */
19235783Skib
20235783Skib#ifndef NAMED_LWSEARCH_H
21235783Skib#define NAMED_LWSEARCH_H 1
22235783Skib
23235783Skib#include <isc/mutex.h>
24235783Skib#include <isc/result.h>
25235783Skib#include <isc/types.h>
26235783Skib
27235783Skib#include <dns/types.h>
28235783Skib
29235783Skib#include <named/types.h>
30235783Skib
31235783Skib/*! \file
32235783Skib * \brief
33235783Skib * Lightweight resolver search list types and routines.
34235783Skib *
35235783Skib * An ns_lwsearchlist_t holds a list of search path elements.
36235783Skib *
37235783Skib * An ns_lwsearchctx stores the state of search list during a lookup
38235783Skib * operation.
39235783Skib */
40235783Skib
41235783Skib/*% An ns_lwsearchlist_t holds a list of search path elements. */
42235783Skibstruct ns_lwsearchlist {
43235783Skib	unsigned int magic;
44235783Skib
45235783Skib	isc_mutex_t lock;
46235783Skib	isc_mem_t *mctx;
47235783Skib	unsigned int refs;
48235783Skib	dns_namelist_t names;
49235783Skib};
50235783Skib/*% An ns_lwsearchctx stores the state of search list during a lookup operation. */
51235783Skibstruct ns_lwsearchctx {
52235783Skib	dns_name_t *relname;
53235783Skib	dns_name_t *searchname;
54235783Skib	unsigned int ndots;
55235783Skib	ns_lwsearchlist_t *list;
56235783Skib	isc_boolean_t doneexact;
57235783Skib	isc_boolean_t exactfirst;
58235783Skib};
59235783Skib
60235783Skibisc_result_t
61235783Skibns_lwsearchlist_create(isc_mem_t *mctx, ns_lwsearchlist_t **listp);
62235783Skib/*%<
63235783Skib * Create an empty search list object.
64235783Skib */
65235783Skib
66235783Skibvoid
67235783Skibns_lwsearchlist_attach(ns_lwsearchlist_t *source, ns_lwsearchlist_t **target);
68235783Skib/*%<
69235783Skib * Attach to a search list object.
70235783Skib */
71235783Skib
72235783Skibvoid
73235783Skibns_lwsearchlist_detach(ns_lwsearchlist_t **listp);
74235783Skib/*%<
75235783Skib * Detach from a search list object.
76235783Skib */
77235783Skib
78235783Skibisc_result_t
79235783Skibns_lwsearchlist_append(ns_lwsearchlist_t *list, dns_name_t *name);
80235783Skib/*%<
81235783Skib * Append an element to a search list.  This creates a copy of the name.
82235783Skib */
83235783Skib
84235783Skibvoid
85235783Skibns_lwsearchctx_init(ns_lwsearchctx_t *sctx, ns_lwsearchlist_t *list,
86235783Skib		    dns_name_t *name, unsigned int ndots);
87235783Skib/*%<
88235783Skib * Creates a search list context structure.
89235783Skib */
90235783Skib
91235783Skibvoid
92235783Skibns_lwsearchctx_first(ns_lwsearchctx_t *sctx);
93235783Skib/*%<
94235783Skib * Moves the search list context iterator to the first element, which
95235783Skib * is usually the exact name.
96235783Skib */
97235783Skib
98235783Skibisc_result_t
99235783Skibns_lwsearchctx_next(ns_lwsearchctx_t *sctx);
100235783Skib/*%<
101235783Skib * Moves the search list context iterator to the next element.
102235783Skib */
103235783Skib
104235783Skibisc_result_t
105235783Skibns_lwsearchctx_current(ns_lwsearchctx_t *sctx, dns_name_t *absname);
106235783Skib/*%<
107235783Skib * Obtains the current name to be looked up.  This involves either
108235783Skib * concatenating the name with a search path element, making an
109235783Skib * exact name absolute, or doing nothing.
110235783Skib */
111235783Skib
112235783Skib#endif /* NAMED_LWSEARCH_H */
113235783Skib