xref: /freebsd/contrib/unbound/libunbound/worker.h (revision 17d15b251108ff09e632ed4812f7c66999a6b69b)
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*17d15b25SDag-Erling Smørgrav #include "ldns/sbuffer.h"
468860c90cSDag-Erling Smørgrav #include "util/data/packed_rrset.h" /* for enum sec_status */
478a9587d7SDag-Erling Smørgrav struct comm_reply;
488a9587d7SDag-Erling Smørgrav struct comm_point;
498a9587d7SDag-Erling Smørgrav struct module_qstate;
508a9587d7SDag-Erling Smørgrav struct tube;
518a9587d7SDag-Erling Smørgrav 
528a9587d7SDag-Erling Smørgrav /**
538a9587d7SDag-Erling Smørgrav  * Worker service routine to send serviced queries to authoritative servers.
548a9587d7SDag-Erling Smørgrav  * @param qname: query name. (host order)
558a9587d7SDag-Erling Smørgrav  * @param qnamelen: length in bytes of qname, including trailing 0.
568a9587d7SDag-Erling Smørgrav  * @param qtype: query type. (host order)
578a9587d7SDag-Erling Smørgrav  * @param qclass: query class. (host order)
588a9587d7SDag-Erling Smørgrav  * @param flags: host order flags word, with opcode and CD bit.
598a9587d7SDag-Erling Smørgrav  * @param dnssec: if set, EDNS record will have DO bit set.
608a9587d7SDag-Erling Smørgrav  * @param want_dnssec: signatures needed.
618a9587d7SDag-Erling Smørgrav  * @param addr: where to.
628a9587d7SDag-Erling Smørgrav  * @param addrlen: length of addr.
638a9587d7SDag-Erling Smørgrav  * @param zone: delegation point name.
648a9587d7SDag-Erling Smørgrav  * @param zonelen: length of zone name wireformat dname.
658a9587d7SDag-Erling Smørgrav  * @param q: wich query state to reactivate upon return.
668a9587d7SDag-Erling Smørgrav  * @return: false on failure (memory or socket related). no query was
678a9587d7SDag-Erling Smørgrav  *      sent.
688a9587d7SDag-Erling Smørgrav  */
698a9587d7SDag-Erling Smørgrav struct outbound_entry* libworker_send_query(uint8_t* qname, size_t qnamelen,
708a9587d7SDag-Erling Smørgrav         uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
718a9587d7SDag-Erling Smørgrav 	int want_dnssec, struct sockaddr_storage* addr, socklen_t addrlen,
728a9587d7SDag-Erling Smørgrav 	uint8_t* zone, size_t zonelen, struct module_qstate* q);
738a9587d7SDag-Erling Smørgrav 
748a9587d7SDag-Erling Smørgrav /** process incoming replies from the network */
758a9587d7SDag-Erling Smørgrav int libworker_handle_reply(struct comm_point* c, void* arg, int error,
768a9587d7SDag-Erling Smørgrav         struct comm_reply* reply_info);
778a9587d7SDag-Erling Smørgrav 
788a9587d7SDag-Erling Smørgrav /** process incoming serviced query replies from the network */
798a9587d7SDag-Erling Smørgrav int libworker_handle_service_reply(struct comm_point* c, void* arg, int error,
808a9587d7SDag-Erling Smørgrav         struct comm_reply* reply_info);
818a9587d7SDag-Erling Smørgrav 
828a9587d7SDag-Erling Smørgrav /** handle control command coming into server */
838a9587d7SDag-Erling Smørgrav void libworker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len,
848a9587d7SDag-Erling Smørgrav 	int err, void* arg);
858a9587d7SDag-Erling Smørgrav 
868a9587d7SDag-Erling Smørgrav /** mesh callback with fg results */
87*17d15b25SDag-Erling Smørgrav void libworker_fg_done_cb(void* arg, int rcode, sldns_buffer* buf,
888a9587d7SDag-Erling Smørgrav 	enum sec_status s, char* why_bogus);
898a9587d7SDag-Erling Smørgrav 
908a9587d7SDag-Erling Smørgrav /** mesh callback with bg results */
91*17d15b25SDag-Erling Smørgrav void libworker_bg_done_cb(void* arg, int rcode, sldns_buffer* buf,
928a9587d7SDag-Erling Smørgrav 	enum sec_status s, char* why_bogus);
938a9587d7SDag-Erling Smørgrav 
9404b59eacSDag-Erling Smørgrav /**
9504b59eacSDag-Erling Smørgrav  * Worker signal handler function. User argument is the worker itself.
9604b59eacSDag-Erling Smørgrav  * @param sig: signal number.
9704b59eacSDag-Erling Smørgrav  * @param arg: the worker (main worker) that handles signals.
9804b59eacSDag-Erling Smørgrav  */
9904b59eacSDag-Erling Smørgrav void worker_sighandler(int sig, void* arg);
10004b59eacSDag-Erling Smørgrav 
10104b59eacSDag-Erling Smørgrav /**
10204b59eacSDag-Erling Smørgrav  * Worker service routine to send serviced queries to authoritative servers.
10304b59eacSDag-Erling Smørgrav  * @param qname: query name. (host order)
10404b59eacSDag-Erling Smørgrav  * @param qnamelen: length in bytes of qname, including trailing 0.
10504b59eacSDag-Erling Smørgrav  * @param qtype: query type. (host order)
10604b59eacSDag-Erling Smørgrav  * @param qclass: query class. (host order)
10704b59eacSDag-Erling Smørgrav  * @param flags: host order flags word, with opcode and CD bit.
10804b59eacSDag-Erling Smørgrav  * @param dnssec: if set, EDNS record will have DO bit set.
10904b59eacSDag-Erling Smørgrav  * @param want_dnssec: signatures needed.
11004b59eacSDag-Erling Smørgrav  * @param addr: where to.
11104b59eacSDag-Erling Smørgrav  * @param addrlen: length of addr.
11204b59eacSDag-Erling Smørgrav  * @param zone: wireformat dname of the zone.
11304b59eacSDag-Erling Smørgrav  * @param zonelen: length of zone name.
11404b59eacSDag-Erling Smørgrav  * @param q: wich query state to reactivate upon return.
11504b59eacSDag-Erling Smørgrav  * @return: false on failure (memory or socket related). no query was
11604b59eacSDag-Erling Smørgrav  *      sent.
11704b59eacSDag-Erling Smørgrav  */
11804b59eacSDag-Erling Smørgrav struct outbound_entry* worker_send_query(uint8_t* qname, size_t qnamelen,
11904b59eacSDag-Erling Smørgrav 	uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec,
12004b59eacSDag-Erling Smørgrav 	int want_dnssec, struct sockaddr_storage* addr, socklen_t addrlen,
12104b59eacSDag-Erling Smørgrav 	uint8_t* zone, size_t zonelen, struct module_qstate* q);
12204b59eacSDag-Erling Smørgrav 
12304b59eacSDag-Erling Smørgrav /**
12404b59eacSDag-Erling Smørgrav  * process control messages from the main thread. Frees the control
12504b59eacSDag-Erling Smørgrav  * command message.
12604b59eacSDag-Erling Smørgrav  * @param tube: tube control message came on.
12704b59eacSDag-Erling Smørgrav  * @param msg: message contents.  Is freed.
12804b59eacSDag-Erling Smørgrav  * @param len: length of message.
12904b59eacSDag-Erling Smørgrav  * @param error: if error (NETEVENT_*) happened.
13004b59eacSDag-Erling Smørgrav  * @param arg: user argument
13104b59eacSDag-Erling Smørgrav  */
13204b59eacSDag-Erling Smørgrav void worker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len,
13304b59eacSDag-Erling Smørgrav 	int error, void* arg);
13404b59eacSDag-Erling Smørgrav 
13504b59eacSDag-Erling Smørgrav /** handles callbacks from listening event interface */
13604b59eacSDag-Erling Smørgrav int worker_handle_request(struct comm_point* c, void* arg, int error,
13704b59eacSDag-Erling Smørgrav 	struct comm_reply* repinfo);
13804b59eacSDag-Erling Smørgrav 
13904b59eacSDag-Erling Smørgrav /** process incoming replies from the network */
14004b59eacSDag-Erling Smørgrav int worker_handle_reply(struct comm_point* c, void* arg, int error,
14104b59eacSDag-Erling Smørgrav 	struct comm_reply* reply_info);
14204b59eacSDag-Erling Smørgrav 
14304b59eacSDag-Erling Smørgrav /** process incoming serviced query replies from the network */
14404b59eacSDag-Erling Smørgrav int worker_handle_service_reply(struct comm_point* c, void* arg, int error,
14504b59eacSDag-Erling Smørgrav 	struct comm_reply* reply_info);
14604b59eacSDag-Erling Smørgrav 
14704b59eacSDag-Erling Smørgrav /** cleanup the cache to remove all rrset IDs from it, arg is worker */
14804b59eacSDag-Erling Smørgrav void worker_alloc_cleanup(void* arg);
14904b59eacSDag-Erling Smørgrav 
15004b59eacSDag-Erling Smørgrav /** statistics timer callback handler */
15104b59eacSDag-Erling Smørgrav void worker_stat_timer_cb(void* arg);
15204b59eacSDag-Erling Smørgrav 
15304b59eacSDag-Erling Smørgrav /** probe timer callback handler */
15404b59eacSDag-Erling Smørgrav void worker_probe_timer_cb(void* arg);
15504b59eacSDag-Erling Smørgrav 
15604b59eacSDag-Erling Smørgrav /** start accept callback handler */
15704b59eacSDag-Erling Smørgrav void worker_start_accept(void* arg);
15804b59eacSDag-Erling Smørgrav 
15904b59eacSDag-Erling Smørgrav /** stop accept callback handler */
16004b59eacSDag-Erling Smørgrav void worker_stop_accept(void* arg);
16104b59eacSDag-Erling Smørgrav 
16204b59eacSDag-Erling Smørgrav /** handle remote control accept callbacks */
16304b59eacSDag-Erling Smørgrav int remote_accept_callback(struct comm_point*, void*, int, struct comm_reply*);
16404b59eacSDag-Erling Smørgrav 
16504b59eacSDag-Erling Smørgrav /** handle remote control data callbacks */
16604b59eacSDag-Erling Smørgrav int remote_control_callback(struct comm_point*, void*, int, struct comm_reply*);
16704b59eacSDag-Erling Smørgrav 
16804b59eacSDag-Erling Smørgrav /** routine to printout option values over SSL */
16904b59eacSDag-Erling Smørgrav void  remote_get_opt_ssl(char* line, void* arg);
17004b59eacSDag-Erling Smørgrav 
17104b59eacSDag-Erling Smørgrav #endif /* LIBUNBOUND_WORKER_H */
172