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/rate.c | |
| 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/rate.c')
| -rw-r--r-- | cli/rate.c | 80 |
1 files changed, 80 insertions, 0 deletions
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]); +} + |