mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 06:16:10 -04:00
introduce evbuffer_contiguous_space() and use it in the zlib filter test
svn:r756
This commit is contained in:
parent
5fbc7f0aee
commit
becc89b778
@ -83,7 +83,8 @@ Changes in current version:
|
|||||||
o allow connections to be removed from an rpc pool
|
o allow connections to be removed from an rpc pool
|
||||||
o add new evtimer_assign, signal_assign, evtimer_new, and signal_new functions to manipulate timer and signal events, analagous to the now-recommended event_assign and event_new
|
o add new evtimer_assign, signal_assign, evtimer_new, and signal_new functions to manipulate timer and signal events, analagous to the now-recommended event_assign and event_new
|
||||||
o switch internal uses of event_set over to use event_assign.
|
o switch internal uses of event_set over to use event_assign.
|
||||||
|
o introduce evbuffer_contiguous_space() api that tells a user how much data is available in the first buffer chain
|
||||||
|
|
||||||
Changes in 1.4.0:
|
Changes in 1.4.0:
|
||||||
o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
|
o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
|
||||||
o demote most http warnings to debug messages
|
o demote most http warnings to debug messages
|
||||||
|
8
buffer.c
8
buffer.c
@ -123,6 +123,14 @@ evbuffer_length(struct evbuffer *buffer)
|
|||||||
return (buffer->total_len);
|
return (buffer->total_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
evbuffer_contiguous_space(struct evbuffer *buf)
|
||||||
|
{
|
||||||
|
struct evbuffer_chain *chain = buf->first;
|
||||||
|
|
||||||
|
return (chain != NULL ? chain->off : 0);
|
||||||
|
}
|
||||||
|
|
||||||
#define ZERO_CHAIN(dst) do { \
|
#define ZERO_CHAIN(dst) do { \
|
||||||
(dst)->first = NULL; \
|
(dst)->first = NULL; \
|
||||||
(dst)->last = NULL; \
|
(dst)->last = NULL; \
|
||||||
|
@ -93,6 +93,19 @@ void evbuffer_free(struct evbuffer *buf);
|
|||||||
*/
|
*/
|
||||||
size_t evbuffer_length(struct evbuffer *buf);
|
size_t evbuffer_length(struct evbuffer *buf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the contiguous number of available bytes in the first buffer chain.
|
||||||
|
|
||||||
|
This is useful when processing of all available data can be split up into
|
||||||
|
chunks. Calls to evbuffer_pullup() that cause reallocation and copying
|
||||||
|
of data can thus be avoided.
|
||||||
|
|
||||||
|
@param buf pointer to the evbuffer
|
||||||
|
@return 0 if no data is available, otherwise the number of available bytes
|
||||||
|
in the first buffer chain.
|
||||||
|
*/
|
||||||
|
size_t evbuffer_contiguous_space(struct evbuffer *buf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Expands the available space in an event buffer.
|
Expands the available space in an event buffer.
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ zlib_input_filter(struct evbuffer *src, struct evbuffer *dst,
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
/* let's do some decompression */
|
/* let's do some decompression */
|
||||||
p->avail_in = EVBUFFER_LENGTH(src);
|
p->avail_in = evbuffer_contiguous_space(src);
|
||||||
p->next_in = evbuffer_pullup(src, p->avail_in);
|
p->next_in = evbuffer_pullup(src, p->avail_in);
|
||||||
|
|
||||||
p->next_out = (unsigned char *)tmp;
|
p->next_out = (unsigned char *)tmp;
|
||||||
@ -123,7 +123,7 @@ zlib_input_filter(struct evbuffer *src, struct evbuffer *dst,
|
|||||||
assert(res == Z_OK || res == Z_STREAM_END);
|
assert(res == Z_OK || res == Z_STREAM_END);
|
||||||
|
|
||||||
/* let's figure out how much was compressed */
|
/* let's figure out how much was compressed */
|
||||||
nread = EVBUFFER_LENGTH(src) - p->avail_in;
|
nread = evbuffer_contiguous_space(src) - p->avail_in;
|
||||||
nwrite = sizeof(tmp) - p->avail_out;
|
nwrite = sizeof(tmp) - p->avail_out;
|
||||||
|
|
||||||
evbuffer_drain(src, nread);
|
evbuffer_drain(src, nread);
|
||||||
@ -147,7 +147,7 @@ zlib_output_filter(struct evbuffer *src, struct evbuffer *dst,
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
/* let's do some compression */
|
/* let's do some compression */
|
||||||
p->avail_in = EVBUFFER_LENGTH(src);
|
p->avail_in = evbuffer_contiguous_space(src);
|
||||||
p->next_in = evbuffer_pullup(src, p->avail_in);
|
p->next_in = evbuffer_pullup(src, p->avail_in);
|
||||||
|
|
||||||
p->next_out = (unsigned char *)tmp;
|
p->next_out = (unsigned char *)tmp;
|
||||||
@ -158,7 +158,7 @@ zlib_output_filter(struct evbuffer *src, struct evbuffer *dst,
|
|||||||
assert(res == Z_OK || res == Z_STREAM_END);
|
assert(res == Z_OK || res == Z_STREAM_END);
|
||||||
|
|
||||||
/* let's figure out how much was compressed */
|
/* let's figure out how much was compressed */
|
||||||
nread = EVBUFFER_LENGTH(src) - p->avail_in;
|
nread = evbuffer_contiguous_space(src) - p->avail_in;
|
||||||
nwrite = sizeof(tmp) - p->avail_out;
|
nwrite = sizeof(tmp) - p->avail_out;
|
||||||
|
|
||||||
evbuffer_drain(src, nread);
|
evbuffer_drain(src, nread);
|
||||||
@ -246,7 +246,9 @@ test_bufferevent_zlib(void)
|
|||||||
for (i = 0; i < sizeof(buffer); i++)
|
for (i = 0; i < sizeof(buffer); i++)
|
||||||
buffer[i] = i;
|
buffer[i] = i;
|
||||||
|
|
||||||
bufferevent_write(bev1, buffer, sizeof(buffer));
|
/* break it up into multiple buffer chains */
|
||||||
|
bufferevent_write(bev1, buffer, 1800);
|
||||||
|
bufferevent_write(bev1, buffer + 1800, sizeof(buffer) - 1800);
|
||||||
|
|
||||||
/* we are done writing - we need to flush everything */
|
/* we are done writing - we need to flush everything */
|
||||||
bufferevent_trigger_filter(bev1, NULL, BEV_OUTPUT, BEV_FLUSH);
|
bufferevent_trigger_filter(bev1, NULL, BEV_OUTPUT, BEV_FLUSH);
|
||||||
@ -256,7 +258,7 @@ test_bufferevent_zlib(void)
|
|||||||
bufferevent_free(bev1);
|
bufferevent_free(bev1);
|
||||||
bufferevent_free(bev2);
|
bufferevent_free(bev2);
|
||||||
|
|
||||||
if (test_ok != 5) {
|
if (test_ok != 6) {
|
||||||
fprintf(stdout, "FAILED: %d\n", test_ok);
|
fprintf(stdout, "FAILED: %d\n", test_ok);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user