Add random port support patch from Marcos.

This commit is contained in:
Andrew Resch 2007-09-15 22:22:06 +00:00
parent 4691dcbaa2
commit 9bb65d1ab4
3 changed files with 133 additions and 117 deletions

View File

@ -89,14 +89,24 @@ class Core(dbus.service.Object):
version.append(int(value)) version.append(int(value))
fingerprint = lt.fingerprint("DE", *version) fingerprint = lt.fingerprint("DE", *version)
# Setup the libtorrent session and listen on the configured ports # Start the libtorrent session
log.debug("Starting libtorrent session..") log.debug("Starting libtorrent session..")
self.session = lt.session(fingerprint) self.session = lt.session(fingerprint)
log.debug("Listening on %i-%i", self.config.get("listen_ports")[0],
self.config.get("listen_ports")[1])
self.session.listen_on(self.config.get("listen_ports")[0],
self.config.get("listen_ports")[1])
# Set the listening ports
if self.config.get("random_port"):
import random
randrange = lambda: random.randrange(49152, 65535)
ports = [randrange(), randrange()]
ports.sort()
log.debug("Listening on %i-%i", ports[0], ports[1])
self.session.listen_on(ports[0], ports[1])
else:
listen_ports = self.config.get("listen_ports")
log.debug("Listening on %i-%i", listen_ports[0],
listen_ports[1])
self.session.listen_on(listen_ports[0],
listen_ports[1])
# Start the TorrentManager # Start the TorrentManager
self.torrents = TorrentManager(self.session) self.torrents = TorrentManager(self.session)

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.2.2 on Fri Sep 14 02:19:37 2007 by andrew@fragment--> <!--Generated with glade3 3.2.2 on Sat Sep 15 15:10:00 2007 by andrew@fragment-->
<glade-interface> <glade-interface>
<widget class="GtkDialog" id="pref_dialog"> <widget class="GtkDialog" id="pref_dialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@ -127,7 +127,7 @@
<property name="active">True</property> <property name="active">True</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<property name="group">radio_ask_save</property> <property name="group">radio_ask_save</property>
<signal name="toggled" handler="on_radio_save_all_to_toggled"/> <signal name="toggled" handler="on_toggle"/>
</widget> </widget>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -470,6 +470,7 @@
<property name="label" translatable="yes">Use Random Ports</property> <property name="label" translatable="yes">Use Random Ports</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_toggle"/>
</widget> </widget>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -881,40 +882,71 @@ Full Stream</property>
<property name="n_columns">2</property> <property name="n_columns">2</property>
<property name="column_spacing">15</property> <property name="column_spacing">15</property>
<child> <child>
<widget class="GtkSpinButton" id="spin_max_upload_slots_global"> <widget class="GtkLabel" id="label16">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
<property name="tooltip" translatable="yes">The maximum upload slots for all torrents. Set -1 for unlimited.</property> <property name="xalign">0</property>
<property name="xalign">1</property> <property name="label" translatable="yes">Maximum Upload Speed (KiB/s):</property>
<property name="adjustment">-1 -1 9000 1 10 10</property> </widget>
<property name="climb_rate">1</property> <packing>
<property name="snap_to_ticks">True</property> <property name="top_attach">2</property>
<property name="numeric">True</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Connections:</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Upload Slots:</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkSpinButton" id="spin_max_upload"> <widget class="GtkSpinButton" id="spin_max_connections_global">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property> <property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
<property name="max_length">4</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="adjustment">-1 -1 9000 1 10 10</property> <property name="adjustment">-1 -1 9000 1 10 10</property>
<property name="climb_rate">1</property> <property name="climb_rate">1</property>
<property name="digits">1</property> <property name="snap_to_ticks">True</property>
<property name="numeric">True</property> <property name="numeric">True</property>
<property name="update_policy">GTK_UPDATE_IF_VALID</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">2</property> <property name="x_options">GTK_FILL</property>
<property name="bottom_attach">3</property> </packing>
</child>
<child>
<widget class="GtkLabel" id="label13">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum download speed for all torrents. Set -1 for unlimited.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Download Speed (KiB/s):</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
@ -939,74 +971,43 @@ Full Stream</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label13"> <widget class="GtkSpinButton" id="spin_max_upload">
<property name="visible">True</property> <property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum download speed for all torrents. Set -1 for unlimited.</property> <property name="can_focus">True</property>
<property name="xalign">0</property> <property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
<property name="label" translatable="yes">Maximum Download Speed (KiB/s):</property> <property name="xalign">1</property>
<property name="adjustment">-1 -1 9000 1 10 10</property>
<property name="climb_rate">1</property>
<property name="digits">1</property>
<property name="numeric">True</property>
</widget> </widget>
<packing> <packing>
<property name="top_attach">1</property> <property name="left_attach">1</property>
<property name="bottom_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkSpinButton" id="spin_max_connections_global"> <widget class="GtkSpinButton" id="spin_max_upload_slots_global">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property> <property name="tooltip" translatable="yes">The maximum upload slots for all torrents. Set -1 for unlimited.</property>
<property name="max_length">4</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="adjustment">-1 -1 9000 1 10 10</property> <property name="adjustment">-1 -1 9000 1 10 10</property>
<property name="climb_rate">1</property> <property name="climb_rate">1</property>
<property name="snap_to_ticks">True</property> <property name="snap_to_ticks">True</property>
<property name="numeric">True</property> <property name="numeric">True</property>
<property name="update_policy">GTK_UPDATE_IF_VALID</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Upload Slots:</property>
</widget>
<packing>
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Connections:</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Upload Speed (KiB/s):</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>
@ -1050,24 +1051,29 @@ Full Stream</property>
<property name="n_columns">2</property> <property name="n_columns">2</property>
<property name="column_spacing">15</property> <property name="column_spacing">15</property>
<child> <child>
<widget class="GtkSpinButton" id="spin_max_upload_slots_per_torrent"> <widget class="GtkLabel" id="label18">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property> <property name="xalign">0</property>
<property name="xalign">1</property> <property name="label" translatable="yes">Maximum Upload Slots:</property>
<property name="adjustment">-1 -1 9000 1 10 10</property>
<property name="climb_rate">1</property>
<property name="snap_to_ticks">True</property>
<property name="numeric">True</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkLabel" id="label17">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Connections:</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child> <child>
<widget class="GtkSpinButton" id="spin_max_connections_per_torrent"> <widget class="GtkSpinButton" id="spin_max_connections_per_torrent">
<property name="visible">True</property> <property name="visible">True</property>
@ -1085,24 +1091,19 @@ Full Stream</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label17"> <widget class="GtkSpinButton" id="spin_max_upload_slots_per_torrent">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="can_focus">True</property>
<property name="xalign">0</property> <property name="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property>
<property name="label" translatable="yes">Maximum Connections:</property> <property name="xalign">1</property>
</widget> <property name="adjustment">-1 -1 9000 1 10 10</property>
<packing> <property name="climb_rate">1</property>
<property name="x_options">GTK_FILL</property> <property name="snap_to_ticks">True</property>
</packing> <property name="numeric">True</property>
</child>
<child>
<widget class="GtkLabel" id="label18">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Maximum Upload Slots:</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
@ -1351,31 +1352,14 @@ Full Stream</property>
<property name="n_columns">2</property> <property name="n_columns">2</property>
<property name="column_spacing">10</property> <property name="column_spacing">10</property>
<child> <child>
<widget class="GtkRadioButton" id="radio_open_folder_stock"> <widget class="GtkEntry" id="txt_open_folder_location">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Open folder with:</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkRadioButton" id="radio_open_folder_custom">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Custom:</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">radio_open_folder_stock</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
@ -1405,19 +1389,36 @@ Thunar</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="txt_open_folder_location"> <widget class="GtkRadioButton" id="radio_open_folder_custom">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Custom:</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">radio_open_folder_stock</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkRadioButton" id="radio_open_folder_stock">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Open folder with:</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>

