diff --git a/doc/rtorrent.rc b/doc/rtorrent.rc index aa2e6fdf..eceb12c4 100644 --- a/doc/rtorrent.rc +++ b/doc/rtorrent.rc @@ -63,6 +63,14 @@ #network.local_address.set = 127.0.0.1 #network.local_address.set = rakshasa.no +# The port reported to the tracker, separate for ipv4/ipv6. A value of 0 +# (the default) falls back to reporting the listening port. network.local_port.set +# sets both the ipv4 and ipv6 ports at once. +# +#network.local_port.set = 6881 +#network.local_port.ipv4.set = 6881 +#network.local_port.ipv6.set = 6882 + # The IP address the listening socket and outgoing connections is # bound to. # diff --git a/src/command_network.cc b/src/command_network.cc index a8c6b027..23530f37 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -379,6 +379,25 @@ initialize_command_network() { CMD_ANY ("network.local_address.ipv6", [nw_config](auto, auto) { return nw_config->local_inet6_address_str(); }); CMD_ANY_STRING_V("network.local_address.ipv6.set", [nw_config](auto, auto& str) { return nw_config->set_local_inet6_address_str(str); }); + CMD_ANY ("network.local_port", [nw_config](auto, auto) { return nw_config->local_port_best_match(); }); + CMD_ANY_VALUE_V ("network.local_port.set", [nw_config](auto, auto& value) { + if (value < 0 || value > 65535) + throw torrent::input_error("Invalid local port number."); + return nw_config->set_local_port(value); + }); + CMD_ANY ("network.local_port.ipv4", [nw_config](auto, auto) { return nw_config->local_inet_port(); }); + CMD_ANY_VALUE_V ("network.local_port.ipv4.set", [nw_config](auto, auto& value) { + if (value < 0 || value > 65535) + throw torrent::input_error("Invalid local port number."); + return nw_config->set_local_inet_port(value); + }); + CMD_ANY ("network.local_port.ipv6", [nw_config](auto, auto) { return nw_config->local_inet6_port(); }); + CMD_ANY_VALUE_V ("network.local_port.ipv6.set", [nw_config](auto, auto& value) { + if (value < 0 || value > 65535) + throw torrent::input_error("Invalid local port number."); + return nw_config->set_local_inet6_port(value); + }); + CMD_ANY ("network.proxy.global", [](auto, auto) { return torrent::runtime::proxy_manager()->proxy_url(); }); CMD_ANY_STRING_V("network.proxy.global.set", [](auto, auto& str) { return torrent::runtime::proxy_manager()->set_proxy_url(str); }); CMD_ANY ("network.proxy.http", [](auto, auto) { return torrent::runtime::proxy_manager()->http_proxy_url(); }); @@ -437,6 +456,7 @@ initialize_command_network() { rpc::rpc.mark_safe("network.receive_buffer.size"); rpc::rpc.mark_safe("network.bind_address"); rpc::rpc.mark_safe("network.local_address"); + rpc::rpc.mark_safe("network.local_port"); rpc::rpc.mark_safe("network.xmlrpc.size_limit"); rpc::rpc.mark_safe("network.open_sockets");