diff options
-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); |