ub_event.h revision 1.1.1.2
1/* 2 * util/ub_event.h - indirection layer for pluggable events 3 * 4 * Copyright (c) 2007, NLnet Labs. All rights reserved. 5 * 6 * This software is open source. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 19 * Neither the name of the NLNET LABS nor the names of its contributors may 20 * be used to endorse or promote products derived from this software without 21 * specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 29 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36/** 37 * \file 38 * 39 * This file contains prototypes for event loop functions. 40 * 41 */ 42 43#ifndef UB_EVENT_H 44#define UB_EVENT_H 45 46struct ub_event_base; 47struct ub_event; 48struct comm_base; 49struct event_base; 50 51/** event timeout */ 52#define UB_EV_TIMEOUT 0x01 53/** event fd readable */ 54#define UB_EV_READ 0x02 55/** event fd writable */ 56#define UB_EV_WRITE 0x04 57/** event signal */ 58#define UB_EV_SIGNAL 0x08 59/** event must persist */ 60#define UB_EV_PERSIST 0x10 61 62/** Returns event-base type. Could be "mini-event", "winsock-event" for the 63 * daemon compile, and will be "pluggable-event<PACKAGE_VERSION>" for 64 * libunbound. 65 */ 66const char* ub_event_get_version(void); 67/** Return the name, system and method for the pluggable event base */ 68void ub_get_event_sys(struct ub_event_base*, const char** n, const char** s, 69 const char** m); 70/** Return a default event base. In the daemon this will be the only event 71 * bases used. 72 */ 73struct ub_event_base* ub_default_event_base(int, time_t*, struct timeval*); 74/** Return an ub_event_base constructed for the given libevent event base */ 75struct ub_event_base* ub_libevent_event_base(struct event_base*); 76/** Return the libevent base underlying the given ub_event_base. Will return 77 * NULL when the ub_event_base does not have an underlying libevent event base 78 */ 79struct event_base* ub_libevent_get_event_base(struct ub_event_base*); 80/** Free event base. Free events yourself */ 81void ub_event_base_free(struct ub_event_base*); 82/** Run the event base */ 83int ub_event_base_dispatch(struct ub_event_base*); 84/** exit that loop */ 85int ub_event_base_loopexit(struct ub_event_base*); 86 87/** Create a new ub_event for the event base */ 88struct ub_event* ub_event_new(struct ub_event_base*, 89 int fd, short bits, void (*cb)(int, short, void*), void* arg); 90/** Create a new ub_event signal for the event base */ 91struct ub_event* ub_signal_new(struct ub_event_base*, int fd, 92 void (*cb)(int, short, void*), void* arg); 93/** Create a new ub_event associated with the wsaevent for the event base */ 94struct ub_event* ub_winsock_register_wsaevent(struct ub_event_base*, 95 void* wsaevent, void (*cb)(int, short, void*), void* arg); 96 97/** Add event bits for this event to fire on */ 98void ub_event_add_bits(struct ub_event*, short bits); 99 /** Configure the event so it will not longer fire on given bits */ 100void ub_event_del_bits(struct ub_event*, short bits); 101/** Change or set the file descriptor on the event */ 102void ub_event_set_fd(struct ub_event*, int fd); 103/** free the event */ 104void ub_event_free(struct ub_event*); 105/** Activate the event. The given timeval is an timeout value. */ 106int ub_event_add(struct ub_event*, struct timeval*); 107/** Deactivate the event */ 108int ub_event_del(struct ub_event*); 109/** Reconfigure and activate a timeout event */ 110int ub_timer_add(struct ub_event*, struct ub_event_base*, 111 void (*cb)(int, short, void*), void* arg, struct timeval*); 112/** Deactivate the timeout event */ 113int ub_timer_del(struct ub_event*); 114/** Activate a signal event */ 115int ub_signal_add(struct ub_event*, struct timeval*); 116/** Deactivate a signal event */ 117int ub_signal_del(struct ub_event*); 118/** Free a with a wsaevent associated event */ 119void ub_winsock_unregister_wsaevent(struct ub_event* ev); 120/** Signal the eventloop when a TCP windows socket will block on next read 121 * or write (given by the eventbits) 122 */ 123void ub_winsock_tcp_wouldblock(struct ub_event*, int bits); 124/** Equip the comm_base with the current time */ 125void ub_comm_base_now(struct comm_base* cb); 126 127#endif /* UB_EVENT_H */ 128