overmind 0.1.0-x86_64-darwin

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/bin/overmind +13 -0
  4. data/lib/overmind/cli.rb +93 -0
  5. data/lib/overmind/version.rb +5 -0
  6. data/lib/overmind.rb +3 -0
  7. data/libexec/overmind +0 -0
  8. data/libexec/prebuilt-tmux/bin/event_rpcgen.py +1925 -0
  9. data/libexec/prebuilt-tmux/bin/tmux +0 -0
  10. data/libexec/prebuilt-tmux/include/evdns.h +45 -0
  11. data/libexec/prebuilt-tmux/include/event.h +83 -0
  12. data/libexec/prebuilt-tmux/include/event2/buffer.h +1077 -0
  13. data/libexec/prebuilt-tmux/include/event2/buffer_compat.h +116 -0
  14. data/libexec/prebuilt-tmux/include/event2/bufferevent.h +1024 -0
  15. data/libexec/prebuilt-tmux/include/event2/bufferevent_compat.h +104 -0
  16. data/libexec/prebuilt-tmux/include/event2/bufferevent_ssl.h +134 -0
  17. data/libexec/prebuilt-tmux/include/event2/bufferevent_struct.h +116 -0
  18. data/libexec/prebuilt-tmux/include/event2/dns.h +751 -0
  19. data/libexec/prebuilt-tmux/include/event2/dns_compat.h +358 -0
  20. data/libexec/prebuilt-tmux/include/event2/dns_struct.h +80 -0
  21. data/libexec/prebuilt-tmux/include/event2/event-config.h +570 -0
  22. data/libexec/prebuilt-tmux/include/event2/event.h +1672 -0
  23. data/libexec/prebuilt-tmux/include/event2/event_compat.h +230 -0
  24. data/libexec/prebuilt-tmux/include/event2/event_struct.h +180 -0
  25. data/libexec/prebuilt-tmux/include/event2/http.h +1192 -0
  26. data/libexec/prebuilt-tmux/include/event2/http_compat.h +94 -0
  27. data/libexec/prebuilt-tmux/include/event2/http_struct.h +152 -0
  28. data/libexec/prebuilt-tmux/include/event2/keyvalq_struct.h +80 -0
  29. data/libexec/prebuilt-tmux/include/event2/listener.h +192 -0
  30. data/libexec/prebuilt-tmux/include/event2/rpc.h +626 -0
  31. data/libexec/prebuilt-tmux/include/event2/rpc_compat.h +61 -0
  32. data/libexec/prebuilt-tmux/include/event2/rpc_struct.h +114 -0
  33. data/libexec/prebuilt-tmux/include/event2/tag.h +146 -0
  34. data/libexec/prebuilt-tmux/include/event2/tag_compat.h +49 -0
  35. data/libexec/prebuilt-tmux/include/event2/thread.h +253 -0
  36. data/libexec/prebuilt-tmux/include/event2/util.h +888 -0
  37. data/libexec/prebuilt-tmux/include/event2/visibility.h +67 -0
  38. data/libexec/prebuilt-tmux/include/evhttp.h +45 -0
  39. data/libexec/prebuilt-tmux/include/evrpc.h +45 -0
  40. data/libexec/prebuilt-tmux/include/evutil.h +39 -0
  41. data/libexec/prebuilt-tmux/include/utf8proc.h +743 -0
  42. data/libexec/prebuilt-tmux/lib/libevent-2.1.7.dylib +0 -0
  43. data/libexec/prebuilt-tmux/lib/libevent.a +0 -0
  44. data/libexec/prebuilt-tmux/lib/libevent.dylib +1 -0
  45. data/libexec/prebuilt-tmux/lib/libevent.la +41 -0
  46. data/libexec/prebuilt-tmux/lib/libevent_core-2.1.7.dylib +0 -0
  47. data/libexec/prebuilt-tmux/lib/libevent_core.a +0 -0
  48. data/libexec/prebuilt-tmux/lib/libevent_core.dylib +1 -0
  49. data/libexec/prebuilt-tmux/lib/libevent_core.la +41 -0
  50. data/libexec/prebuilt-tmux/lib/libevent_extra-2.1.7.dylib +0 -0
  51. data/libexec/prebuilt-tmux/lib/libevent_extra.a +0 -0
  52. data/libexec/prebuilt-tmux/lib/libevent_extra.dylib +1 -0
  53. data/libexec/prebuilt-tmux/lib/libevent_extra.la +41 -0
  54. data/libexec/prebuilt-tmux/lib/libevent_openssl-2.1.7.dylib +0 -0
  55. data/libexec/prebuilt-tmux/lib/libevent_openssl.a +0 -0
  56. data/libexec/prebuilt-tmux/lib/libevent_openssl.dylib +1 -0
  57. data/libexec/prebuilt-tmux/lib/libevent_openssl.la +41 -0
  58. data/libexec/prebuilt-tmux/lib/libevent_pthreads-2.1.7.dylib +0 -0
  59. data/libexec/prebuilt-tmux/lib/libevent_pthreads.a +0 -0
  60. data/libexec/prebuilt-tmux/lib/libevent_pthreads.dylib +1 -0
  61. data/libexec/prebuilt-tmux/lib/libevent_pthreads.la +41 -0
  62. data/libexec/prebuilt-tmux/lib/libutf8proc.3.dylib +0 -0
  63. data/libexec/prebuilt-tmux/lib/libutf8proc.a +0 -0
  64. data/libexec/prebuilt-tmux/lib/libutf8proc.dylib +1 -0
  65. data/libexec/prebuilt-tmux/lib/pkgconfig/libevent.pc +16 -0
  66. data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_core.pc +16 -0
  67. data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_extra.pc +16 -0
  68. data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_openssl.pc +16 -0
  69. data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_pthreads.pc +16 -0
  70. data/libexec/prebuilt-tmux/lib/pkgconfig/libutf8proc.pc +10 -0
  71. data/libexec/prebuilt-tmux/share/man/man1/tmux.1 +7242 -0
  72. data/overmind.gemspec +29 -0
  73. metadata +160 -0
