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
00027 #ifndef EVENT2_BUFFEREVENT_H_INCLUDED_
00028 #define EVENT2_BUFFEREVENT_H_INCLUDED_
00029
00077 #include <event2/visibility.h>
00078
00079 #ifdef __cplusplus
00080 extern "C" {
00081 #endif
00082
00083 #include <event2/event-config.h>
00084 #ifdef EVENT__HAVE_SYS_TYPES_H
00085 #include <sys/types.h>
00086 #endif
00087 #ifdef EVENT__HAVE_SYS_TIME_H
00088 #include <sys/time.h>
00089 #endif
00090
00091
00092 #include <event2/util.h>
00093
00100 #define BEV_EVENT_READING 0x01
00101 #define BEV_EVENT_WRITING 0x02
00102 #define BEV_EVENT_EOF 0x10
00103 #define BEV_EVENT_ERROR 0x20
00104 #define BEV_EVENT_TIMEOUT 0x40
00105 #define BEV_EVENT_CONNECTED 0x80
00113 struct bufferevent
00114 #ifdef EVENT_IN_DOXYGEN_
00115 {}
00116 #endif
00117 ;
00118 struct event_base;
00119 struct evbuffer;
00120 struct sockaddr;
00121
00135 typedef void (*bufferevent_data_cb)(struct bufferevent *bev, void *ctx);
00136
00154 typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx);
00155
00157 enum bufferevent_options {
00160 BEV_OPT_CLOSE_ON_FREE = (1<<0),
00161
00164 BEV_OPT_THREADSAFE = (1<<1),
00165
00167 BEV_OPT_DEFER_CALLBACKS = (1<<2),
00168
00173 BEV_OPT_UNLOCK_CALLBACKS = (1<<3)
00174 };
00175
00189 EVENT2_EXPORT_SYMBOL
00190 struct bufferevent *bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options);
00191
00211 EVENT2_EXPORT_SYMBOL
00212 int bufferevent_socket_connect(struct bufferevent *, const struct sockaddr *, int);
00213
00214 struct evdns_base;
00241 EVENT2_EXPORT_SYMBOL
00242 int bufferevent_socket_connect_hostname(struct bufferevent *,
00243 struct evdns_base *, int, const char *, int);
00244
00253 EVENT2_EXPORT_SYMBOL
00254 int bufferevent_socket_get_dns_error(struct bufferevent *bev);
00255
00267 EVENT2_EXPORT_SYMBOL
00268 int bufferevent_base_set(struct event_base *base, struct bufferevent *bufev);
00269
00273 EVENT2_EXPORT_SYMBOL
00274 struct event_base *bufferevent_get_base(struct bufferevent *bev);
00275
00285 EVENT2_EXPORT_SYMBOL
00286 int bufferevent_priority_set(struct bufferevent *bufev, int pri);
00287
00293 EVENT2_EXPORT_SYMBOL
00294 int bufferevent_get_priority(const struct bufferevent *bufev);
00295
00304 EVENT2_EXPORT_SYMBOL
00305 void bufferevent_free(struct bufferevent *bufev);
00306
00307
00322 EVENT2_EXPORT_SYMBOL
00323 void bufferevent_setcb(struct bufferevent *bufev,
00324 bufferevent_data_cb readcb, bufferevent_data_cb writecb,
00325 bufferevent_event_cb eventcb, void *cbarg);
00326
00341 EVENT2_EXPORT_SYMBOL
00342 void bufferevent_getcb(struct bufferevent *bufev,
00343 bufferevent_data_cb *readcb_ptr,
00344 bufferevent_data_cb *writecb_ptr,
00345 bufferevent_event_cb *eventcb_ptr,
00346 void **cbarg_ptr);
00347
00355 EVENT2_EXPORT_SYMBOL
00356 int bufferevent_setfd(struct bufferevent *bufev, evutil_socket_t fd);
00357
00362 EVENT2_EXPORT_SYMBOL
00363 evutil_socket_t bufferevent_getfd(struct bufferevent *bufev);
00364
00369 EVENT2_EXPORT_SYMBOL
00370 struct bufferevent *bufferevent_get_underlying(struct bufferevent *bufev);
00371
00385 EVENT2_EXPORT_SYMBOL
00386 int bufferevent_write(struct bufferevent *bufev,
00387 const void *data, size_t size);
00388
00389
00399 EVENT2_EXPORT_SYMBOL
00400 int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf);
00401
00402
00413 EVENT2_EXPORT_SYMBOL
00414 size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size);
00415
00424 EVENT2_EXPORT_SYMBOL
00425 int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf);
00426
00436 EVENT2_EXPORT_SYMBOL
00437 struct evbuffer *bufferevent_get_input(struct bufferevent *bufev);
00438
00451 EVENT2_EXPORT_SYMBOL
00452 struct evbuffer *bufferevent_get_output(struct bufferevent *bufev);
00453
00462 EVENT2_EXPORT_SYMBOL
00463 int bufferevent_enable(struct bufferevent *bufev, short event);
00464
00473 EVENT2_EXPORT_SYMBOL
00474 int bufferevent_disable(struct bufferevent *bufev, short event);
00475
00482 EVENT2_EXPORT_SYMBOL
00483 short bufferevent_get_enabled(struct bufferevent *bufev);
00484
00511 EVENT2_EXPORT_SYMBOL
00512 int bufferevent_set_timeouts(struct bufferevent *bufev,
00513 const struct timeval *timeout_read, const struct timeval *timeout_write);
00514
00533 EVENT2_EXPORT_SYMBOL
00534 void bufferevent_setwatermark(struct bufferevent *bufev, short events,
00535 size_t lowmark, size_t highmark);
00536
00547 EVENT2_EXPORT_SYMBOL
00548 int bufferevent_getwatermark(struct bufferevent *bufev, short events,
00549 size_t *lowmark, size_t *highmark);
00550
00555 EVENT2_EXPORT_SYMBOL
00556 void bufferevent_lock(struct bufferevent *bufev);
00557
00562 EVENT2_EXPORT_SYMBOL
00563 void bufferevent_unlock(struct bufferevent *bufev);
00564
00565
00574 EVENT2_EXPORT_SYMBOL
00575 void bufferevent_incref(struct bufferevent *bufev);
00576
00588 EVENT2_EXPORT_SYMBOL
00589 int bufferevent_decref(struct bufferevent *bufev);
00590
00595 enum bufferevent_flush_mode {
00597 BEV_NORMAL = 0,
00598
00600 BEV_FLUSH = 1,
00601
00603 BEV_FINISHED = 2
00604 };
00605
00614 EVENT2_EXPORT_SYMBOL
00615 int bufferevent_flush(struct bufferevent *bufev,
00616 short iotype,
00617 enum bufferevent_flush_mode mode);
00618
00623 enum bufferevent_trigger_options {
00625 BEV_TRIG_IGNORE_WATERMARKS = (1<<16),
00626
00628 BEV_TRIG_DEFER_CALLBACKS = BEV_OPT_DEFER_CALLBACKS
00629
00630
00631
00632 };
00633
00645 EVENT2_EXPORT_SYMBOL
00646 void bufferevent_trigger(struct bufferevent *bufev, short iotype,
00647 int options);
00648
00658 EVENT2_EXPORT_SYMBOL
00659 void bufferevent_trigger_event(struct bufferevent *bufev, short what,
00660 int options);
00661
00670 enum bufferevent_filter_result {
00672 BEV_OK = 0,
00673
00675 BEV_NEED_MORE = 1,
00676
00679 BEV_ERROR = 2
00680 };
00681
00700 typedef enum bufferevent_filter_result (*bufferevent_filter_cb)(
00701 struct evbuffer *src, struct evbuffer *dst, ev_ssize_t dst_limit,
00702 enum bufferevent_flush_mode mode, void *ctx);
00703
00717 EVENT2_EXPORT_SYMBOL
00718 struct bufferevent *
00719 bufferevent_filter_new(struct bufferevent *underlying,
00720 bufferevent_filter_cb input_filter,
00721 bufferevent_filter_cb output_filter,
00722 int options,
00723 void (*free_context)(void *),
00724 void *ctx);
00737 EVENT2_EXPORT_SYMBOL
00738 int bufferevent_pair_new(struct event_base *base, int options,
00739 struct bufferevent *pair[2]);
00740
00745 EVENT2_EXPORT_SYMBOL
00746 struct bufferevent *bufferevent_pair_get_partner(struct bufferevent *bev);
00747
00752 struct ev_token_bucket_cfg;
00753
00758 struct bufferevent_rate_limit_group;
00759
00761 #define EV_RATE_LIMIT_MAX EV_SSIZE_MAX
00762
00779 EVENT2_EXPORT_SYMBOL
00780 struct ev_token_bucket_cfg *ev_token_bucket_cfg_new(
00781 size_t read_rate, size_t read_burst,
00782 size_t write_rate, size_t write_burst,
00783 const struct timeval *tick_len);
00784
00790 EVENT2_EXPORT_SYMBOL
00791 void ev_token_bucket_cfg_free(struct ev_token_bucket_cfg *cfg);
00792
00804 EVENT2_EXPORT_SYMBOL
00805 int bufferevent_set_rate_limit(struct bufferevent *bev,
00806 struct ev_token_bucket_cfg *cfg);
00807
00825 EVENT2_EXPORT_SYMBOL
00826 struct bufferevent_rate_limit_group *bufferevent_rate_limit_group_new(
00827 struct event_base *base,
00828 const struct ev_token_bucket_cfg *cfg);
00834 EVENT2_EXPORT_SYMBOL
00835 int bufferevent_rate_limit_group_set_cfg(
00836 struct bufferevent_rate_limit_group *,
00837 const struct ev_token_bucket_cfg *);
00838
00855 EVENT2_EXPORT_SYMBOL
00856 int bufferevent_rate_limit_group_set_min_share(
00857 struct bufferevent_rate_limit_group *, size_t);
00858
00863 EVENT2_EXPORT_SYMBOL
00864 void bufferevent_rate_limit_group_free(struct bufferevent_rate_limit_group *);
00865
00876 EVENT2_EXPORT_SYMBOL
00877 int bufferevent_add_to_rate_limit_group(struct bufferevent *bev,
00878 struct bufferevent_rate_limit_group *g);
00879
00881 EVENT2_EXPORT_SYMBOL
00882 int bufferevent_remove_from_rate_limit_group(struct bufferevent *bev);
00883
00891 EVENT2_EXPORT_SYMBOL
00892 int bufferevent_set_max_single_read(struct bufferevent *bev, size_t size);
00893
00901 EVENT2_EXPORT_SYMBOL
00902 int bufferevent_set_max_single_write(struct bufferevent *bev, size_t size);
00903
00905 EVENT2_EXPORT_SYMBOL
00906 ev_ssize_t bufferevent_get_max_single_read(struct bufferevent *bev);
00907
00909 EVENT2_EXPORT_SYMBOL
00910 ev_ssize_t bufferevent_get_max_single_write(struct bufferevent *bev);
00911
00923 EVENT2_EXPORT_SYMBOL
00924 ev_ssize_t bufferevent_get_read_limit(struct bufferevent *bev);
00925 EVENT2_EXPORT_SYMBOL
00926 ev_ssize_t bufferevent_get_write_limit(struct bufferevent *bev);
00929 EVENT2_EXPORT_SYMBOL
00930 ev_ssize_t bufferevent_get_max_to_read(struct bufferevent *bev);
00931 EVENT2_EXPORT_SYMBOL
00932 ev_ssize_t bufferevent_get_max_to_write(struct bufferevent *bev);
00933
00934 EVENT2_EXPORT_SYMBOL
00935 const struct ev_token_bucket_cfg *bufferevent_get_token_bucket_cfg(const struct bufferevent * bev);
00936
00946 EVENT2_EXPORT_SYMBOL
00947 ev_ssize_t bufferevent_rate_limit_group_get_read_limit(
00948 struct bufferevent_rate_limit_group *);
00949 EVENT2_EXPORT_SYMBOL
00950 ev_ssize_t bufferevent_rate_limit_group_get_write_limit(
00951 struct bufferevent_rate_limit_group *);
00968 EVENT2_EXPORT_SYMBOL
00969 int bufferevent_decrement_read_limit(struct bufferevent *bev, ev_ssize_t decr);
00970 EVENT2_EXPORT_SYMBOL
00971 int bufferevent_decrement_write_limit(struct bufferevent *bev, ev_ssize_t decr);
00987 EVENT2_EXPORT_SYMBOL
00988 int bufferevent_rate_limit_group_decrement_read(
00989 struct bufferevent_rate_limit_group *, ev_ssize_t);
00990 EVENT2_EXPORT_SYMBOL
00991 int bufferevent_rate_limit_group_decrement_write(
00992 struct bufferevent_rate_limit_group *, ev_ssize_t);
01002 EVENT2_EXPORT_SYMBOL
01003 void bufferevent_rate_limit_group_get_totals(
01004 struct bufferevent_rate_limit_group *grp,
01005 ev_uint64_t *total_read_out, ev_uint64_t *total_written_out);
01006
01012 EVENT2_EXPORT_SYMBOL
01013 void
01014 bufferevent_rate_limit_group_reset_totals(
01015 struct bufferevent_rate_limit_group *grp);
01016
01017 #ifdef __cplusplus
01018 }
01019 #endif
01020
01021 #endif