summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcos Pinto <markybob@dipconsultants.com>2007-11-21 22:18:11 +0000
committerMarcos Pinto <markybob@dipconsultants.com>2007-11-21 22:18:11 +0000
commitfde0c836aa79f3fef13d890f898f55b16df347b3 (patch)
treea3530193270ed92b40d215d3f3bbfd13f4fe565f
parentd9a783118a7fe642de180bb5a44bf351b91906bc (diff)
downloaddeluge-fde0c836aa79f3fef13d890f898f55b16df347b3.tar.gz
deluge-fde0c836aa79f3fef13d890f898f55b16df347b3.tar.bz2
deluge-fde0c836aa79f3fef13d890f898f55b16df347b3.zip
re-add features that our isp lost in the backup
-rw-r--r--ChangeLog3
-rw-r--r--glade/preferences_dialog.glade681
-rw-r--r--glade/torrent_menu.glade94
-rwxr-xr-xlibtorrent/include/libtorrent/alert_types.hpp29
-rwxr-xr-xlibtorrent/include/libtorrent/torrent.hpp3
-rwxr-xr-xlibtorrent/include/libtorrent/torrent_handle.hpp26
-rwxr-xr-xlibtorrent/include/libtorrent/tracker_manager.hpp4
-rw-r--r--libtorrent/src/Makefile.in206
-rwxr-xr-xlibtorrent/src/http_tracker_connection.cpp34
-rwxr-xr-xlibtorrent/src/torrent.cpp90
-rwxr-xr-xlibtorrent/src/torrent_handle.cpp14
-rwxr-xr-xlibtorrent/src/tracker_manager.cpp2
-rwxr-xr-xlibtorrent/src/udp_tracker_connection.cpp7
-rw-r--r--src/common.py74
-rw-r--r--src/core.py5
-rw-r--r--src/deluge_core.cpp26
-rw-r--r--src/dialogs.py4
-rw-r--r--src/interface.py9
-rw-r--r--src/pref.py4
19 files changed, 770 insertions, 545 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f574d46e..0fe5c0482 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
Deluge 0.5.7 (xx November 2007)
+ * Scrape support
* Manual force-recheck
+ * Add local peer discovery (aka local service discovery)
* Blocklist plugin will now display errors, instead of just crashing on a bad
list or wrong type
* Add torrent in paused state option
@@ -7,6 +9,7 @@ Deluge 0.5.7 (xx November 2007)
* Fix ratio bugs (hopefully for the last time)
* Add preference to only show file selection popup if torrent has multiple files
* Fix pause all and resume all bugs
+ * Fix client not loading if our website goes down (new version check failing)
* Allow torrent creation with no trackers
* Scheduler plugin revamp by Ben Klein
* Fix ETA from going backwards
diff --git a/glade/preferences_dialog.glade b/glade/preferences_dialog.glade
index 710fa75c9..1bf4d665d 100644
--- a/glade/preferences_dialog.glade
+++ b/glade/preferences_dialog.glade
@@ -68,6 +68,19 @@
<property name="n_rows">1</property>
<property name="n_columns">2</property>
<child>
+ <widget class="GtkFileChooserButton" id="download_path_button">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
+ <property name="title" translatable="yes">Select A Folder</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
<widget class="GtkRadioButton" id="radio_save_all_to">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -81,19 +94,6 @@
<signal name="toggled" handler="toggle_ui"/>
</widget>
</child>
- <child>
- <widget class="GtkFileChooserButton" id="download_path_button">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
- <property name="title" translatable="yes">Select A Folder</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- </packing>
- </child>
</widget>
<packing>
<property name="position">1</property>
@@ -106,6 +106,13 @@
<property name="n_rows">1</property>
<property name="n_columns">2</property>
<child>
+ <widget class="GtkLabel" id="label38">
+ <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="label" translatable="yes">Store all torrent files in:</property>
+ </widget>
+ </child>
+ <child>
<widget class="GtkAlignment" id="alignment32">
<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>
@@ -124,13 +131,6 @@
<property name="right_attach">2</property>
</packing>
</child>
- <child>
- <widget class="GtkLabel" id="label38">
- <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="label" translatable="yes">Store all torrent files in:</property>
- </widget>
- </child>
</widget>
<packing>
<property name="position">2</property>
@@ -175,6 +175,16 @@
<property name="n_rows">1</property>
<property name="n_columns">2</property>
<child>
+ <widget class="GtkCheckButton" id="chk_autoload">
+ <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">Autoload all torrent files in:</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ </child>
+ <child>
<widget class="GtkAlignment" id="alignment36">
<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>
@@ -192,16 +202,6 @@
<property name="right_attach">2</property>
</packing>
</child>
- <child>
- <widget class="GtkCheckButton" id="chk_autoload">
- <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">Autoload all torrent files in:</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- </child>
</widget>
</child>
</widget>
@@ -795,6 +795,19 @@
<property name="position">2</property>
</packing>
</child>
+ <child>
+ <widget class="GtkCheckButton" id="chk_lsd">
+ <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">Local Peer Discovery</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
</widget>
</child>
</widget>
@@ -1165,10 +1178,10 @@ Either</property>
<property name="n_rows">5</property>
<property name="n_columns">2</property>
<child>
- <widget class="GtkSpinButton" id="spin_max_half_open">
+ <widget class="GtkSpinButton" id="spin_max_upload_slots_global">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">The maximum half-open connections. A high value may crash some cheap routers. 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">1</property>
<property name="adjustment">-1 -1 9000 1 10 10</property>
<property name="climb_rate">1</property>
@@ -1176,48 +1189,90 @@ Either</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkAlignment" id="alignment33">
+ <widget class="GtkSpinButton" id="spin_max_upload">
+ <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="xalign">1</property>
+ <property name="adjustment">0 -1 9000 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</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>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spin_max_download">
<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="right_padding">10</property>
- <child>
- <widget class="GtkLabel" id="label39">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">The maximum half-open connections. A high value may crash some cheap routers. Set -1 for unlimited.</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Maximum Half-Open Connections:</property>
- </widget>
- </child>
+ <property name="tooltip" translatable="yes">The maximum download speed for all torrents. Set -1 for unlimited.</property>
+ <property name="xalign">1</property>
+ <property name="adjustment">0 -1 9000 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
</widget>
<packing>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkAlignment" id="alignment18">
+ <widget class="GtkLabel" id="label52">
+ <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>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spin_max_connections_global">
+ <property name="visible">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="xalign">1</property>
+ <property name="adjustment">-1 -1 1000 1 10 10</property>
+ <property name="climb_rate">1</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment4">
<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="right_padding">10</property>
<child>
- <widget class="GtkLabel" id="label20">
+ <widget class="GtkLabel" id="label54">
<property name="visible">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="xalign">0</property>
- <property name="label" translatable="yes">Maximum Upload Slots:</property>
+ <property name="label" translatable="yes">Maximum Connections:</property>
</widget>
</child>
</widget>
<packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
@@ -1242,92 +1297,50 @@ Either</property>
</packing>
</child>
<child>
- <widget class="GtkAlignment" id="alignment4">
+ <widget class="GtkAlignment" id="alignment18">
<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="right_padding">10</property>
<child>
- <widget class="GtkLabel" id="label54">
+ <widget class="GtkLabel" id="label20">
<property name="visible">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 speed for all torrents. Set -1 for unlimited.</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Maximum Connections:</property>
+ <property name="label" translatable="yes">Maximum Upload Slots:</property>
</widget>
</child>
</widget>
<packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_max_connections_global">
- <property name="visible">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="xalign">1</property>
- <property name="adjustment">-1 -1 1000 1 10 10</property>
- <property name="climb_rate">1</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label52">
- <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>
- </packing>
- </child>
- <child>
- <widget class="GtkSpinButton" id="spin_max_download">
+ <widget class="GtkAlignment" id="alignment33">
<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 download speed for all torrents. Set -1 for unlimited.</property>
- <property name="xalign">1</property>
- <property name="adjustment">0 -1 9000 1 10 10</property>
- <property name="climb_rate">1</property>
- <property name="digits">1</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkSpinButton" id="spin_max_upload">
- <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="xalign">1</property>
- <property name="adjustment">0 -1 9000 1 10 10</property>
- <property name="climb_rate">1</property>
- <property name="digits">1</property>
+ <property name="right_padding">10</property>
+ <child>
+ <widget class="GtkLabel" id="label39">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The maximum half-open connections. A high value may crash some cheap routers. Set -1 for unlimited.</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Maximum Half-Open Connections:</property>
+ </widget>
+ </child>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_max_upload_slots_global">
+ <widget class="GtkSpinButton" id="spin_max_half_open">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">The maximum upload slots for all torrents. Set -1 for unlimited.</property>
+ <property name="tooltip" translatable="yes">The maximum half-open connections. A high value may crash some cheap routers. Set -1 for unlimited.</property>
<property name="xalign">1</property>
<property name="adjustment">-1 -1 9000 1 10 10</property>
<property name="climb_rate">1</property>
@@ -1335,8 +1348,8 @@ Either</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
@@ -1381,37 +1394,20 @@ Either</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<child>
- <widget class="GtkAlignment" id="alignment21">
- <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>
- <child>
- <widget class="GtkLabel" id="label31">
- <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="tooltip" translatable="yes">The maximum number of connections per torrent. Set -1 for unlimited.</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Maximum Connections:</property>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkAlignment" id="alignment22">
+ <widget class="GtkSpinButton" id="spin_max_upload_slots_per_torrent">
<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>
- <child>
- <widget class="GtkLabel" id="label33">
- <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="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Maximum Upload Slots:</property>
- </widget>
- </child>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property>
+ <property name="xalign">1</property>
+ <property name="adjustment">-1 -1 1000 1 10 10</property>
+ <property name="climb_rate">1</property>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
@@ -1429,22 +1425,39 @@ Either</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_max_upload_slots_per_torrent">
+ <widget class="GtkAlignment" id="alignment22">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property>
- <property name="xalign">1</property>
- <property name="adjustment">-1 -1 1000 1 10 10</property>
- <property name="climb_rate">1</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkLabel" id="label33">
+ <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="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Maximum Upload Slots:</property>
+ </widget>
+ </child>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
</packing>
</child>
+ <child>
+ <widget class="GtkAlignment" id="alignment21">
+ <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>
+ <child>
+ <widget class="GtkLabel" id="label31">
+ <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="tooltip" translatable="yes">The maximum number of connections per torrent. Set -1 for unlimited.</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Maximum Connections:</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
</widget>
@@ -1553,61 +1566,57 @@ Either</property>
<placeholder/>
</child>
<child>
- <widget class="GtkEntry" id="txt_peer_proxy_hostname">
+ <widget class="GtkSpinButton" id="spin_peer_proxy_port">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label1">
- <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="label" translatable="yes">Proxy type</property>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label5">
+ <widget class="GtkLabel" id="label8">
<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="label" translatable="yes">Username</property>
+ <property name="label" translatable="yes">Port</property>
</widget>
<packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label6">
+ <widget class="GtkLabel" id="label7">
<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="label" translatable="yes">Password</property>
+ <property name="label" translatable="yes">Server</property>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkComboBox" id="combo_peer_proxy_type">
+ <widget class="GtkEntry" id="txt_peer_proxy_password">
<property name="visible">True</property>
<property name="sensitive">False</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="items" translatable="yes">None
-Socksv4
-Socksv5
-Socksv5 W/ Auth
-HTTP
-HTTP W/ Auth</property>
+ <property name="visibility">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
@@ -1625,57 +1634,61 @@ HTTP W/ Auth</property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="txt_peer_proxy_password">
+ <widget class="GtkComboBox" id="combo_peer_proxy_type">
<property name="visible">True</property>
<property name="sensitive">False</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="visibility">False</property>
+ <property name="items" translatable="yes">None
+Socksv4
+Socksv5
+Socksv5 W/ Auth
+HTTP
+HTTP W/ Auth</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label7">
+ <widget class="GtkLabel" id="label6">
<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="label" translatable="yes">Server</property>
+ <property name="label" translatable="yes">Password</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label8">
+ <widget class="GtkLabel" id="label5">
<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="label" translatable="yes">Port</property>
+ <property name="label" translatable="yes">Username</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_peer_proxy_port">
+ <widget class="GtkLabel" id="label1">
+ <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="label" translatable="yes">Proxy type</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="txt_peer_proxy_hostname">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
</packing>
</child>
</widget>
@@ -1748,61 +1761,57 @@ HTTP W/ Auth</property>
<placeholder/>
</child>
<child>
- <widget class="GtkEntry" id="txt_tracker_proxy_hostname">
+ <widget class="GtkSpinButton" id="spin_tracker_proxy_port">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label49">
- <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="label" translatable="yes">Proxy type</property>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label48">
+ <widget class="GtkLabel" id="label44">
<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="label" translatable="yes">Username</property>
+ <property name="label" translatable="yes">Port</property>
</widget>
<packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label47">
+ <widget class="GtkLabel" id="label45">
<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="label" translatable="yes">Password</property>
+ <property name="label" translatable="yes">Server</property>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkComboBox" id="combo_tracker_proxy_type">
+ <widget class="GtkEntry" id="txt_tracker_proxy_password">
<property name="visible">True</property>
<property name="sensitive">False</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="items" translatable="yes">None
-Socksv4
-Socksv5
-Socksv5 W/ Auth
-HTTP
-HTTP W/ Auth</property>
+ <property name="visibility">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
@@ -1820,57 +1829,61 @@ HTTP W/ Auth</property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="txt_tracker_proxy_password">
+ <widget class="GtkComboBox" id="combo_tracker_proxy_type">
<property name="visible">True</property>
<property name="sensitive">False</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="visibility">False</property>
+ <property name="items" translatable="yes">None
+Socksv4
+Socksv5
+Socksv5 W/ Auth
+HTTP
+HTTP W/ Auth</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label45">
+ <widget class="GtkLabel" id="label47">
<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="label" translatable="yes">Server</property>
+ <property name="label" translatable="yes">Password</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label44">
+ <widget class="GtkLabel" id="label48">
<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="label" translatable="yes">Port</property>
+ <property name="label" translatable="yes">Username</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_tracker_proxy_port">
+ <widget class="GtkLabel" id="label49">
+ <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="label" translatable="yes">Proxy type</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="txt_tracker_proxy_hostname">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
</packing>
</child>
</widget>
@@ -1943,61 +1956,57 @@ HTTP W/ Auth</property>
<placeholder/>
</child>
<child>
- <widget class="GtkEntry" id="txt_dht_proxy_hostname">
+ <widget class="GtkSpinButton" id="spin_dht_proxy_port">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label65">
- <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="label" translatable="yes">Proxy type</property>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label64">
+ <widget class="GtkLabel" id="label61">
<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="label" translatable="yes">Username</property>
+ <property name="label" translatable="yes">Port</property>
</widget>
<packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label63">
+ <widget class="GtkLabel" id="label62">
<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="label" translatable="yes">Password</property>
+ <property name="label" translatable="yes">Server</property>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkComboBox" id="combo_dht_proxy_type">
+ <widget class="GtkEntry" id="txt_dht_proxy_password">
<property name="visible">True</property>
<property name="sensitive">False</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="items" translatable="yes">None
-Socksv4
-Socksv5
-Socksv5 W/ Auth
-HTTP
-HTTP W/ Auth</property>
+ <property name="visibility">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
@@ -2015,57 +2024,61 @@ HTTP W/ Auth</property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="txt_dht_proxy_password">
+ <widget class="GtkComboBox" id="combo_dht_proxy_type">
<property name="visible">True</property>
<property name="sensitive">False</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="visibility">False</property>
+ <property name="items" translatable="yes">None
+Socksv4
+Socksv5
+Socksv5 W/ Auth
+HTTP
+HTTP W/ Auth</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label62">
+ <widget class="GtkLabel" id="label63">
<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="label" translatable="yes">Server</property>
+ <property name="label" translatable="yes">Password</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label61">
+ <widget class="GtkLabel" id="label64">
<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="label" translatable="yes">Port</property>
+ <property name="label" translatable="yes">Username</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_dht_proxy_port">
+ <widget class="GtkLabel" id="label65">
+ <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="label" translatable="yes">Proxy type</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="txt_dht_proxy_hostname">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
</packing>
</child>
</widget>
@@ -2138,61 +2151,57 @@ HTTP W/ Auth</property>
<placeholder/>
</child>
<child>
- <widget class="GtkEntry" id="txt_web_proxy_hostname">
+ <widget class="GtkSpinButton" id="spin_web_proxy_port">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label71">
- <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="label" translatable="yes">Proxy type</property>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label70">
+ <widget class="GtkLabel" id="label67">
<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="label" translatable="yes">Username</property>
+ <property name="label" translatable="yes">Port</property>
</widget>
<packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label69">
+ <widget class="GtkLabel" id="label68">
<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="label" translatable="yes">Password</property>
+ <property name="label" translatable="yes">Server</property>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkComboBox" id="combo_web_proxy_type">
+ <widget class="GtkEntry" id="txt_web_proxy_password">
<property name="visible">True</property>
<property name="sensitive">False</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="items" translatable="yes">None
-Socksv4
-Socksv5
-Socksv5 W/ Auth
-HTTP
-HTTP W/ Auth</property>
+ <property name="visibility">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
@@ -2210,57 +2219,61 @@ HTTP W/ Auth</property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="txt_web_proxy_password">
+ <widget class="GtkComboBox" id="combo_web_proxy_type">
<property name="visible">True</property>
<property name="sensitive">False</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="visibility">False</property>
+ <property name="items" translatable="yes">None
+Socksv4
+Socksv5
+Socksv5 W/ Auth
+HTTP
+HTTP W/ Auth</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label68">
+ <widget class="GtkLabel" id="label69">
<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="label" translatable="yes">Server</property>
+ <property name="label" translatable="yes">Password</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label67">
+ <widget class="GtkLabel" id="label70">
<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="label" translatable="yes">Port</property>
+ <property name="label" translatable="yes">Username</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <widget class="GtkSpinButton" id="spin_web_proxy_port">
+ <widget class="GtkLabel" id="label71">
+ <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="label" translatable="yes">Proxy type</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="txt_web_proxy_hostname">
<property name="visible">True</property>
<property name="sensitive">False</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="adjustment">8080 0 10000 1 10 10</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
</packing>
</child>
</widget>
@@ -2483,22 +2496,41 @@ HTTP W/ Auth</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<child>
- <widget class="GtkAlignment" id="alignment27">
+ <widget class="GtkAlignment" id="alignment24">
<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="left_padding">40</property>
<child>
- <widget class="GtkEntry" id="txt_open_folder_location">
+ <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>
- <signal name="focus_in_event" handler="on_txt_open_folder_location_focus_in_event"/>
+ <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>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment25">
+ <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>
+ <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>
+ <signal name="focus_in_event" handler="on_radio_open_folder_custom_focus_in_event"/>
</widget>
</child>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
@@ -2525,45 +2557,26 @@ Thunar</property>
</packing>
</child>
<child>
- <widget class="GtkAlignment" id="alignment25">
+ <widget class="GtkAlignment" id="alignment27">
<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="left_padding">40</property>
<child>
- <widget class="GtkRadioButton" id="radio_open_folder_custom">
+ <widget class="GtkEntry" id="txt_open_folder_location">
<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>
- <signal name="focus_in_event" handler="on_radio_open_folder_custom_focus_in_event"/>
+ <signal name="focus_in_event" handler="on_txt_open_folder_location_focus_in_event"/>
</widget>
</child>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
- <child>
- <widget class="GtkAlignment" id="alignment24">
- <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>
- <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>
- </child>
- </widget>
- </child>
</widget>
<packing>
<property name="expand">False</property>
diff --git a/glade/torrent_menu.glade b/glade/torrent_menu.glade
index 28b6062b1..83355601e 100644
--- a/glade/torrent_menu.glade
+++ b/glade/torrent_menu.glade
@@ -66,64 +66,95 @@
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="menuitem5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Update Tracker</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="update_tracker"/>
- <child internal-child="image">
- <widget class="GtkImage" id="menu-item-image5">
- <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="stock">gtk-refresh</property>
- <property name="icon_size">1</property>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkImageMenuItem" id="menuitem13">
+ <widget class="GtkImageMenuItem" id="menuitem12">
<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="label" translatable="yes">_Edit Trackers</property>
+ <property name="label" translatable="yes">_Remove Torrent</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="edit_trackers"/>
+ <signal name="activate" handler="remove_torrent"/>
<child internal-child="image">
- <widget class="GtkImage" id="menu-item-image12">
+ <widget class="GtkImage" id="menu-item-image9">
<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="stock">gtk-edit</property>
+ <property name="stock">gtk-remove</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
- <widget class="GtkSeparatorMenuItem" id="separator">
+ <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
<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>
</widget>
</child>
<child>
- <widget class="GtkImageMenuItem" id="menuitem12">
+ <widget class="GtkMenuItem" id="menuitem3">
<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="label" translatable="yes">_Remove Torrent</property>
+ <property name="label" translatable="yes">_Tracker Options</property>
<property name="use_underline">True</property>
- <signal name="activate" handler="remove_torrent"/>
- <child internal-child="image">
- <widget class="GtkImage" id="menu-item-image9">
+ <child>
+ <widget class="GtkMenu" id="menu2">
<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="stock">gtk-remove</property>
- <property name="icon_size">1</property>
+ <child>
+ <widget class="GtkImageMenuItem" id="menuitem5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Update Tracker</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="update_tracker"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="menu-item-image5">
+ <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="stock">gtk-refresh</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="menuitem13">
+ <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="label" translatable="yes">_Edit Trackers</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="edit_trackers"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="menu-item-image12">
+ <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="stock">gtk-edit</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="menuitem4">
+ <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="label" translatable="yes">_Scrape Tracker</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="scrape_tracker"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="menu-item-image16">
+ <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="stock">gtk-info</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
</widget>
</child>
<child>
- <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
+ <widget class="GtkSeparatorMenuItem" id="separator">
<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>
</widget>
</child>
<child>
@@ -230,4 +261,3 @@
</child>
</widget>
</glade-interface>
-
diff --git a/libtorrent/include/libtorrent/alert_types.hpp b/libtorrent/include/libtorrent/alert_types.hpp
index 6f41758fa..a1dcf4364 100755
--- a/libtorrent/include/libtorrent/alert_types.hpp
+++ b/libtorrent/include/libtorrent/alert_types.hpp
@@ -82,6 +82,35 @@ namespace libtorrent
{ return std::auto_ptr<alert>(new tracker_warning_alert(*this)); }
};
+ struct TORRENT_EXPORT scrape_reply_alert: torrent_alert
+ {
+ scrape_reply_alert(torrent_handle const& h
+ , int incomplete_
+ , int complete_
+ , std::string const& msg)
+ : torrent_alert(h, alert::info, msg)
+ , incomplete(incomplete_)
+ , complete(complete_)
+ {}
+
+ int incomplete;
+ int complete;
+
+ virtual std::auto_ptr<alert> clone() const
+ { return std::auto_ptr<alert>(new scrape_reply_alert(*this)); }
+ };
+
+ struct TORRENT_EXPORT scrape_failed_alert: torrent_alert
+ {
+ scrape_failed_alert(torrent_handle const& h
+ , std::string const& msg)
+ : torrent_alert(h, alert::warning, msg)
+ {}
+
+ virtual std::auto_ptr<alert> clone() const
+ { return std::auto_ptr<alert>(new scrape_failed_alert(*this)); }
+ };
+
struct TORRENT_EXPORT tracker_reply_alert: torrent_alert
{
tracker_reply_alert(torrent_handle const& h
diff --git a/libtorrent/include/libtorrent/torrent.hpp b/libtorrent/include/libtorrent/torrent.hpp
index 5ee5ddb03..7aa779081 100755
--- a/libtorrent/include/libtorrent/torrent.hpp
+++ b/libtorrent/include/libtorrent/torrent.hpp
@@ -309,6 +309,8 @@ namespace libtorrent
virtual void tracker_request_error(tracker_request const& r
, int response_code, const std::string& str);
virtual void tracker_warning(std::string const& msg);
+ virtual void tracker_scrape_response(tracker_request const& req
+ , int complete, int incomplete, int downloaded);
// generates a request string for sending
// to the tracker
@@ -332,6 +334,7 @@ namespace libtorrent
// forcefully sets next_announce to the current time
void force_tracker_request();
void force_tracker_request(ptime);
+ void scrape_tracker();
// sets the username and password that will be sent to
// the tracker
diff --git a/libtorrent/include/libtorrent/torrent_handle.hpp b/libtorrent/include/libtorrent/torrent_handle.hpp
index 7ddb218a6..48a17e2ec 100755
--- a/libtorrent/include/libtorrent/torrent_handle.hpp
+++ b/libtorrent/include/libtorrent/torrent_handle.hpp
@@ -94,15 +94,17 @@ namespace libtorrent
, upload_rate(0)
, download_payload_rate(0)
, upload_payload_rate(0)
+ , num_seeds(0)
, num_peers(0)
, num_complete(-1)
, num_incomplete(-1)
+ , list_seeds(0)
+ , list_peers(0)
, pieces(0)
, num_pieces(0)
, total_done(0)
, total_wanted_done(0)
, total_wanted(0)
- , num_seeds(0)
, distributed_copies(0.f)
, block_size(0)
, num_uploads(0)
@@ -159,8 +161,12 @@ namespace libtorrent
float download_payload_rate;
float upload_payload_rate;
+ // the number of peers this torrent is connected to
+ // that are seeding.
+ int num_seeds;
+
// the number of peers this torrent
- // is connected to.
+ // is connected to (including seeds).
int num_peers;
// if the tracker sends scrape info in its
@@ -171,6 +177,15 @@ namespace libtorrent
int num_complete;
int num_incomplete;
+ // this is the number of seeds whose IP we know
+ // but are not necessarily connected to
+ int list_seeds;
+
+ // this is the number of peers whose IP we know
+ // (including seeds), but are not necessarily
+ // connected to
+ int list_peers;
+
const std::vector<bool>* pieces;
// this is the number of pieces the client has
@@ -193,10 +208,6 @@ namespace libtorrent
// in case any pieces are filtered as not wanted
size_type total_wanted;
- // the number of peers this torrent is connected to
- // that are seeding.
- int num_seeds;
-
// the number of distributed copies of the file.
// note that one copy may be spread out among many peers.
//
@@ -345,6 +356,9 @@ namespace libtorrent
// timed out.
void force_reannounce(boost::posix_time::time_duration) const;
+ // performs a scrape request
+ void scrape_tracker() const;
+
// returns the name of this torrent, in case it doesn't
// have metadata it returns the name assigned to it
// when it was added.
diff --git a/libtorrent/include/libtorrent/tracker_manager.hpp b/libtorrent/include/libtorrent/tracker_manager.hpp
index fdc3f6bbf..8fec9563c 100755
--- a/libtorrent/include/libtorrent/tracker_manager.hpp
+++ b/libtorrent/include/libtorrent/tracker_manager.hpp
@@ -122,6 +122,8 @@ namespace libtorrent
request_callback(): m_manager(0) {}
virtual ~request_callback() {}
virtual void tracker_warning(std::string const& msg) = 0;
+ virtual void tracker_scrape_response(tracker_request const& req
+ , int complete, int incomplete, int downloads) {}
virtual void tracker_response(
tracker_request const&
, std::vector<peer_entry>& peers
@@ -191,7 +193,7 @@ namespace libtorrent
: timeout_handler
{
tracker_connection(tracker_manager& man
- , tracker_request req
+ , tracker_request const& req
, asio::strand& str
, address bind_interface
, boost::weak_ptr<request_callback> r);
diff --git a/libtorrent/src/Makefile.in b/libtorrent/src/Makefile.in
index dfcd8338b..0d08f513d 100644
--- a/libtorrent/src/Makefile.in
+++ b/libtorrent/src/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -15,15 +15,11 @@
@SET_MAKE@
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@@ -64,6 +60,7 @@ libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libtorrent_la_DEPENDENCIES =
am__libtorrent_la_SOURCES_DIST = entry.cpp escape_string.cpp \
+ assert.cpp enum_net.cpp broadcast_socket.cpp \
peer_connection.cpp bt_peer_connection.cpp \
web_peer_connection.cpp natpmp.cpp piece_picker.cpp policy.cpp \
session.cpp session_impl.cpp sha1.cpp stat.cpp storage.cpp \
@@ -83,12 +80,12 @@ am__libtorrent_la_SOURCES_DIST = entry.cpp escape_string.cpp \
@USE_DHT_TRUE@ find_data.lo node.lo node_id.lo refresh.lo \
@USE_DHT_TRUE@ routing_table.lo rpc_manager.lo \
@USE_DHT_TRUE@ traversal_algorithm.lo
-am_libtorrent_la_OBJECTS = entry.lo escape_string.lo \
- peer_connection.lo bt_peer_connection.lo \
- web_peer_connection.lo natpmp.lo piece_picker.lo policy.lo \
- session.lo session_impl.lo sha1.lo stat.lo storage.lo \
- torrent.lo torrent_handle.lo pe_crypto.lo torrent_info.lo \
- tracker_manager.lo http_connection.lo \
+am_libtorrent_la_OBJECTS = entry.lo escape_string.lo assert.lo \
+ enum_net.lo broadcast_socket.lo peer_connection.lo \
+ bt_peer_connection.lo web_peer_connection.lo natpmp.lo \
+ piece_picker.lo policy.lo session.lo session_impl.lo sha1.lo \
+ stat.lo storage.lo torrent.lo torrent_handle.lo pe_crypto.lo \
+ torrent_info.lo tracker_manager.lo http_connection.lo \
http_tracker_connection.lo udp_tracker_connection.lo alert.lo \
identify_client.lo ip_filter.lo file.lo metadata_transfer.lo \
logger.lo file_pool.lo ut_pex.lo lsd.lo upnp.lo \
@@ -96,17 +93,21 @@ am_libtorrent_la_OBJECTS = entry.lo escape_string.lo \
http_stream.lo connection_queue.lo disk_io_thread.lo \
$(am__objects_1)
libtorrent_la_OBJECTS = $(am_libtorrent_la_OBJECTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir)
+libtorrent_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(libtorrent_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
SOURCES = $(libtorrent_la_SOURCES)
DIST_SOURCES = $(am__libtorrent_la_SOURCES_DIST)
HEADERS = $(noinst_HEADERS)
@@ -114,8 +115,6 @@ ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@@ -141,21 +140,22 @@ CYGPATH_W = @CYGPATH_W@
DEBUGFLAGS = @DEBUGFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
-DUMPBIN = @DUMPBIN@
+ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
-FGREP = @FGREP@
+F77 = @F77@
+FFLAGS = @FFLAGS@
GREP = @GREP@
HAVE_SSL = @HAVE_SSL@
+INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -163,7 +163,7 @@ LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
-NM = @NM@
+MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -180,22 +180,18 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-USE_DHT_FALSE = @USE_DHT_FALSE@
-USE_DHT_TRUE = @USE_DHT_TRUE@
-USE_ENCRYPTION_FALSE = @USE_ENCRYPTION_FALSE@
-USE_ENCRYPTION_TRUE = @USE_ENCRYPTION_TRUE@
VERSION = @VERSION@
ZLIB = @ZLIB@
ZLIBDIR = @ZLIBDIR@
ZLIBINCL = @ZLIBINCL@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
acx_pthread_config = @acx_pthread_config@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -207,6 +203,7 @@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
+builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
@@ -225,7 +222,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -235,8 +231,11 @@ program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
lib_LTLIBRARIES = libtorrent.la
@USE_DHT_TRUE@kademlia_sources = kademlia/closest_nodes.cpp \
@USE_DHT_TRUE@kademlia/dht_tracker.cpp \
@@ -249,6 +248,7 @@ lib_LTLIBRARIES = libtorrent.la
@USE_DHT_TRUE@kademlia/traversal_algorithm.cpp
libtorrent_la_SOURCES = entry.cpp escape_string.cpp \
+assert.cpp enum_net.cpp broadcast_socket.cpp \
peer_connection.cpp bt_peer_connection.cpp web_peer_connection.cpp \
natpmp.cpp piece_picker.cpp policy.cpp session.cpp session_impl.cpp sha1.cpp \
stat.cpp storage.cpp torrent.cpp torrent_handle.cpp pe_crypto.cpp \
@@ -263,14 +263,17 @@ $(kademlia_sources)
noinst_HEADERS = \
$(top_srcdir)/include/libtorrent/alert.hpp \
$(top_srcdir)/include/libtorrent/alert_types.hpp \
+$(top_srcdir)/include/libtorrent/assert.hpp \
$(top_srcdir)/include/libtorrent/aux_/session_impl.hpp \
$(top_srcdir)/include/libtorrent/bandwidth_manager.hpp \
$(top_srcdir)/include/libtorrent/bencode.hpp \
+$(top_srcdir)/include/libtorrent/broadcast_socket.hpp \
$(top_srcdir)/include/libtorrent/buffer.hpp \
$(top_srcdir)/include/libtorrent/connection_queue.hpp \
$(top_srcdir)/include/libtorrent/debug.hpp \
$(top_srcdir)/include/libtorrent/disk_io_thread.hpp \
$(top_srcdir)/include/libtorrent/entry.hpp \
+$(top_srcdir)/include/libtorrent/enum_net.hpp \
$(top_srcdir)/include/libtorrent/escape_string.hpp \
$(top_srcdir)/include/libtorrent/extensions.hpp \
$(top_srcdir)/include/libtorrent/extensions/metadata_transfer.hpp \
@@ -290,6 +293,7 @@ $(top_srcdir)/include/libtorrent/intrusive_ptr_base.hpp \
$(top_srcdir)/include/libtorrent/invariant_check.hpp \
$(top_srcdir)/include/libtorrent/io.hpp \
$(top_srcdir)/include/libtorrent/ip_filter.hpp \
+$(top_srcdir)/include/libtorrent/chained_buffer.hpp \
$(top_srcdir)/include/libtorrent/lsd.hpp \
$(top_srcdir)/include/libtorrent/peer.hpp \
$(top_srcdir)/include/libtorrent/peer_connection.hpp \
@@ -362,7 +366,7 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
@@ -373,7 +377,7 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
@@ -388,7 +392,7 @@ clean-libLTLIBRARIES:
rm -f "$${dir}/so_locations"; \
done
libtorrent.la: $(libtorrent_la_OBJECTS) $(libtorrent_la_DEPENDENCIES)
- $(CXXLINK) -rpath $(libdir) $(libtorrent_la_LDFLAGS) $(libtorrent_la_OBJECTS) $(libtorrent_la_LIBADD) $(LIBS)
+ $(libtorrent_la_LINK) -rpath $(libdir) $(libtorrent_la_OBJECTS) $(libtorrent_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -397,12 +401,15 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/broadcast_socket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bt_peer_connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closest_nodes.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection_queue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dht_tracker.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk_io_thread.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/entry.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enum_net.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/escape_string.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_pool.Plo@am__quote@
@@ -444,88 +451,88 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/web_peer_connection.Plo@am__quote@
.cpp.o:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cpp.lo:
-@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
closest_nodes.lo: kademlia/closest_nodes.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT closest_nodes.lo -MD -MP -MF "$(DEPDIR)/closest_nodes.Tpo" -c -o closest_nodes.lo `test -f 'kademlia/closest_nodes.cpp' || echo '$(srcdir)/'`kademlia/closest_nodes.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/closest_nodes.Tpo" "$(DEPDIR)/closest_nodes.Plo"; else rm -f "$(DEPDIR)/closest_nodes.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT closest_nodes.lo -MD -MP -MF $(DEPDIR)/closest_nodes.Tpo -c -o closest_nodes.lo `test -f 'kademlia/closest_nodes.cpp' || echo '$(srcdir)/'`kademlia/closest_nodes.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/closest_nodes.Tpo $(DEPDIR)/closest_nodes.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/closest_nodes.cpp' object='closest_nodes.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o closest_nodes.lo `test -f 'kademlia/closest_nodes.cpp' || echo '$(srcdir)/'`kademlia/closest_nodes.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o closest_nodes.lo `test -f 'kademlia/closest_nodes.cpp' || echo '$(srcdir)/'`kademlia/closest_nodes.cpp
dht_tracker.lo: kademlia/dht_tracker.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dht_tracker.lo -MD -MP -MF "$(DEPDIR)/dht_tracker.Tpo" -c -o dht_tracker.lo `test -f 'kademlia/dht_tracker.cpp' || echo '$(srcdir)/'`kademlia/dht_tracker.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/dht_tracker.Tpo" "$(DEPDIR)/dht_tracker.Plo"; else rm -f "$(DEPDIR)/dht_tracker.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dht_tracker.lo -MD -MP -MF $(DEPDIR)/dht_tracker.Tpo -c -o dht_tracker.lo `test -f 'kademlia/dht_tracker.cpp' || echo '$(srcdir)/'`kademlia/dht_tracker.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/dht_tracker.Tpo $(DEPDIR)/dht_tracker.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/dht_tracker.cpp' object='dht_tracker.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dht_tracker.lo `test -f 'kademlia/dht_tracker.cpp' || echo '$(srcdir)/'`kademlia/dht_tracker.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dht_tracker.lo `test -f 'kademlia/dht_tracker.cpp' || echo '$(srcdir)/'`kademlia/dht_tracker.cpp
find_data.lo: kademlia/find_data.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT find_data.lo -MD -MP -MF "$(DEPDIR)/find_data.Tpo" -c -o find_data.lo `test -f 'kademlia/find_data.cpp' || echo '$(srcdir)/'`kademlia/find_data.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/find_data.Tpo" "$(DEPDIR)/find_data.Plo"; else rm -f "$(DEPDIR)/find_data.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT find_data.lo -MD -MP -MF $(DEPDIR)/find_data.Tpo -c -o find_data.lo `test -f 'kademlia/find_data.cpp' || echo '$(srcdir)/'`kademlia/find_data.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/find_data.Tpo $(DEPDIR)/find_data.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/find_data.cpp' object='find_data.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o find_data.lo `test -f 'kademlia/find_data.cpp' || echo '$(srcdir)/'`kademlia/find_data.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o find_data.lo `test -f 'kademlia/find_data.cpp' || echo '$(srcdir)/'`kademlia/find_data.cpp
node.lo: kademlia/node.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT node.lo -MD -MP -MF "$(DEPDIR)/node.Tpo" -c -o node.lo `test -f 'kademlia/node.cpp' || echo '$(srcdir)/'`kademlia/node.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/node.Tpo" "$(DEPDIR)/node.Plo"; else rm -f "$(DEPDIR)/node.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT node.lo -MD -MP -MF $(DEPDIR)/node.Tpo -c -o node.lo `test -f 'kademlia/node.cpp' || echo '$(srcdir)/'`kademlia/node.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/node.Tpo $(DEPDIR)/node.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/node.cpp' object='node.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o node.lo `test -f 'kademlia/node.cpp' || echo '$(srcdir)/'`kademlia/node.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o node.lo `test -f 'kademlia/node.cpp' || echo '$(srcdir)/'`kademlia/node.cpp
node_id.lo: kademlia/node_id.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT node_id.lo -MD -MP -MF "$(DEPDIR)/node_id.Tpo" -c -o node_id.lo `test -f 'kademlia/node_id.cpp' || echo '$(srcdir)/'`kademlia/node_id.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/node_id.Tpo" "$(DEPDIR)/node_id.Plo"; else rm -f "$(DEPDIR)/node_id.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT node_id.lo -MD -MP -MF $(DEPDIR)/node_id.Tpo -c -o node_id.lo `test -f 'kademlia/node_id.cpp' || echo '$(srcdir)/'`kademlia/node_id.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/node_id.Tpo $(DEPDIR)/node_id.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/node_id.cpp' object='node_id.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o node_id.lo `test -f 'kademlia/node_id.cpp' || echo '$(srcdir)/'`kademlia/node_id.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o node_id.lo `test -f 'kademlia/node_id.cpp' || echo '$(srcdir)/'`kademlia/node_id.cpp
refresh.lo: kademlia/refresh.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT refresh.lo -MD -MP -MF "$(DEPDIR)/refresh.Tpo" -c -o refresh.lo `test -f 'kademlia/refresh.cpp' || echo '$(srcdir)/'`kademlia/refresh.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/refresh.Tpo" "$(DEPDIR)/refresh.Plo"; else rm -f "$(DEPDIR)/refresh.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT refresh.lo -MD -MP -MF $(DEPDIR)/refresh.Tpo -c -o refresh.lo `test -f 'kademlia/refresh.cpp' || echo '$(srcdir)/'`kademlia/refresh.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/refresh.Tpo $(DEPDIR)/refresh.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/refresh.cpp' object='refresh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o refresh.lo `test -f 'kademlia/refresh.cpp' || echo '$(srcdir)/'`kademlia/refresh.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o refresh.lo `test -f 'kademlia/refresh.cpp' || echo '$(srcdir)/'`kademlia/refresh.cpp
routing_table.lo: kademlia/routing_table.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT routing_table.lo -MD -MP -MF "$(DEPDIR)/routing_table.Tpo" -c -o routing_table.lo `test -f 'kademlia/routing_table.cpp' || echo '$(srcdir)/'`kademlia/routing_table.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/routing_table.Tpo" "$(DEPDIR)/routing_table.Plo"; else rm -f "$(DEPDIR)/routing_table.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT routing_table.lo -MD -MP -MF $(DEPDIR)/routing_table.Tpo -c -o routing_table.lo `test -f 'kademlia/routing_table.cpp' || echo '$(srcdir)/'`kademlia/routing_table.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/routing_table.Tpo $(DEPDIR)/routing_table.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/routing_table.cpp' object='routing_table.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o routing_table.lo `test -f 'kademlia/routing_table.cpp' || echo '$(srcdir)/'`kademlia/routing_table.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o routing_table.lo `test -f 'kademlia/routing_table.cpp' || echo '$(srcdir)/'`kademlia/routing_table.cpp
rpc_manager.lo: kademlia/rpc_manager.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT rpc_manager.lo -MD -MP -MF "$(DEPDIR)/rpc_manager.Tpo" -c -o rpc_manager.lo `test -f 'kademlia/rpc_manager.cpp' || echo '$(srcdir)/'`kademlia/rpc_manager.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/rpc_manager.Tpo" "$(DEPDIR)/rpc_manager.Plo"; else rm -f "$(DEPDIR)/rpc_manager.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT rpc_manager.lo -MD -MP -MF $(DEPDIR)/rpc_manager.Tpo -c -o rpc_manager.lo `test -f 'kademlia/rpc_manager.cpp' || echo '$(srcdir)/'`kademlia/rpc_manager.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/rpc_manager.Tpo $(DEPDIR)/rpc_manager.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/rpc_manager.cpp' object='rpc_manager.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o rpc_manager.lo `test -f 'kademlia/rpc_manager.cpp' || echo '$(srcdir)/'`kademlia/rpc_manager.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o rpc_manager.lo `test -f 'kademlia/rpc_manager.cpp' || echo '$(srcdir)/'`kademlia/rpc_manager.cpp
traversal_algorithm.lo: kademlia/traversal_algorithm.cpp
-@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT traversal_algorithm.lo -MD -MP -MF "$(DEPDIR)/traversal_algorithm.Tpo" -c -o traversal_algorithm.lo `test -f 'kademlia/traversal_algorithm.cpp' || echo '$(srcdir)/'`kademlia/traversal_algorithm.cpp; \
-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/traversal_algorithm.Tpo" "$(DEPDIR)/traversal_algorithm.Plo"; else rm -f "$(DEPDIR)/traversal_algorithm.Tpo"; exit 1; fi
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT traversal_algorithm.lo -MD -MP -MF $(DEPDIR)/traversal_algorithm.Tpo -c -o traversal_algorithm.lo `test -f 'kademlia/traversal_algorithm.cpp' || echo '$(srcdir)/'`kademlia/traversal_algorithm.cpp
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/traversal_algorithm.Tpo $(DEPDIR)/traversal_algorithm.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='kademlia/traversal_algorithm.cpp' object='traversal_algorithm.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o traversal_algorithm.lo `test -f 'kademlia/traversal_algorithm.cpp' || echo '$(srcdir)/'`kademlia/traversal_algorithm.cpp
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o traversal_algorithm.lo `test -f 'kademlia/traversal_algorithm.cpp' || echo '$(srcdir)/'`kademlia/traversal_algorithm.cpp
mostlyclean-libtool:
-rm -f *.lo
@@ -533,10 +540,6 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-distclean-libtool:
- -rm -f libtool
-uninstall-info-am:
-
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@@ -586,23 +589,21 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
- $(mkdir_p) $(distdir)/../include/libtorrent $(distdir)/../include/libtorrent/aux_ $(distdir)/../include/libtorrent/extensions
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
@@ -618,7 +619,7 @@ check: check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(libdir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
@@ -653,7 +654,7 @@ distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
- distclean-libtool distclean-tags
+ distclean-tags
dvi: dvi-am
@@ -667,12 +668,20 @@ info-am:
install-data-am:
+install-dvi: install-dvi-am
+
install-exec-am: install-libLTLIBRARIES
+install-html: install-html-am
+
install-info: install-info-am
install-man:
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
installcheck-am:
maintainer-clean: maintainer-clean-am
@@ -693,20 +702,23 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
- install install-am install-data install-data-am install-exec \
- install-exec-am install-info install-info-am \
- install-libLTLIBRARIES install-man install-strip installcheck \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am uninstall-info-am \
- uninstall-libLTLIBRARIES
+ tags uninstall uninstall-am uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/libtorrent/src/http_tracker_connection.cpp b/libtorrent/src/http_tracker_connection.cpp
index ed9823b83..86d21e494 100755
--- a/libtorrent/src/http_tracker_connection.cpp
+++ b/libtorrent/src/http_tracker_connection.cpp
@@ -797,7 +797,7 @@ namespace libtorrent
return;
}
m_buffer.erase(m_buffer.begin(), m_buffer.begin() + m_parser.body_start());
- if (inflate_gzip(m_buffer, tracker_request(), cb.get(),
+ if (inflate_gzip(m_buffer, tracker_req(), cb.get(),
m_settings.tracker_maximum_response_length))
{
close();
@@ -897,21 +897,35 @@ namespace libtorrent
}
catch(type_error const&) {}
- std::vector<peer_entry> peer_list;
-
if (tracker_req().kind == tracker_request::scrape_request)
{
std::string ih;
std::copy(tracker_req().info_hash.begin(), tracker_req().info_hash.end()
, std::back_inserter(ih));
entry scrape_data = e["files"][ih];
- int complete = scrape_data["complete"].integer();
- int incomplete = scrape_data["incomplete"].integer();
- cb->tracker_response(tracker_request(), peer_list, 0, complete
- , incomplete);
+
+ int complete = -1;
+ int incomplete = -1;
+ int downloaded = -1;
+
+ entry const* complete_ent = scrape_data.find_key("complete");
+ if (complete_ent && complete_ent->type() == entry::int_t)
+ complete = complete_ent->integer();
+
+ entry const* incomplete_ent = scrape_data.find_key("incomplete");
+ if (incomplete_ent && incomplete_ent->type() == entry::int_t)
+ incomplete = incomplete_ent->integer();
+
+ entry const* downloaded_ent = scrape_data.find_key("downloaded");
+ if (downloaded_ent && downloaded_ent->type() == entry::int_t)
+ downloaded = downloaded_ent->integer();
+
+ cb->tracker_scrape_response(tracker_req(), complete
+ , incomplete, downloaded);
return;
}
+ std::vector<peer_entry> peer_list;
int interval = (int)e["interval"].integer();
if (e["peers"].type() == entry::string_t)
@@ -965,16 +979,16 @@ namespace libtorrent
try { incomplete = e["incomplete"].integer(); }
catch(type_error&) {}
- cb->tracker_response(tracker_request(), peer_list, interval, complete
+ cb->tracker_response(tracker_req(), peer_list, interval, complete
, incomplete);
}
catch(type_error& e)
{
- cb->tracker_request_error(tracker_request(), m_parser.status_code(), e.what());
+ cb->tracker_request_error(tracker_req(), m_parser.status_code(), e.what());
}
catch(std::runtime_error& e)
{
- cb->tracker_request_error(tracker_request(), m_parser.status_code(), e.what());
+ cb->tracker_request_error(tracker_req(), m_parser.status_code(), e.what());
}
}
diff --git a/libtorrent/src/torrent.cpp b/libtorrent/src/torrent.cpp
index 43625e958..33a73d1f3 100755
--- a/libtorrent/src/torrent.cpp
+++ b/libtorrent/src/torrent.cpp
@@ -492,6 +492,21 @@ namespace libtorrent
#endif
+ void torrent::scrape_tracker()
+ {
+ if (m_trackers.empty()) return;
+
+ TORRENT_ASSERT(m_currently_trying_tracker >= 0);
+ TORRENT_ASSERT(m_currently_trying_tracker < int(m_trackers.size()));
+
+ tracker_request req;
+ req.info_hash = m_torrent_file->info_hash();
+ req.kind = tracker_request::scrape_request;
+ req.url = m_trackers[m_currently_trying_tracker].url;
+ m_ses.m_tracker_manager.queue_request(m_ses.m_strand, m_ses.m_half_open, req
+ , tracker_login(), m_ses.m_listen_interface.address(), shared_from_this());
+ }
+
// returns true if it is time for this torrent to make another
// tracker request
bool torrent::should_request()
@@ -520,8 +535,28 @@ namespace libtorrent
}
}
+ void torrent::tracker_scrape_response(tracker_request const& req
+ , int complete, int incomplete, int downloaded)
+ {
+ session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
+
+ INVARIANT_CHECK;
+ TORRENT_ASSERT(req.kind == tracker_request::scrape_request);
+
+ if (complete >= 0) m_complete = complete;
+ if (incomplete >= 0) m_incomplete = incomplete;
+
+ if (m_ses.m_alerts.should_post(alert::info))
+ {
+ std::stringstream s;
+ s << "Got scrape response from tracker: " << req.url;
+ m_ses.m_alerts.post_alert(scrape_reply_alert(
+ get_handle(), m_incomplete, m_complete, s.str()));
+ }
+ }
+
void torrent::tracker_response(
- tracker_request const&
+ tracker_request const& r
, std::vector<peer_entry>& peer_list
, int interval
, int complete
@@ -530,6 +565,7 @@ namespace libtorrent
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
INVARIANT_CHECK;
+ TORRENT_ASSERT(r.kind == tracker_request::announce_request);
m_failed_trackers = 0;
// announce intervals less than 5 minutes
@@ -606,8 +642,7 @@ namespace libtorrent
if (m_ses.m_alerts.should_post(alert::info))
{
std::stringstream s;
- s << "Got response from tracker: "
- << m_trackers[m_last_working_tracker].url;
+ s << "Got response from tracker: " << r.url;
m_ses.m_alerts.post_alert(tracker_reply_alert(
get_handle(), peer_list.size(), s.str()));
}
@@ -2860,8 +2895,12 @@ namespace libtorrent
torrent_status st;
- st.num_peers = (int)std::count_if(m_connections.begin(), m_connections.end(),
- !boost::bind(&peer_connection::is_connecting, _1));
+ st.num_peers = (int)std::count_if(m_connections.begin(), m_connections.end()
+ , !boost::bind(&peer_connection::is_connecting, _1));
+
+ st.list_peers = std::distance(m_policy.begin_peer(), m_policy.end_peer());
+ st.list_seeds = (int)std::count_if(m_policy.begin_peer(), m_policy.end_peer()
+ , boost::bind(&policy::peer::seed, bind(&policy::iterator::value_type::second, _1)));
st.storage_mode = m_storage_mode;
@@ -2992,7 +3031,7 @@ namespace libtorrent
}
void torrent::tracker_request_timed_out(
- tracker_request const&)
+ tracker_request const& r)
{
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
@@ -3005,19 +3044,26 @@ namespace libtorrent
if (m_ses.m_alerts.should_post(alert::warning))
{
std::stringstream s;
- s << "tracker: \""
- << m_trackers[m_currently_trying_tracker].url
- << "\" timed out";
- m_ses.m_alerts.post_alert(tracker_alert(get_handle()
- , m_failed_trackers + 1, 0, s.str()));
+ s << "tracker: \"" << r.url << "\" timed out";
+ if (r.kind == tracker_request::announce_request)
+ {
+ m_ses.m_alerts.post_alert(tracker_alert(get_handle()
+ , m_failed_trackers + 1, 0, s.str()));
+ }
+ else if (r.kind == tracker_request::scrape_request)
+ {
+ m_ses.m_alerts.post_alert(scrape_failed_alert(get_handle(), s.str()));
+ }
}
- try_next_tracker();
+
+ if (r.kind == tracker_request::announce_request)
+ try_next_tracker();
}
// TODO: with some response codes, we should just consider
// the tracker as a failure and not retry
// it anymore
- void torrent::tracker_request_error(tracker_request const&
+ void torrent::tracker_request_error(tracker_request const& r
, int response_code, const std::string& str)
{
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
@@ -3030,14 +3076,20 @@ namespace libtorrent
if (m_ses.m_alerts.should_post(alert::warning))
{
std::stringstream s;
- s << "tracker: \""
- << m_trackers[m_currently_trying_tracker].url
- << "\" " << str;
- m_ses.m_alerts.post_alert(tracker_alert(get_handle()
- , m_failed_trackers + 1, response_code, s.str()));
+ s << "tracker: \"" << r.url << "\" " << str;
+ if (r.kind == tracker_request::announce_request)
+ {
+ m_ses.m_alerts.post_alert(tracker_alert(get_handle()
+ , m_failed_trackers + 1, response_code, s.str()));
+ }
+ else if (r.kind == tracker_request::scrape_request)
+ {
+ m_ses.m_alerts.post_alert(scrape_failed_alert(get_handle(), s.str()));
+ }
}
- try_next_tracker();
+ if (r.kind == tracker_request::announce_request)
+ try_next_tracker();
}
diff --git a/libtorrent/src/torrent_handle.cpp b/libtorrent/src/torrent_handle.cpp
index b19e05bb4..aa517ac76 100755
--- a/libtorrent/src/torrent_handle.cpp
+++ b/libtorrent/src/torrent_handle.cpp
@@ -863,6 +863,20 @@ namespace libtorrent
t->force_tracker_request();
}
+ void torrent_handle::scrape_tracker() const
+ {
+ INVARIANT_CHECK;
+
+ if (m_ses == 0) throw_invalid_handle();
+ TORRENT_ASSERT(m_chk);
+
+ session_impl::mutex_t::scoped_lock l(m_ses->m_mutex);
+ boost::shared_ptr<torrent> t = m_ses->find_torrent(m_info_hash).lock();
+ if (!t) throw_invalid_handle();
+
+ t->scrape_tracker();
+ }
+
void torrent_handle::set_ratio(float ratio) const
{
INVARIANT_CHECK;
diff --git a/libtorrent/src/tracker_manager.cpp b/libtorrent/src/tracker_manager.cpp
index 82c5cc948..19da33d4b 100755
--- a/libtorrent/src/tracker_manager.cpp
+++ b/libtorrent/src/tracker_manager.cpp
@@ -359,7 +359,7 @@ namespace libtorrent
tracker_connection::tracker_connection(
tracker_manager& man
- , tracker_request req
+ , tracker_request const& req
, asio::strand& str
, address bind_interface_
, boost::weak_ptr<request_callback> r)
diff --git a/libtorrent/src/udp_tracker_connection.cpp b/libtorrent/src/udp_tracker_connection.cpp
index 6d76988d3..eb138e67a 100755
--- a/libtorrent/src/udp_tracker_connection.cpp
+++ b/libtorrent/src/udp_tracker_connection.cpp
@@ -548,7 +548,7 @@ namespace libtorrent
}
int complete = detail::read_int32(buf);
- /*int downloaded = */detail::read_int32(buf);
+ int downloaded = detail::read_int32(buf);
int incomplete = detail::read_int32(buf);
boost::shared_ptr<request_callback> cb = requester();
@@ -559,9 +559,8 @@ namespace libtorrent
return;
}
- std::vector<peer_entry> peer_list;
- cb->tracker_response(tracker_req(), peer_list, 0
- , complete, incomplete);
+ cb->tracker_scrape_response(tracker_req()
+ , complete, incomplete, downloaded);
m_man.remove_request(this);
close();
diff --git a/src/common.py b/src/common.py
index 4be17a7bc..9a4735314 100644
--- a/src/common.py
+++ b/src/common.py
@@ -207,43 +207,59 @@ def exec_command(executable, *parameters):
warning.destroy()
def send_info():
- import urllib
- import platform
- import gtk
- import os
- import common
-
- pygtk = '%i.%i.%i' %(gtk.pygtk_version[0],gtk.pygtk_version[1],gtk.pygtk_version[2])
+ import threading
+ class Send_Info_Thread(threading.Thread):
+ def __init__(self):
+ threading.Thread.__init__(self)
+ def run(self):
+ import urllib
+ import platform
+ import gtk
+ import os
+ import common
- urllib.urlopen("http://download.deluge-torrent.org/stats.php?processor=" + \
- platform.machine() + "&python=" + platform.python_version() \
- + "&os=" + platform.system() + "&pygtk=" + pygtk)
+ pygtk = '%i.%i.%i' %(gtk.pygtk_version[0],gtk.pygtk_version[1],gtk.pygtk_version[2])
- f = open(os.path.join(CONFIG_DIR, 'infosent'), 'w')
- f.write("")
- f.close
+ try:
+ urllib.urlopen("http://download.deluge-torrent.org/stats.php?processor=" + \
+ platform.machine() + "&python=" + platform.python_version() \
+ + "&os=" + platform.system() + "&pygtk=" + pygtk)
+ except IOError:
+ print "Network error while trying to send info"
+ else:
+ f = open(os.path.join(CONFIG_DIR, 'infosent'), 'w')
+ f.write("")
+ f.close
+ Send_Info_Thread().start()
def new_release_check():
- import urllib
- try:
- new_release = urllib.urlopen("http://download.deluge-torrent.org/\
+ import threading
+ class ReleaseThread(threading.Thread):
+ def __init__(self):
+ threading.Thread.__init__(self)
+ def run(self):
+ import urllib
+ try:
+ new_release = urllib.urlopen("http://download.deluge-torrent.org/\
version").read().strip()
- except IOError:
- print "Network error while trying to check for a newer version of \
+ except IOError:
+ print "Network error while trying to check for a newer version of \
Deluge"
- new_release = ""
+ new_release = ""
- if new_release > PROGRAM_VERSION:
- import gtk
- import dialogs
- gtk.gdk.threads_enter()
- result = dialogs.show_popup_question(None, _("There is a newer version \
+ if new_release > PROGRAM_VERSION:
+ import gtk
+ import dialogs
+ gtk.gdk.threads_enter()
+ result = dialogs.show_popup_question(None, _("There is a newer version \
of Deluge. Would you like to be taken to our download site?"))
- gtk.gdk.threads_leave()
- if result:
- open_url_in_browser('http://download.deluge-torrent.org/')
- else:
- pass
+ gtk.gdk.threads_leave()
+ if result:
+ open_url_in_browser('http://download.deluge-torrent.org/')
+ else:
+ pass
+
+ ReleaseThread().start()
# Encryption States
class EncState:
diff --git a/src/core.py b/src/core.py
index b41ca2632..c74024e7b 100644
--- a/src/core.py
+++ b/src/core.py
@@ -78,7 +78,7 @@ PREF_FUNCTIONS = {
"max_upload_speed_bps" : deluge_core.set_upload_rate_limit,
"enable_dht" : None, # not a normal pref in that is is applied only on start
"use_upnp" : deluge_core.use_upnp,
-# "use_lsd" : deluge_core.use_lsd,
+ "use_lsd" : deluge_core.use_lsd,
"use_natpmp" : deluge_core.use_natpmp,
"use_utpex" : deluge_core.use_utpex,
}
@@ -732,6 +732,9 @@ of HD space! Oops!\nWe had to pause at least one torrent"))
def update_tracker(self, unique_ID):
deluge_core.reannounce(unique_ID)
+ def scrape_tracker(self, unique_ID):
+ deluge_core.scrape_tracker(unique_ID)
+
def pause(self, unique_ID):
deluge_core.pause(unique_ID)
diff --git a/src/deluge_core.cpp b/src/deluge_core.cpp
index 39730c851..6322697ec 100644
--- a/src/deluge_core.cpp
+++ b/src/deluge_core.cpp
@@ -429,12 +429,7 @@ static PyObject *torrent_init(PyObject *self, PyObject *args)
static PyObject *torrent_quit(PyObject *self, PyObject *args)
{
- printf("core: removing torrents...\r\n");
- delete M_torrents;
- printf("core: removing settings...\r\n");
- delete M_settings;
- printf("core: shutting down session...\r\n");
- delete M_ses;
+ M_ses->abort();
Py_DECREF(M_constants);
printf("core shut down.\r\n");
@@ -1995,6 +1990,24 @@ static PyObject *torrent_remap_files(PyObject *self, PyObject *args)
}
Py_INCREF(Py_None); return Py_None;
}
+static PyObject *torrent_scrape_tracker(PyObject *self, PyObject *args)
+{
+ python_long unique_ID;
+ if (!PyArg_ParseTuple(args, "i", &unique_ID))
+ return NULL;
+
+ long index = get_index_from_unique_ID(unique_ID);
+ if (PyErr_Occurred())
+ return NULL;
+
+ torrent_handle& h = M_torrents->at(index).handle;
+ // For valid torrents, save fastresume data
+ if (h.is_valid())
+ {
+ h.scrape_tracker();
+ }
+ Py_INCREF(Py_None); return Py_None;
+}
//====================
// Python Module data
@@ -2061,6 +2074,7 @@ static PyMethodDef deluge_core_methods[] =
{"get_all_piece_info", torrent_get_all_piece_info, METH_VARARGS, "."},
{"get_file_piece_range", torrent_get_file_piece_range, METH_VARARGS, "."},
{"remap_files", torrent_remap_files, METH_VARARGS, "."},
+ {"scrape_tracker", torrent_scrape_tracker, METH_VARARGS, "."},
{NULL}
};
diff --git a/src/dialogs.py b/src/dialogs.py
index 340422756..840b90b10 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -100,7 +100,7 @@ class PreferencesDlg:
self.glade.get_widget("chk_tracker_proxy").set_active(self.preferences.get("tracker_proxy"))
self.glade.get_widget("chk_dht_proxy").set_active(self.preferences.get("dht_proxy"))
self.glade.get_widget("chk_upnp").set_active(self.preferences.get("use_upnp"))
-# self.glade.get_widget("chk_lsd").set_active(self.preferences.get("use_lsd"))
+ self.glade.get_widget("chk_lsd").set_active(self.preferences.get("use_lsd"))
self.glade.get_widget("chk_random_port").set_active(self.preferences.get("random_port"))
self.glade.get_widget("chk_natpmp").set_active(self.preferences.get("use_natpmp"))
self.glade.get_widget("chk_utpex").set_active(self.preferences.get("use_utpex"))
@@ -218,7 +218,7 @@ class PreferencesDlg:
self.preferences.set("dht_proxy", self.glade.get_widget("chk_dht_proxy").get_active())
self.preferences.set("web_proxy", self.glade.get_widget("chk_web_proxy").get_active())
self.preferences.set("use_upnp", self.glade.get_widget("chk_upnp").get_active())
-# self.preferences.set("use_lsd", self.glade.get_widget("chk_lsd").get_active())
+ self.preferences.set("use_lsd", self.glade.get_widget("chk_lsd").get_active())
self.preferences.set("tracker_proxy_type", self.glade.get_widget("combo_tracker_proxy_type").get_active())
self.preferences.set("dht_proxy_type", self.glade.get_widget("combo_dht_proxy_type").get_active())
self.preferences.set("web_proxy_type", self.glade.get_widget("combo_web_proxy_type").get_active())
diff --git a/src/interface.py b/src/interface.py
index 199d84491..1eeafa758 100644
--- a/src/interface.py
+++ b/src/interface.py
@@ -219,6 +219,7 @@ class DelugeGTK:
"tor_start": self.tor_start,
"tor_pause": self.tor_pause,
"update_tracker": self.update_tracker,
+ "scrape_tracker": self.scrape_tracker,
"clear_finished": self.clear_finished,
"queue_up": self.q_torrent_up,
"queue_down": self.q_torrent_down
@@ -1468,6 +1469,11 @@ this torrent will be deleted!") + "</i>")
unique_ids = self.get_selected_torrent_rows()
for uid in unique_ids:
self.manager.update_tracker(uid)
+
+ def scrape_tracker(self, obj=None):
+ unique_ids = self.get_selected_torrent_rows()
+ for uid in unique_ids:
+ self.manager.scrape_tracker(uid)
def clear_finished(self, obj=None):
print "Clearing completed torrents"
@@ -1593,7 +1599,8 @@ want to remove all seeding torrents?")):
pref_name = columns + '_width'
column = getattr(self, columns + '_column')
self.config.set(pref_name, column.get_width())
-
+ self.config.save()
+
# Saves the tabs order (except the 'Details' tab)
def save_tabs_order(self):
tabs_order = []
diff --git a/src/pref.py b/src/pref.py
index d79036b19..f4a00d687 100644
--- a/src/pref.py
+++ b/src/pref.py
@@ -126,7 +126,7 @@ if common.windows_check():
"use_default_dir" : False,
"use_natpmp" : False,
"use_upnp" : True,
- # "use_lsd" : False,
+ "use_lsd" : False,
"use_utpex" : True,
"new_releases" : True,
"window_height" : 480,
@@ -239,7 +239,7 @@ else:
"use_default_dir" : False,
"use_natpmp" : False,
"use_upnp" : True,
-# "use_lsd" : False,
+ "use_lsd" : False,
"use_utpex" : True,
"new_releases" : True,
"window_height" : 480,