libevent (2.1.12)

(root)/
include/
event2/
buffer.h
       1  /*
       2   * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
       3   *
       4   * Redistribution and use in source and binary forms, with or without
       5   * modification, are permitted provided that the following conditions
       6   * are met:
       7   * 1. Redistributions of source code must retain the above copyright
       8   *    notice, this list of conditions and the following disclaimer.
       9   * 2. Redistributions in binary form must reproduce the above copyright
      10   *    notice, this list of conditions and the following disclaimer in the
      11   *    documentation and/or other materials provided with the distribution.
      12   * 3. The name of the author may not be used to endorse or promote products
      13   *    derived from this software without specific prior written permission.
      14   *
      15   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
      16   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
      17   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
      18   * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
      19   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
      20   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      21   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      22   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      23   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
      24   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      25   */
      26  #ifndef EVENT2_BUFFER_H_INCLUDED_
      27  #define EVENT2_BUFFER_H_INCLUDED_
      28  
      29  /** @file event2/buffer.h
      30  
      31    Functions for buffering data for network sending or receiving.
      32  
      33    An evbuffer can be used for preparing data before sending it to
      34    the network or conversely for reading data from the network.
      35    Evbuffers try to avoid memory copies as much as possible.  As a
      36    result, evbuffers can be used to pass data around without actually
      37    incurring the overhead of copying the data.
      38  
      39    A new evbuffer can be allocated with evbuffer_new(), and can be
      40    freed with evbuffer_free().  Most users will be using evbuffers via
      41    the bufferevent interface.  To access a bufferevent's evbuffers, use
      42    bufferevent_get_input() and bufferevent_get_output().
      43  
      44    There are several guidelines for using evbuffers.
      45  
      46    - if you already know how much data you are going to add as a result
      47      of calling evbuffer_add() multiple times, it makes sense to use
      48      evbuffer_expand() first to make sure that enough memory is allocated
      49      before hand.
      50  
      51    - evbuffer_add_buffer() adds the contents of one buffer to the other
      52      without incurring any unnecessary memory copies.
      53  
      54    - evbuffer_add() and evbuffer_add_buffer() do not mix very well:
      55      if you use them, you will wind up with fragmented memory in your
      56  	buffer.
      57  
      58    - For high-performance code, you may want to avoid copying data into and out
      59      of buffers.  You can skip the copy step by using
      60      evbuffer_reserve_space()/evbuffer_commit_space() when writing into a
      61      buffer, and evbuffer_peek() when reading.
      62  
      63    In Libevent 2.0 and later, evbuffers are represented using a linked
      64    list of memory chunks, with pointers to the first and last chunk in
      65    the chain.
      66  
      67    As the contents of an evbuffer can be stored in multiple different
      68    memory blocks, it cannot be accessed directly.  Instead, evbuffer_pullup()
      69    can be used to force a specified number of bytes to be contiguous. This
      70    will cause memory reallocation and memory copies if the data is split
      71    across multiple blocks.  It is more efficient, however, to use
      72    evbuffer_peek() if you don't require that the memory to be contiguous.
      73   */
      74  
      75  #include <event2/visibility.h>
      76  
      77  #ifdef __cplusplus
      78  extern "C" {
      79  #endif
      80  
      81  #include <event2/event-config.h>
      82  #include <stdarg.h>
      83  #ifdef EVENT__HAVE_SYS_TYPES_H
      84  #include <sys/types.h>
      85  #endif
      86  #ifdef EVENT__HAVE_SYS_UIO_H
      87  #include <sys/uio.h>
      88  #endif
      89  #include <event2/util.h>
      90  
      91  /**
      92     An evbuffer is an opaque data type for efficiently buffering data to be
      93     sent or received on the network.
      94  
      95     @see event2/event.h for more information
      96  */
      97  struct evbuffer
      98  #ifdef EVENT_IN_DOXYGEN_
      99  {}
     100  #endif
     101  ;
     102  
     103  /**
     104      Pointer to a position within an evbuffer.
     105  
     106      Used when repeatedly searching through a buffer.  Calling any function
     107      that modifies or re-packs the buffer contents may invalidate all
     108      evbuffer_ptrs for that buffer.  Do not modify or contruct these values
     109      except with evbuffer_ptr_set.
     110  
     111      An evbuffer_ptr can represent any position from the start of a buffer up
     112      to a position immediately after the end of a buffer.
     113  
     114      @see evbuffer_ptr_set()
     115   */
     116  struct evbuffer_ptr {
     117  	ev_ssize_t pos;
     118  
     119  	/* Do not alter or rely on the values of fields: they are for internal
     120  	 * use */
     121  	struct {
     122  		void *chain;
     123  		size_t pos_in_chain;
     124  	} internal_;
     125  };
     126  
     127  /** Describes a single extent of memory inside an evbuffer.  Used for
     128      direct-access functions.
     129  
     130      @see evbuffer_reserve_space, evbuffer_commit_space, evbuffer_peek
     131   */
     132  #ifdef EVENT__HAVE_SYS_UIO_H
     133  #define evbuffer_iovec iovec
     134  /* Internal use -- defined only if we are using the native struct iovec */
     135  #define EVBUFFER_IOVEC_IS_NATIVE_
     136  #else
     137  struct evbuffer_iovec {
     138  	/** The start of the extent of memory. */
     139  	void *iov_base;
     140  	/** The length of the extent of memory. */
     141  	size_t iov_len;
     142  };
     143  #endif
     144  
     145  /**
     146    Allocate storage for a new evbuffer.
     147  
     148    @return a pointer to a newly allocated evbuffer struct, or NULL if an error
     149  	occurred
     150   */
     151  EVENT2_EXPORT_SYMBOL
     152  struct evbuffer *evbuffer_new(void);
     153  /**
     154    Deallocate storage for an evbuffer.
     155  
     156    @param buf pointer to the evbuffer to be freed
     157   */
     158  EVENT2_EXPORT_SYMBOL
     159  void evbuffer_free(struct evbuffer *buf);
     160  
     161  /**
     162     Enable locking on an evbuffer so that it can safely be used by multiple
     163     threads at the same time.
     164  
     165     NOTE: when locking is enabled, the lock will be held when callbacks are
     166     invoked.  This could result in deadlock if you aren't careful.  Plan
     167     accordingly!
     168  
     169     @param buf An evbuffer to make lockable.
     170     @param lock A lock object, or NULL if we should allocate our own.
     171     @return 0 on success, -1 on failure.
     172   */
     173  EVENT2_EXPORT_SYMBOL
     174  int evbuffer_enable_locking(struct evbuffer *buf, void *lock);
     175  
     176  /**
     177     Acquire the lock on an evbuffer.  Has no effect if locking was not enabled
     178     with evbuffer_enable_locking.
     179  */
     180  EVENT2_EXPORT_SYMBOL
     181  void evbuffer_lock(struct evbuffer *buf);
     182  
     183  /**
     184     Release the lock on an evbuffer.  Has no effect if locking was not enabled
     185     with evbuffer_enable_locking.
     186  */
     187  EVENT2_EXPORT_SYMBOL
     188  void evbuffer_unlock(struct evbuffer *buf);
     189  
     190  
     191  /** If this flag is set, then we will not use evbuffer_peek(),
     192   * evbuffer_remove(), evbuffer_remove_buffer(), and so on to read bytes
     193   * from this buffer: we'll only take bytes out of this buffer by
     194   * writing them to the network (as with evbuffer_write_atmost), by
     195   * removing them without observing them (as with evbuffer_drain),
     196   * or by copying them all out at once (as with evbuffer_add_buffer).
     197   *
     198   * Using this option allows the implementation to use sendfile-based
     199   * operations for evbuffer_add_file(); see that function for more
     200   * information.
     201   *
     202   * This flag is on by default for bufferevents that can take advantage
     203   * of it; you should never actually need to set it on a bufferevent's
     204   * output buffer.
     205   */
     206  #define EVBUFFER_FLAG_DRAINS_TO_FD 1
     207  
     208  /** Change the flags that are set for an evbuffer by adding more.
     209   *
     210   * @param buffer the evbuffer that the callback is watching.
     211   * @param cb the callback whose status we want to change.
     212   * @param flags One or more EVBUFFER_FLAG_* options
     213   * @return 0 on success, -1 on failure.
     214   */
     215  EVENT2_EXPORT_SYMBOL
     216  int evbuffer_set_flags(struct evbuffer *buf, ev_uint64_t flags);
     217  /** Change the flags that are set for an evbuffer by removing some.
     218   *
     219   * @param buffer the evbuffer that the callback is watching.
     220   * @param cb the callback whose status we want to change.
     221   * @param flags One or more EVBUFFER_FLAG_* options
     222   * @return 0 on success, -1 on failure.
     223   */
     224  EVENT2_EXPORT_SYMBOL
     225  int evbuffer_clear_flags(struct evbuffer *buf, ev_uint64_t flags);
     226  
     227  /**
     228    Returns the total number of bytes stored in the evbuffer
     229  
     230    @param buf pointer to the evbuffer
     231    @return the number of bytes stored in the evbuffer
     232  */
     233  EVENT2_EXPORT_SYMBOL
     234  size_t evbuffer_get_length(const struct evbuffer *buf);
     235  
     236  /**
     237     Returns the number of contiguous available bytes in the first buffer chain.
     238  
     239     This is useful when processing data that might be split into multiple
     240     chains, or that might all be in the first chain.  Calls to
     241     evbuffer_pullup() that cause reallocation and copying of data can thus be
     242     avoided.
     243  
     244     @param buf pointer to the evbuffer
     245     @return 0 if no data is available, otherwise the number of available bytes
     246       in the first buffer chain.
     247  */
     248  EVENT2_EXPORT_SYMBOL
     249  size_t evbuffer_get_contiguous_space(const struct evbuffer *buf);
     250  
     251  /**
     252    Expands the available space in an evbuffer.
     253  
     254    Expands the available space in the evbuffer to at least datlen, so that
     255    appending datlen additional bytes will not require any new allocations.
     256  
     257    @param buf the evbuffer to be expanded
     258    @param datlen the new minimum length requirement
     259    @return 0 if successful, or -1 if an error occurred
     260  */
     261  EVENT2_EXPORT_SYMBOL
     262  int evbuffer_expand(struct evbuffer *buf, size_t datlen);
     263  
     264  /**
     265     Reserves space in the last chain or chains of an evbuffer.
     266  
     267     Makes space available in the last chain or chains of an evbuffer that can
     268     be arbitrarily written to by a user.  The space does not become
     269     available for reading until it has been committed with
     270     evbuffer_commit_space().
     271  
     272     The space is made available as one or more extents, represented by
     273     an initial pointer and a length.  You can force the memory to be
     274     available as only one extent.  Allowing more extents, however, makes the
     275     function more efficient.
     276  
     277     Multiple subsequent calls to this function will make the same space
     278     available until evbuffer_commit_space() has been called.
     279  
     280     It is an error to do anything that moves around the buffer's internal
     281     memory structures before committing the space.
     282  
     283     NOTE: The code currently does not ever use more than two extents.
     284     This may change in future versions.
     285  
     286     @param buf the evbuffer in which to reserve space.
     287     @param size how much space to make available, at minimum.  The
     288        total length of the extents may be greater than the requested
     289        length.
     290     @param vec an array of one or more evbuffer_iovec structures to
     291        hold pointers to the reserved extents of memory.
     292     @param n_vec The length of the vec array.  Must be at least 1;
     293         2 is more efficient.
     294     @return the number of provided extents, or -1 on error.
     295     @see evbuffer_commit_space()
     296  */
     297  EVENT2_EXPORT_SYMBOL
     298  int
     299  evbuffer_reserve_space(struct evbuffer *buf, ev_ssize_t size,
     300      struct evbuffer_iovec *vec, int n_vec);
     301  
     302  /**
     303     Commits previously reserved space.
     304  
     305     Commits some of the space previously reserved with
     306     evbuffer_reserve_space().  It then becomes available for reading.
     307  
     308     This function may return an error if the pointer in the extents do
     309     not match those returned from evbuffer_reserve_space, or if data
     310     has been added to the buffer since the space was reserved.
     311  
     312     If you want to commit less data than you got reserved space for,
     313     modify the iov_len pointer of the appropriate extent to a smaller
     314     value.  Note that you may have received more space than you
     315     requested if it was available!
     316  
     317     @param buf the evbuffer in which to reserve space.
     318     @param vec one or two extents returned by evbuffer_reserve_space.
     319     @param n_vecs the number of extents.
     320     @return 0 on success, -1 on error
     321     @see evbuffer_reserve_space()
     322  */
     323  EVENT2_EXPORT_SYMBOL
     324  int evbuffer_commit_space(struct evbuffer *buf,
     325      struct evbuffer_iovec *vec, int n_vecs);
     326  
     327  /**
     328    Append data to the end of an evbuffer.
     329  
     330    @param buf the evbuffer to be appended to
     331    @param data pointer to the beginning of the data buffer
     332    @param datlen the number of bytes to be copied from the data buffer
     333    @return 0 on success, -1 on failure.
     334   */
     335  EVENT2_EXPORT_SYMBOL
     336  int evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen);
     337  
     338  
     339  /**
     340    Read data from an evbuffer and drain the bytes read.
     341  
     342    If more bytes are requested than are available in the evbuffer, we
     343    only extract as many bytes as were available.
     344  
     345    @param buf the evbuffer to be read from
     346    @param data the destination buffer to store the result
     347    @param datlen the maximum size of the destination buffer
     348    @return the number of bytes read, or -1 if we can't drain the buffer.
     349   */
     350  EVENT2_EXPORT_SYMBOL
     351  int evbuffer_remove(struct evbuffer *buf, void *data, size_t datlen);
     352  
     353  /**
     354    Read data from an evbuffer, and leave the buffer unchanged.
     355  
     356    If more bytes are requested than are available in the evbuffer, we
     357    only extract as many bytes as were available.
     358  
     359    @param buf the evbuffer to be read from
     360    @param data_out the destination buffer to store the result
     361    @param datlen the maximum size of the destination buffer
     362    @return the number of bytes read, or -1 if we can't drain the buffer.
     363   */
     364  EVENT2_EXPORT_SYMBOL
     365  ev_ssize_t evbuffer_copyout(struct evbuffer *buf, void *data_out, size_t datlen);
     366  
     367  /**
     368    Read data from the middle of an evbuffer, and leave the buffer unchanged.
     369  
     370    If more bytes are requested than are available in the evbuffer, we
     371    only extract as many bytes as were available.
     372  
     373    @param buf the evbuffer to be read from
     374    @param pos the position to start reading from
     375    @param data_out the destination buffer to store the result
     376    @param datlen the maximum size of the destination buffer
     377    @return the number of bytes read, or -1 if we can't drain the buffer.
     378   */
     379  EVENT2_EXPORT_SYMBOL
     380  ev_ssize_t evbuffer_copyout_from(struct evbuffer *buf, const struct evbuffer_ptr *pos, void *data_out, size_t datlen);
     381  
     382  /**
     383    Read data from an evbuffer into another evbuffer, draining
     384    the bytes from the source buffer.  This function avoids copy
     385    operations to the extent possible.
     386  
     387    If more bytes are requested than are available in src, the src
     388    buffer is drained completely.
     389  
     390    @param src the evbuffer to be read from
     391    @param dst the destination evbuffer to store the result into
     392    @param datlen the maximum numbers of bytes to transfer
     393    @return the number of bytes read
     394   */
     395  EVENT2_EXPORT_SYMBOL
     396  int evbuffer_remove_buffer(struct evbuffer *src, struct evbuffer *dst,
     397      size_t datlen);
     398  
     399  /** Used to tell evbuffer_readln what kind of line-ending to look for.
     400   */
     401  enum evbuffer_eol_style {
     402  	/** Any sequence of CR and LF characters is acceptable as an
     403  	 * EOL.
     404  	 *
     405  	 * Note that this style can produce ambiguous results: the
     406  	 * sequence "CRLF" will be treated as a single EOL if it is
     407  	 * all in the buffer at once, but if you first read a CR from
     408  	 * the network and later read an LF from the network, it will
     409  	 * be treated as two EOLs.
     410  	 */
     411  	EVBUFFER_EOL_ANY,
     412  	/** An EOL is an LF, optionally preceded by a CR.  This style is
     413  	 * most useful for implementing text-based internet protocols. */
     414  	EVBUFFER_EOL_CRLF,
     415  	/** An EOL is a CR followed by an LF. */
     416  	EVBUFFER_EOL_CRLF_STRICT,
     417  	/** An EOL is a LF. */
     418  	EVBUFFER_EOL_LF,
     419  	/** An EOL is a NUL character (that is, a single byte with value 0) */
     420  	EVBUFFER_EOL_NUL
     421  };
     422  
     423  /**
     424   * Read a single line from an evbuffer.
     425   *
     426   * Reads a line terminated by an EOL as determined by the evbuffer_eol_style
     427   * argument.  Returns a newly allocated nul-terminated string; the caller must
     428   * free the returned value.  The EOL is not included in the returned string.
     429   *
     430   * @param buffer the evbuffer to read from
     431   * @param n_read_out if non-NULL, points to a size_t that is set to the
     432   *       number of characters in the returned string.  This is useful for
     433   *       strings that can contain NUL characters.
     434   * @param eol_style the style of line-ending to use.
     435   * @return pointer to a single line, or NULL if an error occurred
     436   */
     437  EVENT2_EXPORT_SYMBOL
     438  char *evbuffer_readln(struct evbuffer *buffer, size_t *n_read_out,
     439      enum evbuffer_eol_style eol_style);
     440  
     441  /**
     442    Move all data from one evbuffer into another evbuffer.
     443  
     444    This is a destructive add.  The data from one buffer moves into
     445    the other buffer.  However, no unnecessary memory copies occur.
     446  
     447    @param outbuf the output buffer
     448    @param inbuf the input buffer
     449    @return 0 if successful, or -1 if an error occurred
     450  
     451    @see evbuffer_remove_buffer()
     452   */
     453  EVENT2_EXPORT_SYMBOL
     454  int evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf);
     455  
     456  /**
     457    Copy data from one evbuffer into another evbuffer.
     458  
     459    This is a non-destructive add.  The data from one buffer is copied
     460    into the other buffer.  However, no unnecessary memory copies occur.
     461  
     462    Note that buffers already containing buffer references can't be added
     463    to other buffers.
     464  
     465    @param outbuf the output buffer
     466    @param inbuf the input buffer
     467    @return 0 if successful, or -1 if an error occurred
     468   */
     469  EVENT2_EXPORT_SYMBOL
     470  int evbuffer_add_buffer_reference(struct evbuffer *outbuf,
     471      struct evbuffer *inbuf);
     472  
     473  /**
     474     A cleanup function for a piece of memory added to an evbuffer by
     475     reference.
     476  
     477     @see evbuffer_add_reference()
     478   */
     479  typedef void (*evbuffer_ref_cleanup_cb)(const void *data,
     480      size_t datalen, void *extra);
     481  
     482  /**
     483    Reference memory into an evbuffer without copying.
     484  
     485    The memory needs to remain valid until all the added data has been
     486    read.  This function keeps just a reference to the memory without
     487    actually incurring the overhead of a copy.
     488  
     489    @param outbuf the output buffer
     490    @param data the memory to reference
     491    @param datlen how memory to reference
     492    @param cleanupfn callback to be invoked when the memory is no longer
     493  	referenced by this evbuffer.
     494    @param cleanupfn_arg optional argument to the cleanup callback
     495    @return 0 if successful, or -1 if an error occurred
     496   */
     497  EVENT2_EXPORT_SYMBOL
     498  int evbuffer_add_reference(struct evbuffer *outbuf,
     499      const void *data, size_t datlen,
     500      evbuffer_ref_cleanup_cb cleanupfn, void *cleanupfn_arg);
     501  
     502  /**
     503    Copy data from a file into the evbuffer for writing to a socket.
     504  
     505    This function avoids unnecessary data copies between userland and
     506    kernel.  If sendfile is available and the EVBUFFER_FLAG_DRAINS_TO_FD
     507    flag is set, it uses those functions.  Otherwise, it tries to use
     508    mmap (or CreateFileMapping on Windows).
     509  
     510    The function owns the resulting file descriptor and will close it
     511    when finished transferring data.
     512  
     513    The results of using evbuffer_remove() or evbuffer_pullup() on
     514    evbuffers whose data was added using this function are undefined.
     515  
     516    For more fine-grained control, use evbuffer_add_file_segment.
     517  
     518    @param outbuf the output buffer
     519    @param fd the file descriptor
     520    @param offset the offset from which to read data
     521    @param length how much data to read, or -1 to read as much as possible.
     522      (-1 requires that 'fd' support fstat.)
     523    @return 0 if successful, or -1 if an error occurred
     524  */
     525  
     526  EVENT2_EXPORT_SYMBOL
     527  int evbuffer_add_file(struct evbuffer *outbuf, int fd, ev_off_t offset,
     528      ev_off_t length);
     529  
     530  /**
     531    An evbuffer_file_segment holds a reference to a range of a file --
     532    possibly the whole file! -- for use in writing from an evbuffer to a
     533    socket.  It could be implemented with mmap, sendfile, splice, or (if all
     534    else fails) by just pulling all the data into RAM.  A single
     535    evbuffer_file_segment can be added more than once, and to more than one
     536    evbuffer.
     537   */
     538  struct evbuffer_file_segment;
     539  
     540  /**
     541      Flag for creating evbuffer_file_segment: If this flag is set, then when
     542      the evbuffer_file_segment is freed and no longer in use by any
     543      evbuffer, the underlying fd is closed.
     544   */
     545  #define EVBUF_FS_CLOSE_ON_FREE    0x01
     546  /**
     547     Flag for creating evbuffer_file_segment: Disable memory-map based
     548     implementations.
     549   */
     550  #define EVBUF_FS_DISABLE_MMAP     0x02
     551  /**
     552     Flag for creating evbuffer_file_segment: Disable direct fd-to-fd
     553     implementations (including sendfile and splice).
     554  
     555     You might want to use this option if data needs to be taken from the
     556     evbuffer by any means other than writing it to the network: the sendfile
     557     backend is fast, but it only works for sending files directly to the
     558     network.
     559   */
     560  #define EVBUF_FS_DISABLE_SENDFILE 0x04
     561  /**
     562     Flag for creating evbuffer_file_segment: Do not allocate a lock for this
     563     segment.  If this option is set, then neither the segment nor any
     564     evbuffer it is added to may ever be accessed from more than one thread
     565     at a time.
     566   */
     567  #define EVBUF_FS_DISABLE_LOCKING  0x08
     568  
     569  /**
     570     A cleanup function for a evbuffer_file_segment added to an evbuffer
     571     for reference.
     572   */
     573  typedef void (*evbuffer_file_segment_cleanup_cb)(
     574      struct evbuffer_file_segment const* seg, int flags, void* arg);
     575  
     576  /**
     577     Create and return a new evbuffer_file_segment for reading data from a
     578     file and sending it out via an evbuffer.
     579  
     580     This function avoids unnecessary data copies between userland and
     581     kernel.  Where available, it uses sendfile or splice.
     582  
     583     The file descriptor must not be closed so long as any evbuffer is using
     584     this segment.
     585  
     586     The results of using evbuffer_remove() or evbuffer_pullup() or any other
     587     function that reads bytes from an evbuffer on any evbuffer containing
     588     the newly returned segment are undefined, unless you pass the
     589     EVBUF_FS_DISABLE_SENDFILE flag to this function.
     590  
     591     @param fd an open file to read from.
     592     @param offset an index within the file at which to start reading
     593     @param length how much data to read, or -1 to read as much as possible.
     594        (-1 requires that 'fd' support fstat.)
     595     @param flags any number of the EVBUF_FS_* flags
     596     @return a new evbuffer_file_segment, or NULL on failure.
     597   **/
     598  EVENT2_EXPORT_SYMBOL
     599  struct evbuffer_file_segment *evbuffer_file_segment_new(
     600  	int fd, ev_off_t offset, ev_off_t length, unsigned flags);
     601  
     602  /**
     603     Free an evbuffer_file_segment
     604  
     605     It is safe to call this function even if the segment has been added to
     606     one or more evbuffers.  The evbuffer_file_segment will not be freed
     607     until no more references to it exist.
     608   */
     609  EVENT2_EXPORT_SYMBOL
     610  void evbuffer_file_segment_free(struct evbuffer_file_segment *seg);
     611  
     612  /**
     613     Add cleanup callback and argument for the callback to an
     614     evbuffer_file_segment.
     615  
     616     The cleanup callback will be invoked when no more references to the
     617     evbuffer_file_segment exist.
     618   **/
     619  EVENT2_EXPORT_SYMBOL
     620  void evbuffer_file_segment_add_cleanup_cb(struct evbuffer_file_segment *seg,
     621  	evbuffer_file_segment_cleanup_cb cb, void* arg);
     622  
     623  /**
     624     Insert some or all of an evbuffer_file_segment at the end of an evbuffer
     625  
     626     Note that the offset and length parameters of this function have a
     627     different meaning from those provided to evbuffer_file_segment_new: When
     628     you create the segment, the offset is the offset _within the file_, and
     629     the length is the length _of the segment_, whereas when you add a
     630     segment to an evbuffer, the offset is _within the segment_ and the
     631     length is the length of the _part of the segment you want to use.
     632  
     633     In other words, if you have a 10 KiB file, and you create an
     634     evbuffer_file_segment for it with offset 20 and length 1000, it will
     635     refer to bytes 20..1019 inclusive.  If you then pass this segment to
     636     evbuffer_add_file_segment and specify an offset of 20 and a length of
     637     50, you will be adding bytes 40..99 inclusive.
     638  
     639     @param buf the evbuffer to append to
     640     @param seg the segment to add
     641     @param offset the offset within the segment to start from
     642     @param length the amount of data to add, or -1 to add it all.
     643     @return 0 on success, -1 on failure.
     644   */
     645  EVENT2_EXPORT_SYMBOL
     646  int evbuffer_add_file_segment(struct evbuffer *buf,
     647      struct evbuffer_file_segment *seg, ev_off_t offset, ev_off_t length);
     648  
     649  /**
     650    Append a formatted string to the end of an evbuffer.
     651  
     652    The string is formated as printf.
     653  
     654    @param buf the evbuffer that will be appended to
     655    @param fmt a format string
     656    @param ... arguments that will be passed to printf(3)
     657    @return The number of bytes added if successful, or -1 if an error occurred.
     658  
     659    @see evutil_printf(), evbuffer_add_vprintf()
     660   */
     661  EVENT2_EXPORT_SYMBOL
     662  int evbuffer_add_printf(struct evbuffer *buf, const char *fmt, ...)
     663  #ifdef __GNUC__
     664    __attribute__((format(printf, 2, 3)))
     665  #endif
     666  ;
     667  
     668  /**
     669    Append a va_list formatted string to the end of an evbuffer.
     670  
     671    @param buf the evbuffer that will be appended to
     672    @param fmt a format string
     673    @param ap a varargs va_list argument array that will be passed to vprintf(3)
     674    @return The number of bytes added if successful, or -1 if an error occurred.
     675   */
     676  EVENT2_EXPORT_SYMBOL
     677  int evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
     678  #ifdef __GNUC__
     679  	__attribute__((format(printf, 2, 0)))
     680  #endif
     681  ;
     682  
     683  
     684  /**
     685    Remove a specified number of bytes data from the beginning of an evbuffer.
     686  
     687    @param buf the evbuffer to be drained
     688    @param len the number of bytes to drain from the beginning of the buffer
     689    @return 0 on success, -1 on failure.
     690   */
     691  EVENT2_EXPORT_SYMBOL
     692  int evbuffer_drain(struct evbuffer *buf, size_t len);
     693  
     694  
     695  /**
     696    Write the contents of an evbuffer to a file descriptor.
     697  
     698    The evbuffer will be drained after the bytes have been successfully written.
     699  
     700    @param buffer the evbuffer to be written and drained
     701    @param fd the file descriptor to be written to
     702    @return the number of bytes written, or -1 if an error occurred
     703    @see evbuffer_read()
     704   */
     705  EVENT2_EXPORT_SYMBOL
     706  int evbuffer_write(struct evbuffer *buffer, evutil_socket_t fd);
     707  
     708  /**
     709    Write some of the contents of an evbuffer to a file descriptor.
     710  
     711    The evbuffer will be drained after the bytes have been successfully written.
     712  
     713    @param buffer the evbuffer to be written and drained
     714    @param fd the file descriptor to be written to
     715    @param howmuch the largest allowable number of bytes to write, or -1
     716  	to write as many bytes as we can.
     717    @return the number of bytes written, or -1 if an error occurred
     718    @see evbuffer_read()
     719   */
     720  EVENT2_EXPORT_SYMBOL
     721  int evbuffer_write_atmost(struct evbuffer *buffer, evutil_socket_t fd,
     722  						  ev_ssize_t howmuch);
     723  
     724  /**
     725    Read from a file descriptor and store the result in an evbuffer.
     726  
     727    @param buffer the evbuffer to store the result
     728    @param fd the file descriptor to read from
     729    @param howmuch the number of bytes to be read. If the given number is negative
     730    or out of maximum bytes per one read, as many bytes as we can will be read.
     731    @return the number of bytes read, or -1 if an error occurred
     732    @see evbuffer_write()
     733   */
     734  EVENT2_EXPORT_SYMBOL
     735  int evbuffer_read(struct evbuffer *buffer, evutil_socket_t fd, int howmuch);
     736  
     737  /**
     738     Search for a string within an evbuffer.
     739  
     740     @param buffer the evbuffer to be searched
     741     @param what the string to be searched for
     742     @param len the length of the search string
     743     @param start NULL or a pointer to a valid struct evbuffer_ptr.
     744     @return a struct evbuffer_ptr whose 'pos' field has the offset of the
     745       first occurrence of the string in the buffer after 'start'.  The 'pos'
     746       field of the result is -1 if the string was not found.
     747   */
     748  EVENT2_EXPORT_SYMBOL
     749  struct evbuffer_ptr evbuffer_search(struct evbuffer *buffer, const char *what, size_t len, const struct evbuffer_ptr *start);
     750  
     751  /**
     752     Search for a string within part of an evbuffer.
     753  
     754     @param buffer the evbuffer to be searched
     755     @param what the string to be searched for
     756     @param len the length of the search string
     757     @param start NULL or a pointer to a valid struct evbuffer_ptr that
     758       indicates where we should start searching.
     759     @param end NULL or a pointer to a valid struct evbuffer_ptr that
     760       indicates where we should stop searching.
     761     @return a struct evbuffer_ptr whose 'pos' field has the offset of the
     762       first occurrence of the string in the buffer after 'start'.  The 'pos'
     763       field of the result is -1 if the string was not found.
     764   */
     765  EVENT2_EXPORT_SYMBOL
     766  struct evbuffer_ptr evbuffer_search_range(struct evbuffer *buffer, const char *what, size_t len, const struct evbuffer_ptr *start, const struct evbuffer_ptr *end);
     767  
     768  /**
     769     Defines how to adjust an evbuffer_ptr by evbuffer_ptr_set()
     770  
     771     @see evbuffer_ptr_set() */
     772  enum evbuffer_ptr_how {
     773  	/** Sets the pointer to the position; can be called on with an
     774  	    uninitialized evbuffer_ptr. */
     775  	EVBUFFER_PTR_SET,
     776  	/** Advances the pointer by adding to the current position. */
     777  	EVBUFFER_PTR_ADD
     778  };
     779  
     780  /**
     781     Sets the search pointer in the buffer to position.
     782  
     783     There are two ways to use this function: you can call
     784        evbuffer_ptr_set(buf, &pos, N, EVBUFFER_PTR_SET)
     785     to move 'pos' to a position 'N' bytes after the start of the buffer, or
     786        evbuffer_ptr_set(buf, &pos, N, EVBUFFER_PTR_ADD)
     787     to move 'pos' forward by 'N' bytes.
     788  
     789     If evbuffer_ptr is not initialized, this function can only be called
     790     with EVBUFFER_PTR_SET.
     791  
     792     An evbuffer_ptr can represent any position from the start of the buffer to
     793     a position immediately after the end of the buffer.
     794  
     795     @param buffer the evbuffer to be search
     796     @param ptr a pointer to a struct evbuffer_ptr
     797     @param position the position at which to start the next search
     798     @param how determines how the pointer should be manipulated.
     799     @returns 0 on success or -1 otherwise
     800  */
     801  EVENT2_EXPORT_SYMBOL
     802  int
     803  evbuffer_ptr_set(struct evbuffer *buffer, struct evbuffer_ptr *ptr,
     804      size_t position, enum evbuffer_ptr_how how);
     805  
     806  /**
     807     Search for an end-of-line string within an evbuffer.
     808  
     809     @param buffer the evbuffer to be searched
     810     @param start NULL or a pointer to a valid struct evbuffer_ptr to start
     811        searching at.
     812     @param eol_len_out If non-NULL, the pointed-to value will be set to
     813        the length of the end-of-line string.
     814     @param eol_style The kind of EOL to look for; see evbuffer_readln() for
     815        more information
     816     @return a struct evbuffer_ptr whose 'pos' field has the offset of the
     817       first occurrence EOL in the buffer after 'start'.  The 'pos'
     818       field of the result is -1 if the string was not found.
     819   */
     820  EVENT2_EXPORT_SYMBOL
     821  struct evbuffer_ptr evbuffer_search_eol(struct evbuffer *buffer,
     822      struct evbuffer_ptr *start, size_t *eol_len_out,
     823      enum evbuffer_eol_style eol_style);
     824  
     825  /** Function to peek at data inside an evbuffer without removing it or
     826      copying it out.
     827  
     828      Pointers to the data are returned by filling the 'vec_out' array
     829      with pointers to one or more extents of data inside the buffer.
     830  
     831      The total data in the extents that you get back may be more than
     832      you requested (if there is more data last extent than you asked
     833      for), or less (if you do not provide enough evbuffer_iovecs, or if
     834      the buffer does not have as much data as you asked to see).
     835  
     836      @param buffer the evbuffer to peek into,
     837      @param len the number of bytes to try to peek.  If len is negative, we
     838         will try to fill as much of vec_out as we can.  If len is negative
     839         and vec_out is not provided, we return the number of evbuffer_iovecs
     840         that would be needed to get all the data in the buffer.
     841      @param start_at an evbuffer_ptr indicating the point at which we
     842         should start looking for data.  NULL means, "At the start of the
     843         buffer."
     844      @param vec_out an array of evbuffer_iovec
     845      @param n_vec the length of vec_out.  If 0, we only count how many
     846         extents would be necessary to point to the requested amount of
     847         data.
     848      @return The number of extents needed.  This may be less than n_vec
     849         if we didn't need all the evbuffer_iovecs we were given, or more
     850         than n_vec if we would need more to return all the data that was
     851         requested.
     852   */
     853  EVENT2_EXPORT_SYMBOL
     854  int evbuffer_peek(struct evbuffer *buffer, ev_ssize_t len,
     855      struct evbuffer_ptr *start_at,
     856      struct evbuffer_iovec *vec_out, int n_vec);
     857  
     858  
     859  /** Structure passed to an evbuffer_cb_func evbuffer callback
     860  
     861      @see evbuffer_cb_func, evbuffer_add_cb()
     862   */
     863  struct evbuffer_cb_info {
     864  	/** The number of bytes in this evbuffer when callbacks were last
     865  	 * invoked. */
     866  	size_t orig_size;
     867  	/** The number of bytes added since callbacks were last invoked. */
     868  	size_t n_added;
     869  	/** The number of bytes removed since callbacks were last invoked. */
     870  	size_t n_deleted;
     871  };
     872  
     873  /** Type definition for a callback that is invoked whenever data is added or
     874      removed from an evbuffer.
     875  
     876      An evbuffer may have one or more callbacks set at a time.  The order
     877      in which they are executed is undefined.
     878  
     879      A callback function may add more callbacks, or remove itself from the
     880      list of callbacks, or add or remove data from the buffer.  It may not
     881      remove another callback from the list.
     882  
     883      If a callback adds or removes data from the buffer or from another
     884      buffer, this can cause a recursive invocation of your callback or
     885      other callbacks.  If you ask for an infinite loop, you might just get
     886      one: watch out!
     887  
     888      @param buffer the buffer whose size has changed
     889      @param info a structure describing how the buffer changed.
     890      @param arg a pointer to user data
     891  */
     892  typedef void (*evbuffer_cb_func)(struct evbuffer *buffer, const struct evbuffer_cb_info *info, void *arg);
     893  
     894  struct evbuffer_cb_entry;
     895  /** Add a new callback to an evbuffer.
     896  
     897    Subsequent calls to evbuffer_add_cb() add new callbacks.  To remove this
     898    callback, call evbuffer_remove_cb or evbuffer_remove_cb_entry.
     899  
     900    @param buffer the evbuffer to be monitored
     901    @param cb the callback function to invoke when the evbuffer is modified,
     902  	or NULL to remove all callbacks.
     903    @param cbarg an argument to be provided to the callback function
     904    @return a handle to the callback on success, or NULL on failure.
     905   */
     906  EVENT2_EXPORT_SYMBOL
     907  struct evbuffer_cb_entry *evbuffer_add_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg);
     908  
     909  /** Remove a callback from an evbuffer, given a handle returned from
     910      evbuffer_add_cb.
     911  
     912      Calling this function invalidates the handle.
     913  
     914      @return 0 if a callback was removed, or -1 if no matching callback was
     915      found.
     916   */
     917  EVENT2_EXPORT_SYMBOL
     918  int evbuffer_remove_cb_entry(struct evbuffer *buffer,
     919  			     struct evbuffer_cb_entry *ent);
     920  
     921  /** Remove a callback from an evbuffer, given the function and argument
     922      used to add it.
     923  
     924      @return 0 if a callback was removed, or -1 if no matching callback was
     925      found.
     926   */
     927  EVENT2_EXPORT_SYMBOL
     928  int evbuffer_remove_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg);
     929  
     930  /** If this flag is not set, then a callback is temporarily disabled, and
     931   * should not be invoked.
     932   *
     933   * @see evbuffer_cb_set_flags(), evbuffer_cb_clear_flags()
     934   */
     935  #define EVBUFFER_CB_ENABLED 1
     936  
     937  /** Change the flags that are set for a callback on a buffer by adding more.
     938  
     939      @param buffer the evbuffer that the callback is watching.
     940      @param cb the callback whose status we want to change.
     941      @param flags EVBUFFER_CB_ENABLED to re-enable the callback.
     942      @return 0 on success, -1 on failure.
     943   */
     944  EVENT2_EXPORT_SYMBOL
     945  int evbuffer_cb_set_flags(struct evbuffer *buffer,
     946  			  struct evbuffer_cb_entry *cb, ev_uint32_t flags);
     947  
     948  /** Change the flags that are set for a callback on a buffer by removing some
     949  
     950      @param buffer the evbuffer that the callback is watching.
     951      @param cb the callback whose status we want to change.
     952      @param flags EVBUFFER_CB_ENABLED to disable the callback.
     953      @return 0 on success, -1 on failure.
     954   */
     955  EVENT2_EXPORT_SYMBOL
     956  int evbuffer_cb_clear_flags(struct evbuffer *buffer,
     957  			  struct evbuffer_cb_entry *cb, ev_uint32_t flags);
     958  
     959  #if 0
     960  /** Postpone calling a given callback until unsuspend is called later.
     961  
     962      This is different from disabling the callback, since the callback will get
     963  	invoked later if the buffer size changes between now and when we unsuspend
     964  	it.
     965  
     966  	@param the buffer that the callback is watching.
     967  	@param cb the callback we want to suspend.
     968   */
     969  EVENT2_EXPORT_SYMBOL
     970  void evbuffer_cb_suspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb);
     971  /** Stop postponing a callback that we postponed with evbuffer_cb_suspend.
     972  
     973  	If data was added to or removed from the buffer while the callback was
     974  	suspended, the callback will get called once now.
     975  
     976  	@param the buffer that the callback is watching.
     977  	@param cb the callback we want to stop suspending.
     978   */
     979  EVENT2_EXPORT_SYMBOL
     980  void evbuffer_cb_unsuspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb);
     981  #endif
     982  
     983  /**
     984    Makes the data at the beginning of an evbuffer contiguous.
     985  
     986    @param buf the evbuffer to make contiguous
     987    @param size the number of bytes to make contiguous, or -1 to make the
     988  	entire buffer contiguous.
     989    @return a pointer to the contiguous memory array, or NULL if param size
     990  	requested more data than is present in the buffer.
     991  */
     992  
     993  EVENT2_EXPORT_SYMBOL
     994  unsigned char *evbuffer_pullup(struct evbuffer *buf, ev_ssize_t size);
     995  
     996  /**
     997    Prepends data to the beginning of the evbuffer
     998  
     999    @param buf the evbuffer to which to prepend data
    1000    @param data a pointer to the memory to prepend
    1001    @param size the number of bytes to prepend
    1002    @return 0 if successful, or -1 otherwise
    1003  */
    1004  
    1005  EVENT2_EXPORT_SYMBOL
    1006  int evbuffer_prepend(struct evbuffer *buf, const void *data, size_t size);
    1007  
    1008  /**
    1009    Prepends all data from the src evbuffer to the beginning of the dst
    1010    evbuffer.
    1011  
    1012    @param dst the evbuffer to which to prepend data
    1013    @param src the evbuffer to prepend; it will be emptied as a result
    1014    @return 0 if successful, or -1 otherwise
    1015  */
    1016  EVENT2_EXPORT_SYMBOL
    1017  int evbuffer_prepend_buffer(struct evbuffer *dst, struct evbuffer* src);
    1018  
    1019  /**
    1020     Prevent calls that modify an evbuffer from succeeding. A buffer may
    1021     frozen at the front, at the back, or at both the front and the back.
    1022  
    1023     If the front of a buffer is frozen, operations that drain data from
    1024     the front of the buffer, or that prepend data to the buffer, will
    1025     fail until it is unfrozen.   If the back a buffer is frozen, operations
    1026     that append data from the buffer will fail until it is unfrozen.
    1027  
    1028     @param buf The buffer to freeze
    1029     @param at_front If true, we freeze the front of the buffer.  If false,
    1030        we freeze the back.
    1031     @return 0 on success, -1 on failure.
    1032  */
    1033  EVENT2_EXPORT_SYMBOL
    1034  int evbuffer_freeze(struct evbuffer *buf, int at_front);
    1035  /**
    1036     Re-enable calls that modify an evbuffer.
    1037  
    1038     @param buf The buffer to un-freeze
    1039     @param at_front If true, we unfreeze the front of the buffer.  If false,
    1040        we unfreeze the back.
    1041     @return 0 on success, -1 on failure.
    1042   */
    1043  EVENT2_EXPORT_SYMBOL
    1044  int evbuffer_unfreeze(struct evbuffer *buf, int at_front);
    1045  
    1046  struct event_base;
    1047  /**
    1048     Force all the callbacks on an evbuffer to be run, not immediately after
    1049     the evbuffer is altered, but instead from inside the event loop.
    1050  
    1051     This can be used to serialize all the callbacks to a single thread
    1052     of execution.
    1053   */
    1054  EVENT2_EXPORT_SYMBOL
    1055  int evbuffer_defer_callbacks(struct evbuffer *buffer, struct event_base *base);
    1056  
    1057  /**
    1058    Append data from 1 or more iovec's to an evbuffer
    1059  
    1060    Calculates the number of bytes needed for an iovec structure and guarantees
    1061    all data will fit into a single chain. Can be used in lieu of functionality
    1062    which calls evbuffer_add() constantly before being used to increase
    1063    performance.
    1064  
    1065    @param buffer the destination buffer
    1066    @param vec the source iovec
    1067    @param n_vec the number of iovec structures.
    1068    @return the number of bytes successfully written to the output buffer.
    1069  */
    1070  EVENT2_EXPORT_SYMBOL
    1071  size_t evbuffer_add_iovec(struct evbuffer * buffer, struct evbuffer_iovec * vec, int n_vec);
    1072  
    1073  #ifdef __cplusplus
    1074  }
    1075  #endif
    1076  
    1077  #endif /* EVENT2_BUFFER_H_INCLUDED_ */