Libevent Code Doxygen document
bufferevent.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
3  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
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 EVENT2_BUFFEREVENT_H_INCLUDED_
28 #define EVENT2_BUFFEREVENT_H_INCLUDED_
29 
77 #include <event2/visibility.h>
78 
79 #ifdef __cplusplus
80 extern "C" {
81 #endif
82 
83 #include <event2/event-config.h>
84 #ifdef EVENT__HAVE_SYS_TYPES_H
85 #include <sys/types.h>
86 #endif
87 #ifdef EVENT__HAVE_SYS_TIME_H
88 #include <sys/time.h>
89 #endif
90 
91 /* For int types. */
92 #include <event2/util.h>
93 
100 #define BEV_EVENT_READING 0x01
101 #define BEV_EVENT_WRITING 0x02
102 #define BEV_EVENT_EOF 0x10
103 #define BEV_EVENT_ERROR 0x20
104 #define BEV_EVENT_TIMEOUT 0x40
105 #define BEV_EVENT_CONNECTED 0x80
113 struct bufferevent
114 #ifdef EVENT_IN_DOXYGEN_
115 {}
116 #endif
117 ;
118 struct event_base;
119 struct evbuffer;
120 struct sockaddr;
121 
135 typedef void (*bufferevent_data_cb)(struct bufferevent *bev, void *ctx);
136 
154 typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx);
155 
157 enum bufferevent_options {
161 
164  BEV_OPT_THREADSAFE = (1<<1),
165 
167  BEV_OPT_DEFER_CALLBACKS = (1<<2),
168 
173  BEV_OPT_UNLOCK_CALLBACKS = (1<<3)
174 };
175 
189 EVENT2_EXPORT_SYMBOL
191 
211 EVENT2_EXPORT_SYMBOL
212 int bufferevent_socket_connect(struct bufferevent *, const struct sockaddr *, int);
213 
214 struct evdns_base;
241 EVENT2_EXPORT_SYMBOL
243  struct evdns_base *, int, const char *, int);
244 
253 EVENT2_EXPORT_SYMBOL
255 
267 EVENT2_EXPORT_SYMBOL
268 int bufferevent_base_set(struct event_base *base, struct bufferevent *bufev);
269 
273 EVENT2_EXPORT_SYMBOL
274 struct event_base *bufferevent_get_base(struct bufferevent *bev);
275 
285 EVENT2_EXPORT_SYMBOL
286 int bufferevent_priority_set(struct bufferevent *bufev, int pri);
287 
293 EVENT2_EXPORT_SYMBOL
294 int bufferevent_get_priority(const struct bufferevent *bufev);
295 
304 EVENT2_EXPORT_SYMBOL
305 void bufferevent_free(struct bufferevent *bufev);
306 
307 
322 EVENT2_EXPORT_SYMBOL
323 void bufferevent_setcb(struct bufferevent *bufev,
325  bufferevent_event_cb eventcb, void *cbarg);
326 
341 EVENT2_EXPORT_SYMBOL
342 void bufferevent_getcb(struct bufferevent *bufev,
343  bufferevent_data_cb *readcb_ptr,
344  bufferevent_data_cb *writecb_ptr,
345  bufferevent_event_cb *eventcb_ptr,
346  void **cbarg_ptr);
347 
355 EVENT2_EXPORT_SYMBOL
356 int bufferevent_setfd(struct bufferevent *bufev, evutil_socket_t fd);
357 
362 EVENT2_EXPORT_SYMBOL
364 
369 EVENT2_EXPORT_SYMBOL
370 struct bufferevent *bufferevent_get_underlying(struct bufferevent *bufev);
371 
385 EVENT2_EXPORT_SYMBOL
386 int bufferevent_write(struct bufferevent *bufev,
387  const void *data, size_t size);
388 
389 
399 EVENT2_EXPORT_SYMBOL
400 int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf);
401 
402 
413 EVENT2_EXPORT_SYMBOL
414 size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size);
415 
424 EVENT2_EXPORT_SYMBOL
425 int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf);
426 
436 EVENT2_EXPORT_SYMBOL
437 struct evbuffer *bufferevent_get_input(struct bufferevent *bufev);
438 
451 EVENT2_EXPORT_SYMBOL
452 struct evbuffer *bufferevent_get_output(struct bufferevent *bufev);
453 
462 EVENT2_EXPORT_SYMBOL
463 int bufferevent_enable(struct bufferevent *bufev, short event);
464 
473 EVENT2_EXPORT_SYMBOL
474 int bufferevent_disable(struct bufferevent *bufev, short event);
475 
482 EVENT2_EXPORT_SYMBOL
483 short bufferevent_get_enabled(struct bufferevent *bufev);
484 
511 EVENT2_EXPORT_SYMBOL
512 int bufferevent_set_timeouts(struct bufferevent *bufev,
513  const struct timeval *timeout_read, const struct timeval *timeout_write);
514 
536 EVENT2_EXPORT_SYMBOL
537 void bufferevent_setwatermark(struct bufferevent *bufev, short events,
538  size_t lowmark, size_t highmark);
539 
550 EVENT2_EXPORT_SYMBOL
551 int bufferevent_getwatermark(struct bufferevent *bufev, short events,
552  size_t *lowmark, size_t *highmark);
553 
558 EVENT2_EXPORT_SYMBOL
559 void bufferevent_lock(struct bufferevent *bufev);
560 
565 EVENT2_EXPORT_SYMBOL
566 void bufferevent_unlock(struct bufferevent *bufev);
567 
568 
577 EVENT2_EXPORT_SYMBOL
578 void bufferevent_incref(struct bufferevent *bufev);
579 
591 EVENT2_EXPORT_SYMBOL
592 int bufferevent_decref(struct bufferevent *bufev);
593 
600  BEV_NORMAL = 0,
601 
604 
606  BEV_FINISHED = 2
607 };
608 
617 EVENT2_EXPORT_SYMBOL
618 int bufferevent_flush(struct bufferevent *bufev,
619  short iotype,
620  enum bufferevent_flush_mode mode);
621 
628  BEV_TRIG_IGNORE_WATERMARKS = (1<<16),
629 
632 
633  /* (Note: for internal reasons, these need to be disjoint from
634  * bufferevent_options, except when they mean the same thing. */
635 };
636 
648 EVENT2_EXPORT_SYMBOL
649 void bufferevent_trigger(struct bufferevent *bufev, short iotype,
650  int options);
651 
661 EVENT2_EXPORT_SYMBOL
662 void bufferevent_trigger_event(struct bufferevent *bufev, short what,
663  int options);
664 
675  BEV_OK = 0,
676 
678  BEV_NEED_MORE = 1,
679 
682  BEV_ERROR = 2
683 };
684 
704  struct evbuffer *src, struct evbuffer *dst, ev_ssize_t dst_limit,
705  enum bufferevent_flush_mode mode, void *ctx);
706 
720 EVENT2_EXPORT_SYMBOL
721 struct bufferevent *
722 bufferevent_filter_new(struct bufferevent *underlying,
723  bufferevent_filter_cb input_filter,
724  bufferevent_filter_cb output_filter,
725  int options,
726  void (*free_context)(void *),
727  void *ctx);
740 EVENT2_EXPORT_SYMBOL
741 int bufferevent_pair_new(struct event_base *base, int options,
742  struct bufferevent *pair[2]);
743 
748 EVENT2_EXPORT_SYMBOL
750 
755 struct ev_token_bucket_cfg;
756 
762 
764 #define EV_RATE_LIMIT_MAX EV_SSIZE_MAX
765 
782 EVENT2_EXPORT_SYMBOL
784  size_t read_rate, size_t read_burst,
785  size_t write_rate, size_t write_burst,
786  const struct timeval *tick_len);
787 
793 EVENT2_EXPORT_SYMBOL
795 
807 EVENT2_EXPORT_SYMBOL
809  struct ev_token_bucket_cfg *cfg);
810 
828 EVENT2_EXPORT_SYMBOL
830  struct event_base *base,
831  const struct ev_token_bucket_cfg *cfg);
837 EVENT2_EXPORT_SYMBOL
840  const struct ev_token_bucket_cfg *);
841 
858 EVENT2_EXPORT_SYMBOL
860  struct bufferevent_rate_limit_group *, size_t);
861 
866 EVENT2_EXPORT_SYMBOL
868 
879 EVENT2_EXPORT_SYMBOL
881  struct bufferevent_rate_limit_group *g);
882 
884 EVENT2_EXPORT_SYMBOL
886 
894 EVENT2_EXPORT_SYMBOL
895 int bufferevent_set_max_single_read(struct bufferevent *bev, size_t size);
896 
904 EVENT2_EXPORT_SYMBOL
905 int bufferevent_set_max_single_write(struct bufferevent *bev, size_t size);
906 
908 EVENT2_EXPORT_SYMBOL
909 ev_ssize_t bufferevent_get_max_single_read(struct bufferevent *bev);
910 
912 EVENT2_EXPORT_SYMBOL
913 ev_ssize_t bufferevent_get_max_single_write(struct bufferevent *bev);
914 
926 EVENT2_EXPORT_SYMBOL
927 ev_ssize_t bufferevent_get_read_limit(struct bufferevent *bev);
928 EVENT2_EXPORT_SYMBOL
929 ev_ssize_t bufferevent_get_write_limit(struct bufferevent *bev);
932 EVENT2_EXPORT_SYMBOL
933 ev_ssize_t bufferevent_get_max_to_read(struct bufferevent *bev);
934 EVENT2_EXPORT_SYMBOL
935 ev_ssize_t bufferevent_get_max_to_write(struct bufferevent *bev);
936 
937 EVENT2_EXPORT_SYMBOL
938 const struct ev_token_bucket_cfg *bufferevent_get_token_bucket_cfg(const struct bufferevent * bev);
939 
949 EVENT2_EXPORT_SYMBOL
950 ev_ssize_t bufferevent_rate_limit_group_get_read_limit(
952 EVENT2_EXPORT_SYMBOL
953 ev_ssize_t bufferevent_rate_limit_group_get_write_limit(
971 EVENT2_EXPORT_SYMBOL
972 int bufferevent_decrement_read_limit(struct bufferevent *bev, ev_ssize_t decr);
973 EVENT2_EXPORT_SYMBOL
974 int bufferevent_decrement_write_limit(struct bufferevent *bev, ev_ssize_t decr);
990 EVENT2_EXPORT_SYMBOL
991 int bufferevent_rate_limit_group_decrement_read(
992  struct bufferevent_rate_limit_group *, ev_ssize_t);
993 EVENT2_EXPORT_SYMBOL
994 int bufferevent_rate_limit_group_decrement_write(
995  struct bufferevent_rate_limit_group *, ev_ssize_t);
1005 EVENT2_EXPORT_SYMBOL
1007  struct bufferevent_rate_limit_group *grp,
1008  ev_uint64_t *total_read_out, ev_uint64_t *total_written_out);
1009 
1015 EVENT2_EXPORT_SYMBOL
1016 void
1018  struct bufferevent_rate_limit_group *grp);
1019 
1020 #ifdef __cplusplus
1021 }
1022 #endif
1023 
1024 #endif /* EVENT2_BUFFEREVENT_H_INCLUDED_ */
EVENT2_EXPORT_SYMBOL int bufferevent_get_priority(const struct bufferevent *bufev)
Definition: bufferevent.c:442
EVENT2_EXPORT_SYMBOL void bufferevent_setcb(struct bufferevent *bufev, bufferevent_data_cb readcb, bufferevent_data_cb writecb, bufferevent_event_cb eventcb, void *cbarg)
Definition: bufferevent.c:389
EVENT2_EXPORT_SYMBOL void bufferevent_rate_limit_group_reset_totals(struct bufferevent_rate_limit_group *grp)
Definition: bufferevent_ratelim.c:1076
EVENT2_EXPORT_SYMBOL struct event_base * bufferevent_get_base(struct bufferevent *bev)
Definition: bufferevent.c:436
bufferevent_filter_result
Definition: bufferevent.h:669
@ BEV_ERROR
Definition: bufferevent.h:678
@ BEV_NEED_MORE
Definition: bufferevent.h:674
@ BEV_OK
Definition: bufferevent.h:671
EVENT2_EXPORT_SYMBOL void bufferevent_unlock(struct bufferevent *bufev)
Definition: bufferevent.c:1033
EVENT2_EXPORT_SYMBOL int bufferevent_rate_limit_group_set_cfg(struct bufferevent_rate_limit_group *, const struct ev_token_bucket_cfg *)
Definition: bufferevent_ratelim.c:672
EVENT2_EXPORT_SYMBOL void bufferevent_incref(struct bufferevent *bufev)
Definition: bufferevent.c:815
EVENT2_EXPORT_SYMBOL int bufferevent_priority_set(struct bufferevent *bufev, int pri)
Definition: bufferevent_sock.c:647
EVENT2_EXPORT_SYMBOL struct ev_token_bucket_cfg * ev_token_bucket_cfg_new(size_t read_rate, size_t read_burst, size_t write_rate, size_t write_burst, const struct timeval *tick_len)
Definition: bufferevent_ratelim.c:143
EVENT2_EXPORT_SYMBOL ev_ssize_t bufferevent_get_max_single_read(struct bufferevent *bev)
Definition: bufferevent_ratelim.c:883
EVENT2_EXPORT_SYMBOL struct bufferevent * bufferevent_pair_get_partner(struct bufferevent *bev)
Definition: bufferevent_pair.c:340
EVENT2_EXPORT_SYMBOL int bufferevent_decref(struct bufferevent *bufev)
Definition: bufferevent.c:799
EVENT2_EXPORT_SYMBOL int bufferevent_remove_from_rate_limit_group(struct bufferevent *bev)
Definition: bufferevent_ratelim.c:781
EVENT2_EXPORT_SYMBOL struct bufferevent * bufferevent_filter_new(struct bufferevent *underlying, bufferevent_filter_cb input_filter, bufferevent_filter_cb output_filter, int options, void(*free_context)(void *), void *ctx)
Definition: bufferevent_filter.c:170
void(* bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx)
Definition: bufferevent.h:150
EVENT2_EXPORT_SYMBOL struct evbuffer * bufferevent_get_input(struct bufferevent *bufev)
Definition: bufferevent.c:424
EVENT2_EXPORT_SYMBOL struct bufferevent * bufferevent_get_underlying(struct bufferevent *bufev)
Definition: bufferevent.c:929
EVENT2_EXPORT_SYMBOL int bufferevent_rate_limit_group_set_min_share(struct bufferevent_rate_limit_group *, size_t)
Definition: bufferevent_ratelim.c:703
EVENT2_EXPORT_SYMBOL int bufferevent_add_to_rate_limit_group(struct bufferevent *bev, struct bufferevent_rate_limit_group *g)
Definition: bufferevent_ratelim.c:735
EVENT2_EXPORT_SYMBOL int bufferevent_flush(struct bufferevent *bufev, short iotype, enum bufferevent_flush_mode mode)
Definition: bufferevent.c:667
EVENT2_EXPORT_SYMBOL int bufferevent_disable(struct bufferevent *bufev, short event)
Definition: bufferevent.c:573
EVENT2_EXPORT_SYMBOL evutil_socket_t bufferevent_getfd(struct bufferevent *bufev)
Definition: bufferevent.c:880
EVENT2_EXPORT_SYMBOL void bufferevent_rate_limit_group_free(struct bufferevent_rate_limit_group *)
Definition: bufferevent_ratelim.c:724
EVENT2_EXPORT_SYMBOL int bufferevent_socket_connect(struct bufferevent *, const struct sockaddr *, int)
Definition: bufferevent_sock.c:380
EVENT2_EXPORT_SYMBOL int bufferevent_setfd(struct bufferevent *bufev, evutil_socket_t fd)
Definition: bufferevent.c:865
EVENT2_EXPORT_SYMBOL struct bufferevent * bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options)
Definition: bufferevent_sock.c:344
bufferevent_trigger_options
Definition: bufferevent.h:622
@ BEV_TRIG_IGNORE_WATERMARKS
Definition: bufferevent.h:624
@ BEV_TRIG_DEFER_CALLBACKS
Definition: bufferevent.h:627
EVENT2_EXPORT_SYMBOL int bufferevent_write(struct bufferevent *bufev, const void *data, size_t size)
Definition: bufferevent.c:452
EVENT2_EXPORT_SYMBOL void ev_token_bucket_cfg_free(struct ev_token_bucket_cfg *cfg)
Definition: bufferevent_ratelim.c:176
EVENT2_EXPORT_SYMBOL void bufferevent_lock(struct bufferevent *bufev)
Definition: bufferevent.c:1027
EVENT2_EXPORT_SYMBOL void bufferevent_free(struct bufferevent *bufev)
Definition: bufferevent.c:806
EVENT2_EXPORT_SYMBOL int bufferevent_set_max_single_write(struct bufferevent *bev, size_t size)
Definition: bufferevent_ratelim.c:869
EVENT2_EXPORT_SYMBOL size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size)
Definition: bufferevent.c:470
bufferevent_options
Definition: bufferevent.h:153
@ BEV_OPT_DEFER_CALLBACKS
Definition: bufferevent.h:163
@ BEV_OPT_CLOSE_ON_FREE
Definition: bufferevent.h:156
@ BEV_OPT_UNLOCK_CALLBACKS
Definition: bufferevent.h:169
@ BEV_OPT_THREADSAFE
Definition: bufferevent.h:160
EVENT2_EXPORT_SYMBOL int bufferevent_socket_get_dns_error(struct bufferevent *bev)
Definition: bufferevent_sock.c:528
EVENT2_EXPORT_SYMBOL int bufferevent_enable(struct bufferevent *bufev, short event)
Definition: bufferevent.c:482
EVENT2_EXPORT_SYMBOL short bufferevent_get_enabled(struct bufferevent *bufev)
Definition: bufferevent.c:919
EVENT2_EXPORT_SYMBOL int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf)
Definition: bufferevent.c:476
bufferevent_flush_mode
Definition: bufferevent.h:594
@ BEV_FLUSH
Definition: bufferevent.h:599
@ BEV_NORMAL
Definition: bufferevent.h:596
@ BEV_FINISHED
Definition: bufferevent.h:602
EVENT2_EXPORT_SYMBOL int bufferevent_set_max_single_read(struct bufferevent *bev, size_t size)
Definition: bufferevent_ratelim.c:855
EVENT2_EXPORT_SYMBOL int bufferevent_pair_new(struct event_base *base, int options, struct bufferevent *pair[2])
Definition: bufferevent_pair.c:115
EVENT2_EXPORT_SYMBOL struct evbuffer * bufferevent_get_output(struct bufferevent *bufev)
Definition: bufferevent.c:430
EVENT2_EXPORT_SYMBOL void bufferevent_rate_limit_group_get_totals(struct bufferevent_rate_limit_group *grp, ev_uint64_t *total_read_out, ev_uint64_t *total_written_out)
Definition: bufferevent_ratelim.c:1065
EVENT2_EXPORT_SYMBOL int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf)
Definition: bufferevent.c:461
EVENT2_EXPORT_SYMBOL ev_ssize_t bufferevent_get_max_single_write(struct bufferevent *bev)
Definition: bufferevent_ratelim.c:894
EVENT2_EXPORT_SYMBOL int bufferevent_base_set(struct event_base *base, struct bufferevent *bufev)
Definition: bufferevent_sock.c:671
void(* bufferevent_data_cb)(struct bufferevent *bev, void *ctx)
Definition: bufferevent.h:131
EVENT2_EXPORT_SYMBOL int bufferevent_set_rate_limit(struct bufferevent *bev, struct ev_token_bucket_cfg *cfg)
Definition: bufferevent_ratelim.c:560
enum bufferevent_filter_result(* bufferevent_filter_cb)(struct evbuffer *src, struct evbuffer *dst, ev_ssize_t dst_limit, enum bufferevent_flush_mode mode, void *ctx)
Definition: bufferevent.h:699
EVENT2_EXPORT_SYMBOL void bufferevent_setwatermark(struct bufferevent *bufev, short events, size_t lowmark, size_t highmark)
Definition: bufferevent.c:594
EVENT2_EXPORT_SYMBOL int bufferevent_getwatermark(struct bufferevent *bufev, short events, size_t *lowmark, size_t *highmark)
Definition: bufferevent.c:641
EVENT2_EXPORT_SYMBOL void bufferevent_trigger(struct bufferevent *bufev, short iotype, int options)
Definition: bufferevent.c:277
EVENT2_EXPORT_SYMBOL void bufferevent_getcb(struct bufferevent *bufev, bufferevent_data_cb *readcb_ptr, bufferevent_data_cb *writecb_ptr, bufferevent_event_cb *eventcb_ptr, void **cbarg_ptr)
Definition: bufferevent.c:404
EVENT2_EXPORT_SYMBOL void bufferevent_trigger_event(struct bufferevent *bufev, short what, int options)
Definition: bufferevent.c:301
EVENT2_EXPORT_SYMBOL int bufferevent_set_timeouts(struct bufferevent *bufev, const struct timeval *timeout_read, const struct timeval *timeout_write)
Definition: bufferevent.c:506
EVENT2_EXPORT_SYMBOL int bufferevent_socket_connect_hostname(struct bufferevent *, struct evdns_base *, int, const char *, int)
Definition: bufferevent_sock.c:494
EVENT2_EXPORT_SYMBOL struct bufferevent_rate_limit_group * bufferevent_rate_limit_group_new(struct event_base *base, const struct ev_token_bucket_cfg *cfg)
Definition: bufferevent_ratelim.c:638
Definition: bufferevent-internal.h:79
Definition: bufferevent_struct.h:70
Definition: ratelim-internal.h:48
size_t write_rate
Definition: ratelim-internal.h:54
size_t read_rate
Definition: ratelim-internal.h:50
Definition: evbuffer-internal.h:80
Definition: evdns.c:305
Definition: event-internal.h:208
Definition: event_struct.h:123
Definition: http-server.c:102
#define evutil_socket_t
Definition: util.h:310