From f6f3984be782e6c42a320081e00533fa30b45140 Mon Sep 17 00:00:00 2001 From: tiptorrent development team Date: Tue, 8 Feb 2022 11:58:53 +0100 Subject: allow to specify maximum number of redirections with -r For example, -r/--redirect 3 specifies that the maximum number of redirections per client is 3. if -r/--redirect is specified with no argument, then the argument specified by -n/--max-clients is used. If -n/--max-clients is not specified and -r/--redirect is specifed with no argument, then default value is 3. --- src/core.c | 6 +++--- src/core.h | 2 +- src/main.c | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/core.c b/src/core.c index 94c0390..986aa4f 100644 --- a/src/core.c +++ b/src/core.c @@ -222,7 +222,7 @@ int tip_client_redirect_create(const struct tip_client *cli) struct tip_client_redirect *redir; bool found = false; - if (!redirect || !cli->allow_redirect) + if (!max_redirect || !cli->allow_redirect) return 0; list_for_each_entry(redir, &client_redirect_list, list) { @@ -247,7 +247,7 @@ int tip_client_redirect_create(const struct tip_client *cli) redir->addr = cli->addr; redir->addr.sin_port = htons(9999); redir->uri = strdup(cli->uri); - redir->users = max_clients; + redir->users = max_redirect; list_add_tail(&redir->list, &client_redirect_list); ev_timer_init(&redir->timer, tip_client_redirect_timer_cb, TIP_CLIENT_REDIRECT_TIMEOUT, 0.); @@ -380,7 +380,7 @@ bool tip_client_redirect(struct tip_client *cli) struct tip_client_redirect *redir, *next; char addr[INET_ADDRSTRLEN + 1]; - if (!redirect) + if (!max_redirect) return false; inet_ntop(AF_INET, &cli->addr.sin_addr, addr, INET_ADDRSTRLEN); diff --git a/src/core.h b/src/core.h index a8d8736..c4d6379 100644 --- a/src/core.h +++ b/src/core.h @@ -13,8 +13,8 @@ extern const char *root; #define DEFAULT_MAX_CLIENTS 3 extern int max_clients; +extern int max_redirect; extern int num_clients; -extern bool redirect; enum tip_client_state { TIP_CLIENT_PENDING = 0, diff --git a/src/main.c b/src/main.c index 5ce629a..4da1b8e 100644 --- a/src/main.c +++ b/src/main.c @@ -29,11 +29,11 @@ int max_clients = DEFAULT_MAX_CLIENTS; const char *root = "."; -bool redirect; +int max_redirect = 0; static struct option tip_repo_opts[] = { { "max-clients", 1, 0, 'n' }, - { "redirect", 0, 0, 'r' }, + { "redirect", 2, 0, 'r' }, { "root", 1, 0, 't' }, { "daemon", 0, 0, 'd' }, { NULL }, @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); while (1) { - val = getopt_long(argc, argv, "n:rd", tip_repo_opts, NULL); + val = getopt_long(argc, argv, "n:r::d", tip_repo_opts, NULL); if (val < 0) break; @@ -67,7 +67,15 @@ int main(int argc, char *argv[]) } break; case 'r': - redirect = true; + if (optarg) { + max_redirect = atoi(optarg); + if (max_redirect <= 0) { + syslog(LOG_ERR, "Invalid number for redirections"); + return EXIT_FAILURE; + } + } else { + max_redirect = max_clients; + } break; case 't': root = strdup(optarg); -- cgit v1.2.3-18-g5258