mirror of
https://github.com/libevent/libevent.git
synced 2025-01-20 05:02:55 +08:00
Merge remote-tracking branch 'rbalint/from-forked-daapd'
This commit is contained in:
commit
471fbe3baf
25
http.c
25
http.c
@ -2150,6 +2150,14 @@ evhttp_read_header(struct evhttp_connection *evcon,
|
|||||||
/* Disable reading for now */
|
/* Disable reading for now */
|
||||||
bufferevent_disable(evcon->bufev, EV_READ);
|
bufferevent_disable(evcon->bufev, EV_READ);
|
||||||
|
|
||||||
|
/* Callback can shut down connection with negative return value */
|
||||||
|
if (req->header_cb != NULL) {
|
||||||
|
if ((*req->header_cb)(req, req->cb_arg) < 0) {
|
||||||
|
evhttp_connection_fail_(evcon, EVREQ_HTTP_EOF);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Done reading headers, do the real work */
|
/* Done reading headers, do the real work */
|
||||||
switch (req->kind) {
|
switch (req->kind) {
|
||||||
case EVHTTP_REQUEST:
|
case EVHTTP_REQUEST:
|
||||||
@ -2658,7 +2666,8 @@ evhttp_send_reply_start(struct evhttp_request *req, int code,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)
|
evhttp_send_reply_chunk_with_cb(struct evhttp_request *req, struct evbuffer *databuf,
|
||||||
|
void (*cb)(struct evhttp_connection *, void *), void *arg)
|
||||||
{
|
{
|
||||||
struct evhttp_connection *evcon = req->evcon;
|
struct evhttp_connection *evcon = req->evcon;
|
||||||
struct evbuffer *output;
|
struct evbuffer *output;
|
||||||
@ -2680,9 +2689,14 @@ evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)
|
|||||||
if (req->chunked) {
|
if (req->chunked) {
|
||||||
evbuffer_add(output, "\r\n", 2);
|
evbuffer_add(output, "\r\n", 2);
|
||||||
}
|
}
|
||||||
evhttp_write_buffer(evcon, NULL, NULL);
|
evhttp_write_buffer(evcon, cb, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)
|
||||||
|
{
|
||||||
|
evhttp_send_reply_chunk_with_cb(req, databuf, NULL, NULL);
|
||||||
|
}
|
||||||
void
|
void
|
||||||
evhttp_send_reply_end(struct evhttp_request *req)
|
evhttp_send_reply_end(struct evhttp_request *req)
|
||||||
{
|
{
|
||||||
@ -3812,6 +3826,13 @@ evhttp_request_set_chunked_cb(struct evhttp_request *req,
|
|||||||
req->chunk_cb = cb;
|
req->chunk_cb = cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evhttp_request_set_header_cb(struct evhttp_request *req,
|
||||||
|
int (*cb)(struct evhttp_request *, void *))
|
||||||
|
{
|
||||||
|
req->header_cb = cb;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evhttp_request_set_error_cb(struct evhttp_request *req,
|
evhttp_request_set_error_cb(struct evhttp_request *req,
|
||||||
void (*cb)(enum evhttp_request_error, void *))
|
void (*cb)(enum evhttp_request_error, void *))
|
||||||
|
@ -38,6 +38,7 @@ extern "C" {
|
|||||||
struct evbuffer;
|
struct evbuffer;
|
||||||
struct event_base;
|
struct event_base;
|
||||||
struct bufferevent;
|
struct bufferevent;
|
||||||
|
struct evhttp_connection;
|
||||||
|
|
||||||
/** @file event2/http.h
|
/** @file event2/http.h
|
||||||
*
|
*
|
||||||
@ -407,6 +408,23 @@ void evhttp_send_reply_start(struct evhttp_request *req, int code,
|
|||||||
*/
|
*/
|
||||||
void evhttp_send_reply_chunk(struct evhttp_request *req,
|
void evhttp_send_reply_chunk(struct evhttp_request *req,
|
||||||
struct evbuffer *databuf);
|
struct evbuffer *databuf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Send another data chunk as part of an ongoing chunked reply.
|
||||||
|
|
||||||
|
The reply chunk consists of the data in databuf. After calling
|
||||||
|
evhttp_send_reply_chunk() databuf will be empty, but the buffer is
|
||||||
|
still owned by the caller and needs to be deallocated by the caller
|
||||||
|
if necessary.
|
||||||
|
|
||||||
|
@param req a request object
|
||||||
|
@param databuf the data chunk to send as part of the reply.
|
||||||
|
@param cb callback funcion
|
||||||
|
@param call back's argument.
|
||||||
|
*/
|
||||||
|
void evhttp_send_reply_chunk_with_cb(struct evhttp_request *, struct evbuffer *,
|
||||||
|
void (*cb)(struct evhttp_connection *, void *), void *arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Complete a chunked reply, freeing the request as appropriate.
|
Complete a chunked reply, freeing the request as appropriate.
|
||||||
|
|
||||||
@ -486,6 +504,15 @@ struct evhttp_request *evhttp_request_new(
|
|||||||
void evhttp_request_set_chunked_cb(struct evhttp_request *,
|
void evhttp_request_set_chunked_cb(struct evhttp_request *,
|
||||||
void (*cb)(struct evhttp_request *, void *));
|
void (*cb)(struct evhttp_request *, void *));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register callback for additional parsing of request headers.
|
||||||
|
* @param cb will be called after receiving and parsing the full header.
|
||||||
|
* It allows analyzing the header and possibly closing the connection
|
||||||
|
* by returning a value < 0.
|
||||||
|
*/
|
||||||
|
void evhttp_request_set_header_cb(struct evhttp_request *,
|
||||||
|
int (*cb)(struct evhttp_request *, void *));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The different error types supported by evhttp
|
* The different error types supported by evhttp
|
||||||
*
|
*
|
||||||
|
@ -120,6 +120,14 @@ struct {
|
|||||||
* the regular callback.
|
* the regular callback.
|
||||||
*/
|
*/
|
||||||
void (*chunk_cb)(struct evhttp_request *, void *);
|
void (*chunk_cb)(struct evhttp_request *, void *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Callback added for forked-daapd so they can collect ICY
|
||||||
|
* (shoutcast) metadata from the http header. If return
|
||||||
|
* int is negative the connection will be closed.
|
||||||
|
*/
|
||||||
|
int (*header_cb)(struct evhttp_request *, void *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Error callback - called when error is occured.
|
* Error callback - called when error is occured.
|
||||||
* @see evhttp_request_error for error types.
|
* @see evhttp_request_error for error types.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user