1135446Strhodes/*
2262706Serwin * Copyright (C) 2004, 2005, 2007, 2010, 2011, 2013  Internet Systems Consortium, Inc. ("ISC")
3135446Strhodes * Copyright (C) 1999-2002  Internet Software Consortium.
4135446Strhodes *
5193149Sdougb * Permission to use, copy, modify, and/or distribute this software for any
6135446Strhodes * purpose with or without fee is hereby granted, provided that the above
7135446Strhodes * copyright notice and this permission notice appear in all copies.
8135446Strhodes *
9135446Strhodes * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10135446Strhodes * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11135446Strhodes * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12135446Strhodes * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13135446Strhodes * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14135446Strhodes * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15135446Strhodes * PERFORMANCE OF THIS SOFTWARE.
16135446Strhodes */
17135446Strhodes
18234010Sdougb/* $Id: query.h,v 1.45 2011/01/13 04:59:24 tbox Exp $ */
19135446Strhodes
20135446Strhodes#ifndef NAMED_QUERY_H
21135446Strhodes#define NAMED_QUERY_H 1
22135446Strhodes
23170222Sdougb/*! \file */
24170222Sdougb
25135446Strhodes#include <isc/types.h>
26135446Strhodes#include <isc/buffer.h>
27135446Strhodes#include <isc/netaddr.h>
28135446Strhodes
29224092Sdougb#include <dns/rdataset.h>
30224092Sdougb#include <dns/rpz.h>
31135446Strhodes#include <dns/types.h>
32135446Strhodes
33135446Strhodes#include <named/types.h>
34135446Strhodes
35170222Sdougb/*% nameserver database version structure */
36135446Strhodestypedef struct ns_dbversion {
37135446Strhodes	dns_db_t			*db;
38135446Strhodes	dns_dbversion_t			*version;
39224092Sdougb	isc_boolean_t			acl_checked;
40135446Strhodes	isc_boolean_t			queryok;
41135446Strhodes	ISC_LINK(struct ns_dbversion)	link;
42135446Strhodes} ns_dbversion_t;
43135446Strhodes
44170222Sdougb/*% nameserver query structure */
45135446Strhodesstruct ns_query {
46135446Strhodes	unsigned int			attributes;
47135446Strhodes	unsigned int			restarts;
48135446Strhodes	isc_boolean_t			timerset;
49135446Strhodes	dns_name_t *			qname;
50135446Strhodes	dns_name_t *			origqname;
51135446Strhodes	unsigned int			dboptions;
52135446Strhodes	unsigned int			fetchoptions;
53135446Strhodes	dns_db_t *			gluedb;
54135446Strhodes	dns_db_t *			authdb;
55135446Strhodes	dns_zone_t *			authzone;
56135446Strhodes	isc_boolean_t			authdbset;
57135446Strhodes	isc_boolean_t			isreferral;
58135446Strhodes	isc_mutex_t			fetchlock;
59135446Strhodes	dns_fetch_t *			fetch;
60224092Sdougb	dns_rpz_st_t *			rpz_st;
61135446Strhodes	isc_bufferlist_t		namebufs;
62135446Strhodes	ISC_LIST(ns_dbversion_t)	activeversions;
63135446Strhodes	ISC_LIST(ns_dbversion_t)	freeversions;
64224092Sdougb	dns_rdataset_t *		dns64_aaaa;
65224092Sdougb	dns_rdataset_t *		dns64_sigaaaa;
66224092Sdougb	isc_boolean_t *			dns64_aaaaok;
67224092Sdougb	unsigned int			dns64_aaaaoklen;
68224092Sdougb	unsigned int			dns64_options;
69224092Sdougb	unsigned int			dns64_ttl;
70135446Strhodes};
71135446Strhodes
72135446Strhodes#define NS_QUERYATTR_RECURSIONOK	0x0001
73135446Strhodes#define NS_QUERYATTR_CACHEOK		0x0002
74135446Strhodes#define NS_QUERYATTR_PARTIALANSWER	0x0004
75135446Strhodes#define NS_QUERYATTR_NAMEBUFUSED	0x0008
76135446Strhodes#define NS_QUERYATTR_RECURSING		0x0010
77135446Strhodes#define NS_QUERYATTR_CACHEGLUEOK	0x0020
78135446Strhodes#define NS_QUERYATTR_QUERYOKVALID	0x0040
79135446Strhodes#define NS_QUERYATTR_QUERYOK		0x0080
80135446Strhodes#define NS_QUERYATTR_WANTRECURSION	0x0100
81135446Strhodes#define NS_QUERYATTR_SECURE		0x0200
82135446Strhodes#define NS_QUERYATTR_NOAUTHORITY	0x0400
83135446Strhodes#define NS_QUERYATTR_NOADDITIONAL	0x0800
84216175Sdougb#define NS_QUERYATTR_CACHEACLOKVALID	0x1000
85216175Sdougb#define NS_QUERYATTR_CACHEACLOK		0x2000
86224092Sdougb#define NS_QUERYATTR_DNS64		0x4000
87224092Sdougb#define NS_QUERYATTR_DNS64EXCLUDE	0x8000
88135446Strhodes
89262706Serwin#ifdef USE_RRL
90262706Serwin#define NS_QUERYATTR_RRL_CHECKED	0x10000
91262706Serwin#endif /* USE_RRL */
92224092Sdougb
93262706Serwin
94135446Strhodesisc_result_t
95135446Strhodesns_query_init(ns_client_t *client);
96135446Strhodes
97135446Strhodesvoid
98135446Strhodesns_query_free(ns_client_t *client);
99135446Strhodes
100135446Strhodesvoid
101135446Strhodesns_query_start(ns_client_t *client);
102135446Strhodes
103135446Strhodesvoid
104135446Strhodesns_query_cancel(ns_client_t *client);
105135446Strhodes
106135446Strhodes#endif /* NAMED_QUERY_H */
107