1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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]);
}
|