From 16cc92dab608a3c83d9c1baa4dbdca307da12c9c Mon Sep 17 00:00:00 2001 From: tiptorrent development team Date: Fri, 17 Sep 2021 16:45:52 +0200 Subject: allow to report that a client allows redirection with POST method If clients sends POST /test, it notifies the server that it is available for receive redirections from file 'test'. Test it with wget: wget --post-data '' http://localhost:9999/TEST -O /dev/null --- src/handler.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/handler.c') diff --git a/src/handler.c b/src/handler.c index 5bcef6b..14abe9b 100644 --- a/src/handler.c +++ b/src/handler.c @@ -74,6 +74,10 @@ int tip_client_state_process_payload(struct tip_client *cli) cli->method = TIP_METHOD_HEAD; if (sscanf(cli->buf, "HEAD %31s HTTP/1.1", uri) != 1) return tip_client_method_not_found(cli); + } else if (!strncmp(cli->buf, "POST", strlen("POST"))) { + cli->method = TIP_METHOD_POST; + if (sscanf(cli->buf, "POST %31s HTTP/1.1", uri) != 1) + return tip_client_method_not_found(cli); } else { return tip_client_method_not_found(cli); } @@ -102,7 +106,16 @@ int tip_client_state_process_payload(struct tip_client *cli) cli->path = strdup(path); cli->size = st.st_size; - if (cli->method == TIP_METHOD_HEAD) { + switch (cli->method) { + case TIP_METHOD_GET: + break; + case TIP_METHOD_HEAD: + cli->state = TIP_CLIENT_PROCESSING_REQUEST_2; + return 0; + case TIP_METHOD_POST: + cli->allow_redirect = true; + tip_client_redirect_create(cli); + tip_client_activate_pending(); cli->state = TIP_CLIENT_PROCESSING_REQUEST_2; return 0; } @@ -143,6 +156,9 @@ int tip_client_state_process_payload_reply(struct tip_client *cli) if (fd < 0) return tip_client_file_not_found(cli); + if (cli->method == TIP_METHOD_POST) + cli->size = 0; + snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\r\nContent-Length: %lu\r\n\r\n", cli->size); @@ -155,6 +171,7 @@ int tip_client_state_process_payload_reply(struct tip_client *cli) cli->state = TIP_CLIENT_PROCESSING_REQUEST_3; break; case TIP_METHOD_HEAD: + case TIP_METHOD_POST: /* close connection. */ return 1; } -- cgit v1.2.3-18-g5258