From d9ab0ec0ca7b57e93c25d3e2d2dd7b7594615d83 Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Sat, 24 Jan 2009 05:25:37 +0000 Subject: [PATCH] Fix setting outgoing ports --- deluge/core/preferencesmanager.py | 3 +- libtorrent/bindings/python/src/converters.cpp | 48 ++++++++++++++++++- libtorrent/bindings/python/src/module.cpp | 3 +- .../bindings/python/src/session_settings.cpp | 1 + 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/deluge/core/preferencesmanager.py b/deluge/core/preferencesmanager.py index 242275d07..8c495a2e6 100644 --- a/deluge/core/preferencesmanager.py +++ b/deluge/core/preferencesmanager.py @@ -256,7 +256,8 @@ class PreferencesManager(component.Component): def _on_set_outgoing_ports(self, key, value): if not self.config["random_outgoing_ports"]: log.debug("outgoing port range set to %s-%s", value[0], value[1]) - self.session.outgoing_ports(value[0], value[1]) + self.settings.outgoing_ports = value[0], value[1] + self.session.set_settings(self.settings) def _on_set_random_outgoing_ports(self, key, value): if value: diff --git a/libtorrent/bindings/python/src/converters.cpp b/libtorrent/bindings/python/src/converters.cpp index f684cc4f3..cae84be75 100755 --- a/libtorrent/bindings/python/src/converters.cpp +++ b/libtorrent/bindings/python/src/converters.cpp @@ -1,5 +1,51 @@ -// Copyright Daniel Wallin 2007. Use, modification and distribution is +// Copyright Andrew Resch 2009. Use, modification and distribution is // subject to the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +#include +using namespace boost::python; + +template +struct pair_to_tuple +{ + static PyObject* convert(const std::pair& p) + { + return incref(make_tuple(p.first, p.second).ptr()); + } +}; + +template +struct tuple_to_pair +{ + tuple_to_pair() + { + converter::registry::push_back( + &convertible, &construct, type_id >() + ); + } + + static void* convertible(PyObject* x) + { + return PyTuple_Check(x) ? x: 0; + } + + static void construct(PyObject* x, converter::rvalue_from_python_stage1_data* data) + { + void* storage = ((converter::rvalue_from_python_storage< + std::pair >*)data)->storage.bytes; + + object o(borrowed(x)); + std::pair p; + p.first = extract(o[0]); + p.second = extract(o[1]); + new (storage) std::pair(p); + data->convertible = storage; + } +}; + +void bind_converters() +{ + to_python_converter, pair_to_tuple >(); + tuple_to_pair(); +} diff --git a/libtorrent/bindings/python/src/module.cpp b/libtorrent/bindings/python/src/module.cpp index 7539449cb..3d0925f47 100755 --- a/libtorrent/bindings/python/src/module.cpp +++ b/libtorrent/bindings/python/src/module.cpp @@ -23,6 +23,7 @@ void bind_torrent(); void bind_peer_info(); void bind_ip_filter(); void bind_magnet_uri(); +void bind_converters(); BOOST_PYTHON_MODULE(libtorrent) { @@ -48,5 +49,5 @@ BOOST_PYTHON_MODULE(libtorrent) bind_peer_info(); bind_ip_filter(); bind_magnet_uri(); + bind_converters(); } - diff --git a/libtorrent/bindings/python/src/session_settings.cpp b/libtorrent/bindings/python/src/session_settings.cpp index 76e078560..8d4974936 100755 --- a/libtorrent/bindings/python/src/session_settings.cpp +++ b/libtorrent/bindings/python/src/session_settings.cpp @@ -45,6 +45,7 @@ void bind_session_settings() .def_readwrite("auto_scraped_interval", &session_settings::auto_scrape_interval) .def_readwrite("peer_tos", &session_settings::peer_tos) .def_readwrite("rate_limit_ip_overhead", &session_settings::rate_limit_ip_overhead) + .def_readwrite("outgoing_ports", &session_settings::outgoing_ports) #ifndef TORRENT_DISABLE_DHT .def_readwrite("use_dht_as_fallback", &session_settings::use_dht_as_fallback) #endif