diff options
author | tiptorrent development team <tiptorrent@soleta.eu> | 2021-09-27 11:27:30 +0200 |
---|---|---|
committer | tiptorrent development team <tiptorrent@soleta.eu> | 2021-09-29 15:49:21 +0200 |
commit | 6010fe62fda49ffb6a3fa7038b0c2feb61767263 (patch) | |
tree | 6551b45191468e49585d4efdb8b623bf9748db19 | |
parent | 6a81079dc1a9d4deea7d8faa787baed2ffe80556 (diff) |
download checksum file directly from server
Remove assumption on small file to shortcircuit the redirect logic.
-rw-r--r-- | src/core.c | 4 | ||||
-rw-r--r-- | src/core.h | 7 | ||||
-rw-r--r-- | src/handler.c | 8 |
3 files changed, 12 insertions, 7 deletions
@@ -49,7 +49,7 @@ static void tip_client_release(struct ev_loop *loop, struct tip_client *cli) free((void *)cli->path); if (cli->method == TIP_METHOD_GET) { - if (tip_client_large_file(cli)) { + if (!tip_client_checksum_file(cli)) { num_clients--; if (!cli->redirect) tip_client_activate_pending(false); @@ -192,7 +192,7 @@ static void tip_client_read_cb(struct ev_loop *loop, struct ev_io *io, int event } return; shutdown: - if (cli->size > FILE_SIZE_THRESHOLD) + if (!tip_client_checksum_file(cli)) tip_client_redirect_create(cli); close: tip_client_release(loop, cli); @@ -15,8 +15,6 @@ extern const char *root; extern int max_clients; extern int num_clients; extern bool redirect; -/* max_client logic only applies for files larger than 1024 bytes. */ -#define FILE_SIZE_THRESHOLD 1024ULL enum tip_client_state { TIP_CLIENT_PENDING = 0, @@ -50,6 +48,7 @@ struct tip_client { enum tip_http_method method; const char *uri; const char *path; + bool checksum; uint32_t chunk; off_t size; off_t left; @@ -67,9 +66,9 @@ static inline int tip_client_socket(const struct tip_client *cli) return cli->io.fd; } -static inline bool tip_client_large_file(const struct tip_client *cli) +static inline bool tip_client_checksum_file(const struct tip_client *cli) { - return cli->size > FILE_SIZE_THRESHOLD; + return cli->checksum; } void tip_client_pending(struct tip_client *cli); diff --git a/src/handler.c b/src/handler.c index 3f15e4f..97f54b5 100644 --- a/src/handler.c +++ b/src/handler.c @@ -106,6 +106,12 @@ int tip_client_state_process_payload(struct tip_client *cli) if (!redirect) break; + /* skip checksum files. */ + if (strstr(uri, ".full.sum")) { + cli->checksum = true; + break; + } + /* get chunk number from file extension, e.g. FILE.0 */ chunk = strchr(uri, '.'); if (chunk) { @@ -150,7 +156,7 @@ int tip_client_state_process_payload(struct tip_client *cli) return 0; } - if (tip_client_large_file(cli)) { + if (!tip_client_checksum_file(cli)) { cli->allow_redirect = allow_redirect; num_clients++; |