OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu> | 2 * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu> |
3 * All rights reserved. | 3 * All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 #ifndef TAILQ_ENTRY | 202 #ifndef TAILQ_ENTRY |
203 #define _EVENT_DEFINED_TQENTRY | 203 #define _EVENT_DEFINED_TQENTRY |
204 #define TAILQ_ENTRY(type) \ | 204 #define TAILQ_ENTRY(type) \ |
205 struct { \ | 205 struct { \ |
206 struct type *tqe_next; /* next element */ \ | 206 struct type *tqe_next; /* next element */ \ |
207 struct type **tqe_prev; /* address of previous next element */ \ | 207 struct type **tqe_prev; /* address of previous next element */ \ |
208 } | 208 } |
209 #endif /* !TAILQ_ENTRY */ | 209 #endif /* !TAILQ_ENTRY */ |
210 | 210 |
211 struct event_base; | 211 struct event_base; |
| 212 #ifndef EVENT_NO_STRUCT |
212 struct event { | 213 struct event { |
213 TAILQ_ENTRY (event) ev_next; | 214 TAILQ_ENTRY (event) ev_next; |
214 TAILQ_ENTRY (event) ev_active_next; | 215 TAILQ_ENTRY (event) ev_active_next; |
215 TAILQ_ENTRY (event) ev_signal_next; | 216 TAILQ_ENTRY (event) ev_signal_next; |
216 unsigned int min_heap_idx; /* for managing timeouts */ | 217 unsigned int min_heap_idx; /* for managing timeouts */ |
217 | 218 |
218 struct event_base *ev_base; | 219 struct event_base *ev_base; |
219 | 220 |
220 int ev_fd; | 221 int ev_fd; |
221 short ev_events; | 222 short ev_events; |
222 short ev_ncalls; | 223 short ev_ncalls; |
223 short *ev_pncalls; /* Allows deletes in callback */ | 224 short *ev_pncalls; /* Allows deletes in callback */ |
224 | 225 |
225 struct timeval ev_timeout; | 226 struct timeval ev_timeout; |
226 | 227 |
227 int ev_pri; /* smaller numbers are higher priority */ | 228 int ev_pri; /* smaller numbers are higher priority */ |
228 | 229 |
229 void (*ev_callback)(int, short, void *arg); | 230 void (*ev_callback)(int, short, void *arg); |
230 void *ev_arg; | 231 void *ev_arg; |
231 | 232 |
232 int ev_res; /* result passed to event callback */ | 233 int ev_res; /* result passed to event callback */ |
233 int ev_flags; | 234 int ev_flags; |
234 }; | 235 }; |
| 236 #else |
| 237 struct event; |
| 238 #endif |
235 | 239 |
236 #define EVENT_SIGNAL(ev) (int)(ev)->ev_fd | 240 #define EVENT_SIGNAL(ev) (int)(ev)->ev_fd |
237 #define EVENT_FD(ev) (int)(ev)->ev_fd | 241 #define EVENT_FD(ev) (int)(ev)->ev_fd |
238 | 242 |
239 /* | 243 /* |
240 * Key-Value pairs. Can be used for HTTP headers but also for | 244 * Key-Value pairs. Can be used for HTTP headers but also for |
241 * query argument parsing. | 245 * query argument parsing. |
242 */ | 246 */ |
243 struct evkeyval { | 247 struct evkeyval { |
244 TAILQ_ENTRY(evkeyval) next; | 248 TAILQ_ENTRY(evkeyval) next; |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 | 744 |
741 struct bufferevent; | 745 struct bufferevent; |
742 typedef void (*evbuffercb)(struct bufferevent *, void *); | 746 typedef void (*evbuffercb)(struct bufferevent *, void *); |
743 typedef void (*everrorcb)(struct bufferevent *, short what, void *); | 747 typedef void (*everrorcb)(struct bufferevent *, short what, void *); |
744 | 748 |
745 struct event_watermark { | 749 struct event_watermark { |
746 size_t low; | 750 size_t low; |
747 size_t high; | 751 size_t high; |
748 }; | 752 }; |
749 | 753 |
| 754 #ifndef EVENT_NO_STRUCT |
750 struct bufferevent { | 755 struct bufferevent { |
751 struct event_base *ev_base; | 756 struct event_base *ev_base; |
752 | 757 |
753 struct event ev_read; | 758 struct event ev_read; |
754 struct event ev_write; | 759 struct event ev_write; |
755 | 760 |
756 struct evbuffer *input; | 761 struct evbuffer *input; |
757 struct evbuffer *output; | 762 struct evbuffer *output; |
758 | 763 |
759 struct event_watermark wm_read; | 764 struct event_watermark wm_read; |
760 struct event_watermark wm_write; | 765 struct event_watermark wm_write; |
761 | 766 |
762 evbuffercb readcb; | 767 evbuffercb readcb; |
763 evbuffercb writecb; | 768 evbuffercb writecb; |
764 everrorcb errorcb; | 769 everrorcb errorcb; |
765 void *cbarg; | 770 void *cbarg; |
766 | 771 |
767 int timeout_read; /* in seconds */ | 772 int timeout_read; /* in seconds */ |
768 int timeout_write; /* in seconds */ | 773 int timeout_write; /* in seconds */ |
769 | 774 |
770 short enabled; /* events that are currently enabled */ | 775 short enabled; /* events that are currently enabled */ |
771 }; | 776 }; |
772 | 777 #endif |
773 | 778 |
774 /** | 779 /** |
775 Create a new bufferevent. | 780 Create a new bufferevent. |
776 | 781 |
777 libevent provides an abstraction on top of the regular event callbacks. | 782 libevent provides an abstraction on top of the regular event callbacks. |
778 This abstraction is called a buffered event. A buffered event provides | 783 This abstraction is called a buffered event. A buffered event provides |
779 input and output buffers that get filled and drained automatically. The | 784 input and output buffers that get filled and drained automatically. The |
780 user of a buffered event no longer deals directly with the I/O, but | 785 user of a buffered event no longer deals directly with the I/O, but |
781 instead is reading from input and writing to output buffers. | 786 instead is reading from input and writing to output buffers. |
782 | 787 |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1062 @return The number of bytes added if successful, or -1 if an error occurred. | 1067 @return The number of bytes added if successful, or -1 if an error occurred. |
1063 */ | 1068 */ |
1064 int evbuffer_add_vprintf(struct evbuffer *, const char *fmt, va_list ap); | 1069 int evbuffer_add_vprintf(struct evbuffer *, const char *fmt, va_list ap); |
1065 | 1070 |
1066 | 1071 |
1067 /** | 1072 /** |
1068 Remove a specified number of bytes data from the beginning of an evbuffer. | 1073 Remove a specified number of bytes data from the beginning of an evbuffer. |
1069 | 1074 |
1070 @param buf the evbuffer to be drained | 1075 @param buf the evbuffer to be drained |
1071 @param len the number of bytes to drain from the beginning of the buffer | 1076 @param len the number of bytes to drain from the beginning of the buffer |
1072 @return 0 if successful, or -1 if an error occurred | |
1073 */ | 1077 */ |
1074 void evbuffer_drain(struct evbuffer *, size_t); | 1078 void evbuffer_drain(struct evbuffer *, size_t); |
1075 | 1079 |
1076 | 1080 |
1077 /** | 1081 /** |
1078 Write the contents of an evbuffer to a file descriptor. | 1082 Write the contents of an evbuffer to a file descriptor. |
1079 | 1083 |
1080 The evbuffer will be drained after the bytes have been successfully written. | 1084 The evbuffer will be drained after the bytes have been successfully written. |
1081 | 1085 |
1082 @param buffer the evbuffer to be written and drained | 1086 @param buffer the evbuffer to be written and drained |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1167 char **pstring); | 1171 char **pstring); |
1168 | 1172 |
1169 int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev_uint32_t need_tag, | 1173 int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev_uint32_t need_tag, |
1170 struct timeval *ptv); | 1174 struct timeval *ptv); |
1171 | 1175 |
1172 #ifdef __cplusplus | 1176 #ifdef __cplusplus |
1173 } | 1177 } |
1174 #endif | 1178 #endif |
1175 | 1179 |
1176 #endif /* _EVENT_H_ */ | 1180 #endif /* _EVENT_H_ */ |
OLD | NEW |