libevent
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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_
28 #define _EVENT2_BUFFEREVENT_H_
29 
77 #ifdef __cplusplus
78 extern "C" {
79 #endif
80 
81 #include <event2/event-config.h>
82 #ifdef _EVENT_HAVE_SYS_TYPES_H
83 #include <sys/types.h>
84 #endif
85 #ifdef _EVENT_HAVE_SYS_TIME_H
86 #include <sys/time.h>
87 #endif
88 
89 /* For int types. */
90 #include <event2/util.h>
91 
98 #define BEV_EVENT_READING 0x01
99 #define BEV_EVENT_WRITING 0x02
100 #define BEV_EVENT_EOF 0x10
101 #define BEV_EVENT_ERROR 0x20
102 #define BEV_EVENT_TIMEOUT 0x40
103 #define BEV_EVENT_CONNECTED 0x80
111 struct bufferevent
112 #ifdef _EVENT_IN_DOXYGEN
113 {}
114 #endif
115 ;
116 struct event_base;
117 struct evbuffer;
118 struct sockaddr;
119 
133 typedef void (*bufferevent_data_cb)(struct bufferevent *bev, void *ctx);
134 
149 typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx);
150 
156 
160 
163 
169 };
170 
184 struct bufferevent *bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options);
185 
205 int bufferevent_socket_connect(struct bufferevent *, struct sockaddr *, int);
206 
207 struct evdns_base;
235  struct evdns_base *, int, const char *, int);
236 
246 
258 int bufferevent_base_set(struct event_base *base, struct bufferevent *bufev);
259 
263 struct event_base *bufferevent_get_base(struct bufferevent *bev);
264 
274 int bufferevent_priority_set(struct bufferevent *bufev, int pri);
275 
276 
282 void bufferevent_free(struct bufferevent *bufev);
283 
284 
299 void bufferevent_setcb(struct bufferevent *bufev,
301  bufferevent_event_cb eventcb, void *cbarg);
302 
310 int bufferevent_setfd(struct bufferevent *bufev, evutil_socket_t fd);
311 
317 
322 struct bufferevent *bufferevent_get_underlying(struct bufferevent *bufev);
323 
337 int bufferevent_write(struct bufferevent *bufev,
338  const void *data, size_t size);
339 
340 
350 int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf);
351 
352 
363 size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size);
364 
373 int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf);
374 
384 struct evbuffer *bufferevent_get_input(struct bufferevent *bufev);
385 
398 struct evbuffer *bufferevent_get_output(struct bufferevent *bufev);
399 
408 int bufferevent_enable(struct bufferevent *bufev, short event);
409 
418 int bufferevent_disable(struct bufferevent *bufev, short event);
419 
426 short bufferevent_get_enabled(struct bufferevent *bufev);
427 
454 int bufferevent_set_timeouts(struct bufferevent *bufev,
455  const struct timeval *timeout_read, const struct timeval *timeout_write);
456 
475 void bufferevent_setwatermark(struct bufferevent *bufev, short events,
476  size_t lowmark, size_t highmark);
477 
482 void bufferevent_lock(struct bufferevent *bufev);
483 
488 void bufferevent_unlock(struct bufferevent *bufev);
489 
497 
500 
503 };
504 
513 int bufferevent_flush(struct bufferevent *bufev,
514  short iotype,
515  enum bufferevent_flush_mode mode);
516 
527  BEV_OK = 0,
528 
531 
535 };
536 
556  struct evbuffer *src, struct evbuffer *dst, ev_ssize_t dst_limit,
557  enum bufferevent_flush_mode mode, void *ctx);
558 
572 struct bufferevent *
573 bufferevent_filter_new(struct bufferevent *underlying,
574  bufferevent_filter_cb input_filter,
575  bufferevent_filter_cb output_filter,
576  int options,
577  void (*free_context)(void *),
578  void *ctx);
591 int bufferevent_pair_new(struct event_base *base, int options,
592  struct bufferevent *pair[2]);
593 
599 
604 struct ev_token_bucket_cfg;
605 
610 struct bufferevent_rate_limit_group;
611 
613 #define EV_RATE_LIMIT_MAX EV_SSIZE_MAX
614 
631 struct ev_token_bucket_cfg *ev_token_bucket_cfg_new(
632  size_t read_rate, size_t read_burst,
633  size_t write_rate, size_t write_burst,
634  const struct timeval *tick_len);
635 
641 void ev_token_bucket_cfg_free(struct ev_token_bucket_cfg *cfg);
642 
655  struct ev_token_bucket_cfg *cfg);
656 
674 struct bufferevent_rate_limit_group *bufferevent_rate_limit_group_new(
675  struct event_base *base,
676  const struct ev_token_bucket_cfg *cfg);
683  struct bufferevent_rate_limit_group *,
684  const struct ev_token_bucket_cfg *);
685 
703  struct bufferevent_rate_limit_group *, size_t);
704 
709 void bufferevent_rate_limit_group_free(struct bufferevent_rate_limit_group *);
710 
722  struct bufferevent_rate_limit_group *g);
723 
726 
738 ev_ssize_t bufferevent_get_read_limit(struct bufferevent *bev);
739 ev_ssize_t bufferevent_get_write_limit(struct bufferevent *bev);
742 ev_ssize_t bufferevent_get_max_to_read(struct bufferevent *bev);
743 ev_ssize_t bufferevent_get_max_to_write(struct bufferevent *bev);
744 
754 ev_ssize_t bufferevent_rate_limit_group_get_read_limit(
755  struct bufferevent_rate_limit_group *);
756 ev_ssize_t bufferevent_rate_limit_group_get_write_limit(
757  struct bufferevent_rate_limit_group *);
774 int bufferevent_decrement_read_limit(struct bufferevent *bev, ev_ssize_t decr);
775 int bufferevent_decrement_write_limit(struct bufferevent *bev, ev_ssize_t decr);
791 int bufferevent_rate_limit_group_decrement_read(
792  struct bufferevent_rate_limit_group *, ev_ssize_t);
793 int bufferevent_rate_limit_group_decrement_write(
794  struct bufferevent_rate_limit_group *, ev_ssize_t);
805  struct bufferevent_rate_limit_group *grp,
806  ev_uint64_t *total_read_out, ev_uint64_t *total_written_out);
807 
813 void
815  struct bufferevent_rate_limit_group *grp);
816 
817 #ifdef __cplusplus
818 }
819 #endif
820 
821 #endif /* _EVENT2_BUFFEREVENT_H_ */