add bufferevent_read_buffer function

svn:r728
This commit is contained in:
Niels Provos 2008-04-25 02:44:46 +00:00
parent fe2e7307f3
commit 89f63b205d
4 changed files with 28 additions and 1 deletions

View File

@ -70,6 +70,7 @@ Changes in current version:
o Make all event_tagging interfaces threadsafe.
o Rename internal memory management functions.
o New functions (event_assign, event_new, event_free) for use by apps that want to be safely threadsafe, or want to remain ignorant of the contents of struct event.
o introduce bufferevent_read_buffer; allows reading without memory copy.
Changes in 1.4.0:
o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.

View File

@ -325,6 +325,12 @@ bufferevent_read(struct bufferevent *bufev, void *data, size_t size)
return (evbuffer_remove(bufev->input, data, size));
}
int
bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf)
{
return (evbuffer_add_buffer(buf, bufev->input));
}
int
bufferevent_enable(struct bufferevent *bufev, short event)
{

View File

@ -181,6 +181,16 @@ int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf);
*/
size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size);
/**
Read data from a bufferevent buffer into an evbuffer. This avoids
memory copies.
@param bufev the bufferevent to be read from
@param buf the evbuffer to which to add data
@return 0 if successful, or -1 if an error occurred.
*/
int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf);
/**
Enable a bufferevent.

View File

@ -1306,8 +1306,18 @@ static void
readcb(struct bufferevent *bev, void *arg)
{
if (EVBUFFER_LENGTH(bev->input) == 8333) {
struct evbuffer *evbuf = evbuffer_new();
assert(evbuf != NULL);
/* gratuitous test of bufferevent_read_buffer */
bufferevent_read_buffer(bev, evbuf);
bufferevent_disable(bev, EV_READ);
test_ok++;
if (EVBUFFER_LENGTH(evbuf) == 8333)
test_ok++;
evbuffer_free(evbuf);
}
}