Annotation of embedaddon/libevent/event.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms, with or without
                      6:  * modification, are permitted provided that the following conditions
                      7:  * are met:
                      8:  * 1. Redistributions of source code must retain the above copyright
                      9:  *    notice, this list of conditions and the following disclaimer.
                     10:  * 2. Redistributions in binary form must reproduce the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer in the
                     12:  *    documentation and/or other materials provided with the distribution.
                     13:  * 3. The name of the author may not be used to endorse or promote products
                     14:  *    derived from this software without specific prior written permission.
                     15:  *
                     16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     18:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     19:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     20:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     21:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     22:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     23:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     24:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     25:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     26:  */
                     27: #ifndef _EVENT_H_
                     28: #define _EVENT_H_
                     29: 
                     30: /** @mainpage
                     31: 
                     32:   @section intro Introduction
                     33: 
                     34:   libevent is an event notification library for developing scalable network
                     35:   servers.  The libevent API provides a mechanism to execute a callback
                     36:   function when a specific event occurs on a file descriptor or after a
                     37:   timeout has been reached. Furthermore, libevent also support callbacks due
                     38:   to signals or regular timeouts.
                     39: 
                     40:   libevent is meant to replace the event loop found in event driven network
                     41:   servers. An application just needs to call event_dispatch() and then add or
                     42:   remove events dynamically without having to change the event loop.
                     43: 
                     44:   Currently, libevent supports /dev/poll, kqueue(2), select(2), poll(2) and
                     45:   epoll(4). It also has experimental support for real-time signals. The
                     46:   internal event mechanism is completely independent of the exposed event API,
                     47:   and a simple update of libevent can provide new functionality without having
                     48:   to redesign the applications. As a result, Libevent allows for portable
                     49:   application development and provides the most scalable event notification
                     50:   mechanism available on an operating system. Libevent can also be used for
                     51:   multi-threaded aplications; see Steven Grimm's explanation. Libevent should
                     52:   compile on Linux, *BSD, Mac OS X, Solaris and Windows.
                     53: 
                     54:   @section usage Standard usage
                     55: 
                     56:   Every program that uses libevent must include the <event.h> header, and pass
                     57:   the -levent flag to the linker.  Before using any of the functions in the
                     58:   library, you must call event_init() or event_base_new() to perform one-time
                     59:   initialization of the libevent library.
                     60: 
                     61:   @section event Event notification
                     62: 
                     63:   For each file descriptor that you wish to monitor, you must declare an event
                     64:   structure and call event_set() to initialize the members of the structure.
                     65:   To enable notification, you add the structure to the list of monitored
                     66:   events by calling event_add().  The event structure must remain allocated as
                     67:   long as it is active, so it should be allocated on the heap. Finally, you
                     68:   call event_dispatch() to loop and dispatch events.
                     69: 
                     70:   @section bufferevent I/O Buffers
                     71: 
                     72:   libevent provides an abstraction on top of the regular event callbacks. This
                     73:   abstraction is called a buffered event. A buffered event provides input and
                     74:   output buffers that get filled and drained automatically. The user of a
                     75:   buffered event no longer deals directly with the I/O, but instead is reading
                     76:   from input and writing to output buffers.
                     77: 
                     78:   Once initialized via bufferevent_new(), the bufferevent structure can be
                     79:   used repeatedly with bufferevent_enable() and bufferevent_disable().
                     80:   Instead of reading and writing directly to a socket, you would call
                     81:   bufferevent_read() and bufferevent_write().
                     82: 
                     83:   When read enabled the bufferevent will try to read from the file descriptor
                     84:   and call the read callback. The write callback is executed whenever the
                     85:   output buffer is drained below the write low watermark, which is 0 by
                     86:   default.
                     87: 
                     88:   @section timers Timers
                     89: 
                     90:   libevent can also be used to create timers that invoke a callback after a
                     91:   certain amount of time has expired. The evtimer_set() function prepares an
                     92:   event struct to be used as a timer. To activate the timer, call
                     93:   evtimer_add(). Timers can be deactivated by calling evtimer_del().
                     94: 
                     95:   @section timeouts Timeouts
                     96: 
                     97:   In addition to simple timers, libevent can assign timeout events to file
                     98:   descriptors that are triggered whenever a certain amount of time has passed
                     99:   with no activity on a file descriptor.  The timeout_set() function
                    100:   initializes an event struct for use as a timeout. Once initialized, the
                    101:   event must be activated by using timeout_add().  To cancel the timeout, call
                    102:   timeout_del().
                    103: 
                    104:   @section evdns Asynchronous DNS resolution
                    105: 
                    106:   libevent provides an asynchronous DNS resolver that should be used instead
                    107:   of the standard DNS resolver functions.  These functions can be imported by
                    108:   including the <evdns.h> header in your program. Before using any of the
                    109:   resolver functions, you must call evdns_init() to initialize the library. To
                    110:   convert a hostname to an IP address, you call the evdns_resolve_ipv4()
                    111:   function.  To perform a reverse lookup, you would call the
                    112:   evdns_resolve_reverse() function.  All of these functions use callbacks to
                    113:   avoid blocking while the lookup is performed.
                    114: 
                    115:   @section evhttp Event-driven HTTP servers
                    116: 
                    117:   libevent provides a very simple event-driven HTTP server that can be
                    118:   embedded in your program and used to service HTTP requests.
                    119: 
                    120:   To use this capability, you need to include the <evhttp.h> header in your
                    121:   program.  You create the server by calling evhttp_new(). Add addresses and
                    122:   ports to listen on with evhttp_bind_socket(). You then register one or more
                    123:   callbacks to handle incoming requests.  Each URI can be assigned a callback
                    124:   via the evhttp_set_cb() function.  A generic callback function can also be
                    125:   registered via evhttp_set_gencb(); this callback will be invoked if no other
                    126:   callbacks have been registered for a given URI.
                    127: 
                    128:   @section evrpc A framework for RPC servers and clients
                    129:  
                    130:   libevents provides a framework for creating RPC servers and clients.  It
                    131:   takes care of marshaling and unmarshaling all data structures.
                    132: 
                    133:   @section api API Reference
                    134: 
                    135:   To browse the complete documentation of the libevent API, click on any of
                    136:   the following links.
                    137: 
                    138:   event.h
                    139:   The primary libevent header
                    140: 
                    141:   evdns.h
                    142:   Asynchronous DNS resolution
                    143: 
                    144:   evhttp.h
                    145:   An embedded libevent-based HTTP server
                    146: 
                    147:   evrpc.h
                    148:   A framework for creating RPC servers and clients
                    149: 
                    150:  */
                    151: 
                    152: /** @file event.h
                    153: 
                    154:   A library for writing event-driven network servers
                    155: 
                    156:  */
                    157: 
                    158: #ifdef __cplusplus
                    159: extern "C" {
                    160: #endif
                    161: 
                    162: #include <event-config.h>
                    163: #ifdef _EVENT_HAVE_SYS_TYPES_H
                    164: #include <sys/types.h>
                    165: #endif
                    166: #ifdef _EVENT_HAVE_SYS_TIME_H
                    167: #include <sys/time.h>
                    168: #endif
                    169: #ifdef _EVENT_HAVE_STDINT_H
                    170: #include <stdint.h>
                    171: #endif
                    172: #include <stdarg.h>
                    173: 
                    174: /* For int types. */
                    175: #include <evutil.h>
                    176: 
                    177: #ifdef WIN32
                    178: #define WIN32_LEAN_AND_MEAN
                    179: #include <windows.h>
                    180: #undef WIN32_LEAN_AND_MEAN
                    181: typedef unsigned char u_char;
                    182: typedef unsigned short u_short;
                    183: #endif
                    184: 
                    185: #define EVLIST_TIMEOUT 0x01
                    186: #define EVLIST_INSERTED        0x02
                    187: #define EVLIST_SIGNAL  0x04
                    188: #define EVLIST_ACTIVE  0x08
                    189: #define EVLIST_INTERNAL        0x10
                    190: #define EVLIST_INIT    0x80
                    191: 
                    192: /* EVLIST_X_ Private space: 0x1000-0xf000 */
                    193: #define EVLIST_ALL     (0xf000 | 0x9f)
                    194: 
                    195: #define EV_TIMEOUT     0x01
                    196: #define EV_READ                0x02
                    197: #define EV_WRITE       0x04
                    198: #define EV_SIGNAL      0x08
                    199: #define EV_PERSIST     0x10    /* Persistant event */
                    200: 
                    201: /* Fix so that ppl dont have to run with <sys/queue.h> */
                    202: #ifndef TAILQ_ENTRY
                    203: #define _EVENT_DEFINED_TQENTRY
                    204: #define TAILQ_ENTRY(type)                                              \
                    205: struct {                                                               \
                    206:        struct type *tqe_next;  /* next element */                      \
                    207:        struct type **tqe_prev; /* address of previous next element */  \
                    208: }
                    209: #endif /* !TAILQ_ENTRY */
                    210: 
                    211: struct event_base;
                    212: #ifndef EVENT_NO_STRUCT
                    213: struct event {
                    214:        TAILQ_ENTRY (event) ev_next;
                    215:        TAILQ_ENTRY (event) ev_active_next;
                    216:        TAILQ_ENTRY (event) ev_signal_next;
                    217:        unsigned int min_heap_idx;      /* for managing timeouts */
                    218: 
                    219:        struct event_base *ev_base;
                    220: 
                    221:        int ev_fd;
                    222:        short ev_events;
                    223:        short ev_ncalls;
                    224:        short *ev_pncalls;      /* Allows deletes in callback */
                    225: 
                    226:        struct timeval ev_timeout;
                    227: 
                    228:        int ev_pri;             /* smaller numbers are higher priority */
                    229: 
                    230:        void (*ev_callback)(int, short, void *arg);
                    231:        void *ev_arg;
                    232: 
                    233:        int ev_res;             /* result passed to event callback */
                    234:        int ev_flags;
                    235: };
                    236: #else
                    237: struct event;
                    238: #endif
                    239: 
                    240: #define EVENT_SIGNAL(ev)       (int)(ev)->ev_fd
                    241: #define EVENT_FD(ev)           (int)(ev)->ev_fd
                    242: 
                    243: /*
                    244:  * Key-Value pairs.  Can be used for HTTP headers but also for
                    245:  * query argument parsing.
                    246:  */
                    247: struct evkeyval {
                    248:        TAILQ_ENTRY(evkeyval) next;
                    249: 
                    250:        char *key;
                    251:        char *value;
                    252: };
                    253: 
                    254: #ifdef _EVENT_DEFINED_TQENTRY
                    255: #undef TAILQ_ENTRY
                    256: struct event_list;
                    257: struct evkeyvalq;
                    258: #undef _EVENT_DEFINED_TQENTRY
                    259: #else
                    260: TAILQ_HEAD (event_list, event);
                    261: TAILQ_HEAD (evkeyvalq, evkeyval);
                    262: #endif /* _EVENT_DEFINED_TQENTRY */
                    263: 
                    264: /**
                    265:   Initialize the event API.
                    266: 
                    267:   Use event_base_new() to initialize a new event base, but does not set
                    268:   the current_base global.   If using only event_base_new(), each event
                    269:   added must have an event base set with event_base_set()
                    270: 
                    271:   @see event_base_set(), event_base_free(), event_init()
                    272:  */
                    273: struct event_base *event_base_new(void);
                    274: 
                    275: /**
                    276:   Initialize the event API.
                    277: 
                    278:   The event API needs to be initialized with event_init() before it can be
                    279:   used.  Sets the current_base global representing the default base for
                    280:   events that have no base associated with them.
                    281: 
                    282:   @see event_base_set(), event_base_new()
                    283:  */
                    284: struct event_base *event_init(void);
                    285: 
                    286: /**
                    287:   Reinitialized the event base after a fork
                    288: 
                    289:   Some event mechanisms do not survive across fork.   The event base needs
                    290:   to be reinitialized with the event_reinit() function.
                    291: 
                    292:   @param base the event base that needs to be re-initialized
                    293:   @return 0 if successful, or -1 if some events could not be re-added.
                    294:   @see event_base_new(), event_init()
                    295: */
                    296: int event_reinit(struct event_base *base);
                    297: 
                    298: /**
                    299:   Loop to process events.
                    300: 
                    301:   In order to process events, an application needs to call
                    302:   event_dispatch().  This function only returns on error, and should
                    303:   replace the event core of the application program.
                    304: 
                    305:   @see event_base_dispatch()
                    306:  */
                    307: int event_dispatch(void);
                    308: 
                    309: 
                    310: /**
                    311:   Threadsafe event dispatching loop.
                    312: 
                    313:   @param eb the event_base structure returned by event_init()
                    314:   @see event_init(), event_dispatch()
                    315:  */
                    316: int event_base_dispatch(struct event_base *);
                    317: 
                    318: 
                    319: /**
                    320:  Get the kernel event notification mechanism used by libevent.
                    321:  
                    322:  @param eb the event_base structure returned by event_base_new()
                    323:  @return a string identifying the kernel event mechanism (kqueue, epoll, etc.)
                    324:  */
                    325: const char *event_base_get_method(struct event_base *);
                    326:         
                    327:         
                    328: /**
                    329:   Deallocate all memory associated with an event_base, and free the base.
                    330: 
                    331:   Note that this function will not close any fds or free any memory passed
                    332:   to event_set as the argument to callback.
                    333: 
                    334:   @param eb an event_base to be freed
                    335:  */
                    336: void event_base_free(struct event_base *);
                    337: 
                    338: 
                    339: #define _EVENT_LOG_DEBUG 0
                    340: #define _EVENT_LOG_MSG   1
                    341: #define _EVENT_LOG_WARN  2
                    342: #define _EVENT_LOG_ERR   3
                    343: typedef void (*event_log_cb)(int severity, const char *msg);
                    344: /**
                    345:   Redirect libevent's log messages.
                    346: 
                    347:   @param cb a function taking two arguments: an integer severity between
                    348:      _EVENT_LOG_DEBUG and _EVENT_LOG_ERR, and a string.  If cb is NULL,
                    349:         then the default log is used.
                    350:   */
                    351: void event_set_log_callback(event_log_cb cb);
                    352: 
                    353: /**
                    354:   Associate a different event base with an event.
                    355: 
                    356:   @param eb the event base
                    357:   @param ev the event
                    358:  */
                    359: int event_base_set(struct event_base *, struct event *);
                    360: 
                    361: /**
                    362:  event_loop() flags
                    363:  */
                    364: /*@{*/
                    365: #define EVLOOP_ONCE    0x01    /**< Block at most once. */
                    366: #define EVLOOP_NONBLOCK        0x02    /**< Do not block. */
                    367: /*@}*/
                    368: 
                    369: /**
                    370:   Handle events.
                    371: 
                    372:   This is a more flexible version of event_dispatch().
                    373: 
                    374:   @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK
                    375:   @return 0 if successful, -1 if an error occurred, or 1 if no events were
                    376:     registered.
                    377:   @see event_loopexit(), event_base_loop()
                    378: */
                    379: int event_loop(int);
                    380: 
                    381: /**
                    382:   Handle events (threadsafe version).
                    383: 
                    384:   This is a more flexible version of event_base_dispatch().
                    385: 
                    386:   @param eb the event_base structure returned by event_init()
                    387:   @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK
                    388:   @return 0 if successful, -1 if an error occurred, or 1 if no events were
                    389:     registered.
                    390:   @see event_loopexit(), event_base_loop()
                    391:   */
                    392: int event_base_loop(struct event_base *, int);
                    393: 
                    394: /**
                    395:   Exit the event loop after the specified time.
                    396: 
                    397:   The next event_loop() iteration after the given timer expires will
                    398:   complete normally (handling all queued events) then exit without
                    399:   blocking for events again.
                    400: 
                    401:   Subsequent invocations of event_loop() will proceed normally.
                    402: 
                    403:   @param tv the amount of time after which the loop should terminate.
                    404:   @return 0 if successful, or -1 if an error occurred
                    405:   @see event_loop(), event_base_loop(), event_base_loopexit()
                    406:   */
                    407: int event_loopexit(const struct timeval *);
                    408: 
                    409: 
                    410: /**
                    411:   Exit the event loop after the specified time (threadsafe variant).
                    412: 
                    413:   The next event_base_loop() iteration after the given timer expires will
                    414:   complete normally (handling all queued events) then exit without
                    415:   blocking for events again.
                    416: 
                    417:   Subsequent invocations of event_base_loop() will proceed normally.
                    418: 
                    419:   @param eb the event_base structure returned by event_init()
                    420:   @param tv the amount of time after which the loop should terminate.
                    421:   @return 0 if successful, or -1 if an error occurred
                    422:   @see event_loopexit()
                    423:  */
                    424: int event_base_loopexit(struct event_base *, const struct timeval *);
                    425: 
                    426: /**
                    427:   Abort the active event_loop() immediately.
                    428: 
                    429:   event_loop() will abort the loop after the next event is completed;
                    430:   event_loopbreak() is typically invoked from this event's callback.
                    431:   This behavior is analogous to the "break;" statement.
                    432: 
                    433:   Subsequent invocations of event_loop() will proceed normally.
                    434: 
                    435:   @return 0 if successful, or -1 if an error occurred
                    436:   @see event_base_loopbreak(), event_loopexit()
                    437:  */
                    438: int event_loopbreak(void);
                    439: 
                    440: /**
                    441:   Abort the active event_base_loop() immediately.
                    442: 
                    443:   event_base_loop() will abort the loop after the next event is completed;
                    444:   event_base_loopbreak() is typically invoked from this event's callback.
                    445:   This behavior is analogous to the "break;" statement.
                    446: 
                    447:   Subsequent invocations of event_loop() will proceed normally.
                    448: 
                    449:   @param eb the event_base structure returned by event_init()
                    450:   @return 0 if successful, or -1 if an error occurred
                    451:   @see event_base_loopexit
                    452:  */
                    453: int event_base_loopbreak(struct event_base *);
                    454: 
                    455: 
                    456: /**
                    457:   Add a timer event.
                    458: 
                    459:   @param ev the event struct
                    460:   @param tv timeval struct
                    461:  */
                    462: #define evtimer_add(ev, tv)            event_add(ev, tv)
                    463: 
                    464: 
                    465: /**
                    466:   Define a timer event.
                    467: 
                    468:   @param ev event struct to be modified
                    469:   @param cb callback function
                    470:   @param arg argument that will be passed to the callback function
                    471:  */
                    472: #define evtimer_set(ev, cb, arg)       event_set(ev, -1, 0, cb, arg)
                    473: 
                    474: 
                    475: /**
                    476:  * Delete a timer event.
                    477:  *
                    478:  * @param ev the event struct to be disabled
                    479:  */
                    480: #define evtimer_del(ev)                        event_del(ev)
                    481: #define evtimer_pending(ev, tv)                event_pending(ev, EV_TIMEOUT, tv)
                    482: #define evtimer_initialized(ev)                ((ev)->ev_flags & EVLIST_INIT)
                    483: 
                    484: /**
                    485:  * Add a timeout event.
                    486:  *
                    487:  * @param ev the event struct to be disabled
                    488:  * @param tv the timeout value, in seconds
                    489:  */
                    490: #define timeout_add(ev, tv)            event_add(ev, tv)
                    491: 
                    492: 
                    493: /**
                    494:  * Define a timeout event.
                    495:  *
                    496:  * @param ev the event struct to be defined
                    497:  * @param cb the callback to be invoked when the timeout expires
                    498:  * @param arg the argument to be passed to the callback
                    499:  */
                    500: #define timeout_set(ev, cb, arg)       event_set(ev, -1, 0, cb, arg)
                    501: 
                    502: 
                    503: /**
                    504:  * Disable a timeout event.
                    505:  *
                    506:  * @param ev the timeout event to be disabled
                    507:  */
                    508: #define timeout_del(ev)                        event_del(ev)
                    509: 
                    510: #define timeout_pending(ev, tv)                event_pending(ev, EV_TIMEOUT, tv)
                    511: #define timeout_initialized(ev)                ((ev)->ev_flags & EVLIST_INIT)
                    512: 
                    513: #define signal_add(ev, tv)             event_add(ev, tv)
                    514: #define signal_set(ev, x, cb, arg)     \
                    515:        event_set(ev, x, EV_SIGNAL|EV_PERSIST, cb, arg)
                    516: #define signal_del(ev)                 event_del(ev)
                    517: #define signal_pending(ev, tv)         event_pending(ev, EV_SIGNAL, tv)
                    518: #define signal_initialized(ev)         ((ev)->ev_flags & EVLIST_INIT)
                    519: 
                    520: /**
                    521:   Prepare an event structure to be added.
                    522: 
                    523:   The function event_set() prepares the event structure ev to be used in
                    524:   future calls to event_add() and event_del().  The event will be prepared to
                    525:   call the function specified by the fn argument with an int argument
                    526:   indicating the file descriptor, a short argument indicating the type of
                    527:   event, and a void * argument given in the arg argument.  The fd indicates
                    528:   the file descriptor that should be monitored for events.  The events can be
                    529:   either EV_READ, EV_WRITE, or both.  Indicating that an application can read
                    530:   or write from the file descriptor respectively without blocking.
                    531: 
                    532:   The function fn will be called with the file descriptor that triggered the
                    533:   event and the type of event which will be either EV_TIMEOUT, EV_SIGNAL,
                    534:   EV_READ, or EV_WRITE.  The additional flag EV_PERSIST makes an event_add()
                    535:   persistent until event_del() has been called.
                    536: 
                    537:   @param ev an event struct to be modified
                    538:   @param fd the file descriptor to be monitored
                    539:   @param event desired events to monitor; can be EV_READ and/or EV_WRITE
                    540:   @param fn callback function to be invoked when the event occurs
                    541:   @param arg an argument to be passed to the callback function
                    542: 
                    543:   @see event_add(), event_del(), event_once()
                    544: 
                    545:  */
                    546: void event_set(struct event *, int, short, void (*)(int, short, void *), void *);
                    547: 
                    548: /**
                    549:   Schedule a one-time event to occur.
                    550: 
                    551:   The function event_once() is similar to event_set().  However, it schedules
                    552:   a callback to be called exactly once and does not require the caller to
                    553:   prepare an event structure.
                    554: 
                    555:   @param fd a file descriptor to monitor
                    556:   @param events event(s) to monitor; can be any of EV_TIMEOUT | EV_READ |
                    557:          EV_WRITE
                    558:   @param callback callback function to be invoked when the event occurs
                    559:   @param arg an argument to be passed to the callback function
                    560:   @param timeout the maximum amount of time to wait for the event, or NULL
                    561:          to wait forever
                    562:   @return 0 if successful, or -1 if an error occurred
                    563:   @see event_set()
                    564: 
                    565:  */
                    566: int event_once(int, short, void (*)(int, short, void *), void *,
                    567:     const struct timeval *);
                    568: 
                    569: 
                    570: /**
                    571:   Schedule a one-time event (threadsafe variant)
                    572: 
                    573:   The function event_base_once() is similar to event_set().  However, it
                    574:   schedules a callback to be called exactly once and does not require the
                    575:   caller to prepare an event structure.
                    576: 
                    577:   @param base an event_base returned by event_init()
                    578:   @param fd a file descriptor to monitor
                    579:   @param events event(s) to monitor; can be any of EV_TIMEOUT | EV_READ |
                    580:          EV_WRITE
                    581:   @param callback callback function to be invoked when the event occurs
                    582:   @param arg an argument to be passed to the callback function
                    583:   @param timeout the maximum amount of time to wait for the event, or NULL
                    584:          to wait forever
                    585:   @return 0 if successful, or -1 if an error occurred
                    586:   @see event_once()
                    587:  */
                    588: int event_base_once(struct event_base *base, int fd, short events,
                    589:     void (*callback)(int, short, void *), void *arg,
                    590:     const struct timeval *timeout);
                    591: 
                    592: 
                    593: /**
                    594:   Add an event to the set of monitored events.
                    595: 
                    596:   The function event_add() schedules the execution of the ev event when the
                    597:   event specified in event_set() occurs or in at least the time specified in
                    598:   the tv.  If tv is NULL, no timeout occurs and the function will only be
                    599:   called if a matching event occurs on the file descriptor.  The event in the
                    600:   ev argument must be already initialized by event_set() and may not be used
                    601:   in calls to event_set() until it has timed out or been removed with
                    602:   event_del().  If the event in the ev argument already has a scheduled
                    603:   timeout, the old timeout will be replaced by the new one.
                    604: 
                    605:   @param ev an event struct initialized via event_set()
                    606:   @param timeout the maximum amount of time to wait for the event, or NULL
                    607:          to wait forever
                    608:   @return 0 if successful, or -1 if an error occurred
                    609:   @see event_del(), event_set()
                    610:   */
                    611: int event_add(struct event *ev, const struct timeval *timeout);
                    612: 
                    613: 
                    614: /**
                    615:   Remove an event from the set of monitored events.
                    616: 
                    617:   The function event_del() will cancel the event in the argument ev.  If the
                    618:   event has already executed or has never been added the call will have no
                    619:   effect.
                    620: 
                    621:   @param ev an event struct to be removed from the working set
                    622:   @return 0 if successful, or -1 if an error occurred
                    623:   @see event_add()
                    624:  */
                    625: int event_del(struct event *);
                    626: 
                    627: void event_active(struct event *, int, short);
                    628: 
                    629: 
                    630: /**
                    631:   Checks if a specific event is pending or scheduled.
                    632: 
                    633:   @param ev an event struct previously passed to event_add()
                    634:   @param event the requested event type; any of EV_TIMEOUT|EV_READ|
                    635:          EV_WRITE|EV_SIGNAL
                    636:   @param tv an alternate timeout (FIXME - is this true?)
                    637: 
                    638:   @return 1 if the event is pending, or 0 if the event has not occurred
                    639: 
                    640:  */
                    641: int event_pending(struct event *ev, short event, struct timeval *tv);
                    642: 
                    643: 
                    644: /**
                    645:   Test if an event structure has been initialized.
                    646: 
                    647:   The event_initialized() macro can be used to check if an event has been
                    648:   initialized.
                    649: 
                    650:   @param ev an event structure to be tested
                    651:   @return 1 if the structure has been initialized, or 0 if it has not been
                    652:           initialized
                    653:  */
                    654: #ifdef WIN32
                    655: #define event_initialized(ev)          ((ev)->ev_flags & EVLIST_INIT && (ev)->ev_fd != (int)INVALID_HANDLE_VALUE)
                    656: #else
                    657: #define event_initialized(ev)          ((ev)->ev_flags & EVLIST_INIT)
                    658: #endif
                    659: 
                    660: 
                    661: /**
                    662:   Get the libevent version number.
                    663: 
                    664:   @return a string containing the version number of libevent
                    665:  */
                    666: const char *event_get_version(void);
                    667: 
                    668: 
                    669: /**
                    670:   Get the kernel event notification mechanism used by libevent.
                    671: 
                    672:   @return a string identifying the kernel event mechanism (kqueue, epoll, etc.)
                    673:  */
                    674: const char *event_get_method(void);
                    675: 
                    676: 
                    677: /**
                    678:   Set the number of different event priorities.
                    679: 
                    680:   By default libevent schedules all active events with the same priority.
                    681:   However, some time it is desirable to process some events with a higher
                    682:   priority than others.  For that reason, libevent supports strict priority
                    683:   queues.  Active events with a lower priority are always processed before
                    684:   events with a higher priority.
                    685: 
                    686:   The number of different priorities can be set initially with the
                    687:   event_priority_init() function.  This function should be called before the
                    688:   first call to event_dispatch().  The event_priority_set() function can be
                    689:   used to assign a priority to an event.  By default, libevent assigns the
                    690:   middle priority to all events unless their priority is explicitly set.
                    691: 
                    692:   @param npriorities the maximum number of priorities
                    693:   @return 0 if successful, or -1 if an error occurred
                    694:   @see event_base_priority_init(), event_priority_set()
                    695: 
                    696:  */
                    697: int    event_priority_init(int);
                    698: 
                    699: 
                    700: /**
                    701:   Set the number of different event priorities (threadsafe variant).
                    702: 
                    703:   See the description of event_priority_init() for more information.
                    704: 
                    705:   @param eb the event_base structure returned by event_init()
                    706:   @param npriorities the maximum number of priorities
                    707:   @return 0 if successful, or -1 if an error occurred
                    708:   @see event_priority_init(), event_priority_set()
                    709:  */
                    710: int    event_base_priority_init(struct event_base *, int);
                    711: 
                    712: 
                    713: /**
                    714:   Assign a priority to an event.
                    715: 
                    716:   @param ev an event struct
                    717:   @param priority the new priority to be assigned
                    718:   @return 0 if successful, or -1 if an error occurred
                    719:   @see event_priority_init()
                    720:   */
                    721: int    event_priority_set(struct event *, int);
                    722: 
                    723: 
                    724: /* These functions deal with buffering input and output */
                    725: 
                    726: struct evbuffer {
                    727:        u_char *buffer;
                    728:        u_char *orig_buffer;
                    729: 
                    730:        size_t misalign;
                    731:        size_t totallen;
                    732:        size_t off;
                    733: 
                    734:        void (*cb)(struct evbuffer *, size_t, size_t, void *);
                    735:        void *cbarg;
                    736: };
                    737: 
                    738: /* Just for error reporting - use other constants otherwise */
                    739: #define EVBUFFER_READ          0x01
                    740: #define EVBUFFER_WRITE         0x02
                    741: #define EVBUFFER_EOF           0x10
                    742: #define EVBUFFER_ERROR         0x20
                    743: #define EVBUFFER_TIMEOUT       0x40
                    744: 
                    745: struct bufferevent;
                    746: typedef void (*evbuffercb)(struct bufferevent *, void *);
                    747: typedef void (*everrorcb)(struct bufferevent *, short what, void *);
                    748: 
                    749: struct event_watermark {
                    750:        size_t low;
                    751:        size_t high;
                    752: };
                    753: 
                    754: #ifndef EVENT_NO_STRUCT
                    755: struct bufferevent {
                    756:        struct event_base *ev_base;
                    757: 
                    758:        struct event ev_read;
                    759:        struct event ev_write;
                    760: 
                    761:        struct evbuffer *input;
                    762:        struct evbuffer *output;
                    763: 
                    764:        struct event_watermark wm_read;
                    765:        struct event_watermark wm_write;
                    766: 
                    767:        evbuffercb readcb;
                    768:        evbuffercb writecb;
                    769:        everrorcb errorcb;
                    770:        void *cbarg;
                    771: 
                    772:        int timeout_read;       /* in seconds */
                    773:        int timeout_write;      /* in seconds */
                    774: 
                    775:        short enabled;  /* events that are currently enabled */
                    776: };
                    777: #endif
                    778: 
                    779: /**
                    780:   Create a new bufferevent.
                    781: 
                    782:   libevent provides an abstraction on top of the regular event callbacks.
                    783:   This abstraction is called a buffered event.  A buffered event provides
                    784:   input and output buffers that get filled and drained automatically.  The
                    785:   user of a buffered event no longer deals directly with the I/O, but
                    786:   instead is reading from input and writing to output buffers.
                    787: 
                    788:   Once initialized, the bufferevent structure can be used repeatedly with
                    789:   bufferevent_enable() and bufferevent_disable().
                    790: 
                    791:   When read enabled the bufferevent will try to read from the file descriptor
                    792:   and call the read callback.  The write callback is executed whenever the
                    793:   output buffer is drained below the write low watermark, which is 0 by
                    794:   default.
                    795: 
                    796:   If multiple bases are in use, bufferevent_base_set() must be called before
                    797:   enabling the bufferevent for the first time.
                    798: 
                    799:   @param fd the file descriptor from which data is read and written to.
                    800:                This file descriptor is not allowed to be a pipe(2).
                    801:   @param readcb callback to invoke when there is data to be read, or NULL if
                    802:          no callback is desired
                    803:   @param writecb callback to invoke when the file descriptor is ready for
                    804:          writing, or NULL if no callback is desired
                    805:   @param errorcb callback to invoke when there is an error on the file
                    806:          descriptor
                    807:   @param cbarg an argument that will be supplied to each of the callbacks
                    808:          (readcb, writecb, and errorcb)
                    809:   @return a pointer to a newly allocated bufferevent struct, or NULL if an
                    810:           error occurred
                    811:   @see bufferevent_base_set(), bufferevent_free()
                    812:   */
                    813: struct bufferevent *bufferevent_new(int fd,
                    814:     evbuffercb readcb, evbuffercb writecb, everrorcb errorcb, void *cbarg);
                    815: 
                    816: 
                    817: /**
                    818:   Assign a bufferevent to a specific event_base.
                    819: 
                    820:   @param base an event_base returned by event_init()
                    821:   @param bufev a bufferevent struct returned by bufferevent_new()
                    822:   @return 0 if successful, or -1 if an error occurred
                    823:   @see bufferevent_new()
                    824:  */
                    825: int bufferevent_base_set(struct event_base *base, struct bufferevent *bufev);
                    826: 
                    827: 
                    828: /**
                    829:   Assign a priority to a bufferevent.
                    830: 
                    831:   @param bufev a bufferevent struct
                    832:   @param pri the priority to be assigned
                    833:   @return 0 if successful, or -1 if an error occurred
                    834:   */
                    835: int bufferevent_priority_set(struct bufferevent *bufev, int pri);
                    836: 
                    837: 
                    838: /**
                    839:   Deallocate the storage associated with a bufferevent structure.
                    840: 
                    841:   @param bufev the bufferevent structure to be freed.
                    842:   */
                    843: void bufferevent_free(struct bufferevent *bufev);
                    844: 
                    845: 
                    846: /**
                    847:   Changes the callbacks for a bufferevent.
                    848: 
                    849:   @param bufev the bufferevent object for which to change callbacks
                    850:   @param readcb callback to invoke when there is data to be read, or NULL if
                    851:          no callback is desired
                    852:   @param writecb callback to invoke when the file descriptor is ready for
                    853:          writing, or NULL if no callback is desired
                    854:   @param errorcb callback to invoke when there is an error on the file
                    855:          descriptor
                    856:   @param cbarg an argument that will be supplied to each of the callbacks
                    857:          (readcb, writecb, and errorcb)
                    858:   @see bufferevent_new()
                    859:   */
                    860: void bufferevent_setcb(struct bufferevent *bufev,
                    861:     evbuffercb readcb, evbuffercb writecb, everrorcb errorcb, void *cbarg);
                    862: 
                    863: /**
                    864:   Changes the file descriptor on which the bufferevent operates.
                    865: 
                    866:   @param bufev the bufferevent object for which to change the file descriptor
                    867:   @param fd the file descriptor to operate on
                    868: */
                    869: void bufferevent_setfd(struct bufferevent *bufev, int fd);
                    870: 
                    871: /**
                    872:   Write data to a bufferevent buffer.
                    873: 
                    874:   The bufferevent_write() function can be used to write data to the file
                    875:   descriptor.  The data is appended to the output buffer and written to the
                    876:   descriptor automatically as it becomes available for writing.
                    877: 
                    878:   @param bufev the bufferevent to be written to
                    879:   @param data a pointer to the data to be written
                    880:   @param size the length of the data, in bytes
                    881:   @return 0 if successful, or -1 if an error occurred
                    882:   @see bufferevent_write_buffer()
                    883:   */
                    884: int bufferevent_write(struct bufferevent *bufev,
                    885:     const void *data, size_t size);
                    886: 
                    887: 
                    888: /**
                    889:   Write data from an evbuffer to a bufferevent buffer.  The evbuffer is
                    890:   being drained as a result.
                    891: 
                    892:   @param bufev the bufferevent to be written to
                    893:   @param buf the evbuffer to be written
                    894:   @return 0 if successful, or -1 if an error occurred
                    895:   @see bufferevent_write()
                    896:  */
                    897: int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf);
                    898: 
                    899: 
                    900: /**
                    901:   Read data from a bufferevent buffer.
                    902: 
                    903:   The bufferevent_read() function is used to read data from the input buffer.
                    904: 
                    905:   @param bufev the bufferevent to be read from
                    906:   @param data pointer to a buffer that will store the data
                    907:   @param size the size of the data buffer, in bytes
                    908:   @return the amount of data read, in bytes.
                    909:  */
                    910: size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size);
                    911: 
                    912: /**
                    913:   Enable a bufferevent.
                    914: 
                    915:   @param bufev the bufferevent to be enabled
                    916:   @param event any combination of EV_READ | EV_WRITE.
                    917:   @return 0 if successful, or -1 if an error occurred
                    918:   @see bufferevent_disable()
                    919:  */
                    920: int bufferevent_enable(struct bufferevent *bufev, short event);
                    921: 
                    922: 
                    923: /**
                    924:   Disable a bufferevent.
                    925: 
                    926:   @param bufev the bufferevent to be disabled
                    927:   @param event any combination of EV_READ | EV_WRITE.
                    928:   @return 0 if successful, or -1 if an error occurred
                    929:   @see bufferevent_enable()
                    930:  */
                    931: int bufferevent_disable(struct bufferevent *bufev, short event);
                    932: 
                    933: 
                    934: /**
                    935:   Set the read and write timeout for a buffered event.
                    936: 
                    937:   @param bufev the bufferevent to be modified
                    938:   @param timeout_read the read timeout
                    939:   @param timeout_write the write timeout
                    940:  */
                    941: void bufferevent_settimeout(struct bufferevent *bufev,
                    942:     int timeout_read, int timeout_write);
                    943: 
                    944: 
                    945: /**
                    946:   Sets the watermarks for read and write events.
                    947: 
                    948:   On input, a bufferevent does not invoke the user read callback unless
                    949:   there is at least low watermark data in the buffer.   If the read buffer
                    950:   is beyond the high watermark, the buffevent stops reading from the network.
                    951: 
                    952:   On output, the user write callback is invoked whenever the buffered data
                    953:   falls below the low watermark.
                    954: 
                    955:   @param bufev the bufferevent to be modified
                    956:   @param events EV_READ, EV_WRITE or both
                    957:   @param lowmark the lower watermark to set
                    958:   @param highmark the high watermark to set
                    959: */
                    960: 
                    961: void bufferevent_setwatermark(struct bufferevent *bufev, short events,
                    962:     size_t lowmark, size_t highmark);
                    963: 
                    964: #define EVBUFFER_LENGTH(x)     (x)->off
                    965: #define EVBUFFER_DATA(x)       (x)->buffer
                    966: #define EVBUFFER_INPUT(x)      (x)->input
                    967: #define EVBUFFER_OUTPUT(x)     (x)->output
                    968: 
                    969: 
                    970: /**
                    971:   Allocate storage for a new evbuffer.
                    972: 
                    973:   @return a pointer to a newly allocated evbuffer struct, or NULL if an error
                    974:           occurred
                    975:  */
                    976: struct evbuffer *evbuffer_new(void);
                    977: 
                    978: 
                    979: /**
                    980:   Deallocate storage for an evbuffer.
                    981: 
                    982:   @param pointer to the evbuffer to be freed
                    983:  */
                    984: void evbuffer_free(struct evbuffer *);
                    985: 
                    986: 
                    987: /**
                    988:   Expands the available space in an event buffer.
                    989: 
                    990:   Expands the available space in the event buffer to at least datlen
                    991: 
                    992:   @param buf the event buffer to be expanded
                    993:   @param datlen the new minimum length requirement
                    994:   @return 0 if successful, or -1 if an error occurred
                    995: */
                    996: int evbuffer_expand(struct evbuffer *, size_t);
                    997: 
                    998: 
                    999: /**
                   1000:   Append data to the end of an evbuffer.
                   1001: 
                   1002:   @param buf the event buffer to be appended to
                   1003:   @param data pointer to the beginning of the data buffer
                   1004:   @param datlen the number of bytes to be copied from the data buffer
                   1005:  */
                   1006: int evbuffer_add(struct evbuffer *, const void *, size_t);
                   1007: 
                   1008: 
                   1009: 
                   1010: /**
                   1011:   Read data from an event buffer and drain the bytes read.
                   1012: 
                   1013:   @param buf the event buffer to be read from
                   1014:   @param data the destination buffer to store the result
                   1015:   @param datlen the maximum size of the destination buffer
                   1016:   @return the number of bytes read
                   1017:  */
                   1018: int evbuffer_remove(struct evbuffer *, void *, size_t);
                   1019: 
                   1020: 
                   1021: /**
                   1022:  * Read a single line from an event buffer.
                   1023:  *
                   1024:  * Reads a line terminated by either '\r\n', '\n\r' or '\r' or '\n'.
                   1025:  * The returned buffer needs to be freed by the caller.
                   1026:  *
                   1027:  * @param buffer the evbuffer to read from
                   1028:  * @return pointer to a single line, or NULL if an error occurred
                   1029:  */
                   1030: char *evbuffer_readline(struct evbuffer *);
                   1031: 
                   1032: 
                   1033: /** Used to tell evbuffer_readln what kind of line-ending to look for.
                   1034:  */
                   1035: enum evbuffer_eol_style {
                   1036:        /** Any sequence of CR and LF characters is acceptable as an EOL. */
                   1037:        EVBUFFER_EOL_ANY,
                   1038:        /** An EOL is an LF, optionally preceded by a CR.  This style is
                   1039:         * most useful for implementing text-based internet protocols. */
                   1040:        EVBUFFER_EOL_CRLF,
                   1041:        /** An EOL is a CR followed by an LF. */
                   1042:        EVBUFFER_EOL_CRLF_STRICT,
                   1043:        /** An EOL is a LF. */
                   1044:         EVBUFFER_EOL_LF
                   1045: };
                   1046: 
                   1047: /**
                   1048:  * Read a single line from an event buffer.
                   1049:  *
                   1050:  * Reads a line terminated by an EOL as determined by the evbuffer_eol_style
                   1051:  * argument.  Returns a newly allocated nul-terminated string; the caller must
                   1052:  * free the returned value.  The EOL is not included in the returned string.
                   1053:  *
                   1054:  * @param buffer the evbuffer to read from
                   1055:  * @param n_read_out if non-NULL, points to a size_t that is set to the
                   1056:  *       number of characters in the returned string.  This is useful for
                   1057:  *       strings that can contain NUL characters.
                   1058:  * @param eol_style the style of line-ending to use.
                   1059:  * @return pointer to a single line, or NULL if an error occurred
                   1060:  */
                   1061: char *evbuffer_readln(struct evbuffer *buffer, size_t *n_read_out,
                   1062:     enum evbuffer_eol_style eol_style);
                   1063: 
                   1064: 
                   1065: /**
                   1066:   Move data from one evbuffer into another evbuffer.
                   1067: 
                   1068:   This is a destructive add.  The data from one buffer moves into
                   1069:   the other buffer. The destination buffer is expanded as needed.
                   1070: 
                   1071:   @param outbuf the output buffer
                   1072:   @param inbuf the input buffer
                   1073:   @return 0 if successful, or -1 if an error occurred
                   1074:  */
                   1075: int evbuffer_add_buffer(struct evbuffer *, struct evbuffer *);
                   1076: 
                   1077: 
                   1078: /**
                   1079:   Append a formatted string to the end of an evbuffer.
                   1080: 
                   1081:   @param buf the evbuffer that will be appended to
                   1082:   @param fmt a format string
                   1083:   @param ... arguments that will be passed to printf(3)
                   1084:   @return The number of bytes added if successful, or -1 if an error occurred.
                   1085:  */
                   1086: int evbuffer_add_printf(struct evbuffer *, const char *fmt, ...)
                   1087: #ifdef __GNUC__
                   1088:   __attribute__((format(printf, 2, 3)))
                   1089: #endif
                   1090: ;
                   1091: 
                   1092: 
                   1093: /**
                   1094:   Append a va_list formatted string to the end of an evbuffer.
                   1095: 
                   1096:   @param buf the evbuffer that will be appended to
                   1097:   @param fmt a format string
                   1098:   @param ap a varargs va_list argument array that will be passed to vprintf(3)
                   1099:   @return The number of bytes added if successful, or -1 if an error occurred.
                   1100:  */
                   1101: int evbuffer_add_vprintf(struct evbuffer *, const char *fmt, va_list ap);
                   1102: 
                   1103: 
                   1104: /**
                   1105:   Remove a specified number of bytes data from the beginning of an evbuffer.
                   1106: 
                   1107:   @param buf the evbuffer to be drained
                   1108:   @param len the number of bytes to drain from the beginning of the buffer
                   1109:  */
                   1110: void evbuffer_drain(struct evbuffer *, size_t);
                   1111: 
                   1112: 
                   1113: /**
                   1114:   Write the contents of an evbuffer to a file descriptor.
                   1115: 
                   1116:   The evbuffer will be drained after the bytes have been successfully written.
                   1117: 
                   1118:   @param buffer the evbuffer to be written and drained
                   1119:   @param fd the file descriptor to be written to
                   1120:   @return the number of bytes written, or -1 if an error occurred
                   1121:   @see evbuffer_read()
                   1122:  */
                   1123: int evbuffer_write(struct evbuffer *, int);
                   1124: 
                   1125: 
                   1126: /**
                   1127:   Read from a file descriptor and store the result in an evbuffer.
                   1128: 
                   1129:   @param buf the evbuffer to store the result
                   1130:   @param fd the file descriptor to read from
                   1131:   @param howmuch the number of bytes to be read
                   1132:   @return the number of bytes read, or -1 if an error occurred
                   1133:   @see evbuffer_write()
                   1134:  */
                   1135: int evbuffer_read(struct evbuffer *, int, int);
                   1136: 
                   1137: 
                   1138: /**
                   1139:   Find a string within an evbuffer.
                   1140: 
                   1141:   @param buffer the evbuffer to be searched
                   1142:   @param what the string to be searched for
                   1143:   @param len the length of the search string
                   1144:   @return a pointer to the beginning of the search string, or NULL if the search failed.
                   1145:  */
                   1146: u_char *evbuffer_find(struct evbuffer *, const u_char *, size_t);
                   1147: 
                   1148: /**
                   1149:   Set a callback to invoke when the evbuffer is modified.
                   1150: 
                   1151:   @param buffer the evbuffer to be monitored
                   1152:   @param cb the callback function to invoke when the evbuffer is modified
                   1153:   @param cbarg an argument to be provided to the callback function
                   1154:  */
                   1155: void evbuffer_setcb(struct evbuffer *, void (*)(struct evbuffer *, size_t, size_t, void *), void *);
                   1156: 
                   1157: /*
                   1158:  * Marshaling tagged data - We assume that all tags are inserted in their
                   1159:  * numeric order - so that unknown tags will always be higher than the
                   1160:  * known ones - and we can just ignore the end of an event buffer.
                   1161:  */
                   1162: 
                   1163: void evtag_init(void);
                   1164: 
                   1165: void evtag_marshal(struct evbuffer *evbuf, ev_uint32_t tag, const void *data,
                   1166:     ev_uint32_t len);
                   1167: 
                   1168: /**
                   1169:   Encode an integer and store it in an evbuffer.
                   1170: 
                   1171:   We encode integer's by nibbles; the first nibble contains the number
                   1172:   of significant nibbles - 1;  this allows us to encode up to 64-bit
                   1173:   integers.  This function is byte-order independent.
                   1174: 
                   1175:   @param evbuf evbuffer to store the encoded number
                   1176:   @param number a 32-bit integer
                   1177:  */
                   1178: void encode_int(struct evbuffer *evbuf, ev_uint32_t number);
                   1179: 
                   1180: void evtag_marshal_int(struct evbuffer *evbuf, ev_uint32_t tag,
                   1181:     ev_uint32_t integer);
                   1182: 
                   1183: void evtag_marshal_string(struct evbuffer *buf, ev_uint32_t tag,
                   1184:     const char *string);
                   1185: 
                   1186: void evtag_marshal_timeval(struct evbuffer *evbuf, ev_uint32_t tag,
                   1187:     struct timeval *tv);
                   1188: 
                   1189: int evtag_unmarshal(struct evbuffer *src, ev_uint32_t *ptag,
                   1190:     struct evbuffer *dst);
                   1191: int evtag_peek(struct evbuffer *evbuf, ev_uint32_t *ptag);
                   1192: int evtag_peek_length(struct evbuffer *evbuf, ev_uint32_t *plength);
                   1193: int evtag_payload_length(struct evbuffer *evbuf, ev_uint32_t *plength);
                   1194: int evtag_consume(struct evbuffer *evbuf);
                   1195: 
                   1196: int evtag_unmarshal_int(struct evbuffer *evbuf, ev_uint32_t need_tag,
                   1197:     ev_uint32_t *pinteger);
                   1198: 
                   1199: int evtag_unmarshal_fixed(struct evbuffer *src, ev_uint32_t need_tag,
                   1200:     void *data, size_t len);
                   1201: 
                   1202: int evtag_unmarshal_string(struct evbuffer *evbuf, ev_uint32_t need_tag,
                   1203:     char **pstring);
                   1204: 
                   1205: int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev_uint32_t need_tag,
                   1206:     struct timeval *ptv);
                   1207: 
                   1208: #ifdef __cplusplus
                   1209: }
                   1210: #endif
                   1211: 
                   1212: #endif /* _EVENT_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>