Skip to content

Commit 521ae90

Browse files
quariumcmassiot
authored andcommitted
upipe_http_src: handle all redirections
1 parent 28f6c4c commit 521ae90

File tree

2 files changed

+11
-19
lines changed

2 files changed

+11
-19
lines changed

lib/upipe-modules/upipe_http_source.c

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -461,19 +461,10 @@ static int upipe_http_src_status_cb(http_parser *parser)
461461

462462
upipe_dbg_va(upipe, "reply http code %i", parser->status_code);
463463

464-
switch (parser->status_code) {
465-
/* success */
466-
case 200:
467-
/* partial content */
468-
case 206:
469-
/* found */
470-
case 302:
471-
break;
472-
default:
473-
upipe_http_src_throw_error(upipe, parser->status_code);
474-
return -1;
475-
}
476-
return 0;
464+
if (parser->status_code < 400)
465+
return 0;
466+
upipe_http_src_throw_error(upipe, parser->status_code);
467+
return -1;
477468
}
478469

479470
static int upipe_http_src_output_data(struct upipe *upipe,
@@ -545,12 +536,9 @@ static int upipe_http_src_message_complete(http_parser *parser)
545536
upipe_http_src_close(upipe);
546537
upipe_throw_source_end(upipe);
547538

548-
switch (status_code) {
549-
/* redirect */
550-
case 302:
539+
if (status_code >= 300 && status_code < 400 && location != NULL)
540+
/* redirect */
551541
upipe_http_src_throw_redirect(upipe, location);
552-
break;
553-
}
554542

555543
free(location);
556544

tests/upipe_http_src_test.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
#include "upipe/upipe.h"
4949
#include "upipe-modules/upipe_http_source.h"
5050
#include "upipe-modules/upipe_null.h"
51-
51+
#include "upipe-modules/uprobe_http_redirect.h"
5252
#include <stdlib.h>
5353
#include <stdio.h>
5454
#include <assert.h>
@@ -72,6 +72,8 @@ static int catch(struct uprobe *uprobe, struct upipe *upipe,
7272
case UPROBE_READY:
7373
case UPROBE_DEAD:
7474
case UPROBE_SOURCE_END:
75+
case UPROBE_NEW_FLOW_DEF:
76+
case UPROBE_HTTP_SRC_REDIRECT:
7577
break;
7678
}
7779
return UBASE_ERR_NONE;
@@ -109,6 +111,8 @@ int main(int argc, char *argv[])
109111
assert(logger != NULL);
110112
logger = uprobe_upump_mgr_alloc(logger, upump_mgr);
111113
assert(logger != NULL);
114+
logger = uprobe_http_redir_alloc(logger);
115+
assert(logger);
112116
logger = uprobe_ubuf_mem_alloc(logger, umem_mgr, UBUF_POOL_DEPTH,
113117
UBUF_POOL_DEPTH);
114118
assert(logger != NULL);

0 commit comments

Comments
 (0)