diff options
Diffstat (limited to 'external/unbound/util/tube.h')
-rw-r--r-- | external/unbound/util/tube.h | 272 |
1 files changed, 0 insertions, 272 deletions
diff --git a/external/unbound/util/tube.h b/external/unbound/util/tube.h deleted file mode 100644 index 5b1fdb8e8..000000000 --- a/external/unbound/util/tube.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * util/tube.h - pipe service - * - * Copyright (c) 2008, NLnet Labs. All rights reserved. - * - * This software is open source. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * Neither the name of the NLNET LABS nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * \file - * - * This file contains pipe service functions. - */ - -#ifndef UTIL_TUBE_H -#define UTIL_TUBE_H -struct comm_reply; -struct comm_point; -struct comm_base; -struct tube; -struct tube_res_list; -#ifdef USE_WINSOCK -#include "util/locks.h" -#endif - -/** - * Callback from pipe listen function - * void mycallback(tube, msg, len, error, user_argument); - * if error is true (NETEVENT_*), msg is probably NULL. - */ -typedef void tube_callback_type(struct tube*, uint8_t*, size_t, int, void*); - -/** - * A pipe - */ -struct tube { -#ifndef USE_WINSOCK - /** pipe end to read from */ - int sr; - /** pipe end to write on */ - int sw; - - /** listen commpoint */ - struct comm_point* listen_com; - /** listen callback */ - tube_callback_type* listen_cb; - /** listen callback user arg */ - void* listen_arg; - /** are we currently reading a command, 0 if not, else bytecount */ - size_t cmd_read; - /** size of current read command, may be partially read */ - uint32_t cmd_len; - /** the current read command content, malloced, can be partially read*/ - uint8_t* cmd_msg; - - /** background write queue, commpoint to write results back */ - struct comm_point* res_com; - /** are we currently writing a result, 0 if not, else bytecount into - * the res_list first entry. */ - size_t res_write; - /** list of outstanding results to be written back */ - struct tube_res_list* res_list; - /** last in list */ - struct tube_res_list* res_last; - -#else /* USE_WINSOCK */ - /** listen callback */ - tube_callback_type* listen_cb; - /** listen callback user arg */ - void* listen_arg; - /** the windows sockets event (signaled if items in pipe) */ - WSAEVENT event; - /** winsock event storage when registered with event base */ - struct ub_event* ev_listen; - - /** lock on the list of outstanding items */ - lock_basic_type res_lock; - /** list of outstanding results on pipe */ - struct tube_res_list* res_list; - /** last in list */ - struct tube_res_list* res_last; -#endif /* USE_WINSOCK */ -}; - -/** - * List of results (arbitrary command serializations) to write back - */ -struct tube_res_list { - /** next in list */ - struct tube_res_list* next; - /** serialized buffer to write */ - uint8_t* buf; - /** length to write */ - uint32_t len; -}; - -/** - * Create a pipe - * @return: new tube struct or NULL on error. - */ -struct tube* tube_create(void); - -/** - * Delete and destroy a pipe - * @param tube: to delete - */ -void tube_delete(struct tube* tube); - -/** - * Write length bytes followed by message. - * @param tube: the tube to write on. - * If that tube is a pipe, its write fd is used as - * the socket to write on. Is nonblocking. - * Set to blocking by the function, - * and back to non-blocking at exit of function. - * @param buf: the message. - * @param len: length of message. - * @param nonblock: if set to true, the first write is nonblocking. - * If the first write fails the function returns -1. - * If set false, the first write is blocking. - * @return: all remainder writes are nonblocking. - * return 0 on error, in that case blocking/nonblocking of socket is - * unknown. - * return 1 if all OK. - */ -int tube_write_msg(struct tube* tube, uint8_t* buf, uint32_t len, - int nonblock); - -/** - * Read length bytes followed by message. - * @param tube: The tube to read on. - * If that tube is a pipe, its read fd is used as - * the socket to read on. Is nonblocking. - * Set to blocking by the function, - * and back to non-blocking at exit of function. - * @param buf: the message, malloced. - * @param len: length of message, returned. - * @param nonblock: if set to true, the first read is nonblocking. - * If the first read fails the function returns -1. - * If set false, the first read is blocking. - * @return: all remainder reads are nonblocking. - * return 0 on error, in that case blocking/nonblocking of socket is - * unknown. On EOF 0 is returned. - * return 1 if all OK. - */ -int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len, - int nonblock); - -/** - * Close read part of the pipe. - * The tube can no longer be read from. - * @param tube: tube to operate on. - */ -void tube_close_read(struct tube* tube); - -/** - * Close write part of the pipe. - * The tube can no longer be written to. - * @param tube: tube to operate on. - */ -void tube_close_write(struct tube* tube); - -/** - * See if data is ready for reading on the tube without blocking. - * @param tube: tube to check for readable items - * @return true if readable items are present. False if not (or error). - * true on pipe_closed. - */ -int tube_poll(struct tube* tube); - -/** - * Wait for data to be ready for reading on the tube. is blocking. - * No timeout. - * @param tube: the tube to wait on. - * @return: if there was something to read (false on error). - * true on pipe_closed. - */ -int tube_wait(struct tube* tube); - -/** - * Get FD that is readable when new information arrives. - * @param tube - * @return file descriptor. - */ -int tube_read_fd(struct tube* tube); - -/** - * Start listening for information over the pipe. - * Background registration of a read listener, callback when read completed. - * Do not mix with tube_read_msg style direct reads from the pipe. - * @param tube: tube to listen on - * @param base: what base to register event callback. - * @param cb: callback routine. - * @param arg: user argument for callback routine. - * @return true if successful, false on error. - */ -int tube_setup_bg_listen(struct tube* tube, struct comm_base* base, - tube_callback_type* cb, void* arg); - -/** - * Remove bg listen setup from event base. - * @param tube: what tube to cleanup - */ -void tube_remove_bg_listen(struct tube* tube); - -/** - * Start background write handler for the pipe. - * Do not mix with tube_write_msg style direct writes to the pipe. - * @param tube: tube to write on - * @param base: what base to register event handler on. - * @return true if successful, false on error. - */ -int tube_setup_bg_write(struct tube* tube, struct comm_base* base); - -/** - * Remove bg write setup from event base. - * @param tube: what tube to cleanup - */ -void tube_remove_bg_write(struct tube* tube); - - -/** - * Append data item to background list of writes. - * Mallocs a list entry behind the scenes. - * Not locked behind the scenes, call from one thread or lock on outside. - * @param tube: what tube to queue on. - * @param msg: memory message to send. Is free()d after use. - * Put at the end of the to-send queue. - * @param len: length of item. - * @return 0 on failure (msg freed). - */ -int tube_queue_item(struct tube* tube, uint8_t* msg, size_t len); - -/** for fptr wlist, callback function */ -int tube_handle_listen(struct comm_point* c, void* arg, int error, - struct comm_reply* reply_info); - -/** for fptr wlist, callback function */ -int tube_handle_write(struct comm_point* c, void* arg, int error, - struct comm_reply* reply_info); - -/** for fptr wlist, winsock signal event callback function */ -void tube_handle_signal(int fd, short events, void* arg); - -#endif /* UTIL_TUBE_H */ |