diff options
author | tiptorrent development team <tiptorrent@soleta.eu> | 2022-02-08 11:58:53 +0100 |
---|---|---|
committer | tiptorrent development team <tiptorrent@soleta.eu> | 2022-02-08 12:09:39 +0100 |
commit | f6f3984be782e6c42a320081e00533fa30b45140 (patch) | |
tree | f7108649edf3d0f4f59793c06c681b6b966462c8 /src | |
parent | 28d7a25a89c458fcb3851dda2a97fbbc97acc3d7 (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/core.c | 6 | ||||
-rw-r--r-- | src/core.h | 2 | ||||
-rw-r--r-- | src/main.c | 16 |
3 files changed, 16 insertions, 8 deletions
@@ -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); @@ -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, @@ -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); |