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.master
parent
28d7a25a89
commit
f6f3984be7
|
@ -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,
|
||||
|
|
16
src/main.c
16
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);
|
||||
|
|
Loading…
Reference in New Issue