evbuffer.h
上传用户:jnmzc84
上传日期:2022-08-08
资源大小:35k
文件大小:5k
源码类别:

网络编程

开发平台:

Visual C++

  1. /**
  2.   @file evbuffer.h
  3.   @brief the prev declartion for the libevent's evbuffer.
  4. */
  5. #ifndef ___EVBUFFER_H_
  6. #define ___EVBUFFER_H_
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #include <stddef.h>
  11. #include <stdio.h>
  12. #define __func__ __FUNCTION__
  13. typedef unsigned char u_char;
  14. #define EVBUFFER_LENGTH(x) (x)->off
  15. #define EVBUFFER_DATA(x) (x)->buffer
  16. struct evbuffer {
  17. u_char *buffer;
  18. u_char *orig_buffer;
  19. size_t misalign;
  20. size_t totallen;
  21. size_t off;
  22. void (*cb)(struct evbuffer *, size_t, size_t, void *);
  23. void *cbarg;
  24. };
  25. /**
  26.   Allocate storage for a new evbuffer.
  27.   @return a pointer to a newly allocated evbuffer struct, or NULL if an error
  28.           occurred
  29.  */
  30. struct evbuffer *evbuffer_new(void);
  31. /**
  32.   Deallocate storage for an evbuffer.
  33.   @param pointer to the evbuffer to be freed
  34.  */
  35. void evbuffer_free(struct evbuffer *);
  36. /**
  37.   Expands the available space in an event buffer.
  38.   Expands the available space in the event buffer to at least datlen
  39.   @param buf the event buffer to be expanded
  40.   @param datlen the new minimum length requirement
  41.   @return 0 if successful, or -1 if an error occurred
  42. */
  43. int evbuffer_expand(struct evbuffer *, size_t);
  44. /**
  45.   Append data to the end of an evbuffer.
  46.   @param buf the event buffer to be appended to
  47.   @param data pointer to the beginning of the data buffer
  48.   @param datlen the number of bytes to be copied from the data buffer
  49.  */
  50. int evbuffer_add(struct evbuffer *, const void *, size_t);
  51. /**
  52.   Read data from an event buffer and drain the bytes read.
  53.   @param buf the event buffer to be read from
  54.   @param data the destination buffer to store the result
  55.   @param datlen the maximum size of the destination buffer
  56.   @return the number of bytes read
  57.  */
  58. int evbuffer_remove(struct evbuffer *, void *, size_t);
  59. /**
  60.  * Read a single line from an event buffer.
  61.  *
  62.  * Reads a line terminated by either 'rn', 'nr' or 'r' or 'n'.
  63.  * The returned buffer needs to be freed by the caller.
  64.  *
  65.  * @param buffer the evbuffer to read from
  66.  * @return pointer to a single line, or NULL if an error occurred
  67.  */
  68. char *evbuffer_readline(struct evbuffer *);
  69. /**
  70.   Move data from one evbuffer into another evbuffer.
  71.   This is a destructive add.  The data from one buffer moves into
  72.   the other buffer. The destination buffer is expanded as needed.
  73.   @param outbuf the output buffer
  74.   @param inbuf the input buffer
  75.   @return 0 if successful, or -1 if an error occurred
  76.  */
  77. int evbuffer_add_buffer(struct evbuffer *, struct evbuffer *);
  78. /**
  79.   Append a formatted string to the end of an evbuffer.
  80.   @param buf the evbuffer that will be appended to
  81.   @param fmt a format string
  82.   @param ... arguments that will be passed to printf(3)
  83.   @return The number of bytes added if successful, or -1 if an error occurred.
  84.  */
  85. int evbuffer_add_printf(struct evbuffer *, const char *fmt, ...)
  86. #ifdef __GNUC__
  87.   __attribute__((format(printf, 2, 3)))
  88. #endif
  89. ;
  90. /**
  91.   Append a va_list formatted string to the end of an evbuffer.
  92.   @param buf the evbuffer that will be appended to
  93.   @param fmt a format string
  94.   @param ap a varargs va_list argument array that will be passed to vprintf(3)
  95.   @return The number of bytes added if successful, or -1 if an error occurred.
  96.  */
  97. int evbuffer_add_vprintf(struct evbuffer *, const char *fmt, va_list ap);
  98. /**
  99.   Remove a specified number of bytes data from the beginning of an evbuffer.
  100.   @param buf the evbuffer to be drained
  101.   @param len the number of bytes to drain from the beginning of the buffer
  102.   @return 0 if successful, or -1 if an error occurred
  103.  */
  104. void evbuffer_drain(struct evbuffer *, size_t);
  105. /**
  106.   Write the contents of an evbuffer to a file descriptor.
  107.   The evbuffer will be drained after the bytes have been successfully written.
  108.   @param buffer the evbuffer to be written and drained
  109.   @param fd the file descriptor to be written to
  110.   @return the number of bytes written, or -1 if an error occurred
  111.   @see evbuffer_read()
  112.  */
  113. int evbuffer_write(struct evbuffer *, int);
  114. /**
  115.   Read from a file descriptor and store the result in an evbuffer.
  116.   @param buf the evbuffer to store the result
  117.   @param fd the file descriptor to read from
  118.   @param howmuch the number of bytes to be read
  119.   @return the number of bytes read, or -1 if an error occurred
  120.   @see evbuffer_write()
  121.  */
  122. int evbuffer_read(struct evbuffer *, int, int);
  123. /**
  124.   Find a string within an evbuffer.
  125.   @param buffer the evbuffer to be searched
  126.   @param what the string to be searched for
  127.   @param len the length of the search string
  128.   @return a pointer to the beginning of the search string, or NULL if the search failed.
  129.  */
  130. u_char *evbuffer_find(struct evbuffer *, const u_char *, size_t);
  131. /**
  132.   Set a callback to invoke when the evbuffer is modified.
  133.   @param buffer the evbuffer to be monitored
  134.   @param cb the callback function to invoke when the evbuffer is modified
  135.   @param cbarg an argument to be provided to the callback function
  136.  */
  137. void evbuffer_setcb(struct evbuffer *, void (*)(struct evbuffer *, size_t, size_t, void *), void *);
  138. #ifdef __cplusplus
  139. }
  140. #endif
  141. #endif /* ___EVBUFFER_H_ */