commit - 7d2a2ace4dcbea184a9363adac6ecb9731ada286
commit + b07d2757b848245032749fb16d7a4ab6f360d7f4
blob - ed3abfee0fe463f4fc956de8d32196632a3bb4a3
blob + 6528084bfa930cd2ef30613e9c636fd130fb0de7
--- net.c
+++ net.c
static void
net_read(struct bufferevent *bev, void *d)
{
+ static char buf[4096];
struct req *req = d;
struct evbuffer *src = EVBUFFER_INPUT(bev);
- uint8_t *data;
- size_t len, chunk;
+ size_t len;
int r;
char *header;
req->done_header = 1;
if (r == 0)
goto err;
- else if (r < 20 || r >= 30)
+ else if (r < 20 || r >= 30) {
close_conn(0, 0, req);
- return;
+ return;
+ }
}
-
- if ((len = EVBUFFER_LENGTH(src)) == 0)
- return;
- data = EVBUFFER_DATA(src);
/*
* Split data into chunks before sending. imsg can't handle
* message that are "too big".
*/
- while (len != 0) {
- chunk = MIN(len, 4096);
- net_send_ui(IMSG_BUF, req->id, data, chunk);
- data += chunk;
- len -= chunk;
+ for (;;) {
+ if ((len = bufferevent_read(bev, buf, sizeof(buf))) == 0)
+ break;
+ net_send_ui(IMSG_BUF, req->id, buf, len);
}
-
- evbuffer_drain(src, EVBUFFER_LENGTH(src));
return;
err: