summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authortiptorrent development team <tiptorrent@soleta.eu>2022-02-08 11:58:53 +0100
committertiptorrent development team <tiptorrent@soleta.eu>2022-02-08 12:09:39 +0100
commitf6f3984be782e6c42a320081e00533fa30b45140 (patch)
treef7108649edf3d0f4f59793c06c681b6b966462c8 /src
parent28d7a25a89c458fcb3851dda2a97fbbc97acc3d7 (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.c6
-rw-r--r--src/core.h2
-rw-r--r--src/main.c16
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);