@@ -0,0 +1,1077 @@
1
+ /*
2
+ * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
7
+ * 1. Redistributions of source code must retain the above copyright
8
+ * notice, this list of conditions and the following disclaimer.
9
+ * 2. Redistributions in binary form must reproduce the above copyright
10
+ * notice, this list of conditions and the following disclaimer in the
11
+ * documentation and/or other materials provided with the distribution.
12
+ * 3. The name of the author may not be used to endorse or promote products
13
+ * derived from this software without specific prior written permission.
14
+ *
15
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ */
26
+ #ifndef EVENT2_BUFFER_H_INCLUDED_
27
+ #define EVENT2_BUFFER_H_INCLUDED_
28
+
29
+ /** @file event2/buffer.h
30
+
31
+ Functions for buffering data for network sending or receiving.
32
+
33
+ An evbuffer can be used for preparing data before sending it to
34
+ the network or conversely for reading data from the network.
35
+ Evbuffers try to avoid memory copies as much as possible. As a
36
+ result, evbuffers can be used to pass data around without actually
37
+ incurring the overhead of copying the data.
38
+
39
+ A new evbuffer can be allocated with evbuffer_new(), and can be
40
+ freed with evbuffer_free(). Most users will be using evbuffers via
41
+ the bufferevent interface. To access a bufferevent's evbuffers, use
42
+ bufferevent_get_input() and bufferevent_get_output().
43
+
44
+ There are several guidelines for using evbuffers.
45
+
46
+ - if you already know how much data you are going to add as a result
47
+ of calling evbuffer_add() multiple times, it makes sense to use
48
+ evbuffer_expand() first to make sure that enough memory is allocated
49
+ before hand.
50
+
51
+ - evbuffer_add_buffer() adds the contents of one buffer to the other
52
+ without incurring any unnecessary memory copies.
53
+
54
+ - evbuffer_add() and evbuffer_add_buffer() do not mix very well:
55
+ if you use them, you will wind up with fragmented memory in your
56
+ buffer.
57
+
58
+ - For high-performance code, you may want to avoid copying data into and out
59
+ of buffers. You can skip the copy step by using
60
+ evbuffer_reserve_space()/evbuffer_commit_space() when writing into a
61
+ buffer, and evbuffer_peek() when reading.
62
+
63
+ In Libevent 2.0 and later, evbuffers are represented using a linked
64
+ list of memory chunks, with pointers to the first and last chunk in
65
+ the chain.
66
+
67
+ As the contents of an evbuffer can be stored in multiple different
68
+ memory blocks, it cannot be accessed directly. Instead, evbuffer_pullup()
69
+ can be used to force a specified number of bytes to be contiguous. This
70
+ will cause memory reallocation and memory copies if the data is split
71
+ across multiple blocks. It is more efficient, however, to use
72
+ evbuffer_peek() if you don't require that the memory to be contiguous.
73
+ */
74
+
75
+ #include <event2/visibility.h>
76
+
77
+ #ifdef __cplusplus
78
+ extern "C" {
79
+ #endif
80
+
81
+ #include <event2/event-config.h>
82
+ #include <stdarg.h>
83
+ #ifdef EVENT__HAVE_SYS_TYPES_H
84
+ #include <sys/types.h>
85
+ #endif
86
+ #ifdef EVENT__HAVE_SYS_UIO_H
87
+ #include <sys/uio.h>
88
+ #endif
89
+ #include <event2/util.h>
90
+
91
+ /**
92
+ An evbuffer is an opaque data type for efficiently buffering data to be
93
+ sent or received on the network.
94
+
95
+ @see event2/event.h for more information
96
+ */
97
+ struct evbuffer
98
+ #ifdef EVENT_IN_DOXYGEN_
99
+ {}
100
+ #endif
101
+ ;
102
+
103
+ /**
104
+ Pointer to a position within an evbuffer.
105
+
106
+ Used when repeatedly searching through a buffer. Calling any function
107
+ that modifies or re-packs the buffer contents may invalidate all
108
+ evbuffer_ptrs for that buffer. Do not modify or contruct these values
109
+ except with evbuffer_ptr_set.
110
+
111
+ An evbuffer_ptr can represent any position from the start of a buffer up
112
+ to a position immediately after the end of a buffer.
113
+
114
+ @see evbuffer_ptr_set()
115
+ */
116
+ struct evbuffer_ptr {
117
+ ev_ssize_t pos;
118
+
119
+ /* Do not alter or rely on the values of fields: they are for internal
120
+ * use */
121
+ struct {
122
+ void *chain;
123
+ size_t pos_in_chain;
124
+ } internal_;
125
+ };
126
+
127
+ /** Describes a single extent of memory inside an evbuffer. Used for
128
+ direct-access functions.
129
+
130
+ @see evbuffer_reserve_space, evbuffer_commit_space, evbuffer_peek
131
+ */
132
+ #ifdef EVENT__HAVE_SYS_UIO_H
133
+ #define evbuffer_iovec iovec
134
+ /* Internal use -- defined only if we are using the native struct iovec */
135
+ #define EVBUFFER_IOVEC_IS_NATIVE_
136
+ #else
137
+ struct evbuffer_iovec {
138
+ /** The start of the extent of memory. */
139
+ void *iov_base;
140
+ /** The length of the extent of memory. */
141
+ size_t iov_len;
142
+ };
143
+ #endif
144
+
145
+ /**
146
+ Allocate storage for a new evbuffer.
147
+
148
+ @return a pointer to a newly allocated evbuffer struct, or NULL if an error
149
+ occurred
150
+ */
151
+ EVENT2_EXPORT_SYMBOL
152
+ struct evbuffer *evbuffer_new(void);
153
+ /**
154
+ Deallocate storage for an evbuffer.
155
+
156
+ @param buf pointer to the evbuffer to be freed
157
+ */
158
+ EVENT2_EXPORT_SYMBOL
159
+ void evbuffer_free(struct evbuffer *buf);
160
+
161
+ /**
162
+ Enable locking on an evbuffer so that it can safely be used by multiple
163
+ threads at the same time.
164
+
165
+ NOTE: when locking is enabled, the lock will be held when callbacks are
166
+ invoked. This could result in deadlock if you aren't careful. Plan
167
+ accordingly!
168
+
169
+ @param buf An evbuffer to make lockable.
170
+ @param lock A lock object, or NULL if we should allocate our own.
171
+ @return 0 on success, -1 on failure.
172
+ */
173
+ EVENT2_EXPORT_SYMBOL
174
+ int evbuffer_enable_locking(struct evbuffer *buf, void *lock);
175
+
176
+ /**
177
+ Acquire the lock on an evbuffer. Has no effect if locking was not enabled
178
+ with evbuffer_enable_locking.
179
+ */
180
+ EVENT2_EXPORT_SYMBOL
181
+ void evbuffer_lock(struct evbuffer *buf);
182
+
183
+ /**
184
+ Release the lock on an evbuffer. Has no effect if locking was not enabled
185
+ with evbuffer_enable_locking.
186
+ */
187
+ EVENT2_EXPORT_SYMBOL
188
+ void evbuffer_unlock(struct evbuffer *buf);
189
+
190
+
191
+ /** If this flag is set, then we will not use evbuffer_peek(),
192
+ * evbuffer_remove(), evbuffer_remove_buffer(), and so on to read bytes
193
+ * from this buffer: we'll only take bytes out of this buffer by
194
+ * writing them to the network (as with evbuffer_write_atmost), by
195
+ * removing them without observing them (as with evbuffer_drain),
196
+ * or by copying them all out at once (as with evbuffer_add_buffer).
197
+ *
198
+ * Using this option allows the implementation to use sendfile-based
199
+ * operations for evbuffer_add_file(); see that function for more
200
+ * information.
201
+ *
202
+ * This flag is on by default for bufferevents that can take advantage
203
+ * of it; you should never actually need to set it on a bufferevent's
204
+ * output buffer.
205
+ */
206
+ #define EVBUFFER_FLAG_DRAINS_TO_FD 1
207
+
208
+ /** Change the flags that are set for an evbuffer by adding more.
209
+ *
210
+ * @param buffer the evbuffer that the callback is watching.
211
+ * @param cb the callback whose status we want to change.
212
+ * @param flags One or more EVBUFFER_FLAG_* options
213
+ * @return 0 on success, -1 on failure.
214
+ */
215
+ EVENT2_EXPORT_SYMBOL
216
+ int evbuffer_set_flags(struct evbuffer *buf, ev_uint64_t flags);
217
+ /** Change the flags that are set for an evbuffer by removing some.
218
+ *
219
+ * @param buffer the evbuffer that the callback is watching.
220
+ * @param cb the callback whose status we want to change.
221
+ * @param flags One or more EVBUFFER_FLAG_* options
222
+ * @return 0 on success, -1 on failure.
223
+ */
224
+ EVENT2_EXPORT_SYMBOL
225
+ int evbuffer_clear_flags(struct evbuffer *buf, ev_uint64_t flags);
226
+
227
+ /**
228
+ Returns the total number of bytes stored in the evbuffer
229
+
230
+ @param buf pointer to the evbuffer
231
+ @return the number of bytes stored in the evbuffer
232
+ */
233
+ EVENT2_EXPORT_SYMBOL
234
+ size_t evbuffer_get_length(const struct evbuffer *buf);
235
+
236
+ /**
237
+ Returns the number of contiguous available bytes in the first buffer chain.
238
+
239
+ This is useful when processing data that might be split into multiple
240
+ chains, or that might all be in the first chain. Calls to
241
+ evbuffer_pullup() that cause reallocation and copying of data can thus be
242
+ avoided.
243
+
244
+ @param buf pointer to the evbuffer
245
+ @return 0 if no data is available, otherwise the number of available bytes
246
+ in the first buffer chain.
247
+ */
248
+ EVENT2_EXPORT_SYMBOL
249
+ size_t evbuffer_get_contiguous_space(const struct evbuffer *buf);
250
+
251
+ /**
252
+ Expands the available space in an evbuffer.
253
+
254
+ Expands the available space in the evbuffer to at least datlen, so that
255
+ appending datlen additional bytes will not require any new allocations.
256
+
257
+ @param buf the evbuffer to be expanded
258
+ @param datlen the new minimum length requirement
259
+ @return 0 if successful, or -1 if an error occurred
260
+ */
261
+ EVENT2_EXPORT_SYMBOL
262
+ int evbuffer_expand(struct evbuffer *buf, size_t datlen);
263
+
264
+ /**
265
+ Reserves space in the last chain or chains of an evbuffer.
266
+
267
+ Makes space available in the last chain or chains of an evbuffer that can
268
+ be arbitrarily written to by a user. The space does not become
269
+ available for reading until it has been committed with
270
+ evbuffer_commit_space().
271
+
272
+ The space is made available as one or more extents, represented by
273
+ an initial pointer and a length. You can force the memory to be
274
+ available as only one extent. Allowing more extents, however, makes the
275
+ function more efficient.
276
+
277
+ Multiple subsequent calls to this function will make the same space
278
+ available until evbuffer_commit_space() has been called.
279
+
280
+ It is an error to do anything that moves around the buffer's internal
281
+ memory structures before committing the space.
282
+
283
+ NOTE: The code currently does not ever use more than two extents.
284
+ This may change in future versions.
285
+
286
+ @param buf the evbuffer in which to reserve space.
287
+ @param size how much space to make available, at minimum. The
288
+ total length of the extents may be greater than the requested
289
+ length.
290
+ @param vec an array of one or more evbuffer_iovec structures to
291
+ hold pointers to the reserved extents of memory.
292
+ @param n_vec The length of the vec array. Must be at least 1;
293
+ 2 is more efficient.
294
+ @return the number of provided extents, or -1 on error.
295
+ @see evbuffer_commit_space()
296
+ */
297
+ EVENT2_EXPORT_SYMBOL
298
+ int
299
+ evbuffer_reserve_space(struct evbuffer *buf, ev_ssize_t size,
300
+ struct evbuffer_iovec *vec, int n_vec);
301
+
302
+ /**
303
+ Commits previously reserved space.
304
+
305
+ Commits some of the space previously reserved with
306
+ evbuffer_reserve_space(). It then becomes available for reading.
307
+
308
+ This function may return an error if the pointer in the extents do
309
+ not match those returned from evbuffer_reserve_space, or if data
310
+ has been added to the buffer since the space was reserved.
311
+
312
+ If you want to commit less data than you got reserved space for,
313
+ modify the iov_len pointer of the appropriate extent to a smaller
314
+ value. Note that you may have received more space than you
315
+ requested if it was available!
316
+
317
+ @param buf the evbuffer in which to reserve space.
318
+ @param vec one or two extents returned by evbuffer_reserve_space.
319
+ @param n_vecs the number of extents.
320
+ @return 0 on success, -1 on error
321
+ @see evbuffer_reserve_space()
322
+ */
323
+ EVENT2_EXPORT_SYMBOL
324
+ int evbuffer_commit_space(struct evbuffer *buf,
325
+ struct evbuffer_iovec *vec, int n_vecs);
326
+
327
+ /**
328
+ Append data to the end of an evbuffer.
329
+
330
+ @param buf the evbuffer to be appended to
331
+ @param data pointer to the beginning of the data buffer
332
+ @param datlen the number of bytes to be copied from the data buffer
333
+ @return 0 on success, -1 on failure.
334
+ */
335
+ EVENT2_EXPORT_SYMBOL
336
+ int evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen);
337
+
338
+
339
+ /**
340
+ Read data from an evbuffer and drain the bytes read.
341
+
342
+ If more bytes are requested than are available in the evbuffer, we
343
+ only extract as many bytes as were available.
344
+
345
+ @param buf the evbuffer to be read from
346
+ @param data the destination buffer to store the result
347
+ @param datlen the maximum size of the destination buffer
348
+ @return the number of bytes read, or -1 if we can't drain the buffer.
349
+ */
350
+ EVENT2_EXPORT_SYMBOL
351
+ int evbuffer_remove(struct evbuffer *buf, void *data, size_t datlen);
352
+
353
+ /**
354
+ Read data from an evbuffer, and leave the buffer unchanged.
355
+
356
+ If more bytes are requested than are available in the evbuffer, we
357
+ only extract as many bytes as were available.
358
+
359
+ @param buf the evbuffer to be read from
360
+ @param data_out the destination buffer to store the result
361
+ @param datlen the maximum size of the destination buffer
362
+ @return the number of bytes read, or -1 if we can't drain the buffer.
363
+ */
364
+ EVENT2_EXPORT_SYMBOL
365
+ ev_ssize_t evbuffer_copyout(struct evbuffer *buf, void *data_out, size_t datlen);
366
+
367
+ /**
368
+ Read data from the middle of an evbuffer, and leave the buffer unchanged.
369
+
370
+ If more bytes are requested than are available in the evbuffer, we
371
+ only extract as many bytes as were available.
372
+
373
+ @param buf the evbuffer to be read from
374
+ @param pos the position to start reading from
375
+ @param data_out the destination buffer to store the result
376
+ @param datlen the maximum size of the destination buffer
377
+ @return the number of bytes read, or -1 if we can't drain the buffer.
378
+ */
379
+ EVENT2_EXPORT_SYMBOL
380
+ ev_ssize_t evbuffer_copyout_from(struct evbuffer *buf, const struct evbuffer_ptr *pos, void *data_out, size_t datlen);
381
+
382
+ /**
383
+ Read data from an evbuffer into another evbuffer, draining
384
+ the bytes from the source buffer. This function avoids copy
385
+ operations to the extent possible.
386
+
387
+ If more bytes are requested than are available in src, the src
388
+ buffer is drained completely.
389
+
390
+ @param src the evbuffer to be read from
391
+ @param dst the destination evbuffer to store the result into
392
+ @param datlen the maximum numbers of bytes to transfer
393
+ @return the number of bytes read
394
+ */
395
+ EVENT2_EXPORT_SYMBOL
396
+ int evbuffer_remove_buffer(struct evbuffer *src, struct evbuffer *dst,
397
+ size_t datlen);
398
+
399
+ /** Used to tell evbuffer_readln what kind of line-ending to look for.
400
+ */
401
+ enum evbuffer_eol_style {
402
+ /** Any sequence of CR and LF characters is acceptable as an
403
+ * EOL.
404
+ *
405
+ * Note that this style can produce ambiguous results: the
406
+ * sequence "CRLF" will be treated as a single EOL if it is
407
+ * all in the buffer at once, but if you first read a CR from
408
+ * the network and later read an LF from the network, it will
409
+ * be treated as two EOLs.
410
+ */
411
+ EVBUFFER_EOL_ANY,
412
+ /** An EOL is an LF, optionally preceded by a CR. This style is
413
+ * most useful for implementing text-based internet protocols. */
414
+ EVBUFFER_EOL_CRLF,
415
+ /** An EOL is a CR followed by an LF. */
416
+ EVBUFFER_EOL_CRLF_STRICT,
417
+ /** An EOL is a LF. */
418
+ EVBUFFER_EOL_LF,
419
+ /** An EOL is a NUL character (that is, a single byte with value 0) */
420
+ EVBUFFER_EOL_NUL
421
+ };
422
+
423
+ /**
424
+ * Read a single line from an evbuffer.
425
+ *
426
+ * Reads a line terminated by an EOL as determined by the evbuffer_eol_style
427
+ * argument. Returns a newly allocated nul-terminated string; the caller must
428
+ * free the returned value. The EOL is not included in the returned string.
429
+ *
430
+ * @param buffer the evbuffer to read from
431
+ * @param n_read_out if non-NULL, points to a size_t that is set to the
432
+ * number of characters in the returned string. This is useful for
433
+ * strings that can contain NUL characters.
434
+ * @param eol_style the style of line-ending to use.
435
+ * @return pointer to a single line, or NULL if an error occurred
436
+ */
437
+ EVENT2_EXPORT_SYMBOL
438
+ char *evbuffer_readln(struct evbuffer *buffer, size_t *n_read_out,
439
+ enum evbuffer_eol_style eol_style);
440
+
441
+ /**
442
+ Move all data from one evbuffer into another evbuffer.
443
+
444
+ This is a destructive add. The data from one buffer moves into
445
+ the other buffer. However, no unnecessary memory copies occur.
446
+
447
+ @param outbuf the output buffer
448
+ @param inbuf the input buffer
449
+ @return 0 if successful, or -1 if an error occurred
450
+
451
+ @see evbuffer_remove_buffer()
452
+ */
453
+ EVENT2_EXPORT_SYMBOL
454
+ int evbuffer_add_buffer(struct evbuffer *outbuf, struct evbuffer *inbuf);
455
+
456
+ /**
457
+ Copy data from one evbuffer into another evbuffer.
458
+
459
+ This is a non-destructive add. The data from one buffer is copied
460
+ into the other buffer. However, no unnecessary memory copies occur.
461
+
462
+ Note that buffers already containing buffer references can't be added
463
+ to other buffers.
464
+
465
+ @param outbuf the output buffer
466
+ @param inbuf the input buffer
467
+ @return 0 if successful, or -1 if an error occurred
468
+ */
469
+ EVENT2_EXPORT_SYMBOL
470
+ int evbuffer_add_buffer_reference(struct evbuffer *outbuf,
471
+ struct evbuffer *inbuf);
472
+
473
+ /**
474
+ A cleanup function for a piece of memory added to an evbuffer by
475
+ reference.
476
+
477
+ @see evbuffer_add_reference()
478
+ */
479
+ typedef void (*evbuffer_ref_cleanup_cb)(const void *data,
480
+ size_t datalen, void *extra);
481
+
482
+ /**
483
+ Reference memory into an evbuffer without copying.
484
+
485
+ The memory needs to remain valid until all the added data has been
486
+ read. This function keeps just a reference to the memory without
487
+ actually incurring the overhead of a copy.
488
+
489
+ @param outbuf the output buffer
490
+ @param data the memory to reference
491
+ @param datlen how memory to reference
492
+ @param cleanupfn callback to be invoked when the memory is no longer
493
+ referenced by this evbuffer.
494
+ @param cleanupfn_arg optional argument to the cleanup callback
495
+ @return 0 if successful, or -1 if an error occurred
496
+ */
497
+ EVENT2_EXPORT_SYMBOL
498
+ int evbuffer_add_reference(struct evbuffer *outbuf,
499
+ const void *data, size_t datlen,
500
+ evbuffer_ref_cleanup_cb cleanupfn, void *cleanupfn_arg);
501
+
502
+ /**
503
+ Copy data from a file into the evbuffer for writing to a socket.
504
+
505
+ This function avoids unnecessary data copies between userland and
506
+ kernel. If sendfile is available and the EVBUFFER_FLAG_DRAINS_TO_FD
507
+ flag is set, it uses those functions. Otherwise, it tries to use
508
+ mmap (or CreateFileMapping on Windows).
509
+
510
+ The function owns the resulting file descriptor and will close it
511
+ when finished transferring data.
512
+
513
+ The results of using evbuffer_remove() or evbuffer_pullup() on
514
+ evbuffers whose data was added using this function are undefined.
515
+
516
+ For more fine-grained control, use evbuffer_add_file_segment.
517
+
518
+ @param outbuf the output buffer
519
+ @param fd the file descriptor
520
+ @param offset the offset from which to read data
521
+ @param length how much data to read, or -1 to read as much as possible.
522
+ (-1 requires that 'fd' support fstat.)
523
+ @return 0 if successful, or -1 if an error occurred
524
+ */
525
+
526
+ EVENT2_EXPORT_SYMBOL
527
+ int evbuffer_add_file(struct evbuffer *outbuf, int fd, ev_off_t offset,
528
+ ev_off_t length);
529
+
530
+ /**
531
+ An evbuffer_file_segment holds a reference to a range of a file --
532
+ possibly the whole file! -- for use in writing from an evbuffer to a
533
+ socket. It could be implemented with mmap, sendfile, splice, or (if all
534
+ else fails) by just pulling all the data into RAM. A single
535
+ evbuffer_file_segment can be added more than once, and to more than one
536
+ evbuffer.
537
+ */
538
+ struct evbuffer_file_segment;
539
+
540
+ /**
541
+ Flag for creating evbuffer_file_segment: If this flag is set, then when
542
+ the evbuffer_file_segment is freed and no longer in use by any
543
+ evbuffer, the underlying fd is closed.
544
+ */
545
+ #define EVBUF_FS_CLOSE_ON_FREE 0x01
546
+ /**
547
+ Flag for creating evbuffer_file_segment: Disable memory-map based
548
+ implementations.
549
+ */
550
+ #define EVBUF_FS_DISABLE_MMAP 0x02
551
+ /**
552
+ Flag for creating evbuffer_file_segment: Disable direct fd-to-fd
553
+ implementations (including sendfile and splice).
554
+
555
+ You might want to use this option if data needs to be taken from the
556
+ evbuffer by any means other than writing it to the network: the sendfile
557
+ backend is fast, but it only works for sending files directly to the
558
+ network.
559
+ */
560
+ #define EVBUF_FS_DISABLE_SENDFILE 0x04
561
+ /**
562
+ Flag for creating evbuffer_file_segment: Do not allocate a lock for this
563
+ segment. If this option is set, then neither the segment nor any
564
+ evbuffer it is added to may ever be accessed from more than one thread
565
+ at a time.
566
+ */
567
+ #define EVBUF_FS_DISABLE_LOCKING 0x08
568
+
569
+ /**
570
+ A cleanup function for a evbuffer_file_segment added to an evbuffer
571
+ for reference.
572
+ */
573
+ typedef void (*evbuffer_file_segment_cleanup_cb)(
574
+ struct evbuffer_file_segment const* seg, int flags, void* arg);
575
+
576
+ /**
577
+ Create and return a new evbuffer_file_segment for reading data from a
578
+ file and sending it out via an evbuffer.
579
+
580
+ This function avoids unnecessary data copies between userland and
581
+ kernel. Where available, it uses sendfile or splice.
582
+
583
+ The file descriptor must not be closed so long as any evbuffer is using
584
+ this segment.
585
+
586
+ The results of using evbuffer_remove() or evbuffer_pullup() or any other
587
+ function that reads bytes from an evbuffer on any evbuffer containing
588
+ the newly returned segment are undefined, unless you pass the
589
+ EVBUF_FS_DISABLE_SENDFILE flag to this function.
590
+
591
+ @param fd an open file to read from.
592
+ @param offset an index within the file at which to start reading
593
+ @param length how much data to read, or -1 to read as much as possible.
594
+ (-1 requires that 'fd' support fstat.)
595
+ @param flags any number of the EVBUF_FS_* flags
596
+ @return a new evbuffer_file_segment, or NULL on failure.
597
+ **/
598
+ EVENT2_EXPORT_SYMBOL
599
+ struct evbuffer_file_segment *evbuffer_file_segment_new(
600
+ int fd, ev_off_t offset, ev_off_t length, unsigned flags);
601
+
602
+ /**
603
+ Free an evbuffer_file_segment
604
+
605
+ It is safe to call this function even if the segment has been added to
606
+ one or more evbuffers. The evbuffer_file_segment will not be freed
607
+ until no more references to it exist.
608
+ */
609
+ EVENT2_EXPORT_SYMBOL
610
+ void evbuffer_file_segment_free(struct evbuffer_file_segment *seg);
611
+
612
+ /**
613
+ Add cleanup callback and argument for the callback to an
614
+ evbuffer_file_segment.
615
+
616
+ The cleanup callback will be invoked when no more references to the
617
+ evbuffer_file_segment exist.
618
+ **/
619
+ EVENT2_EXPORT_SYMBOL
620
+ void evbuffer_file_segment_add_cleanup_cb(struct evbuffer_file_segment *seg,
621
+ evbuffer_file_segment_cleanup_cb cb, void* arg);
622
+
623
+ /**
624
+ Insert some or all of an evbuffer_file_segment at the end of an evbuffer
625
+
626
+ Note that the offset and length parameters of this function have a
627
+ different meaning from those provided to evbuffer_file_segment_new: When
628
+ you create the segment, the offset is the offset _within the file_, and
629
+ the length is the length _of the segment_, whereas when you add a
630
+ segment to an evbuffer, the offset is _within the segment_ and the
631
+ length is the length of the _part of the segment you want to use.
632
+
633
+ In other words, if you have a 10 KiB file, and you create an
634
+ evbuffer_file_segment for it with offset 20 and length 1000, it will
635
+ refer to bytes 20..1019 inclusive. If you then pass this segment to
636
+ evbuffer_add_file_segment and specify an offset of 20 and a length of
637
+ 50, you will be adding bytes 40..99 inclusive.
638
+
639
+ @param buf the evbuffer to append to
640
+ @param seg the segment to add
641
+ @param offset the offset within the segment to start from
642
+ @param length the amount of data to add, or -1 to add it all.
643
+ @return 0 on success, -1 on failure.
644
+ */
645
+ EVENT2_EXPORT_SYMBOL
646
+ int evbuffer_add_file_segment(struct evbuffer *buf,
647
+ struct evbuffer_file_segment *seg, ev_off_t offset, ev_off_t length);
648
+
649
+ /**
650
+ Append a formatted string to the end of an evbuffer.
651
+
652
+ The string is formated as printf.
653
+
654
+ @param buf the evbuffer that will be appended to
655
+ @param fmt a format string
656
+ @param ... arguments that will be passed to printf(3)
657
+ @return The number of bytes added if successful, or -1 if an error occurred.
658
+
659
+ @see evutil_printf(), evbuffer_add_vprintf()
660
+ */
661
+ EVENT2_EXPORT_SYMBOL
662
+ int evbuffer_add_printf(struct evbuffer *buf, const char *fmt, ...)
663
+ #ifdef __GNUC__
664
+ __attribute__((format(printf, 2, 3)))
665
+ #endif
666
+ ;
667
+
668
+ /**
669
+ Append a va_list formatted string to the end of an evbuffer.
670
+
671
+ @param buf the evbuffer that will be appended to
672
+ @param fmt a format string
673
+ @param ap a varargs va_list argument array that will be passed to vprintf(3)
674
+ @return The number of bytes added if successful, or -1 if an error occurred.
675
+ */
676
+ EVENT2_EXPORT_SYMBOL
677
+ int evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
678
+ #ifdef __GNUC__
679
+ __attribute__((format(printf, 2, 0)))
680
+ #endif
681
+ ;
682
+
683
+
684
+ /**
685
+ Remove a specified number of bytes data from the beginning of an evbuffer.
686
+
687
+ @param buf the evbuffer to be drained
688
+ @param len the number of bytes to drain from the beginning of the buffer
689
+ @return 0 on success, -1 on failure.
690
+ */
691
+ EVENT2_EXPORT_SYMBOL
692
+ int evbuffer_drain(struct evbuffer *buf, size_t len);
693
+
694
+
695
+ /**
696
+ Write the contents of an evbuffer to a file descriptor.
697
+
698
+ The evbuffer will be drained after the bytes have been successfully written.
699
+
700
+ @param buffer the evbuffer to be written and drained
701
+ @param fd the file descriptor to be written to
702
+ @return the number of bytes written, or -1 if an error occurred
703
+ @see evbuffer_read()
704
+ */
705
+ EVENT2_EXPORT_SYMBOL
706
+ int evbuffer_write(struct evbuffer *buffer, evutil_socket_t fd);
707
+
708
+ /**
709
+ Write some of the contents of an evbuffer to a file descriptor.
710
+
711
+ The evbuffer will be drained after the bytes have been successfully written.
712
+
713
+ @param buffer the evbuffer to be written and drained
714
+ @param fd the file descriptor to be written to
715
+ @param howmuch the largest allowable number of bytes to write, or -1
716
+ to write as many bytes as we can.
717
+ @return the number of bytes written, or -1 if an error occurred
718
+ @see evbuffer_read()
719
+ */
720
+ EVENT2_EXPORT_SYMBOL
721
+ int evbuffer_write_atmost(struct evbuffer *buffer, evutil_socket_t fd,
722
+ ev_ssize_t howmuch);
723
+
724
+ /**
725
+ Read from a file descriptor and store the result in an evbuffer.
726
+
727
+ @param buffer the evbuffer to store the result
728
+ @param fd the file descriptor to read from
729
+ @param howmuch the number of bytes to be read. If the given number is negative
730
+ or out of maximum bytes per one read, as many bytes as we can will be read.
731
+ @return the number of bytes read, or -1 if an error occurred
732
+ @see evbuffer_write()
733
+ */
734
+ EVENT2_EXPORT_SYMBOL
735
+ int evbuffer_read(struct evbuffer *buffer, evutil_socket_t fd, int howmuch);
736
+
737
+ /**
738
+ Search for a string within an evbuffer.
739
+
740
+ @param buffer the evbuffer to be searched
741
+ @param what the string to be searched for
742
+ @param len the length of the search string
743
+ @param start NULL or a pointer to a valid struct evbuffer_ptr.
744
+ @return a struct evbuffer_ptr whose 'pos' field has the offset of the
745
+ first occurrence of the string in the buffer after 'start'. The 'pos'
746
+ field of the result is -1 if the string was not found.
747
+ */
748
+ EVENT2_EXPORT_SYMBOL
749
+ struct evbuffer_ptr evbuffer_search(struct evbuffer *buffer, const char *what, size_t len, const struct evbuffer_ptr *start);
750
+
751
+ /**
752
+ Search for a string within part of an evbuffer.
753
+
754
+ @param buffer the evbuffer to be searched
755
+ @param what the string to be searched for
756
+ @param len the length of the search string
757
+ @param start NULL or a pointer to a valid struct evbuffer_ptr that
758
+ indicates where we should start searching.
759
+ @param end NULL or a pointer to a valid struct evbuffer_ptr that
760
+ indicates where we should stop searching.
761
+ @return a struct evbuffer_ptr whose 'pos' field has the offset of the
762
+ first occurrence of the string in the buffer after 'start'. The 'pos'
763
+ field of the result is -1 if the string was not found.
764
+ */
765
+ EVENT2_EXPORT_SYMBOL
766
+ 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);
767
+
768
+ /**
769
+ Defines how to adjust an evbuffer_ptr by evbuffer_ptr_set()
770
+
771
+ @see evbuffer_ptr_set() */
772
+ enum evbuffer_ptr_how {
773
+ /** Sets the pointer to the position; can be called on with an
774
+ uninitialized evbuffer_ptr. */
775
+ EVBUFFER_PTR_SET,
776
+ /** Advances the pointer by adding to the current position. */
777
+ EVBUFFER_PTR_ADD
778
+ };
779
+
780
+ /**
781
+ Sets the search pointer in the buffer to position.
782
+
783
+ There are two ways to use this function: you can call
784
+ evbuffer_ptr_set(buf, &pos, N, EVBUFFER_PTR_SET)
785
+ to move 'pos' to a position 'N' bytes after the start of the buffer, or
786
+ evbuffer_ptr_set(buf, &pos, N, EVBUFFER_PTR_ADD)
787
+ to move 'pos' forward by 'N' bytes.
788
+
789
+ If evbuffer_ptr is not initialized, this function can only be called
790
+ with EVBUFFER_PTR_SET.
791
+
792
+ An evbuffer_ptr can represent any position from the start of the buffer to
793
+ a position immediately after the end of the buffer.
794
+
795
+ @param buffer the evbuffer to be search
796
+ @param ptr a pointer to a struct evbuffer_ptr
797
+ @param position the position at which to start the next search
798
+ @param how determines how the pointer should be manipulated.
799
+ @returns 0 on success or -1 otherwise
800
+ */
801
+ EVENT2_EXPORT_SYMBOL
802
+ int
803
+ evbuffer_ptr_set(struct evbuffer *buffer, struct evbuffer_ptr *ptr,
804
+ size_t position, enum evbuffer_ptr_how how);
805
+
806
+ /**
807
+ Search for an end-of-line string within an evbuffer.
808
+
809
+ @param buffer the evbuffer to be searched
810
+ @param start NULL or a pointer to a valid struct evbuffer_ptr to start
811
+ searching at.
812
+ @param eol_len_out If non-NULL, the pointed-to value will be set to
813
+ the length of the end-of-line string.
814
+ @param eol_style The kind of EOL to look for; see evbuffer_readln() for
815
+ more information
816
+ @return a struct evbuffer_ptr whose 'pos' field has the offset of the
817
+ first occurrence EOL in the buffer after 'start'. The 'pos'
818
+ field of the result is -1 if the string was not found.
819
+ */
820
+ EVENT2_EXPORT_SYMBOL
821
+ struct evbuffer_ptr evbuffer_search_eol(struct evbuffer *buffer,
822
+ struct evbuffer_ptr *start, size_t *eol_len_out,
823
+ enum evbuffer_eol_style eol_style);
824
+
825
+ /** Function to peek at data inside an evbuffer without removing it or
826
+ copying it out.
827
+
828
+ Pointers to the data are returned by filling the 'vec_out' array
829
+ with pointers to one or more extents of data inside the buffer.
830
+
831
+ The total data in the extents that you get back may be more than
832
+ you requested (if there is more data last extent than you asked
833
+ for), or less (if you do not provide enough evbuffer_iovecs, or if
834
+ the buffer does not have as much data as you asked to see).
835
+
836
+ @param buffer the evbuffer to peek into,
837
+ @param len the number of bytes to try to peek. If len is negative, we
838
+ will try to fill as much of vec_out as we can. If len is negative
839
+ and vec_out is not provided, we return the number of evbuffer_iovecs
840
+ that would be needed to get all the data in the buffer.
841
+ @param start_at an evbuffer_ptr indicating the point at which we
842
+ should start looking for data. NULL means, "At the start of the
843
+ buffer."
844
+ @param vec_out an array of evbuffer_iovec
845
+ @param n_vec the length of vec_out. If 0, we only count how many
846
+ extents would be necessary to point to the requested amount of
847
+ data.
848
+ @return The number of extents needed. This may be less than n_vec
849
+ if we didn't need all the evbuffer_iovecs we were given, or more
850
+ than n_vec if we would need more to return all the data that was
851
+ requested.
852
+ */
853
+ EVENT2_EXPORT_SYMBOL
854
+ int evbuffer_peek(struct evbuffer *buffer, ev_ssize_t len,
855
+ struct evbuffer_ptr *start_at,
856
+ struct evbuffer_iovec *vec_out, int n_vec);
857
+
858
+
859
+ /** Structure passed to an evbuffer_cb_func evbuffer callback
860
+
861
+ @see evbuffer_cb_func, evbuffer_add_cb()
862
+ */
863
+ struct evbuffer_cb_info {
864
+ /** The number of bytes in this evbuffer when callbacks were last
865
+ * invoked. */
866
+ size_t orig_size;
867
+ /** The number of bytes added since callbacks were last invoked. */
868
+ size_t n_added;
869
+ /** The number of bytes removed since callbacks were last invoked. */
870
+ size_t n_deleted;
871
+ };
872
+
873
+ /** Type definition for a callback that is invoked whenever data is added or
874
+ removed from an evbuffer.
875
+
876
+ An evbuffer may have one or more callbacks set at a time. The order
877
+ in which they are executed is undefined.
878
+
879
+ A callback function may add more callbacks, or remove itself from the
880
+ list of callbacks, or add or remove data from the buffer. It may not
881
+ remove another callback from the list.
882
+
883
+ If a callback adds or removes data from the buffer or from another
884
+ buffer, this can cause a recursive invocation of your callback or
885
+ other callbacks. If you ask for an infinite loop, you might just get
886
+ one: watch out!
887
+
888
+ @param buffer the buffer whose size has changed
889
+ @param info a structure describing how the buffer changed.
890
+ @param arg a pointer to user data
891
+ */
892
+ typedef void (*evbuffer_cb_func)(struct evbuffer *buffer, const struct evbuffer_cb_info *info, void *arg);
893
+
894
+ struct evbuffer_cb_entry;
895
+ /** Add a new callback to an evbuffer.
896
+
897
+ Subsequent calls to evbuffer_add_cb() add new callbacks. To remove this
898
+ callback, call evbuffer_remove_cb or evbuffer_remove_cb_entry.
899
+
900
+ @param buffer the evbuffer to be monitored
901
+ @param cb the callback function to invoke when the evbuffer is modified,
902
+ or NULL to remove all callbacks.
903
+ @param cbarg an argument to be provided to the callback function
904
+ @return a handle to the callback on success, or NULL on failure.
905
+ */
906
+ EVENT2_EXPORT_SYMBOL
907
+ struct evbuffer_cb_entry *evbuffer_add_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg);
908
+
909
+ /** Remove a callback from an evbuffer, given a handle returned from
910
+ evbuffer_add_cb.
911
+
912
+ Calling this function invalidates the handle.
913
+
914
+ @return 0 if a callback was removed, or -1 if no matching callback was
915
+ found.
916
+ */
917
+ EVENT2_EXPORT_SYMBOL
918
+ int evbuffer_remove_cb_entry(struct evbuffer *buffer,
919
+ struct evbuffer_cb_entry *ent);
920
+
921
+ /** Remove a callback from an evbuffer, given the function and argument
922
+ used to add it.
923
+
924
+ @return 0 if a callback was removed, or -1 if no matching callback was
925
+ found.
926
+ */
927
+ EVENT2_EXPORT_SYMBOL
928
+ int evbuffer_remove_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg);
929
+
930
+ /** If this flag is not set, then a callback is temporarily disabled, and
931
+ * should not be invoked.
932
+ *
933
+ * @see evbuffer_cb_set_flags(), evbuffer_cb_clear_flags()
934
+ */
935
+ #define EVBUFFER_CB_ENABLED 1
936
+
937
+ /** Change the flags that are set for a callback on a buffer by adding more.
938
+
939
+ @param buffer the evbuffer that the callback is watching.
940
+ @param cb the callback whose status we want to change.
941
+ @param flags EVBUFFER_CB_ENABLED to re-enable the callback.
942
+ @return 0 on success, -1 on failure.
943
+ */
944
+ EVENT2_EXPORT_SYMBOL
945
+ int evbuffer_cb_set_flags(struct evbuffer *buffer,
946
+ struct evbuffer_cb_entry *cb, ev_uint32_t flags);
947
+
948
+ /** Change the flags that are set for a callback on a buffer by removing some
949
+
950
+ @param buffer the evbuffer that the callback is watching.
951
+ @param cb the callback whose status we want to change.
952
+ @param flags EVBUFFER_CB_ENABLED to disable the callback.
953
+ @return 0 on success, -1 on failure.
954
+ */
955
+ EVENT2_EXPORT_SYMBOL
956
+ int evbuffer_cb_clear_flags(struct evbuffer *buffer,
957
+ struct evbuffer_cb_entry *cb, ev_uint32_t flags);
958
+
959
+ #if 0
960
+ /** Postpone calling a given callback until unsuspend is called later.
961
+
962
+ This is different from disabling the callback, since the callback will get
963
+ invoked later if the buffer size changes between now and when we unsuspend
964
+ it.
965
+
966
+ @param the buffer that the callback is watching.
967
+ @param cb the callback we want to suspend.
968
+ */
969
+ EVENT2_EXPORT_SYMBOL
970
+ void evbuffer_cb_suspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb);
971
+ /** Stop postponing a callback that we postponed with evbuffer_cb_suspend.
972
+
973
+ If data was added to or removed from the buffer while the callback was
974
+ suspended, the callback will get called once now.
975
+
976
+ @param the buffer that the callback is watching.
977
+ @param cb the callback we want to stop suspending.
978
+ */
979
+ EVENT2_EXPORT_SYMBOL
980
+ void evbuffer_cb_unsuspend(struct evbuffer *buffer, struct evbuffer_cb_entry *cb);
981
+ #endif
982
+
983
+ /**
984
+ Makes the data at the beginning of an evbuffer contiguous.
985
+
986
+ @param buf the evbuffer to make contiguous
987
+ @param size the number of bytes to make contiguous, or -1 to make the
988
+ entire buffer contiguous.
989
+ @return a pointer to the contiguous memory array, or NULL if param size
990
+ requested more data than is present in the buffer.
991
+ */
992
+
993
+ EVENT2_EXPORT_SYMBOL
994
+ unsigned char *evbuffer_pullup(struct evbuffer *buf, ev_ssize_t size);
995
+
996
+ /**
997
+ Prepends data to the beginning of the evbuffer
998
+
999
+ @param buf the evbuffer to which to prepend data
1000
+ @param data a pointer to the memory to prepend
1001
+ @param size the number of bytes to prepend
1002
+ @return 0 if successful, or -1 otherwise
1003
+ */
1004
+
1005
+ EVENT2_EXPORT_SYMBOL
1006
+ int evbuffer_prepend(struct evbuffer *buf, const void *data, size_t size);
1007
+
1008
+ /**
1009
+ Prepends all data from the src evbuffer to the beginning of the dst
1010
+ evbuffer.
1011
+
1012
+ @param dst the evbuffer to which to prepend data
1013
+ @param src the evbuffer to prepend; it will be emptied as a result
1014
+ @return 0 if successful, or -1 otherwise
1015
+ */
1016
+ EVENT2_EXPORT_SYMBOL
1017
+ int evbuffer_prepend_buffer(struct evbuffer *dst, struct evbuffer* src);
1018
+
1019
+ /**
1020
+ Prevent calls that modify an evbuffer from succeeding. A buffer may
1021
+ frozen at the front, at the back, or at both the front and the back.
1022
+
1023
+ If the front of a buffer is frozen, operations that drain data from
1024
+ the front of the buffer, or that prepend data to the buffer, will
1025
+ fail until it is unfrozen. If the back a buffer is frozen, operations
1026
+ that append data from the buffer will fail until it is unfrozen.
1027
+
1028
+ @param buf The buffer to freeze
1029
+ @param at_front If true, we freeze the front of the buffer. If false,
1030
+ we freeze the back.
1031
+ @return 0 on success, -1 on failure.
1032
+ */
1033
+ EVENT2_EXPORT_SYMBOL
1034
+ int evbuffer_freeze(struct evbuffer *buf, int at_front);
1035
+ /**
1036
+ Re-enable calls that modify an evbuffer.
1037
+
1038
+ @param buf The buffer to un-freeze
1039
+ @param at_front If true, we unfreeze the front of the buffer. If false,
1040
+ we unfreeze the back.
1041
+ @return 0 on success, -1 on failure.
1042
+ */
1043
+ EVENT2_EXPORT_SYMBOL
1044
+ int evbuffer_unfreeze(struct evbuffer *buf, int at_front);
1045
+
1046
+ struct event_base;
1047
+ /**
1048
+ Force all the callbacks on an evbuffer to be run, not immediately after
1049
+ the evbuffer is altered, but instead from inside the event loop.
1050
+
1051
+ This can be used to serialize all the callbacks to a single thread
1052
+ of execution.
1053
+ */
1054
+ EVENT2_EXPORT_SYMBOL
1055
+ int evbuffer_defer_callbacks(struct evbuffer *buffer, struct event_base *base);
1056
+
1057
+ /**
1058
+ Append data from 1 or more iovec's to an evbuffer
1059
+
1060
+ Calculates the number of bytes needed for an iovec structure and guarantees
1061
+ all data will fit into a single chain. Can be used in lieu of functionality
1062
+ which calls evbuffer_add() constantly before being used to increase
1063
+ performance.
1064
+
1065
+ @param buffer the destination buffer
1066
+ @param vec the source iovec
1067
+ @param n_vec the number of iovec structures.
1068
+ @return the number of bytes successfully written to the output buffer.
1069
+ */
1070
+ EVENT2_EXPORT_SYMBOL
1071
+ size_t evbuffer_add_iovec(struct evbuffer * buffer, struct evbuffer_iovec * vec, int n_vec);
1072
+
1073
+ #ifdef __cplusplus
1074
+ }
1075
+ #endif
1076
+
1077
+ #endif /* EVENT2_BUFFER_H_INCLUDED_ */