1 /*
2  * Copyright (c) 2009 NLNet Labs. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
19  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
21  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
23  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  */
26 
27 /**
28  * DNS handler.
29  *
30  */
31 
32 #ifndef DAEMON_DNSHANDLER_H
33 #define DAEMON_DNSHANDLER_H
34 
35 #include "config.h"
36 #include <stdint.h>
37 
38 typedef struct dnshandler_struct dnshandler_type;
39 
40 #include "status.h"
41 #include "locks.h"
42 #include "status.h"
43 #include "wire/listener.h"
44 #include "wire/netio.h"
45 #include "wire/query.h"
46 #include "wire/sock.h"
47 
48 #define ODS_SE_NOTIFY_CMD "NOTIFY"
49 #define ODS_SE_MAX_HANDLERS 5
50 
51 struct dnshandler_struct {
52     janitor_thread_t thread_id;
53     engine_type* engine;
54     listener_type* interfaces;
55     socklist_type* socklist;
56     netio_type* netio;
57     query_type* query;
58     netio_handler_type xfrhandler;
59     unsigned need_to_exit;
60     netio_handler_type *tcp_accept_handlers;
61 };
62 
63 /**
64  * Create dns handler.
65  * \param[in] allocator memory allocator
66  * \param[in] interfaces list of interfaces
67  * \return dnshandler_type* created dns handler
68  *
69  */
70 extern dnshandler_type* dnshandler_create(listener_type* interfaces);
71 
72 /**
73  * Start dns handler listener.
74  * \param[in] dnshandler_type* dns handler
75  * \return ods_status status
76  *
77  */
78 extern ods_status dnshandler_listen(dnshandler_type* dnshandler);
79 
80 /**
81  * Start dns handler.
82  * \param[in] dnshandler_type* dns handler
83  *
84  */
85 extern void dnshandler_start(dnshandler_type* dnshandler);
86 
87 /**
88  * Signal dns handler.
89  * \param[in] dnshandler_type* dns handler
90  *
91  */
92 extern void dnshandler_signal(dnshandler_type* dnshandler);
93 
94 /**
95  * Forward notify to zone transfer handler.
96  * \param[in] dnshandler_type* dns handler
97  * \param[in] pkt notify packet
98  * \param[in] len packet length
99  *
100  */
101 extern void dnshandler_fwd_notify(dnshandler_type* dnshandler,
102     uint8_t* pkt, size_t len);
103 
104 /**
105  * Cleanup dns handler.
106  * \param[in] dnshandler_type* dns handler
107  *
108  */
109 extern void dnshandler_cleanup(dnshandler_type* dnshandler);
110 
111 #endif /* DAEMON_DNSHANDLER_H */
112