diff options
author | Felix Fietkau <nbd@openwrt.org> | 2015-11-08 20:21:07 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2015-11-08 20:21:07 +0100 |
commit | 23b521b8840c959b1bb60b12b3c5c2cf5e00d649 (patch) | |
tree | 1fb89dd46de43839fb82a59b0e2a5b21d952c42f | |
parent | c86ae76cad0f94be49fdc78699784d105f58d9a1 (diff) |
handler: add support for overriding redirect status code + message
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r-- | handler.c | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -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; |