From 521ae900cbed7a0243e8413c9e2c6d168b6f8326 Mon Sep 17 00:00:00 2001 From: Arnaud de Turckheim Date: Wed, 4 Dec 2024 14:54:36 +0100 Subject: [PATCH] upipe_http_src: handle all redirections --- lib/upipe-modules/upipe_http_source.c | 24 ++++++------------------ tests/upipe_http_src_test.c | 6 +++++- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/lib/upipe-modules/upipe_http_source.c b/lib/upipe-modules/upipe_http_source.c index 7377d7026..3a585b73a 100644 --- a/lib/upipe-modules/upipe_http_source.c +++ b/lib/upipe-modules/upipe_http_source.c @@ -461,19 +461,10 @@ static int upipe_http_src_status_cb(http_parser *parser) upipe_dbg_va(upipe, "reply http code %i", parser->status_code); - switch (parser->status_code) { - /* success */ - case 200: - /* partial content */ - case 206: - /* found */ - case 302: - break; - default: - upipe_http_src_throw_error(upipe, parser->status_code); - return -1; - } - return 0; + if (parser->status_code < 400) + return 0; + upipe_http_src_throw_error(upipe, parser->status_code); + return -1; } static int upipe_http_src_output_data(struct upipe *upipe, @@ -545,12 +536,9 @@ static int upipe_http_src_message_complete(http_parser *parser) upipe_http_src_close(upipe); upipe_throw_source_end(upipe); - switch (status_code) { - /* redirect */ - case 302: + if (status_code >= 300 && status_code < 400 && location != NULL) + /* redirect */ upipe_http_src_throw_redirect(upipe, location); - break; - } free(location); diff --git a/tests/upipe_http_src_test.c b/tests/upipe_http_src_test.c index cd3031d8b..ccba6a829 100644 --- a/tests/upipe_http_src_test.c +++ b/tests/upipe_http_src_test.c @@ -48,7 +48,7 @@ #include "upipe/upipe.h" #include "upipe-modules/upipe_http_source.h" #include "upipe-modules/upipe_null.h" - +#include "upipe-modules/uprobe_http_redirect.h" #include #include #include @@ -72,6 +72,8 @@ static int catch(struct uprobe *uprobe, struct upipe *upipe, case UPROBE_READY: case UPROBE_DEAD: case UPROBE_SOURCE_END: + case UPROBE_NEW_FLOW_DEF: + case UPROBE_HTTP_SRC_REDIRECT: break; } return UBASE_ERR_NONE; @@ -109,6 +111,8 @@ int main(int argc, char *argv[]) assert(logger != NULL); logger = uprobe_upump_mgr_alloc(logger, upump_mgr); assert(logger != NULL); + logger = uprobe_http_redir_alloc(logger); + assert(logger); logger = uprobe_ubuf_mem_alloc(logger, umem_mgr, UBUF_POOL_DEPTH, UBUF_POOL_DEPTH); assert(logger != NULL);