diff options
| author | Marq Schneider <queueRAM@gmail.com> | 2010-08-11 22:37:51 -0500 |
|---|---|---|
| committer | Marq Schneider <queueRAM@gmail.com> | 2010-08-11 22:37:51 -0500 |
| commit | 64060294ab58dfd07a95a24a1500602421748da9 (patch) | |
| tree | ec61cfce0fd1f4a7a8fa7c00168e38a1bd481ed3 /cli | |
| parent | 033b776ab28e616fd9217087a50252297394a4ca (diff) | |
| download | btpd-64060294ab58dfd07a95a24a1500602421748da9.tar.gz btpd-64060294ab58dfd07a95a24a1500602421748da9.zip | |
Allow changing the upload and download rates at runtime.
This adds a 'rate' command to modify the up and download rates on the fly. Closes GH-10
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/btcli.c | 2 | ||||
| -rw-r--r-- | cli/btcli.h | 2 | ||||
| -rw-r--r-- | cli/rate.c | 80 |
3 files changed, 84 insertions, 0 deletions
diff --git a/cli/btcli.c b/cli/btcli.c index bc1fb80..8d1aada 100644 --- a/cli/btcli.c +++ b/cli/btcli.c @@ -114,6 +114,7 @@ static struct { { "del", cmd_del, usage_del }, { "kill", cmd_kill, usage_kill }, { "list", cmd_list, usage_list }, + { "rate", cmd_rate, usage_rate }, { "start", cmd_start, usage_start }, { "stop", cmd_stop, usage_stop }, { "stat", cmd_stat, usage_stat } @@ -141,6 +142,7 @@ usage(void) "del\t- Remove torrents from btpd.\n" "kill\t- Shut down btpd.\n" "list\t- List torrents.\n" + "rate\t- Set up/download rate limits.\n" "start\t- Activate torrents.\n" "stat\t- Display stats for active torrents.\n" "stop\t- Deactivate torrents.\n" diff --git a/cli/btcli.h b/cli/btcli.h index 19d360a..d0e0a28 100644 --- a/cli/btcli.h +++ b/cli/btcli.h @@ -45,6 +45,8 @@ void usage_stat(void); void cmd_stat(int argc, char **argv); void usage_kill(void); void cmd_kill(int argc, char **argv); +void usage_rate(void); +void cmd_rate(int argc, char **argv); void usage_start(void); void cmd_start(int argc, char **argv); void usage_stop(void); diff --git a/cli/rate.c b/cli/rate.c new file mode 100644 index 0000000..6e0a1bc --- /dev/null +++ b/cli/rate.c @@ -0,0 +1,80 @@ +#include "btcli.h" + +void +usage_rate(void) +{ + printf( + "Set upload and download rate.\n" + "\n" + "Usage: rate <up> <down>\n" + "\n" + "Arguments:\n" + "<up> <down>\n" + "\tThe up/down rate in KB/s\n" + "\n" + ); + exit(1); +} + +static struct option start_opts [] = { + { "help", no_argument, NULL, 'H' }, + {NULL, 0, NULL, 0} +}; + +static unsigned +parse_rate(char *rate) +{ + unsigned out; + char *end; + + out = strtol(rate, &end, 10); + if (end == rate) + usage_rate(); + + if ((end[0] != '\0') && (end[1] != '\0')) + usage_rate(); + + switch(end[0]) { + case 'g': + case 'G': + out <<= 30; + break; + case 'm': + case 'M': + out <<= 20; + break; + case '\0': /* default is 'k' */ + case 'k': + case 'K': + out <<= 10; + break; + case 'b': + case 'B': + break; + default: + usage_rate(); + } + return out; +} + +void +cmd_rate(int argc, char **argv) +{ + int ch; + unsigned up, down; + + while ((ch = getopt_long(argc, argv, "", start_opts, NULL)) != -1) + usage_rate(); + argc -= optind; + argv += optind; + + if (argc < 2) + usage_rate(); + + up = parse_rate(argv[0]); + down = parse_rate(argv[1]); + + btpd_connect(); + handle_ipc_res(btpd_rate(ipc, up, down), "rate", argv[1]); +} + |