xref: /freebsd/contrib/unbound/libunbound/worker.h (revision 8a9587d7732f1de6554dc3b596368e0573408eaf)
104b59eacSDag-Erling Smørgrav /*
204b59eacSDag-Erling Smørgrav  * libunbound/worker.h - prototypes for worker methods.
304b59eacSDag-Erling Smørgrav  *
404b59eacSDag-Erling Smørgrav  * Copyright (c) 2007, NLnet Labs. All rights reserved.
504b59eacSDag-Erling Smørgrav  *
604b59eacSDag-Erling Smørgrav  * This software is open source.
704b59eacSDag-Erling Smørgrav  *
804b59eacSDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
904b59eacSDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
1004b59eacSDag-Erling Smørgrav  * are met:
1104b59eacSDag-Erling Smørgrav  *
1204b59eacSDag-Erling Smørgrav  * Redistributions of source code must retain the above copyright notice,
1304b59eacSDag-Erling Smørgrav  * this list of conditions and the following disclaimer.
1404b59eacSDag-Erling Smørgrav  *
1504b59eacSDag-Erling Smørgrav  * Redistributions in binary form must reproduce the above copyright notice,
1604b59eacSDag-Erling Smørgrav  * this list of conditions and the following disclaimer in the documentation
1704b59eacSDag-Erling Smørgrav  * and/or other materials provided with the distribution.
1804b59eacSDag-Erling Smørgrav  *
1904b59eacSDag-Erling Smørgrav  * Neither the name of the NLNET LABS nor the names of its contributors may
2004b59eacSDag-Erling Smørgrav  * be used to endorse or promote products derived from this software without
2104b59eacSDag-Erling Smørgrav  * specific prior written permission.
2204b59eacSDag-Erling Smørgrav  *
2304b59eacSDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2404b59eacSDag-Erling Smørgrav  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2504b59eacSDag-Erling Smørgrav  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2604b59eacSDag-Erling Smørgrav  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
2704b59eacSDag-Erling Smørgrav  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2804b59eacSDag-Erling Smørgrav  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2904b59eacSDag-Erling Smørgrav  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
3004b59eacSDag-Erling Smørgrav  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3104b59eacSDag-Erling Smørgrav  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3204b59eacSDag-Erling Smørgrav  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3304b59eacSDag-Erling Smørgrav  * POSSIBILITY OF SUCH DAMAGE.
3404b59eacSDag-Erling Smørgrav  */
3504b59eacSDag-Erling Smørgrav 
3604b59eacSDag-Erling Smørgrav /**
3704b59eacSDag-Erling Smørgrav  * \file
3804b59eacSDag-Erling Smørgrav  *
3904b59eacSDag-Erling Smørgrav  * This file declares the methods any worker has to implement.
4004b59eacSDag-Erling Smørgrav  */
4104b59eacSDag-Erling Smørgrav 
4204b59eacSDag-Erling Smørgrav #ifndef LIBUNBOUND_WORKER_H
4304b59eacSDag-Erling Smørgrav #define LIBUNBOUND_WORKER_H
4404b59eacSDag-Erling Smørgrav 
45*8a9587d7SDag-Erling Smørgrav struct comm_reply;
46*8a9587d7SDag-Erling Smørgrav struct comm_point;
47*8a9587d7SDag-Erling Smørgrav struct module_qstate;
48*8a9587d7SDag-Erling Smørgrav struct tube;
49*8a9587d7SDag-Erling Smørgrav 
50*8a9587d7SDag-Erling Smørgrav /**
51*8a9587d7SDag-Erling Smørgrav  * Worker service routine to send serviced queries to authoritative servers.
52*8a9587d7SDag-Erling Smørgrav  * @param qname: query name. (host order)
53*8a9587d7SDag-Erling Smørgrav  * @param qnamelen: length in bytes of qname, including trailing 0.
54*8a9587d7SDag-Erling Smørgrav  * @param qtype: query type. (host order)
55*8a9587d7SDag-Erling Smørgrav  * @param qclass: query class. (host order)
56*8a9587d7SDag-Erling Smørgrav  * @param flags: host order flags word, with opcode and CD bit.
57*8a9587d7SDag-Erling Smørgrav  * @param dnssec: if set, EDNS record will have DO bit set.
58*8a9587d7SDag-Erling Smørgrav  * @param want_dnssec: signatures needed.
59*8a9587d7SDag-Erling Smørgrav  * @param addr: where to.
60*8a9587d7SDag-Erling Smørgrav  * @param addrlen: length of addr.
61*8a9587d7SDag-Erling Smørgrav  * @param zone: delegation point name.
62*8a9587d7SDag-Erling Smørgrav  * @param zonelen: length of zone name wireformat dname.
63*8a9587d7SDag-Erling Smørgrav  * @param q: wich query state to reactivate upon return.
64*8a9587d7SDag-Erling Smørgrav  * @return: false on failure (memory or socket related). no query was
65*8a9587d7SDag-Erling Smørgrav  *      sent.
66*8a9587d7SDag-Erling Smørgrav  */
67*8a9587d7SDag-Erling Smørgrav struct outbound_entry* libworker_send_query(uint8_t* qname, size_t qnamelen,
68*8a9587d7SDag-Erling Smørgrav         uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
69*8a9587d7SDag-Erling Smørgrav 	int want_dnssec, struct sockaddr_storage* addr, socklen_t addrlen,
70*8a9587d7SDag-Erling Smørgrav 	uint8_t* zone, size_t zonelen, struct module_qstate* q);
71*8a9587d7SDag-Erling Smørgrav 
72*8a9587d7SDag-Erling Smørgrav /** process incoming replies from the network */
73*8a9587d7SDag-Erling Smørgrav int libworker_handle_reply(struct comm_point* c, void* arg, int error,
74*8a9587d7SDag-Erling Smørgrav         struct comm_reply* reply_info);
75*8a9587d7SDag-Erling Smørgrav 
76*8a9587d7SDag-Erling Smørgrav /** process incoming serviced query replies from the network */
77*8a9587d7SDag-Erling Smørgrav int libworker_handle_service_reply(struct comm_point* c, void* arg, int error,
78*8a9587d7SDag-Erling Smørgrav         struct comm_reply* reply_info);
79*8a9587d7SDag-Erling Smørgrav 
80*8a9587d7SDag-Erling Smørgrav /** handle control command coming into server */
81*8a9587d7SDag-Erling Smørgrav void libworker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len,
82*8a9587d7SDag-Erling Smørgrav 	int err, void* arg);
83*8a9587d7SDag-Erling Smørgrav 
84*8a9587d7SDag-Erling Smørgrav /** mesh callback with fg results */
85*8a9587d7SDag-Erling Smørgrav void libworker_fg_done_cb(void* arg, int rcode, ldns_buffer* buf,
86*8a9587d7SDag-Erling Smørgrav 	enum sec_status s, char* why_bogus);
87*8a9587d7SDag-Erling Smørgrav 
88*8a9587d7SDag-Erling Smørgrav /** mesh callback with bg results */
89*8a9587d7SDag-Erling Smørgrav void libworker_bg_done_cb(void* arg, int rcode, ldns_buffer* buf,
90*8a9587d7SDag-Erling Smørgrav 	enum sec_status s, char* why_bogus);
91*8a9587d7SDag-Erling Smørgrav 
9204b59eacSDag-Erling Smørgrav /**
9304b59eacSDag-Erling Smørgrav  * Worker signal handler function. User argument is the worker itself.
9404b59eacSDag-Erling Smørgrav  * @param sig: signal number.
9504b59eacSDag-Erling Smørgrav  * @param arg: the worker (main worker) that handles signals.
9604b59eacSDag-Erling Smørgrav  */
9704b59eacSDag-Erling Smørgrav void worker_sighandler(int sig, void* arg);
9804b59eacSDag-Erling Smørgrav 
9904b59eacSDag-Erling Smørgrav /**
10004b59eacSDag-Erling Smørgrav  * Worker service routine to send serviced queries to authoritative servers.
10104b59eacSDag-Erling Smørgrav  * @param qname: query name. (host order)
10204b59eacSDag-Erling Smørgrav  * @param qnamelen: length in bytes of qname, including trailing 0.
10304b59eacSDag-Erling Smørgrav  * @param qtype: query type. (host order)
10404b59eacSDag-Erling Smørgrav  * @param qclass: query class. (host order)
10504b59eacSDag-Erling Smørgrav  * @param flags: host order flags word, with opcode and CD bit.
10604b59eacSDag-Erling Smørgrav  * @param dnssec: if set, EDNS record will have DO bit set.
10704b59eacSDag-Erling Smørgrav  * @param want_dnssec: signatures needed.
10804b59eacSDag-Erling Smørgrav  * @param addr: where to.
10904b59eacSDag-Erling Smørgrav  * @param addrlen: length of addr.
11004b59eacSDag-Erling Smørgrav  * @param zone: wireformat dname of the zone.
11104b59eacSDag-Erling Smørgrav  * @param zonelen: length of zone name.
11204b59eacSDag-Erling Smørgrav  * @param q: wich query state to reactivate upon return.
11304b59eacSDag-Erling Smørgrav  * @return: false on failure (memory or socket related). no query was
11404b59eacSDag-Erling Smørgrav  *      sent.
11504b59eacSDag-Erling Smørgrav  */
11604b59eacSDag-Erling Smørgrav struct outbound_entry* worker_send_query(uint8_t* qname, size_t qnamelen,
11704b59eacSDag-Erling Smørgrav 	uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
11804b59eacSDag-Erling Smørgrav 	int want_dnssec, struct sockaddr_storage* addr, socklen_t addrlen,
11904b59eacSDag-Erling Smørgrav 	uint8_t* zone, size_t zonelen, struct module_qstate* q);
12004b59eacSDag-Erling Smørgrav 
12104b59eacSDag-Erling Smørgrav /**
12204b59eacSDag-Erling Smørgrav  * process control messages from the main thread. Frees the control
12304b59eacSDag-Erling Smørgrav  * command message.
12404b59eacSDag-Erling Smørgrav  * @param tube: tube control message came on.
12504b59eacSDag-Erling Smørgrav  * @param msg: message contents.  Is freed.
12604b59eacSDag-Erling Smørgrav  * @param len: length of message.
12704b59eacSDag-Erling Smørgrav  * @param error: if error (NETEVENT_*) happened.
12804b59eacSDag-Erling Smørgrav  * @param arg: user argument
12904b59eacSDag-Erling Smørgrav  */
13004b59eacSDag-Erling Smørgrav void worker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len,
13104b59eacSDag-Erling Smørgrav 	int error, void* arg);
13204b59eacSDag-Erling Smørgrav 
13304b59eacSDag-Erling Smørgrav /** handles callbacks from listening event interface */
13404b59eacSDag-Erling Smørgrav int worker_handle_request(struct comm_point* c, void* arg, int error,
13504b59eacSDag-Erling Smørgrav 	struct comm_reply* repinfo);
13604b59eacSDag-Erling Smørgrav 
13704b59eacSDag-Erling Smørgrav /** process incoming replies from the network */
13804b59eacSDag-Erling Smørgrav int worker_handle_reply(struct comm_point* c, void* arg, int error,
13904b59eacSDag-Erling Smørgrav 	struct comm_reply* reply_info);
14004b59eacSDag-Erling Smørgrav 
14104b59eacSDag-Erling Smørgrav /** process incoming serviced query replies from the network */
14204b59eacSDag-Erling Smørgrav int worker_handle_service_reply(struct comm_point* c, void* arg, int error,
14304b59eacSDag-Erling Smørgrav 	struct comm_reply* reply_info);
14404b59eacSDag-Erling Smørgrav 
14504b59eacSDag-Erling Smørgrav /** cleanup the cache to remove all rrset IDs from it, arg is worker */
14604b59eacSDag-Erling Smørgrav void worker_alloc_cleanup(void* arg);
14704b59eacSDag-Erling Smørgrav 
14804b59eacSDag-Erling Smørgrav /** statistics timer callback handler */
14904b59eacSDag-Erling Smørgrav void worker_stat_timer_cb(void* arg);
15004b59eacSDag-Erling Smørgrav 
15104b59eacSDag-Erling Smørgrav /** probe timer callback handler */
15204b59eacSDag-Erling Smørgrav void worker_probe_timer_cb(void* arg);
15304b59eacSDag-Erling Smørgrav 
15404b59eacSDag-Erling Smørgrav /** start accept callback handler */
15504b59eacSDag-Erling Smørgrav void worker_start_accept(void* arg);
15604b59eacSDag-Erling Smørgrav 
15704b59eacSDag-Erling Smørgrav /** stop accept callback handler */
15804b59eacSDag-Erling Smørgrav void worker_stop_accept(void* arg);
15904b59eacSDag-Erling Smørgrav 
16004b59eacSDag-Erling Smørgrav /** handle remote control accept callbacks */
16104b59eacSDag-Erling Smørgrav int remote_accept_callback(struct comm_point*, void*, int, struct comm_reply*);
16204b59eacSDag-Erling Smørgrav 
16304b59eacSDag-Erling Smørgrav /** handle remote control data callbacks */
16404b59eacSDag-Erling Smørgrav int remote_control_callback(struct comm_point*, void*, int, struct comm_reply*);
16504b59eacSDag-Erling Smørgrav 
16604b59eacSDag-Erling Smørgrav /** routine to printout option values over SSL */
16704b59eacSDag-Erling Smørgrav void  remote_get_opt_ssl(char* line, void* arg);
16804b59eacSDag-Erling Smørgrav 
16904b59eacSDag-Erling Smørgrav #endif /* LIBUNBOUND_WORKER_H */
170