static void send_chunk(evhtp_request_t * req, const char* data, const char* hdrfmt, size_t len) { evbuf_t * buf = evbuffer_new(); evbuf_t * output; /* Add the data to the output */ evbuffer_add(buf, data, strlen(data)); output = bufferevent_get_output(req->conn->bev); evbuffer_add_printf(output, hdrfmt, len); /* Send the buffer */ evhtp_send_reply_body(req, buf); evbuffer_add(output, "\r\n", 2); /* Drain the buffer and free it */ evbuffer_drain(buf, -1); evbuffer_free(buf); }
void evhtp_send_reply_chunk(evhtp_request_t * request, evbuf_t * buf) { evbuf_t * output; output = bufferevent_get_output(request->conn->bev); if (evbuffer_get_length(buf) == 0) { return; } if (request->chunked) { evbuffer_add_printf(output, "%x\r\n", (unsigned)evbuffer_get_length(buf)); } evhtp_send_reply_body(request, buf); if (request->chunked) { evbuffer_add(output, "\r\n", 2); } bufferevent_flush(request->conn->bev, EV_WRITE, BEV_FLUSH); }