Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow changing up and download speed on the fly #10

Closed
queueRAM opened this issue Jul 22, 2010 · 3 comments
Closed

Allow changing up and download speed on the fly #10

queueRAM opened this issue Jul 22, 2010 · 3 comments

Comments

@queueRAM
Copy link
Contributor

Original Request

Sun, Jan 21, 2007 at 00:54

It would be nifty if btpd supported changing up and download
speeds on the fly. See attached patch for an implementation of this.
-- Martin Rudat

Patch

diff -urN btpd-0.12.old/btpd/cli_if.c btpd-0.12/btpd/cli_if.c
--- btpd-0.12.old/btpd/cli_if.c 2006-10-17 04:18:55.000000000
+1000 +++ btpd-0.12/btpd/cli_if.c       2007-01-15 01:14:07.000000000
+1100 @@ -315,6 +315,33 @@
 }

+static int
+cmd_speed(struct cli *cli, int argc, const char *args)
+{
+    if (argc != 2)
+        return IPC_COMMERR;
+    if (btpd_is_stopping())
+        return write_code_buffer(cli, IPC_ESHUTDOWN);
+
+    long long up, down;
+
+    if (benc_isint(args))
+        up = benc_int(args, &args);
+    else
+        return IPC_COMMERR;
+
+    if (benc_isint(args))
+        down = benc_int(args, &args);
+    else
+        return IPC_COMMERR;
+
+    net_bw_limit_out =   up;
+    net_bw_limit_in  = down;
+    ul_set_max_uploads();
+
+    return write_code_buffer(cli, IPC_OK);
+}
+
 static int
 cmd_start(struct cli *cli, int argc, const char *args)
 {
    if (argc != 1)
@@ -402,6 +429,7 @@
    { "add",    3, cmd_add },
    { "del",    3, cmd_del },
    { "die",    3, cmd_die },
+    { "speed",  5, cmd_speed },
    { "start",  5, cmd_start },
    { "stop",   4, cmd_stop },
    { "stop-all", 8, cmd_stop_all},
diff -urN btpd-0.12.old/btpd/upload.c btpd-0.12/btpd/upload.c
--- btpd-0.12.old/btpd/upload.c 2006-07-24 02:33:21.000000000
+1000 +++ btpd-0.12/btpd/upload.c       2007-01-15 00:59:08.000000000
+1100 @@ -175,7 +175,7 @@
 }

 void
-ul_init(void)
+ul_set_max_uploads(void)
 {
    if (net_max_uploads >= -1)
        m_max_uploads = net_max_uploads;
@@ -191,6 +191,12 @@
        else
            m_max_uploads = 5 + (net_bw_limit_out / (100 << 10));
    }
