made sequenced_download_threshold a per torrent setting. Updated the project page layout. Removed incorrect invariant checks in piece picker.

This commit is contained in:
Arvid Norberg 2006-09-04 17:17:45 +00:00
parent 7bc1214749
commit 191fd76b42
14 changed files with 220 additions and 203 deletions

View File

@ -1,7 +1,8 @@
* modified the api slightly to make sequenced download threshold
a per torrent-setting.
* changed the address type to support IPv6
* fixed in piece picker which would assert when changing
sequenced download threshold on torrents with already
downloaded pieces.
* fixed bug in piece picker which would not behave as
expected with regard to sequenced download threshold.
* fixed bug with file_progress() with files > 2 GB.
* added --enable-examples option to configure script.
* fixed problem with the resource distribution algorithm

View File

@ -75,89 +75,90 @@
<li><a class="reference" href="#connect-peer" id="id57" name="id57">connect_peer()</a></li>
<li><a class="reference" href="#set-ratio" id="id58" name="id58">set_ratio()</a></li>
<li><a class="reference" href="#set-upload-limit-set-download-limit" id="id59" name="id59">set_upload_limit() set_download_limit()</a></li>
<li><a class="reference" href="#set-peer-upload-limit-set-peer-download-limit" id="id60" name="id60">set_peer_upload_limit() set_peer_download_limit()</a></li>
<li><a class="reference" href="#pause-resume-is-paused" id="id61" name="id61">pause() resume() is_paused()</a></li>
<li><a class="reference" href="#is-seed" id="id62" name="id62">is_seed()</a></li>
<li><a class="reference" href="#has-metadata" id="id63" name="id63">has_metadata()</a></li>
<li><a class="reference" href="#set-tracker-login" id="id64" name="id64">set_tracker_login()</a></li>
<li><a class="reference" href="#trackers-replace-trackers" id="id65" name="id65">trackers() replace_trackers()</a></li>
<li><a class="reference" href="#add-url-seed" id="id66" name="id66">add_url_seed()</a></li>
<li><a class="reference" href="#use-interface" id="id67" name="id67">use_interface()</a></li>
<li><a class="reference" href="#info-hash" id="id68" name="id68">info_hash()</a></li>
<li><a class="reference" href="#id5" id="id69" name="id69">set_max_uploads() set_max_connections()</a></li>
<li><a class="reference" href="#write-resume-data" id="id70" name="id70">write_resume_data()</a></li>
<li><a class="reference" href="#metadata" id="id71" name="id71">metadata()</a></li>
<li><a class="reference" href="#id6" id="id72" name="id72">status()</a></li>
<li><a class="reference" href="#get-download-queue" id="id73" name="id73">get_download_queue()</a></li>
<li><a class="reference" href="#get-peer-info" id="id74" name="id74">get_peer_info()</a></li>
<li><a class="reference" href="#get-torrent-info" id="id75" name="id75">get_torrent_info()</a></li>
<li><a class="reference" href="#is-valid" id="id76" name="id76">is_valid()</a></li>
<li><a class="reference" href="#set-sequenced-download-threshold" id="id60" name="id60">set_sequenced_download_threshold()</a></li>
<li><a class="reference" href="#set-peer-upload-limit-set-peer-download-limit" id="id61" name="id61">set_peer_upload_limit() set_peer_download_limit()</a></li>
<li><a class="reference" href="#pause-resume-is-paused" id="id62" name="id62">pause() resume() is_paused()</a></li>
<li><a class="reference" href="#is-seed" id="id63" name="id63">is_seed()</a></li>
<li><a class="reference" href="#has-metadata" id="id64" name="id64">has_metadata()</a></li>
<li><a class="reference" href="#set-tracker-login" id="id65" name="id65">set_tracker_login()</a></li>
<li><a class="reference" href="#trackers-replace-trackers" id="id66" name="id66">trackers() replace_trackers()</a></li>
<li><a class="reference" href="#add-url-seed" id="id67" name="id67">add_url_seed()</a></li>
<li><a class="reference" href="#use-interface" id="id68" name="id68">use_interface()</a></li>
<li><a class="reference" href="#info-hash" id="id69" name="id69">info_hash()</a></li>
<li><a class="reference" href="#id5" id="id70" name="id70">set_max_uploads() set_max_connections()</a></li>
<li><a class="reference" href="#write-resume-data" id="id71" name="id71">write_resume_data()</a></li>
<li><a class="reference" href="#metadata" id="id72" name="id72">metadata()</a></li>
<li><a class="reference" href="#id6" id="id73" name="id73">status()</a></li>
<li><a class="reference" href="#get-download-queue" id="id74" name="id74">get_download_queue()</a></li>
<li><a class="reference" href="#get-peer-info" id="id75" name="id75">get_peer_info()</a></li>
<li><a class="reference" href="#get-torrent-info" id="id76" name="id76">get_torrent_info()</a></li>
<li><a class="reference" href="#is-valid" id="id77" name="id77">is_valid()</a></li>
</ul>
</li>
<li><a class="reference" href="#torrent-status" id="id77" name="id77">torrent_status</a></li>
<li><a class="reference" href="#peer-info" id="id78" name="id78">peer_info</a></li>
<li><a class="reference" href="#session-settings" id="id79" name="id79">session_settings</a></li>
<li><a class="reference" href="#ip-filter" id="id80" name="id80">ip_filter</a><ul>
<li><a class="reference" href="#id8" id="id81" name="id81">ip_filter()</a></li>
<li><a class="reference" href="#add-rule" id="id82" name="id82">add_rule()</a></li>
<li><a class="reference" href="#access" id="id83" name="id83">access()</a></li>
<li><a class="reference" href="#export-filter" id="id84" name="id84">export_filter()</a></li>
<li><a class="reference" href="#torrent-status" id="id78" name="id78">torrent_status</a></li>
<li><a class="reference" href="#peer-info" id="id79" name="id79">peer_info</a></li>
<li><a class="reference" href="#session-settings" id="id80" name="id80">session_settings</a></li>
<li><a class="reference" href="#ip-filter" id="id81" name="id81">ip_filter</a><ul>
<li><a class="reference" href="#id8" id="id82" name="id82">ip_filter()</a></li>
<li><a class="reference" href="#add-rule" id="id83" name="id83">add_rule()</a></li>
<li><a class="reference" href="#access" id="id84" name="id84">access()</a></li>
<li><a class="reference" href="#export-filter" id="id85" name="id85">export_filter()</a></li>
</ul>
</li>
<li><a class="reference" href="#big-number" id="id85" name="id85">big_number</a></li>
<li><a class="reference" href="#hasher" id="id86" name="id86">hasher</a></li>
<li><a class="reference" href="#fingerprint" id="id87" name="id87">fingerprint</a></li>
<li><a class="reference" href="#free-functions" id="id88" name="id88">free functions</a><ul>
<li><a class="reference" href="#identify-client" id="id89" name="id89">identify_client()</a></li>
<li><a class="reference" href="#client-fingerprint" id="id90" name="id90">client_fingerprint()</a></li>
<li><a class="reference" href="#bdecode-bencode" id="id91" name="id91">bdecode() bencode()</a></li>
<li><a class="reference" href="#big-number" id="id86" name="id86">big_number</a></li>
<li><a class="reference" href="#hasher" id="id87" name="id87">hasher</a></li>
<li><a class="reference" href="#fingerprint" id="id88" name="id88">fingerprint</a></li>
<li><a class="reference" href="#free-functions" id="id89" name="id89">free functions</a><ul>
<li><a class="reference" href="#identify-client" id="id90" name="id90">identify_client()</a></li>
<li><a class="reference" href="#client-fingerprint" id="id91" name="id91">client_fingerprint()</a></li>
<li><a class="reference" href="#bdecode-bencode" id="id92" name="id92">bdecode() bencode()</a></li>
</ul>
</li>
<li><a class="reference" href="#alerts" id="id92" name="id92">alerts</a><ul>
<li><a class="reference" href="#listen-failed-alert" id="id93" name="id93">listen_failed_alert</a></li>
<li><a class="reference" href="#file-error-alert" id="id94" name="id94">file_error_alert</a></li>
<li><a class="reference" href="#tracker-announce-alert" id="id95" name="id95">tracker_announce_alert</a></li>
<li><a class="reference" href="#tracker-alert" id="id96" name="id96">tracker_alert</a></li>
<li><a class="reference" href="#tracker-reply-alert" id="id97" name="id97">tracker_reply_alert</a></li>
<li><a class="reference" href="#tracker-warning-alert" id="id98" name="id98">tracker_warning_alert</a></li>
<li><a class="reference" href="#url-seed-alert" id="id99" name="id99">url_seed_alert</a></li>
<li><a class="reference" href="#hash-failed-alert" id="id100" name="id100">hash_failed_alert</a></li>
<li><a class="reference" href="#peer-ban-alert" id="id101" name="id101">peer_ban_alert</a></li>
<li><a class="reference" href="#peer-error-alert" id="id102" name="id102">peer_error_alert</a></li>
<li><a class="reference" href="#invalid-request-alert" id="id103" name="id103">invalid_request_alert</a></li>
<li><a class="reference" href="#torrent-finished-alert" id="id104" name="id104">torrent_finished_alert</a></li>
<li><a class="reference" href="#metadata-failed-alert" id="id105" name="id105">metadata_failed_alert</a></li>
<li><a class="reference" href="#metadata-received-alert" id="id106" name="id106">metadata_received_alert</a></li>
<li><a class="reference" href="#fastresume-rejected-alert" id="id107" name="id107">fastresume_rejected_alert</a></li>
<li><a class="reference" href="#dispatcher" id="id108" name="id108">dispatcher</a></li>
<li><a class="reference" href="#alerts" id="id93" name="id93">alerts</a><ul>
<li><a class="reference" href="#listen-failed-alert" id="id94" name="id94">listen_failed_alert</a></li>
<li><a class="reference" href="#file-error-alert" id="id95" name="id95">file_error_alert</a></li>
<li><a class="reference" href="#tracker-announce-alert" id="id96" name="id96">tracker_announce_alert</a></li>
<li><a class="reference" href="#tracker-alert" id="id97" name="id97">tracker_alert</a></li>
<li><a class="reference" href="#tracker-reply-alert" id="id98" name="id98">tracker_reply_alert</a></li>
<li><a class="reference" href="#tracker-warning-alert" id="id99" name="id99">tracker_warning_alert</a></li>
<li><a class="reference" href="#url-seed-alert" id="id100" name="id100">url_seed_alert</a></li>
<li><a class="reference" href="#hash-failed-alert" id="id101" name="id101">hash_failed_alert</a></li>
<li><a class="reference" href="#peer-ban-alert" id="id102" name="id102">peer_ban_alert</a></li>
<li><a class="reference" href="#peer-error-alert" id="id103" name="id103">peer_error_alert</a></li>
<li><a class="reference" href="#invalid-request-alert" id="id104" name="id104">invalid_request_alert</a></li>
<li><a class="reference" href="#torrent-finished-alert" id="id105" name="id105">torrent_finished_alert</a></li>
<li><a class="reference" href="#metadata-failed-alert" id="id106" name="id106">metadata_failed_alert</a></li>
<li><a class="reference" href="#metadata-received-alert" id="id107" name="id107">metadata_received_alert</a></li>
<li><a class="reference" href="#fastresume-rejected-alert" id="id108" name="id108">fastresume_rejected_alert</a></li>
<li><a class="reference" href="#dispatcher" id="id109" name="id109">dispatcher</a></li>
</ul>
</li>
<li><a class="reference" href="#exceptions" id="id109" name="id109">exceptions</a><ul>
<li><a class="reference" href="#invalid-handle" id="id110" name="id110">invalid_handle</a></li>
<li><a class="reference" href="#duplicate-torrent" id="id111" name="id111">duplicate_torrent</a></li>
<li><a class="reference" href="#invalid-encoding" id="id112" name="id112">invalid_encoding</a></li>
<li><a class="reference" href="#type-error" id="id113" name="id113">type_error</a></li>
<li><a class="reference" href="#invalid-torrent-file" id="id114" name="id114">invalid_torrent_file</a></li>
<li><a class="reference" href="#exceptions" id="id110" name="id110">exceptions</a><ul>
<li><a class="reference" href="#invalid-handle" id="id111" name="id111">invalid_handle</a></li>
<li><a class="reference" href="#duplicate-torrent" id="id112" name="id112">duplicate_torrent</a></li>
<li><a class="reference" href="#invalid-encoding" id="id113" name="id113">invalid_encoding</a></li>
<li><a class="reference" href="#type-error" id="id114" name="id114">type_error</a></li>
<li><a class="reference" href="#invalid-torrent-file" id="id115" name="id115">invalid_torrent_file</a></li>
</ul>
</li>
<li><a class="reference" href="#fast-resume" id="id115" name="id115">fast resume</a><ul>
<li><a class="reference" href="#file-format" id="id116" name="id116">file format</a></li>
<li><a class="reference" href="#fast-resume" id="id116" name="id116">fast resume</a><ul>
<li><a class="reference" href="#file-format" id="id117" name="id117">file format</a></li>
</ul>
</li>
<li><a class="reference" href="#threads" id="id117" name="id117">threads</a></li>
<li><a class="reference" href="#storage-allocation" id="id118" name="id118">storage allocation</a><ul>
<li><a class="reference" href="#full-allocation" id="id119" name="id119">full allocation</a></li>
<li><a class="reference" href="#compact-allocation" id="id120" name="id120">compact allocation</a></li>
<li><a class="reference" href="#threads" id="id118" name="id118">threads</a></li>
<li><a class="reference" href="#storage-allocation" id="id119" name="id119">storage allocation</a><ul>
<li><a class="reference" href="#full-allocation" id="id120" name="id120">full allocation</a></li>
<li><a class="reference" href="#compact-allocation" id="id121" name="id121">compact allocation</a></li>
</ul>
</li>
<li><a class="reference" href="#extensions" id="id121" name="id121">extensions</a><ul>
<li><a class="reference" href="#chat-messages" id="id122" name="id122">chat messages</a></li>
<li><a class="reference" href="#metadata-from-peers" id="id123" name="id123">metadata from peers</a></li>
<li><a class="reference" href="#http-seeding" id="id124" name="id124">HTTP seeding</a></li>
<li><a class="reference" href="#extensions" id="id122" name="id122">extensions</a><ul>
<li><a class="reference" href="#chat-messages" id="id123" name="id123">chat messages</a></li>
<li><a class="reference" href="#metadata-from-peers" id="id124" name="id124">metadata from peers</a></li>
<li><a class="reference" href="#http-seeding" id="id125" name="id125">HTTP seeding</a></li>
</ul>
</li>
<li><a class="reference" href="#filename-checks" id="id125" name="id125">filename checks</a></li>
<li><a class="reference" href="#acknowledgments" id="id126" name="id126">acknowledgments</a></li>
<li><a class="reference" href="#filename-checks" id="id126" name="id126">filename checks</a></li>
<li><a class="reference" href="#acknowledgments" id="id127" name="id127">acknowledgments</a></li>
</ul>
</div>
<div class="section" id="overview">
@ -1127,6 +1128,7 @@ struct torrent_handle
void set_max_connections(int max_connections) const;
void set_upload_limit(int limit) const;
void set_download_limit(int limit) const;
void set_sequenced_download_threshold(int threshold) const;
void set_peer_upload_limit(asio::ip::tcp::endpoint ip, int limit) const;
void set_peer_download_limit(asio::ip::tcp::endpoint ip, int limit) const;
@ -1250,6 +1252,24 @@ Note that setting a higher limit on a torrent then the global limit (<tt class="
will not override the global rate limit. The torrent can never upload more than the global rate
limit.</p>
</div>
<div class="section" id="set-sequenced-download-threshold">
<h2><a name="set-sequenced-download-threshold">set_sequenced_download_threshold()</a></h2>
<blockquote>
<pre class="literal-block">
void set_sequenced_download_threshold(int threshold);
</pre>
</blockquote>
<p>sequenced-download threshold is the limit on how popular a piece has to be
(popular == inverse of rarity) to be downloaded in sequence instead of in
random (rarest first) order. It can be used to tweak disk performance in
settings where the random download property is less necessary. For example, if
the threshold is 10, all pieces which 10 or more peers have, will be downloaded
in index order. This setting defaults to 100, which means that it is disabled
in practice.</p>
<p>Setting this threshold to a very small value will affect the piece distribution
negatively in the swarm. It should basically only be used in situations where
the random seeks on the disk is the download bottleneck.</p>
</div>
<div class="section" id="set-peer-upload-limit-set-peer-download-limit">
<h2><a name="set-peer-upload-limit-set-peer-download-limit">set_peer_upload_limit() set_peer_download_limit()</a></h2>
<blockquote>
@ -1836,7 +1856,6 @@ struct session_settings
int piece_timeout;
float request_queue_time;
int sequenced_download_threshold;
int max_allowed_in_request_queue;
int max_out_request_queue;
int whole_pieces_threshold;
@ -1877,13 +1896,6 @@ it times out if no piece response is returned.</p>
<p><tt class="docutils literal"><span class="pre">request_queue_time</span></tt> is the length of the request queue given in the number
of seconds it should take for the other end to send all the pieces. i.e. the
actual number of requests depends on the download rate and this number.</p>
<p><tt class="docutils literal"><span class="pre">sequenced_download_threshold</span></tt> is the limit on how popular a piece has to be
(popular == inverse of rarity) to be downloaded in sequence instead of in
random (rarest first) order. It can be used to tweak disk performance in
settings where the random download property is less necessary. For example, if
the threshold is 10, all pieces which 10 or more peers have, will be downloaded
in index order. This setting defaults to 100, which means that it is disabled
in practice.</p>
<p><tt class="docutils literal"><span class="pre">max_allowed_in_request_queue</span></tt> is the number of outstanding block requests
a peer is allowed to queue up in the client. If a peer sends more requests
than this (before the first one has been handled) the last request will be

View File

@ -1062,6 +1062,7 @@ Its declaration looks like this::
void set_max_connections(int max_connections) const;
void set_upload_limit(int limit) const;
void set_download_limit(int limit) const;
void set_sequenced_download_threshold(int threshold) const;
void set_peer_upload_limit(asio::ip::tcp::endpoint ip, int limit) const;
void set_peer_download_limit(asio::ip::tcp::endpoint ip, int limit) const;
@ -1193,6 +1194,27 @@ Note that setting a higher limit on a torrent then the global limit (``session::
will not override the global rate limit. The torrent can never upload more than the global rate
limit.
set_sequenced_download_threshold()
----------------------------------
::
void set_sequenced_download_threshold(int threshold);
sequenced-download threshold is the limit on how popular a piece has to be
(popular == inverse of rarity) to be downloaded in sequence instead of in
random (rarest first) order. It can be used to tweak disk performance in
settings where the random download property is less necessary. For example, if
the threshold is 10, all pieces which 10 or more peers have, will be downloaded
in index order. This setting defaults to 100, which means that it is disabled
in practice.
Setting this threshold to a very small value will affect the piece distribution
negatively in the swarm. It should basically only be used in situations where
the random seeks on the disk is the download bottleneck.
set_peer_upload_limit() set_peer_download_limit()
-------------------------------------------------
@ -1812,7 +1834,6 @@ that will be sent to the tracker. The user-agent is a good way to identify your
int piece_timeout;
float request_queue_time;
int sequenced_download_threshold;
int max_allowed_in_request_queue;
int max_out_request_queue;
int whole_pieces_threshold;
@ -1863,14 +1884,6 @@ it times out if no piece response is returned.
of seconds it should take for the other end to send all the pieces. i.e. the
actual number of requests depends on the download rate and this number.
``sequenced_download_threshold`` is the limit on how popular a piece has to be
(popular == inverse of rarity) to be downloaded in sequence instead of in
random (rarest first) order. It can be used to tweak disk performance in
settings where the random download property is less necessary. For example, if
the threshold is 10, all pieces which 10 or more peers have, will be downloaded
in index order. This setting defaults to 100, which means that it is disabled
in practice.
``max_allowed_in_request_queue`` is the number of outstanding block requests
a peer is allowed to queue up in the client. If a peer sends more requests
than this (before the first one has been handled) the last request will be

View File

@ -14,8 +14,8 @@
project listed here, let <a class="reference" href="mailto:arvid&#64;rasterbar.com">me</a> know.</p>
<table border="1" class="docutils">
<colgroup>
<col width="44%" />
<col width="56%" />
<col width="68%" />
<col width="32%" />
</colgroup>
<tbody valign="top">
<tr><td><p class="first"><strong>electric sheep</strong></p>

View File

@ -6,88 +6,88 @@ project listed here, let me_ know.
.. _me: mailto:arvid@rasterbar.com
+-------------------------------------+-----------------------------------------------+
| **electric sheep** | .. image:: electric_sheep_thumb.jpg |
| | |
| `electric sheep`_ is a screensaver | |
| which collectively generates | |
| animations and lets the users | |
| vote which one to live on. | |
+-------------------------------------+-----------------------------------------------+
| **qBittorrent** | .. image:: qbittorrent_thumb.jpg |
| | |
| qBittorrent_ is a QT bittorrent | |
| client available for linux (likely | |
| portable to most other desktops as | |
| well). Written by Christophe Dumez. | |
+-------------------------------------+-----------------------------------------------+
| **btg** | .. image:: btg_thumb.jpg |
| | |
| btg_ is a unix bittorrent client | |
| which is run as a daemon. It has | |
| multiple user interfaces which | |
| connects to the daemon. One GUI | |
| (Gtkmm), one terminal interface | |
| (ncurses) and one web interface | |
| (accessable through a web browser). | |
| Written by Michael Wojciechowski | |
| and Johan Stršm. | |
+-------------------------------------+-----------------------------------------------+
| **MooPolice** | .. image:: moopolice_thumb.gif |
| | |
| MooPolice_ is a windows bittorrent | |
| client with a quite unique look. | |
+-------------------------------------+-----------------------------------------------+
| **BitsCast** | .. image:: bitscast_thumb.png |
| | |
| RSS reader, podcast subscriber, | |
| video feed downloader, bittorrent | |
| feed downloader. See BitsCast_ | |
| homepage for more info. | |
+-------------------------------------+-----------------------------------------------+
| **BitSlug** | .. image:: bitslug_thumb.png |
| | |
| BitSlug_ is a MacOSX cocoa client. | |
+-------------------------------------+-----------------------------------------------+
| **BitBuddy** | .. image:: bitbuddy_thumb.jpg |
| | |
| BitBuddy_ is a windows bittorrent | |
| client by Daniel Wang, quite | |
| similar to BitComet GUI-wise. | |
+-------------------------------------+-----------------------------------------------+
| **Arctic Torrent** | .. image:: arctic_thumb.png |
| | |
| `Arctic Torrent`_ is a light-weight | |
| bittorrent client for windows. | |
| Written by Cory Nelson. | |
+-------------------------------------+-----------------------------------------------+
| **ZipTorrent** | .. image:: ziptorrent_thumb.gif |
| | |
| ZipTorrent_ is another windows | |
| bittorrent client with | |
| decentralized search facility. | |
+-------------------------------------+-----------------------------------------------+
| **Jamplayer** | |
| | |
| Jamplayer_ is a remote controlled | |
| music player and downloader using | |
| the jamendo music network. | |
+-------------------------------------+-----------------------------------------------+
| **FireANT** | |
| | |
| FireANT_ is a video blog available | |
| for Windows and Mac OSX. | |
+-------------------------------------+-----------------------------------------------+
| **eDonkey 2000** | |
| | |
| eDonkey2000_ comes bundled with a | |
| bittorrent plugin by 'The Orphan'. | |
+-------------------------------------+-----------------------------------------------+
| **pHoeniX** | |
| | |
| pHoeniX_ is an eMule mod supporting,| |
| among other things, bittorrent. | |
+-------------------------------------+-----------------------------------------------+
+-------------------------------------------------------------------------------+-------------------------------------+
| **electric sheep** | .. image:: electric_sheep_thumb.jpg |
| | |
| `electric sheep`_ is a screensaver | |
| which collectively generates | |
| animations and lets the users | |
| vote which one to live on. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **qBittorrent** | .. image:: qbittorrent_thumb.jpg |
| | |
| qBittorrent_ is a QT bittorrent | |
| client available for linux (likely | |
| portable to most other desktops as | |
| well). Written by Christophe Dumez. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **btg** | .. image:: btg_thumb.jpg |
| | |
| btg_ is a unix bittorrent client | |
| which is run as a daemon. It has | |
| multiple user interfaces which | |
| connects to the daemon. One GUI | |
| (Gtkmm), one terminal interface | |
| (ncurses) and one web interface | |
| (accessable through a web browser). | |
| Written by Michael Wojciechowski | |
| and Johan Stršm. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **MooPolice** | .. image:: moopolice_thumb.gif |
| | |
| MooPolice_ is a windows bittorrent | |
| client with a quite unique look. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **BitsCast** | .. image:: bitscast_thumb.png |
| | |
| RSS reader, podcast subscriber, | |
| video feed downloader, bittorrent | |
| feed downloader. See BitsCast_ | |
| homepage for more info. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **BitSlug** | .. image:: bitslug_thumb.png |
| | |
| BitSlug_ is a MacOSX cocoa client. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **BitBuddy** | .. image:: bitbuddy_thumb.jpg |
| | |
| BitBuddy_ is a windows bittorrent | |
| client by Daniel Wang, quite | |
| similar to BitComet GUI-wise. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **Arctic Torrent** | .. image:: arctic_thumb.png |
| | |
| `Arctic Torrent`_ is a light-weight | |
| bittorrent client for windows. | |
| Written by Cory Nelson. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **ZipTorrent** | .. image:: ziptorrent_thumb.gif |
| | |
| ZipTorrent_ is another windows | |
| bittorrent client with | |
| decentralized search facility. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **Jamplayer** | |
| | |
| Jamplayer_ is a remote controlled | |
| music player and downloader using | |
| the jamendo music network. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **FireANT** | |
| | |
| FireANT_ is a video blog available | |
| for Windows and Mac OSX. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **eDonkey 2000** | |
| | |
| eDonkey2000_ comes bundled with a | |
| bittorrent plugin by 'The Orphan'. | |
+-------------------------------------------------------------------------------+-------------------------------------+
| **pHoeniX** | |
| | |
| pHoeniX_ is an eMule mod supporting, | |
| among other things, bittorrent. | |
+-------------------------------------------------------------------------------+-------------------------------------+
.. _`electric sheep`: http://electricsheep.org
.. _qBittorrent: http://www.qbittorrent.org/

View File

@ -348,6 +348,7 @@ void add_torrent(libtorrent::session& ses
h.set_max_connections(60);
h.set_max_uploads(-1);
h.set_ratio(preferred_ratio);
h.set_sequenced_download_threshold(15);
}
void scan_dir(path const& dir_path
@ -553,7 +554,6 @@ int main(int ac, char* av[])
}
settings.user_agent = "client_test " LIBTORRENT_VERSION;
settings.sequenced_download_threshold = 15;
std::deque<std::string> events;
@ -667,6 +667,7 @@ int main(int ac, char* av[])
h.set_max_connections(60);
h.set_max_uploads(-1);
h.set_ratio(preferred_ratio);
h.set_sequenced_download_threshold(15);
continue;
}
// if it's a torrent file, open it as usual

View File

@ -111,8 +111,7 @@ namespace libtorrent
};
piece_picker(int blocks_per_piece
, int total_num_blocks
, int sequenced_download_threshold);
, int total_num_blocks);
void set_sequenced_download_threshold(int sequenced_download_threshold);

