download checksum file directly from server

Remove assumption on small file to shortcircuit the redirect logic.
master
tiptorrent development team 2021-09-27 11:27:30 +02:00
parent 6a81079dc1
commit 6010fe62fd
3 changed files with 12 additions and 7 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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++;