#include "event2/http_compat.h"
#include "event2/http_struct.h"
#include "event2/buffer.h"
-#include "event2/buffer_compat.h"
#include "event2/bufferevent.h"
-#include "event2/bufferevent_compat.h"
-#include "event2/bufferevent_struct.h"
#include "log-internal.h"
#include "util-internal.h"
#include "http-internal.h"
return (fd);
}
+/* Helper: do a strcmp on the contents of buf and the string s. */
+static int
+evbuffer_datacmp(struct evbuffer *buf, const char *s)
+{
+ size_t b_sz = evbuffer_get_length(buf);
+ size_t s_sz = strlen(s);
+ unsigned char *d;
+ int r;
+
+ if (b_sz < s_sz)
+ return -1;
+
+ d = evbuffer_pullup(buf, s_sz);
+ if ((r = memcmp(d, s, s_sz)))
+ return r;
+
+ if (b_sz > s_sz)
+ return 1;
+ else
+ return 0;
+}
+
+/* Helper: Return true iff buf contains s */
+static int
+evbuffer_contains(struct evbuffer *buf, const char *s)
+{
+ struct evbuffer_ptr ptr;
+ ptr = evbuffer_search(buf, s, strlen(s), NULL);
+ return ptr.pos != -1;
+}
+
static void
http_readcb(struct bufferevent *bev, void *arg)
{
const char *what = BASIC_REQUEST_BODY;
- event_debug(("%s: %s\n", __func__, EVBUFFER_DATA(bufferevent_get_input(bev))));
-
- if (evbuffer_find(bufferevent_get_input(bev),
- (const unsigned char*) what, strlen(what)) != NULL) {
+ if (evbuffer_contains(bufferevent_get_input(bev), what)) {
struct evhttp_request *req = evhttp_request_new(NULL, NULL);
enum message_read_status done;
static void
http_writecb(struct bufferevent *bev, void *arg)
{
- if (EVBUFFER_LENGTH(bufferevent_get_output(bev)) == 0) {
+ if (evbuffer_get_length(bufferevent_get_output(bev)) == 0) {
/* enable reading of the reply */
bufferevent_enable(bev, EV_READ);
test_ok++;
evbuffer_free(evb);
if (++state->i < (int) (sizeof(CHUNKS)/sizeof(CHUNKS[0]))) {
- event_once(-1, EV_TIMEOUT,
+ event_base_once(NULL, -1, EV_TIMEOUT,
http_chunked_trickle_cb, state, &when);
} else {
evhttp_send_reply_end(state->req);
/* but trickle it across several iterations to ensure we're not
* assuming it comes all at once */
- event_once(-1, EV_TIMEOUT, http_chunked_trickle_cb, state, &when);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_chunked_trickle_cb, state, &when);
}
static void
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_readcb, http_writecb,
http_errorcb, NULL);
/* first half of the http request */
bufferevent_write(bev, http_request, strlen(http_request));
evutil_timerclear(&tv);
tv.tv_usec = 10000;
- event_once(-1, EV_TIMEOUT, http_complete_write, bev, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_complete_write, bev, &tv);
event_dispatch();
fd = http_connect("127.0.0.1", port2);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_readcb, http_writecb,
http_errorcb, NULL);
http_request =
tv.tv_sec = 0;
tv.tv_usec = 200 * 1000;
- event_once(-1, EV_TIMEOUT, http_delay_reply, req, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_delay_reply, req, &tv);
}
static void
const char *what = "Hello, 127.0.0.1";
const char *bad_request = "400 Bad Request";
- event_debug(("%s: %s\n", __func__, EVBUFFER_DATA(bev->input)));
-
- if (evbuffer_find(bev->input,
- (const unsigned char *) bad_request,
- strlen(bad_request)) != NULL) {
- TT_FAIL(("%s: bad request detected", __func__));
+ if (evbuffer_contains(bufferevent_get_input(bev), bad_request)) {
+ TT_FAIL(("%s:bad request detected", __func__));
bufferevent_disable(bev, EV_READ);
event_loopexit(NULL);
return;
}
- if (evbuffer_find(bev->input,
- (const unsigned char*) what, strlen(what)) != NULL) {
+ if (evbuffer_contains(bufferevent_get_input(bev), what)) {
struct evhttp_request *req = evhttp_request_new(NULL, NULL);
enum message_read_status done;
req->kind = EVHTTP_RESPONSE;
- done = evhttp_parse_firstline(req, bev->input);
+ done = evhttp_parse_firstline(req, bufferevent_get_input(bev));
if (done != ALL_DATA_READ)
goto out;
- done = evhttp_parse_headers(req, bev->input);
+ done = evhttp_parse_headers(req, bufferevent_get_input(bev));
if (done != ALL_DATA_READ)
goto out;
out:
evhttp_request_free(req);
- evbuffer_drain(bev->input, EVBUFFER_LENGTH(bev->input));
+ evbuffer_drain(bufferevent_get_input(bev), evbuffer_get_length(bufferevent_get_input(bev)));
}
- shutdown(bev->ev_read.ev_fd, SHUT_WR);
+ shutdown(bufferevent_getfd(bev), SHUT_WR);
}
static void
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_badreq_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_badreq_readcb, http_writecb,
http_badreq_errorcb, NULL);
bufferevent_enable(bev, EV_READ);
shutdown(fd, SHUT_WR);
timerclear(&tv);
tv.tv_usec = 10000;
- event_once(-1, EV_TIMEOUT, http_badreq_successcb, bev, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_badreq_successcb, bev, &tv);
event_dispatch();
fd = http_connect("127.0.0.1", port2);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_badreq_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_badreq_readcb, http_writecb,
http_badreq_errorcb, NULL);
bufferevent_enable(bev, EV_READ);
timerclear(&tv);
tv.tv_usec = 10000;
- event_once(-1, EV_TIMEOUT, http_badreq_successcb, bev, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_badreq_successcb, bev, &tv);
event_dispatch();
evutil_timerclear(&tv);
tv.tv_sec = 3;
- event_once(-1, EV_TIMEOUT, http_delay_reply, req, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_delay_reply, req, &tv);
evhttp_connection_fail(delayed_client, EVCON_HTTP_EOF);
}
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_readcb, http_writecb,
http_errorcb, NULL);
http_request =
tv.tv_sec = 0;
tv.tv_usec = 100 * 1000;
- event_once(-1, EV_TIMEOUT, http_do_cancel, req, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_do_cancel, req, &tv);
event_dispatch();
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) {
+ if (evbuffer_get_length(req->input_buffer) != strlen(what)) {
fprintf(stderr, "FAILED\n");
exit(1);
}
- if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) {
+ if (evbuffer_datacmp(req->input_buffer, what) != 0) {
fprintf(stderr, "FAILED\n");
exit(1);
}
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != 0) {
+ if (evbuffer_get_length(req->input_buffer) != 0) {
fprintf(stderr, "FAILED\n");
exit(1);
}
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) {
+ if (evbuffer_get_length(req->input_buffer) != strlen(what)) {
fprintf(stderr, "FAILED (length %lu vs %lu)\n",
- (unsigned long)EVBUFFER_LENGTH(req->input_buffer), (unsigned long)strlen(what));
+ (unsigned long)evbuffer_get_length(req->input_buffer), (unsigned long)strlen(what));
exit(1);
}
- if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) {
+ if (evbuffer_datacmp(req->input_buffer, what) != 0) {
fprintf(stderr, "FAILED (data)\n");
exit(1);
}
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != strlen(POST_DATA)) {
+ if (evbuffer_get_length(req->input_buffer) != strlen(POST_DATA)) {
fprintf(stdout, "FAILED (length: %lu vs %lu)\n",
- (unsigned long) EVBUFFER_LENGTH(req->input_buffer), (unsigned long) strlen(POST_DATA));
+ (unsigned long) evbuffer_get_length(req->input_buffer), (unsigned long) strlen(POST_DATA));
exit(1);
}
- if (memcmp(EVBUFFER_DATA(req->input_buffer), POST_DATA,
- strlen(POST_DATA))) {
+ if (evbuffer_datacmp(req->input_buffer, POST_DATA) != 0) {
fprintf(stdout, "FAILED (data)\n");
- fprintf(stdout, "Got :%s\n", EVBUFFER_DATA(req->input_buffer));
+ fprintf(stdout, "Got :%s\n", evbuffer_pullup(req->input_buffer,-1));
fprintf(stdout, "Want:%s\n", POST_DATA);
exit(1);
}
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) {
+ if (evbuffer_get_length(req->input_buffer) != strlen(what)) {
fprintf(stderr, "FAILED (length %lu vs %lu)\n",
- (unsigned long)EVBUFFER_LENGTH(req->input_buffer), (unsigned long)strlen(what));
+ (unsigned long)evbuffer_get_length(req->input_buffer), (unsigned long)strlen(what));
exit(1);
}
- if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) {
+ if (evbuffer_datacmp(req->input_buffer, what) != 0) {
fprintf(stderr, "FAILED (data)\n");
exit(1);
}
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != strlen(PUT_DATA)) {
+ if (evbuffer_get_length(req->input_buffer) != strlen(PUT_DATA)) {
fprintf(stdout, "FAILED (length: %lu vs %lu)\n",
- (unsigned long)EVBUFFER_LENGTH(req->input_buffer), (unsigned long)strlen(PUT_DATA));
+ (unsigned long)evbuffer_get_length(req->input_buffer), (unsigned long)strlen(PUT_DATA));
exit(1);
}
- if (memcmp(EVBUFFER_DATA(req->input_buffer), PUT_DATA,
- strlen(PUT_DATA))) {
+ if (evbuffer_datacmp(req->input_buffer, PUT_DATA) != 0) {
fprintf(stdout, "FAILED (data)\n");
- fprintf(stdout, "Got :%s\n", EVBUFFER_DATA(req->input_buffer));
+ fprintf(stdout, "Got :%s\n", evbuffer_pullup(req->input_buffer,-1));
fprintf(stdout, "Want:%s\n", PUT_DATA);
exit(1);
}
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) {
+ if (evbuffer_get_length(req->input_buffer) != strlen(what)) {
fprintf(stderr, "FAILED (length %lu vs %lu)\n",
- (unsigned long)EVBUFFER_LENGTH(req->input_buffer), (unsigned long)strlen(what));
+ (unsigned long)evbuffer_get_length(req->input_buffer), (unsigned long)strlen(what));
exit(1);
}
- if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) {
+
+ if (evbuffer_datacmp(req->input_buffer, what) != 0) {
fprintf(stderr, "FAILED (data)\n");
exit(1);
}
http_failure_readcb(struct bufferevent *bev, void *arg)
{
const char *what = "400 Bad Request";
- if (evbuffer_find(bufferevent_get_input(bev),
- (const unsigned char*) what, strlen(what)) != NULL) {
+ if (evbuffer_contains(bufferevent_get_input(bev), what)) {
test_ok = 2;
bufferevent_disable(bev, EV_READ);
event_loopexit(NULL);
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_failure_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_failure_readcb, http_writecb,
http_errorcb, NULL);
http_request = "illegal request\r\n";
tv.tv_sec = 3; /* longer than the http time out */
/* launch a new request on the persistent connection in 3 seconds */
- event_once(-1, EV_TIMEOUT, close_detect_launch, evcon, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, close_detect_launch, evcon, &tv);
end:
;
}
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_readcb, http_writecb,
http_errorcb, NULL);
bufferevent_base_set(base, bev);
static void
http_incomplete_errorcb(struct bufferevent *bev, short what, void *arg)
{
- if (what == (EVBUFFER_READ | EVBUFFER_EOF))
+ if (what == (BEV_EVENT_READING|BEV_EVENT_EOF))
test_ok++;
else
test_ok = -2;
/* terminate the write side to simulate EOF */
shutdown(fd, SHUT_WR);
}
- if (EVBUFFER_LENGTH(bufferevent_get_output(bev)) == 0) {
+ if (evbuffer_get_length(bufferevent_get_output(bev)) == 0) {
/* enable reading of the reply */
bufferevent_enable(bev, EV_READ);
test_ok++;
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev,
http_incomplete_readcb, http_incomplete_writecb,
http_incomplete_errorcb, use_timeout ? NULL : &fd);
test_ok = -1;
- if ((what & EVBUFFER_EOF) != 0) {
+ if ((what & BEV_EVENT_EOF) != 0) {
struct evhttp_request *req = evhttp_request_new(NULL, NULL);
const char *header;
enum message_read_status done;
static void
http_chunked_writecb(struct bufferevent *bev, void *arg)
{
- if (EVBUFFER_LENGTH(bufferevent_get_output(bev)) == 0) {
+ if (evbuffer_get_length(bufferevent_get_output(bev)) == 0) {
/* enable reading of the reply */
bufferevent_enable(bev, EV_READ);
test_ok++;
exit(1);
}
- if (EVBUFFER_LENGTH(req->input_buffer) != 13 + 18 + 8) {
+ if (evbuffer_get_length(req->input_buffer) != 13 + 18 + 8) {
fprintf(stderr, "FAILED\n");
exit(1);
}
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev,
http_chunked_readcb, http_chunked_writecb,
http_chunked_errorcb, NULL);
if (evbuffer_get_length(reply) != expected_len) {
TT_DIE(("reply length %lu; expected %lu; FAILED (%s)\n",
- (unsigned long)EVBUFFER_LENGTH(reply),
+ (unsigned long)evbuffer_get_length(reply),
(unsigned long)expected_len,
(char*)evbuffer_pullup(reply, -1)));
}
tt_abort_msg("(content type)\n");
}
- tt_uint_op(EVBUFFER_LENGTH(req->input_buffer), ==, 0);
+ tt_uint_op(evbuffer_get_length(req->input_buffer), ==, 0);
test_ok = 1;
end:
*/
evutil_timerclear(&tv);
tv.tv_sec = 1;
- event_once(-1, EV_TIMEOUT, http_make_web_server, &port, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, http_make_web_server, &port, &tv);
evutil_gettimeofday(&tv_start, NULL);
event_dispatch();
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, http_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, http_readcb, http_writecb,
http_errorcb, NULL);
http_start_request =
tv.tv_sec = 0;
tv.tv_usec = 3000;
- event_once(-1, EV_TIMEOUT, terminate_chunked_trickle_cb, arg, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, terminate_chunked_trickle_cb, arg, &tv);
}
static void
tv.tv_sec = 0;
tv.tv_usec = 3000;
- event_once(-1, EV_TIMEOUT, terminate_chunked_trickle_cb, arg, &tv);
+ event_base_once(NULL, -1, EV_TIMEOUT, terminate_chunked_trickle_cb, arg, &tv);
}
static void
fd = http_connect("127.0.0.1", port);
/* Stupid thing to send a request */
- bev = bufferevent_new(fd, terminate_readcb, http_writecb,
+ bev = bufferevent_socket_new(NULL, fd, 0);
+ bufferevent_setcb(bev, terminate_readcb, http_writecb,
http_errorcb, NULL);
terminate_state.fd = fd;
bufferevent_write(bev, http_request, strlen(http_request));
evutil_timerclear(&tv);
tv.tv_usec = 10000;
- event_once(-1, EV_TIMEOUT, terminate_chunked_client, &terminate_state,
+ event_base_once(NULL, -1, EV_TIMEOUT, terminate_chunked_client, &terminate_state,
&tv);
event_dispatch();