diff options
author | Felix Fietkau <nbd@nbd.name> | 2016-06-16 18:26:18 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2016-06-16 18:26:18 +0200 |
commit | 242401f544df790b1df7d12b3be5f5b429da091c (patch) | |
tree | 5b35d49454c21740bede1a4ebe05d3d889d4758b /client.c | |
parent | fe01ef3f52adae9da38ef47926cd50974af5d6b7 (diff) |
uhttpd: add support for adding arbitrary headers via handler scripts
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -45,8 +45,10 @@ const char * const http_methods[] = { void uh_http_header(struct client *cl, int code, const char *summary) { struct http_request *r = &cl->request; + struct blob_attr *cur; const char *enc = "Transfer-Encoding: chunked\r\n"; const char *conn; + int rem; cl->http_code = code; @@ -64,6 +66,10 @@ void uh_http_header(struct client *cl, int code, const char *summary) if (!r->connection_close) ustream_printf(cl->us, "Keep-Alive: timeout=%d\r\n", conf.http_keepalive); + + blobmsg_for_each_attr(cur, cl->hdr_response.head, rem) + ustream_printf(cl->us, "%s: %s\r\n", blobmsg_name(cur), + blobmsg_get_string(cur)); } static void uh_connection_close(struct client *cl) @@ -114,6 +120,7 @@ void uh_request_done(struct client *cl) { uh_chunk_eof(cl); uh_dispatch_done(cl); + blob_buf_init(&cl->hdr_response, 0); memset(&cl->dispatch, 0, sizeof(cl->dispatch)); if (!conf.http_keepalive || cl->request.connection_close) @@ -530,6 +537,7 @@ static void client_close(struct client *cl) close(cl->sfd.fd.fd); list_del(&cl->list); blob_buf_free(&cl->hdr); + blob_buf_free(&cl->hdr_response); free(cl); uh_unblock_listeners(); |