00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef EVENT2_BUFFER_H_INCLUDED_
00027 #define EVENT2_BUFFER_H_INCLUDED_
00028
00075 #include <event2/visibility.h>
00076
00077 #ifdef __cplusplus
00078 extern "C" {
00079 #endif
00080
00081 #include <event2/event-config.h>
00082 #include <stdarg.h>
00083 #ifdef EVENT__HAVE_SYS_TYPES_H
00084 #include <sys/types.h>
00085 #endif
00086 #ifdef EVENT__HAVE_SYS_UIO_H
00087 #include <sys/uio.h>
00088 #endif
00089 #include <event2/util.h>
00090
00097 struct evbuffer
00098 #ifdef EVENT_IN_DOXYGEN_
00099 {}
00100 #endif
00101 ;
00102
00116 struct evbuffer_ptr {
00117 ev_ssize_t pos;
00118
00119
00120
00121 struct {
00122 void *chain;
00123 size_t pos_in_chain;
00124 } internal_;
00125 };
00126
00132 #ifdef EVENT__HAVE_SYS_UIO_H
00133 #define evbuffer_iovec iovec
00134
00135 #define EVBUFFER_IOVEC_IS_NATIVE_
00136 #else
00137 struct evbuffer_iovec {
00139 void *iov_base;
00141 size_t iov_len;
00142 };
00143 #endif
00144
00151 EVENT2_EXPORT_SYMBOL
00152 struct evbuffer *evbuffer_new(void);
00158 EVENT2_EXPORT_SYMBOL
00159 void evbuffer_free(struct evbuffer *buf);
00160
00173 EVENT2_EXPORT_SYMBOL
00174 int evbuffer_enable_locking(struct evbuffer *buf, void *lock);
00175
00180 EVENT2_EXPORT_SYMBOL
00181 void evbuffer_lock(struct evbuffer *buf);
00182
00187 EVENT2_EXPORT_SYMBOL
00188 void evbuffer_unlock(struct evbuffer *buf);
00189
00190
00206 #define EVBUFFER_FLAG_DRAINS_TO_FD 1
00207
00215 EVENT2_EXPORT_SYMBOL
00216 int evbuffer_set_flags(struct evbuffer *buf, ev_uint64_t flags);
00224 EVENT2_EXPORT_SYMBOL
00225 int evbuffer_clear_flags(struct evbuffer *buf, ev_uint64_t flags);
00226
00233 EVENT2_EXPORT_SYMBOL
00234 size_t evbuffer_get_length(const struct evbuffer *buf);
00235
00248 EVENT2_EXPORT_SYMBOL
00249 size_t evbuffer_get_contiguous_space(const struct evbuffer *buf);
00250
00261 EVENT2_EXPORT_SYMBOL
00262 int evbuffer_expand(struct evbuffer *buf, size_t datlen);
00263
00297 EVENT2_EXPORT_SYMBOL
00298 int
00299 evbuffer_reserve_space(struct evbuffer *buf, ev_ssize_t size,
00300 struct evbuffer_iovec *vec, int n_vec);
00301
00323 EVENT2_EXPORT_SYMBOL
00324 int evbuffer_commit_space(struct evbuffer *buf,
00325 struct evbuffer_iovec *vec, int n_vecs);
00326
00335 EVENT2_EXPORT_SYMBOL
00336 int evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen);
00337
00338
00350 EVENT2_EXPORT_SYMBOL
00351 int evbuffer_remove(struct evbuffer *buf, void *data, size_t datlen);
00352
00364 EVENT2_EXPORT_SYMBOL
00365 ev_ssize_t evbuffer_copyout(struct evbuffer *buf, void *data_out, size_t datlen);
00366
00379 EVENT2_EXPORT_SYMBOL
00380 ev_ssize_t evbuffer_copyout_from(struct evbuffer *buf, const struct evbuffer_ptr *pos, void *data_out, size_t datlen);
00381
00395 EVENT2_EXPORT_SYMBOL
00396 int evbuffer_remove_buffer(struct evbuffer *src, struct evbuffer *dst,
00397 size_t datlen);
00398
00401 enum evbuffer_eol_style {
00411 EVBUFFER_EOL_ANY,
00414 EVBUFFER_EOL_CRLF,
00416 EVBUFFER_EOL_CRLF_STRICT,
00418 EVBUFFER_EOL_LF,
00420 EVBUFFER_EOL_NUL
00421 };
00422
00437 EVENT2_EXPORT_SYMBOL
00438 char *evbuffer_readln(struct evbuffer *buffer, size_t *n_read_out,
00439 enum evbuffer_eol_style eol_style);
00440
00453 EVENT2_EXPORT_SYMBOL
00454 int evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf);
00455
00469 EVENT2_EXPORT_SYMBOL
00470 int evbuffer_add_buffer_reference(struct evbuffer *outbuf,
00471 struct evbuffer *inbuf);
00472
00479 typedef void (*evbuffer_ref_cleanup_cb)(const void *data,
00480 size_t datalen, void *extra);
00481
00497 EVENT2_EXPORT_SYMBOL
00498 int evbuffer_add_reference(struct evbuffer *outbuf,
00499 const void *data, size_t datlen,
00500 evbuffer_ref_cleanup_cb cleanupfn, void *cleanupfn_arg);
00501
00526 EVENT2_EXPORT_SYMBOL
00527 int evbuffer_add_file(struct evbuffer *outbuf, int fd, ev_off_t offset,
00528 ev_off_t length);
00529
00538 struct evbuffer_file_segment;
00539
00545 #define EVBUF_FS_CLOSE_ON_FREE 0x01
00546
00550 #define EVBUF_FS_DISABLE_MMAP 0x02
00551
00560 #define EVBUF_FS_DISABLE_SENDFILE 0x04
00561
00567 #define EVBUF_FS_DISABLE_LOCKING 0x08
00568
00573 typedef void (*evbuffer_file_segment_cleanup_cb)(
00574 struct evbuffer_file_segment const* seg, int flags, void* arg);
00575
00598 EVENT2_EXPORT_SYMBOL
00599 struct evbuffer_file_segment *evbuffer_file_segment_new(
00600 int fd, ev_off_t offset, ev_off_t length, unsigned flags);
00601
00609 EVENT2_EXPORT_SYMBOL
00610 void evbuffer_file_segment_free(struct evbuffer_file_segment *seg);
00611
00619 EVENT2_EXPORT_SYMBOL
00620 void evbuffer_file_segment_add_cleanup_cb(struct evbuffer_file_segment *seg,
00621 evbuffer_file_segment_cleanup_cb cb, void* arg);
00622
00645 EVENT2_EXPORT_SYMBOL
00646 int evbuffer_add_file_segment(struct evbuffer *buf,
00647 struct evbuffer_file_segment *seg, ev_off_t offset, ev_off_t length);
00648
00661 EVENT2_EXPORT_SYMBOL
00662 int evbuffer_add_printf(struct evbuffer *buf, const char *fmt, ...)
00663 #ifdef __GNUC__
00664 __attribute__((format(printf, 2, 3)))
00665 #endif
00666 ;
00667
00676 EVENT2_EXPORT_SYMBOL
00677 int evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
00678 #ifdef __GNUC__
00679 __attribute__((format(printf, 2, 0)))
00680 #endif
00681 ;
00682
00683
00691 EVENT2_EXPORT_SYMBOL
00692 int evbuffer_drain(struct evbuffer *buf, size_t len);
00693
00694
00705 EVENT2_EXPORT_SYMBOL
00706 int evbuffer_write(struct evbuffer *buffer, evutil_socket_t fd);
00707
00720 EVENT2_EXPORT_SYMBOL
00721 int evbuffer_write_atmost(struct evbuffer *buffer, evutil_socket_t fd,
00722 ev_ssize_t howmuch);
00723
00733 EVENT2_EXPORT_SYMBOL
00734 int evbuffer_read(struct evbuffer *buffer, evutil_socket_t fd, int howmuch);
00735
00747 EVENT2_EXPORT_SYMBOL
00748 struct evbuffer_ptr evbuffer_search(struct evbuffer *buffer, const char *what, size_t len, const struct evbuffer_ptr *start);
00749
00764 EVENT2_EXPORT_SYMBOL
00765 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);
00766
00771 enum evbuffer_ptr_how {
00774 EVBUFFER_PTR_SET,
00776 EVBUFFER_PTR_ADD
00777 };
00778
00800 EVENT2_EXPORT_SYMBOL
00801 int
00802 evbuffer_ptr_set(struct evbuffer *buffer, struct evbuffer_ptr *ptr,
00803 size_t position, enum evbuffer_ptr_how how);
00804
00819 EVENT2_EXPORT_SYMBOL
00820 struct evbuffer_ptr evbuffer_search_eol(struct evbuffer *buffer,
00821 struct evbuffer_ptr *start, size_t *eol_len_out,
00822 enum evbuffer_eol_style eol_style);
00823
00852 EVENT2_EXPORT_SYMBOL
00853 int evbuffer_peek(struct evbuffer *buffer, ev_ssize_t len,
00854 struct evbuffer_ptr *start_at,
00855 struct evbuffer_iovec *vec_out, int n_vec);
00856
00857
00862 struct evbuffer_cb_info {
00865 size_t orig_size;
00867 size_t n_added;
00869 size_t n_deleted;
00870 };
00871
00891 typedef void (*evbuffer_cb_func)(struct evbuffer *buffer, const struct evbuffer_cb_info *info, void *arg);
00892
00893 struct evbuffer_cb_entry;
00905 EVENT2_EXPORT_SYMBOL
00906 struct evbuffer_cb_entry *evbuffer_add_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg);
00907
00916 EVENT2_EXPORT_SYMBOL
00917 int evbuffer_remove_cb_entry(struct evbuffer *buffer,
00918 struct evbuffer_cb_entry *ent);
00919
00926 EVENT2_EXPORT_SYMBOL
00927 int evbuffer_remove_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg);
00928
00934 #define EVBUFFER_CB_ENABLED 1
00935
00943 EVENT2_EXPORT_SYMBOL
00944 int evbuffer_cb_set_flags(struct evbuffer *buffer,
00945 struct evbuffer_cb_entry *cb, ev_uint32_t flags);
00946
00954 EVENT2_EXPORT_SYMBOL
00955 int evbuffer_cb_clear_flags(struct evbuffer *buffer,
00956 struct evbuffer_cb_entry *cb, ev_uint32_t flags);
00957
00958 #if 0
00959
00968 EVENT2_EXPORT_SYMBOL
00969 void evbuffer_cb_suspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb);
00978 EVENT2_EXPORT_SYMBOL
00979 void evbuffer_cb_unsuspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb);
00980 #endif
00981
00992 EVENT2_EXPORT_SYMBOL
00993 unsigned char *evbuffer_pullup(struct evbuffer *buf, ev_ssize_t size);
00994
01004 EVENT2_EXPORT_SYMBOL
01005 int evbuffer_prepend(struct evbuffer *buf, const void *data, size_t size);
01006
01015 EVENT2_EXPORT_SYMBOL
01016 int evbuffer_prepend_buffer(struct evbuffer *dst, struct evbuffer* src);
01017
01032 EVENT2_EXPORT_SYMBOL
01033 int evbuffer_freeze(struct evbuffer *buf, int at_front);
01042 EVENT2_EXPORT_SYMBOL
01043 int evbuffer_unfreeze(struct evbuffer *buf, int at_front);
01044
01045 struct event_base;
01053 EVENT2_EXPORT_SYMBOL
01054 int evbuffer_defer_callbacks(struct evbuffer *buffer, struct event_base *base);
01055
01069 EVENT2_EXPORT_SYMBOL
01070 size_t evbuffer_add_iovec(struct evbuffer * buffer, struct evbuffer_iovec * vec, int n_vec);
01071
01072 #ifdef __cplusplus
01073 }
01074 #endif
01075
01076 #endif