feat: connection: new api: traverse_headers
Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>main^2
parent
83f888096c
commit
7f5b41317b
|
@ -324,6 +324,29 @@ static struct uh_str conn_get_header(struct uh_connection *conn, const char *nam
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void conn_traverse_headers(struct uh_connection *conn,
|
||||||
|
bool (*cb)(const struct uh_str name, const struct uh_str value, void *arg), void *arg)
|
||||||
|
{
|
||||||
|
struct uh_connection_internal *conni = (struct uh_connection_internal *)conn;
|
||||||
|
struct uh_request *req = &conni->req;
|
||||||
|
struct uh_str name, value;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < UHTTPD_MAX_HEADER_NUM; i++) {
|
||||||
|
if (req->headers[i].field.offset == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
name.p = O2D(conni, req->headers[i].field.offset);
|
||||||
|
name.len = req->headers[i].field.length;
|
||||||
|
|
||||||
|
value.p = O2D(conni, req->headers[i].value.offset);
|
||||||
|
value.len = req->headers[i].value.length;
|
||||||
|
|
||||||
|
if (!cb(name, value, arg))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static uint64_t conn_get_content_length(struct uh_connection *conn)
|
static uint64_t conn_get_content_length(struct uh_connection *conn)
|
||||||
{
|
{
|
||||||
struct uh_connection_internal *conni = (struct uh_connection_internal *)conn;
|
struct uh_connection_internal *conni = (struct uh_connection_internal *)conn;
|
||||||
|
@ -804,6 +827,7 @@ static void conn_init_cb(struct uh_connection *conn)
|
||||||
conn->get_path = conn_get_path;
|
conn->get_path = conn_get_path;
|
||||||
conn->get_query = conn_get_query;
|
conn->get_query = conn_get_query;
|
||||||
conn->get_header = conn_get_header;
|
conn->get_header = conn_get_header;
|
||||||
|
conn->traverse_headers = conn_traverse_headers;
|
||||||
conn->get_content_length = conn_get_content_length;
|
conn->get_content_length = conn_get_content_length;
|
||||||
conn->get_body = conn_get_body;
|
conn->get_body = conn_get_body;
|
||||||
conn->extract_body = conn_extract_body;
|
conn->extract_body = conn_extract_body;
|
||||||
|
|
|
@ -75,6 +75,8 @@ struct uh_connection {
|
||||||
struct uh_str (*get_path)(struct uh_connection *conn);
|
struct uh_str (*get_path)(struct uh_connection *conn);
|
||||||
struct uh_str (*get_query)(struct uh_connection *conn);
|
struct uh_str (*get_query)(struct uh_connection *conn);
|
||||||
struct uh_str (*get_header)(struct uh_connection *conn, const char *name);
|
struct uh_str (*get_header)(struct uh_connection *conn, const char *name);
|
||||||
|
void (*traverse_headers)(struct uh_connection *conn,
|
||||||
|
bool (*cb)(const struct uh_str name, const struct uh_str value, void *arg), void *arg);
|
||||||
uint64_t (*get_content_length)(struct uh_connection *conn);
|
uint64_t (*get_content_length)(struct uh_connection *conn);
|
||||||
struct uh_str (*get_body)(struct uh_connection *conn);
|
struct uh_str (*get_body)(struct uh_connection *conn);
|
||||||
/* The remain body data will be discurd after this function called */
|
/* The remain body data will be discurd after this function called */
|
||||||
|
|
Loading…
Reference in New Issue