View File

@ -50,7 +50,6 @@ namespace libtorrent
, tracker_maximum_response_length(1024*1024)
, piece_timeout(120)
, request_queue_time(3.f)
, sequenced_download_threshold(100)
, max_allowed_in_request_queue(250)
, max_out_request_queue(200)
, whole_pieces_threshold(20)
@ -98,15 +97,6 @@ namespace libtorrent
// depends on the download rate and this number.
float request_queue_time;
// this is the limit on how popular a piece has to be
// (popular == inverse of rarity) to be downloaded
// in sequence instead of in random (rarest first) order.
// it can be used to tweak disk performance in settings
// where the random download property is less necessary.
// for example, if the threshold is 7, all pieces which 7
// or more peers have, will be downloaded in index order.
int sequenced_download_threshold;
// the number of outstanding block requests a peer is
// allowed to queue up in the client. If a peer sends
// more requests than this (before the first one has

View File

@ -135,6 +135,8 @@ namespace libtorrent
session_settings const& settings() const;
void set_sequenced_download_threshold(int threshold);
// is called every second by session. This will
// caclulate the upload/download and number
// of connections this torrent needs. And prepare

View File

@ -284,6 +284,7 @@ namespace libtorrent
void set_upload_limit(int limit) const;
void set_download_limit(int limit) const;
void set_sequenced_download_threshold(int threshold) const;
void set_peer_upload_limit(tcp::endpoint ip, int limit) const;
void set_peer_download_limit(tcp::endpoint ip, int limit) const;

