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