View File

@ -72,7 +72,7 @@ class Preferences:
"on_button_ok_clicked": self.on_button_ok_clicked, "on_button_ok_clicked": self.on_button_ok_clicked,
"on_button_apply_clicked": self.on_button_apply_clicked, "on_button_apply_clicked": self.on_button_apply_clicked,
"on_button_cancel_clicked": self.on_button_cancel_clicked, "on_button_cancel_clicked": self.on_button_cancel_clicked,
"on_radio_save_all_to_toggled": self.on_toggle "on_toggle": self.on_toggle
}) })
def add_page(self, name, widget): def add_page(self, name, widget):
@ -229,7 +229,12 @@ class Preferences:
value = widget.get_active() value = widget.get_active()
if widget == self.glade.get_widget('radio_save_all_to'): if widget == self.glade.get_widget('radio_save_all_to'):
self.glade.get_widget('download_path_button').set_sensitive(value) self.glade.get_widget('download_path_button').set_sensitive(value)
self.glade.get_widget('spin_port_min').set_sensitive(
not self.glade.get_widget('chk_random_port').get_active())
self.glade.get_widget('spin_port_max').set_sensitive(
not self.glade.get_widget('chk_random_port').get_active())
def on_button_ok_clicked(self, data): def on_button_ok_clicked(self, data):
log.debug("on_button_ok_clicked") log.debug("on_button_ok_clicked")
self.set_config() self.set_config()