summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-11-08 20:21:07 +0100
committerFelix Fietkau <nbd@openwrt.org>2015-11-08 20:21:07 +0100
commit23b521b8840c959b1bb60b12b3c5c2cf5e00d649 (patch)
tree1fb89dd46de43839fb82a59b0e2a5b21d952c42f
parentc86ae76cad0f94be49fdc78699784d105f58d9a1 (diff)
downloaduhttpd2-23b521b8840c959b1bb60b12b3c5c2cf5e00d649.tar.gz
handler: add support for overriding redirect status code + message
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r--handler.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/handler.c b/handler.c
index 6ec18af..a578a32 100644
--- a/handler.c
+++ b/handler.c
@@ -41,19 +41,29 @@ static void
handle_redirect(struct json_script_ctx *ctx, struct blob_attr *data)
{
struct client *cl = cur_client;
- static struct blobmsg_policy policy = {
- .type = BLOBMSG_TYPE_STRING,
+ static struct blobmsg_policy policy[3] = {
+ { .type = BLOBMSG_TYPE_STRING },
+ { .type = BLOBMSG_TYPE_INT32 },
+ { .type = BLOBMSG_TYPE_STRING },
};
- struct blob_attr *tb;
+ struct blob_attr *tb[3];
+ const char *status = "Found";
+ int code = 302;
- blobmsg_parse_array(&policy, 1, &tb, blobmsg_data(data), blobmsg_data_len(data));
- if (!tb)
+ blobmsg_parse_array(policy, ARRAY_SIZE(policy), tb, blobmsg_data(data), blobmsg_data_len(data));
+ if (!tb[0])
return;
- uh_http_header(cl, 302, "Found");
+ if (tb[1]) {
+ code = blobmsg_get_u32(tb[1]);
+ if (tb[2])
+ status = blobmsg_get_string(tb[2]);
+ }
+
+ uh_http_header(cl, code, status);
ustream_printf(cl->us, "Content-Length: 0\r\n");
ustream_printf(cl->us, "Location: %s\r\n\r\n",
- blobmsg_get_string(tb));
+ blobmsg_get_string(tb[0]));
uh_request_done(cl);
*cur_url = NULL;