View File

@ -51,14 +51,13 @@ POSSIBILITY OF SUCH DAMAGE.
namespace libtorrent
{
piece_picker::piece_picker(int blocks_per_piece, int total_num_blocks
, int sequenced_download_threshold)
piece_picker::piece_picker(int blocks_per_piece, int total_num_blocks)
: m_piece_info(2)
, m_downloading_piece_info(2)
, m_piece_map((total_num_blocks + blocks_per_piece-1) / blocks_per_piece)
, m_num_filtered(0)
, m_num_have_filtered(0)
, m_sequenced_download_threshold(sequenced_download_threshold)
, m_sequenced_download_threshold(100)
{
assert(blocks_per_piece > 0);
assert(total_num_blocks >= 0);
@ -167,7 +166,6 @@ namespace libtorrent
if (old_limit < sequenced_download_threshold)
{
INVARIANT_CHECK;
assert(int(m_piece_info.size()) > old_limit);
info_t& in = m_piece_info[old_limit];
std::random_shuffle(in.begin(), in.end());
@ -181,7 +179,6 @@ namespace libtorrent
}
else if (int(m_piece_info.size()) > sequenced_download_threshold)
{
INVARIANT_CHECK;
assert(int(m_piece_info.size()) > sequenced_download_threshold);
info_t& in = m_piece_info[sequenced_download_threshold];
std::sort(in.begin(), in.end());

View File

@ -494,18 +494,6 @@ namespace libtorrent { namespace detail
void session_impl::set_settings(session_settings const& s)
{
if (m_settings.sequenced_download_threshold
!= s.sequenced_download_threshold)
{
for (torrent_map::iterator i = m_torrents.begin()
, end(m_torrents.end()); i != end; ++i)
{
torrent& t = *i->second;
if (t.valid_metadata())
t.picker().set_sequenced_download_threshold(
s.sequenced_download_threshold);
}
}
m_settings = s;
// replace all occurances of '\n' with ' '.
std::string::iterator i = m_settings.user_agent.begin();

View File

@ -421,8 +421,7 @@ namespace libtorrent
m_block_size = calculate_block_size(m_torrent_file, m_default_block_size);
m_picker.reset(new piece_picker(
static_cast<int>(m_torrent_file.piece_length() / m_block_size)
, static_cast<int>((m_torrent_file.total_size()+m_block_size-1)/m_block_size)
, m_settings.sequenced_download_threshold));
, static_cast<int>((m_torrent_file.total_size()+m_block_size-1)/m_block_size)));
std::vector<std::string> const& url_seeds = m_torrent_file.url_seeds();
std::copy(url_seeds.begin(), url_seeds.end(), std::inserter(m_web_seeds
@ -1464,6 +1463,13 @@ namespace libtorrent
}
#endif
void torrent::set_sequenced_download_threshold(int threshold)
{
if (valid_metadata())
picker().set_sequenced_download_threshold(threshold);
}
void torrent::set_max_uploads(int limit)
{
assert(limit >= -1);

View File

@ -317,6 +317,13 @@ namespace libtorrent
return torrent_status();
}
void torrent_handle::set_sequenced_download_threshold(int threshold) const
{
INVARIANT_CHECK;
call_member<void>(m_ses, m_chk, m_info_hash
, bind(&torrent::set_sequenced_download_threshold, _1, threshold));
}
void torrent_handle::filter_piece(int index, bool filter) const
{
INVARIANT_CHECK;