+}
+
+void
+ul_init(void)
+{
+    ul_set_max_uploads();

    evtimer_set(&m_choke_timer, choke_cb, NULL);
    btpd_ev_add(&m_choke_timer, CHOKE_INTERVAL);
diff -urN btpd-0.12.old/btpd/upload.h btpd-0.12/btpd/upload.h
--- btpd-0.12.old/btpd/upload.h 2006-02-12 11:30:12.000000000
+1100 +++ btpd-0.12/btpd/upload.h       2007-01-15 01:00:01.000000000
+1100 @@ -6,6 +6,7 @@
 void ul_on_lost_torrent(struct net *n);
 void ul_on_interest(struct peer *p);
 void ul_on_uninterest(struct peer *p);
+void ul_set_max_uploads(void);
 void ul_init(void);

 #endif
diff -urN btpd-0.12.old/cli/btcli.c btpd-0.12/cli/btcli.c
--- btpd-0.12.old/cli/btcli.c   2006-10-17 04:18:55.000000000 +1000
+++ btpd-0.12/cli/btcli.c       2007-01-14 22:07:14.000000000 +1100
@@ -99,6 +99,7 @@
    { "del", cmd_del, usage_del },
    { "kill", cmd_kill, usage_kill },
    { "list", cmd_list, usage_list },
+    { "speed", cmd_speed, usage_speed },
    { "start", cmd_start, usage_start },
    { "stop", cmd_stop, usage_stop },
    { "stat", cmd_stat, usage_stat }
@@ -126,6 +127,7 @@
        "del\t- Remove torrents from btpd.\n"
        "kill\t- Shut down btpd.\n"
        "list\t- List torrents.\n"
+        "speed\t- Set up/download speed.\n"
        "start\t- Activate torrents.\n"
        "stat\t- Display stats for active torrents.\n"
        "stop\t- Deactivate torrents.\n"
diff -urN btpd-0.12.old/cli/btcli.h btpd-0.12/cli/btcli.h
--- btpd-0.12.old/cli/btcli.h   2006-10-17 04:18:55.000000000 +1000
+++ btpd-0.12/cli/btcli.h       2007-01-14 21:59:44.000000000 +1100
@@ -47,5 +47,7 @@
 void cmd_start(int argc, char **argv);
 void usage_stop(void);
 void cmd_stop(int argc, char **argv);
+void usage_speed(void);
+void cmd_speed(int argc, char **argv);

 #endif
diff -urN btpd-0.12.old/cli/Makefile.am btpd-0.12/cli/Makefile.am
--- btpd-0.12.old/cli/Makefile.am       2006-10-17 04:18:55.000000000
+1000 +++ btpd-0.12/cli/Makefile.am     2007-01-15
01:17:31.000000000 +1100 @@ -5,7 +5,7 @@
 btinfo_CPPFLAGS=-I$(top_srcdir)/misc @openssl_CPPFLAGS@
 btinfo_LDFLAGS=@openssl_LDFLAGS@

-btcli_SOURCES=btcli.c btcli.h add.c del.c list.c kill.c start.c stop.c
stat.c +btcli_SOURCES=btcli.c btcli.h add.c del.c list.c kill.c speed.c
start.c stop.c stat.c btcli_LDADD=../misc/libmisc.a -lcrypto -lm
 btcli_CPPFLAGS=-I$(top_srcdir)/misc @openssl_CPPFLAGS@
 btcli_LDFLAGS=@openssl_LDFLAGS@
diff -urN btpd-0.12.old/cli/speed.c btpd-0.12/cli/speed.c
--- btpd-0.12.old/cli/speed.c   1970-01-01 10:00:00.000000000 +1000
+++ btpd-0.12/cli/speed.c       2007-01-15 07:49:53.000000000 +1100
@@ -0,0 +1,80 @@
+#include "btcli.h"
+
+void
+usage_speed(void)
+{
+    printf(
+        "Set upload and download speed.\n"
+        "\n"
+        "Usage: speed up down\n"
+        "\n"
+        "Arguments:\n"
+        "up, down\n"
+        "\tThe up/down speed in KB/s\n"
+        "\n"
+        );
+    exit(1);
+}
+
+static struct option start_opts [] = {
+    { "help", no_argument, NULL, 'H' },
+    {NULL, 0, NULL, 0}
+};
+
+static int
+parse_speed(char *speed)
+{
+    int out;
+    char *end;
+
+    out   = strtol(speed, &end, 10);
+    if ((out < 0) || (end == speed))
+        usage_speed();
+    if (*end == '\0')
+        out <<= 10;
+    else {
+        if (end[1] != '\0')
+            usage_speed();
+        switch(*end) {
+        case 'g':
+        case 'G': /* yeah, right. */
+            out <<= 30;
+            break;
+        case 'm':
+        case 'M':
+            out <<= 20;
+            break;
+        case 'k':
+        case 'K':
+            out <<= 10;
+            break;
+        case 'b':
+        case 'B':
+            break;
+        default:
+            usage_speed();
+        }
+    }
+    return out;
+}
+
+void
+cmd_speed(int argc, char **argv)
+{
+    int ch;
+    struct ipc_torrent t;
+
+    while ((ch = getopt_long(argc, argv, "", start_opts, NULL)) != -1)
+        usage_speed();
+    argc -= optind;
+    argv += optind;
+
+    if (argc < 2)
+        usage_speed();
+
+    int up = parse_speed(argv[0]);
+    int down = parse_speed(argv[1]);
+
+    btpd_connect();
+    handle_ipc_res(btpd_speed(ipc, up, down), "speed", up);
+}
diff -urN btpd-0.12.old/misc/btpd_if.c btpd-0.12/misc/btpd_if.c
--- btpd-0.12.old/misc/btpd_if.c        2006-10-17 04:18:55.000000000
+1000 +++ btpd-0.12/misc/btpd_if.c      2007-01-16 20:13:15.000000000
+1100 @@ -281,6 +281,14 @@
    return ipc_buf_req_code(ipc, &iob);
 }

+enum ipc_err
+btpd_speed(struct ipc *ipc, int up, int down)
+{
+    struct io_buffer iob = buf_init(1 << 10);
+    buf_print(&iob, "l5:speedi%iei%iee", up, down);
+    return ipc_buf_req_code(ipc, &iob);
+}
+
 static enum ipc_err
 simple_treq(struct ipc *ipc, char *cmd, struct ipc_torrent *tp)
 {
diff -urN btpd-0.12.old/misc/btpd_if.h btpd-0.12/misc/btpd_if.h
--- btpd-0.12.old/misc/btpd_if.h        2006-10-17 04:18:55.000000000
+1000 +++ btpd-0.12/misc/btpd_if.h      2007-01-15 00:25:44.000000000
+1100 @@ -77,6 +77,7 @@
 enum ipc_err btpd_add(struct ipc *ipc, const char *mi, size_t mi_size,
    const char *content, const char *name);
 enum ipc_err btpd_del(struct ipc *ipc, struct ipc_torrent *tp);
+enum ipc_err btpd_speed(struct ipc *ipc, int up, int down);
 enum ipc_err btpd_start(struct ipc *ipc, struct ipc_torrent *tp);
 enum ipc_err btpd_stop(struct ipc *ipc, struct ipc_torrent *tp);
 enum ipc_err btpd_stop_all(struct ipc *ipc);

References

http://lists.stargirl.org/pipermail/btpd-users/2007-January/000123.html
http://lists.stargirl.org/pipermail/btpd-users/2007-January/000124.html

@queueRAM
Copy link
Contributor Author

nicm July 14, 2010

Looks good (not tested), but parse_speed should check for overflow.

@queueRAM
Copy link
Contributor Author

Allow changing the upload and download rates at runtime.

This adds a 'rate' command to modify the up and download
rates on the fly.

Closed by 6406029

@queueRAM
Copy link
Contributor Author

I just wanted to add that although I added this command for now, I think it will change in the future to a more generic 'set' command and provide access to more variables.

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant