optimized away torrent::m_have_pieces (#62) and added some documentation on bitfield. The piece picker is now constructed with the torrent, but still freed when turned into a seed
This commit is contained in:
197
docs/manual.html
197
docs/manual.html
@@ -127,95 +127,96 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#big-number" id="id109" name="id109">big_number</a></li>
|
||||
<li><a class="reference" href="#hasher" id="id110" name="id110">hasher</a></li>
|
||||
<li><a class="reference" href="#fingerprint" id="id111" name="id111">fingerprint</a></li>
|
||||
<li><a class="reference" href="#upnp-and-nat-pmp" id="id112" name="id112">UPnP and NAT-PMP</a><ul>
|
||||
<li><a class="reference" href="#add-mapping" id="id113" name="id113">add_mapping</a></li>
|
||||
<li><a class="reference" href="#delete-mapping" id="id114" name="id114">delete_mapping</a></li>
|
||||
<li><a class="reference" href="#router-model" id="id115" name="id115">router_model()</a></li>
|
||||
<li><a class="reference" href="#bitfield" id="id110" name="id110">bitfield</a></li>
|
||||
<li><a class="reference" href="#hasher" id="id111" name="id111">hasher</a></li>
|
||||
<li><a class="reference" href="#fingerprint" id="id112" name="id112">fingerprint</a></li>
|
||||
<li><a class="reference" href="#upnp-and-nat-pmp" id="id113" name="id113">UPnP and NAT-PMP</a><ul>
|
||||
<li><a class="reference" href="#add-mapping" id="id114" name="id114">add_mapping</a></li>
|
||||
<li><a class="reference" href="#delete-mapping" id="id115" name="id115">delete_mapping</a></li>
|
||||
<li><a class="reference" href="#router-model" id="id116" name="id116">router_model()</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#free-functions" id="id116" name="id116">free functions</a><ul>
|
||||
<li><a class="reference" href="#identify-client" id="id117" name="id117">identify_client()</a></li>
|
||||
<li><a class="reference" href="#client-fingerprint" id="id118" name="id118">client_fingerprint()</a></li>
|
||||
<li><a class="reference" href="#bdecode-bencode" id="id119" name="id119">bdecode() bencode()</a></li>
|
||||
<li><a class="reference" href="#free-functions" id="id117" name="id117">free functions</a><ul>
|
||||
<li><a class="reference" href="#identify-client" id="id118" name="id118">identify_client()</a></li>
|
||||
<li><a class="reference" href="#client-fingerprint" id="id119" name="id119">client_fingerprint()</a></li>
|
||||
<li><a class="reference" href="#bdecode-bencode" id="id120" name="id120">bdecode() bencode()</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#alerts" id="id120" name="id120">alerts</a><ul>
|
||||
<li><a class="reference" href="#external-ip-alert" id="id121" name="id121">external_ip_alert</a></li>
|
||||
<li><a class="reference" href="#listen-failed-alert" id="id122" name="id122">listen_failed_alert</a></li>
|
||||
<li><a class="reference" href="#portmap-error-alert" id="id123" name="id123">portmap_error_alert</a></li>
|
||||
<li><a class="reference" href="#portmap-alert" id="id124" name="id124">portmap_alert</a></li>
|
||||
<li><a class="reference" href="#file-error-alert" id="id125" name="id125">file_error_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-announce-alert" id="id126" name="id126">tracker_announce_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-alert" id="id127" name="id127">tracker_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-error-alert" id="id128" name="id128">tracker_error_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-reply-alert" id="id129" name="id129">tracker_reply_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-warning-alert" id="id130" name="id130">tracker_warning_alert</a></li>
|
||||
<li><a class="reference" href="#scrape-reply-alert" id="id131" name="id131">scrape_reply_alert</a></li>
|
||||
<li><a class="reference" href="#scrape-failed-alert" id="id132" name="id132">scrape_failed_alert</a></li>
|
||||
<li><a class="reference" href="#url-seed-alert" id="id133" name="id133">url_seed_alert</a></li>
|
||||
<li><a class="reference" href="#hash-failed-alert" id="id134" name="id134">hash_failed_alert</a></li>
|
||||
<li><a class="reference" href="#peer-ban-alert" id="id135" name="id135">peer_ban_alert</a></li>
|
||||
<li><a class="reference" href="#peer-error-alert" id="id136" name="id136">peer_error_alert</a></li>
|
||||
<li><a class="reference" href="#invalid-request-alert" id="id137" name="id137">invalid_request_alert</a></li>
|
||||
<li><a class="reference" href="#torrent-finished-alert" id="id138" name="id138">torrent_finished_alert</a></li>
|
||||
<li><a class="reference" href="#metadata-failed-alert" id="id139" name="id139">metadata_failed_alert</a></li>
|
||||
<li><a class="reference" href="#metadata-received-alert" id="id140" name="id140">metadata_received_alert</a></li>
|
||||
<li><a class="reference" href="#fastresume-rejected-alert" id="id141" name="id141">fastresume_rejected_alert</a></li>
|
||||
<li><a class="reference" href="#peer-blocked-alert" id="id142" name="id142">peer_blocked_alert</a></li>
|
||||
<li><a class="reference" href="#storage-moved-alert" id="id143" name="id143">storage_moved_alert</a></li>
|
||||
<li><a class="reference" href="#torrent-paused-alert" id="id144" name="id144">torrent_paused_alert</a></li>
|
||||
<li><a class="reference" href="#save-resume-data-alert" id="id145" name="id145">save_resume_data_alert</a></li>
|
||||
<li><a class="reference" href="#dispatcher" id="id146" name="id146">dispatcher</a></li>
|
||||
<li><a class="reference" href="#alerts" id="id121" name="id121">alerts</a><ul>
|
||||
<li><a class="reference" href="#external-ip-alert" id="id122" name="id122">external_ip_alert</a></li>
|
||||
<li><a class="reference" href="#listen-failed-alert" id="id123" name="id123">listen_failed_alert</a></li>
|
||||
<li><a class="reference" href="#portmap-error-alert" id="id124" name="id124">portmap_error_alert</a></li>
|
||||
<li><a class="reference" href="#portmap-alert" id="id125" name="id125">portmap_alert</a></li>
|
||||
<li><a class="reference" href="#file-error-alert" id="id126" name="id126">file_error_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-announce-alert" id="id127" name="id127">tracker_announce_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-alert" id="id128" name="id128">tracker_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-error-alert" id="id129" name="id129">tracker_error_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-reply-alert" id="id130" name="id130">tracker_reply_alert</a></li>
|
||||
<li><a class="reference" href="#tracker-warning-alert" id="id131" name="id131">tracker_warning_alert</a></li>
|
||||
<li><a class="reference" href="#scrape-reply-alert" id="id132" name="id132">scrape_reply_alert</a></li>
|
||||
<li><a class="reference" href="#scrape-failed-alert" id="id133" name="id133">scrape_failed_alert</a></li>
|
||||
<li><a class="reference" href="#url-seed-alert" id="id134" name="id134">url_seed_alert</a></li>
|
||||
<li><a class="reference" href="#hash-failed-alert" id="id135" name="id135">hash_failed_alert</a></li>
|
||||
<li><a class="reference" href="#peer-ban-alert" id="id136" name="id136">peer_ban_alert</a></li>
|
||||
<li><a class="reference" href="#peer-error-alert" id="id137" name="id137">peer_error_alert</a></li>
|
||||
<li><a class="reference" href="#invalid-request-alert" id="id138" name="id138">invalid_request_alert</a></li>
|
||||
<li><a class="reference" href="#torrent-finished-alert" id="id139" name="id139">torrent_finished_alert</a></li>
|
||||
<li><a class="reference" href="#metadata-failed-alert" id="id140" name="id140">metadata_failed_alert</a></li>
|
||||
<li><a class="reference" href="#metadata-received-alert" id="id141" name="id141">metadata_received_alert</a></li>
|
||||
<li><a class="reference" href="#fastresume-rejected-alert" id="id142" name="id142">fastresume_rejected_alert</a></li>
|
||||
<li><a class="reference" href="#peer-blocked-alert" id="id143" name="id143">peer_blocked_alert</a></li>
|
||||
<li><a class="reference" href="#storage-moved-alert" id="id144" name="id144">storage_moved_alert</a></li>
|
||||
<li><a class="reference" href="#torrent-paused-alert" id="id145" name="id145">torrent_paused_alert</a></li>
|
||||
<li><a class="reference" href="#save-resume-data-alert" id="id146" name="id146">save_resume_data_alert</a></li>
|
||||
<li><a class="reference" href="#dispatcher" id="id147" name="id147">dispatcher</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#exceptions" id="id147" name="id147">exceptions</a><ul>
|
||||
<li><a class="reference" href="#invalid-handle" id="id148" name="id148">invalid_handle</a></li>
|
||||
<li><a class="reference" href="#duplicate-torrent" id="id149" name="id149">duplicate_torrent</a></li>
|
||||
<li><a class="reference" href="#invalid-encoding" id="id150" name="id150">invalid_encoding</a></li>
|
||||
<li><a class="reference" href="#type-error" id="id151" name="id151">type_error</a></li>
|
||||
<li><a class="reference" href="#invalid-torrent-file" id="id152" name="id152">invalid_torrent_file</a></li>
|
||||
<li><a class="reference" href="#exceptions" id="id148" name="id148">exceptions</a><ul>
|
||||
<li><a class="reference" href="#invalid-handle" id="id149" name="id149">invalid_handle</a></li>
|
||||
<li><a class="reference" href="#duplicate-torrent" id="id150" name="id150">duplicate_torrent</a></li>
|
||||
<li><a class="reference" href="#invalid-encoding" id="id151" name="id151">invalid_encoding</a></li>
|
||||
<li><a class="reference" href="#type-error" id="id152" name="id152">type_error</a></li>
|
||||
<li><a class="reference" href="#invalid-torrent-file" id="id153" name="id153">invalid_torrent_file</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#storage-interface" id="id153" name="id153">storage_interface</a><ul>
|
||||
<li><a class="reference" href="#initialize" id="id154" name="id154">initialize()</a></li>
|
||||
<li><a class="reference" href="#read" id="id155" name="id155">read()</a></li>
|
||||
<li><a class="reference" href="#write" id="id156" name="id156">write()</a></li>
|
||||
<li><a class="reference" href="#id11" id="id157" name="id157">move_storage()</a></li>
|
||||
<li><a class="reference" href="#verify-resume-data" id="id158" name="id158">verify_resume_data()</a></li>
|
||||
<li><a class="reference" href="#write-resume-data" id="id159" name="id159">write_resume_data()</a></li>
|
||||
<li><a class="reference" href="#move-slot" id="id160" name="id160">move_slot()</a></li>
|
||||
<li><a class="reference" href="#swap-slots" id="id161" name="id161">swap_slots()</a></li>
|
||||
<li><a class="reference" href="#swap-slots3" id="id162" name="id162">swap_slots3()</a></li>
|
||||
<li><a class="reference" href="#hash-for-slot" id="id163" name="id163">hash_for_slot()</a></li>
|
||||
<li><a class="reference" href="#release-files" id="id164" name="id164">release_files()</a></li>
|
||||
<li><a class="reference" href="#delete-files" id="id165" name="id165">delete_files()</a></li>
|
||||
<li><a class="reference" href="#storage-interface" id="id154" name="id154">storage_interface</a><ul>
|
||||
<li><a class="reference" href="#initialize" id="id155" name="id155">initialize()</a></li>
|
||||
<li><a class="reference" href="#read" id="id156" name="id156">read()</a></li>
|
||||
<li><a class="reference" href="#write" id="id157" name="id157">write()</a></li>
|
||||
<li><a class="reference" href="#id11" id="id158" name="id158">move_storage()</a></li>
|
||||
<li><a class="reference" href="#verify-resume-data" id="id159" name="id159">verify_resume_data()</a></li>
|
||||
<li><a class="reference" href="#write-resume-data" id="id160" name="id160">write_resume_data()</a></li>
|
||||
<li><a class="reference" href="#move-slot" id="id161" name="id161">move_slot()</a></li>
|
||||
<li><a class="reference" href="#swap-slots" id="id162" name="id162">swap_slots()</a></li>
|
||||
<li><a class="reference" href="#swap-slots3" id="id163" name="id163">swap_slots3()</a></li>
|
||||
<li><a class="reference" href="#hash-for-slot" id="id164" name="id164">hash_for_slot()</a></li>
|
||||
<li><a class="reference" href="#release-files" id="id165" name="id165">release_files()</a></li>
|
||||
<li><a class="reference" href="#delete-files" id="id166" name="id166">delete_files()</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#queuing" id="id166" name="id166">queuing</a><ul>
|
||||
<li><a class="reference" href="#downloading" id="id167" name="id167">downloading</a></li>
|
||||
<li><a class="reference" href="#seeding" id="id168" name="id168">seeding</a></li>
|
||||
<li><a class="reference" href="#queuing" id="id167" name="id167">queuing</a><ul>
|
||||
<li><a class="reference" href="#downloading" id="id168" name="id168">downloading</a></li>
|
||||
<li><a class="reference" href="#seeding" id="id169" name="id169">seeding</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#fast-resume" id="id169" name="id169">fast resume</a><ul>
|
||||
<li><a class="reference" href="#file-format" id="id170" name="id170">file format</a></li>
|
||||
<li><a class="reference" href="#fast-resume" id="id170" name="id170">fast resume</a><ul>
|
||||
<li><a class="reference" href="#file-format" id="id171" name="id171">file format</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#threads" id="id171" name="id171">threads</a></li>
|
||||
<li><a class="reference" href="#storage-allocation" id="id172" name="id172">storage allocation</a><ul>
|
||||
<li><a class="reference" href="#sparse-allocation" id="id173" name="id173">sparse allocation</a></li>
|
||||
<li><a class="reference" href="#full-allocation" id="id174" name="id174">full allocation</a></li>
|
||||
<li><a class="reference" href="#compact-allocation" id="id175" name="id175">compact allocation</a></li>
|
||||
<li><a class="reference" href="#threads" id="id172" name="id172">threads</a></li>
|
||||
<li><a class="reference" href="#storage-allocation" id="id173" name="id173">storage allocation</a><ul>
|
||||
<li><a class="reference" href="#sparse-allocation" id="id174" name="id174">sparse allocation</a></li>
|
||||
<li><a class="reference" href="#full-allocation" id="id175" name="id175">full allocation</a></li>
|
||||
<li><a class="reference" href="#compact-allocation" id="id176" name="id176">compact allocation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#extensions" id="id176" name="id176">extensions</a><ul>
|
||||
<li><a class="reference" href="#metadata-from-peers" id="id177" name="id177">metadata from peers</a></li>
|
||||
<li><a class="reference" href="#http-seeding" id="id178" name="id178">HTTP seeding</a></li>
|
||||
<li><a class="reference" href="#extensions" id="id177" name="id177">extensions</a><ul>
|
||||
<li><a class="reference" href="#metadata-from-peers" id="id178" name="id178">metadata from peers</a></li>
|
||||
<li><a class="reference" href="#http-seeding" id="id179" name="id179">HTTP seeding</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference" href="#filename-checks" id="id179" name="id179">filename checks</a></li>
|
||||
<li><a class="reference" href="#acknowledgments" id="id180" name="id180">acknowledgments</a></li>
|
||||
<li><a class="reference" href="#filename-checks" id="id180" name="id180">filename checks</a></li>
|
||||
<li><a class="reference" href="#acknowledgments" id="id181" name="id181">acknowledgments</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section">
|
||||
@@ -2236,7 +2237,7 @@ struct torrent_status
|
||||
|
||||
int connect_candidates;
|
||||
|
||||
const std::vector<bool>* pieces;
|
||||
bitfield pieces;
|
||||
int num_pieces;
|
||||
|
||||
size_type total_done;
|
||||
@@ -2482,7 +2483,7 @@ struct peer_info
|
||||
size_type total_download;
|
||||
size_type total_upload;
|
||||
peer_id pid;
|
||||
std::vector<bool> pieces;
|
||||
bitfield pieces;
|
||||
int upload_limit;
|
||||
int download_limit;
|
||||
|
||||
@@ -2686,9 +2687,9 @@ the payload data.</p>
|
||||
<p><tt class="docutils literal"><span class="pre">pid</span></tt> is the peer's id as used in the bit torrent protocol. This id can be used to
|
||||
extract 'fingerprints' from the peer. Sometimes it can tell you which client the peer
|
||||
is using. See identify_client()_</p>
|
||||
<p><tt class="docutils literal"><span class="pre">pieces</span></tt> is a vector of booleans that has as many entries as there are pieces
|
||||
in the torrent. Each boolean tells you if the peer has that piece (if it's set to true)
|
||||
or if the peer miss that piece (set to false).</p>
|
||||
<p><tt class="docutils literal"><span class="pre">pieces</span></tt> is a bitfield, with one bit per piece in the torrent.
|
||||
Each bit tells you if the peer has that piece (if it's set to 1)
|
||||
or if the peer miss that piece (set to 0).</p>
|
||||
<p><tt class="docutils literal"><span class="pre">seed</span></tt> is true if this peer is a seed.</p>
|
||||
<p><tt class="docutils literal"><span class="pre">upload_limit</span></tt> is the number of bytes per second we are allowed to send to this
|
||||
peer every second. It may be -1 if there's no local limit on the peer. The global
|
||||
@@ -3235,6 +3236,50 @@ public:
|
||||
<p>The iterators gives you access to individual bytes.</p>
|
||||
</div>
|
||||
<div class="section">
|
||||
<h1><a id="bitfield" name="bitfield">bitfield</a></h1>
|
||||
<p>The bitfiled type stores any number of bits as a bitfield in an array.</p>
|
||||
<pre class="literal-block">
|
||||
class bitfield
|
||||
{
|
||||
bitfield();
|
||||
bitfield(int bits);
|
||||
bitfield(int bits, bool val);
|
||||
bitfield(char const* bytes, int bits);
|
||||
bitfield(bitfield const& rhs);
|
||||
|
||||
void borrow_bytes(char* bytes, int bits);
|
||||
~bitfield();
|
||||
|
||||
void assign(char const* bytes, int bits);
|
||||
|
||||
bool operator[](int index) const;
|
||||
|
||||
bool get_bit(int index) const;
|
||||
|
||||
void clear_bit(int index);
|
||||
void set_bit(int index);
|
||||
|
||||
std::size_t size() const;
|
||||
bool empty() const;
|
||||
|
||||
char const* bytes() const;
|
||||
|
||||
bitfield& operator=(bitfield const& rhs);
|
||||
|
||||
int count() const;
|
||||
|
||||
typedef const_iterator;
|
||||
const_iterator begin() const;
|
||||
const_iterator end() const;
|
||||
|
||||
void resize(int bits, bool val);
|
||||
void set_all();
|
||||
void clear_all();
|
||||
void resize(int bits);
|
||||
};
|
||||
</pre>
|
||||
</div>
|
||||
<div class="section">
|
||||
<h1><a id="hasher" name="hasher">hasher</a></h1>
|
||||
<p>This class creates sha1-hashes. Its declaration looks like this:</p>
|
||||
<pre class="literal-block">
|
||||
|
Reference in New Issue
Block a user