forked from premiere/premiere-libtorrent
*** empty log message ***
This commit is contained in:
parent
7d1f292e67
commit
03561913df
|
@ -112,7 +112,7 @@ peers in a separate fast-resume file.</li>
|
||||||
<li>possibility to limit the number of connections.</li>
|
<li>possibility to limit the number of connections.</li>
|
||||||
<li>delays have messages if there's no other outgoing traffic to the peer, and doesn't
|
<li>delays have messages if there's no other outgoing traffic to the peer, and doesn't
|
||||||
send have messages to peers that already has the piece. This saves bandwidth.</li>
|
send have messages to peers that already has the piece. This saves bandwidth.</li>
|
||||||
<li>Does not have any requirements on the piece order in a torrent that it resumes. This
|
<li>does not have any requirements on the piece order in a torrent that it resumes. This
|
||||||
means it can resume a torrent downloaded by any client.</li>
|
means it can resume a torrent downloaded by any client.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
|
@ -44,7 +44,7 @@ The current state includes the following features:
|
||||||
* possibility to limit the number of connections.
|
* possibility to limit the number of connections.
|
||||||
* delays have messages if there's no other outgoing traffic to the peer, and doesn't
|
* delays have messages if there's no other outgoing traffic to the peer, and doesn't
|
||||||
send have messages to peers that already has the piece. This saves bandwidth.
|
send have messages to peers that already has the piece. This saves bandwidth.
|
||||||
* Does not have any requirements on the piece order in a torrent that it resumes. This
|
* does not have any requirements on the piece order in a torrent that it resumes. This
|
||||||
means it can resume a torrent downloaded by any client.
|
means it can resume a torrent downloaded by any client.
|
||||||
|
|
||||||
__ http://home.elp.rr.com/tur/multitracker-spec.txt
|
__ http://home.elp.rr.com/tur/multitracker-spec.txt
|
||||||
|
|
|
@ -225,7 +225,7 @@ until reannouncing yourself.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>uint16_t</td>
|
<tr><td>uint16_t</td>
|
||||||
<td>port</td>
|
<td>port</td>
|
||||||
<td>The peers listen port.</td>
|
<td>The peer's listen port.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -260,7 +260,7 @@ scrape.</td>
|
||||||
<td>transaction_id</td>
|
<td>transaction_id</td>
|
||||||
<td>Randomized by client.</td>
|
<td>Randomized by client.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>int8[20]</td>
|
<tr><td>int8_t[20]</td>
|
||||||
<td>info_hash</td>
|
<td>info_hash</td>
|
||||||
<td>The info hash that is to be scraped.</td>
|
<td>The info hash that is to be scraped.</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -352,7 +352,7 @@ leechers.</td>
|
||||||
<td>Must match the transaction_id sent
|
<td>Must match the transaction_id sent
|
||||||
from the client.</td>
|
from the client.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>int8[]</td>
|
<tr><td>int8_t[]</td>
|
||||||
<td>error_string</td>
|
<td>error_string</td>
|
||||||
<td>The rest of the packet is a string
|
<td>The rest of the packet is a string
|
||||||
describing the error.</td>
|
describing the error.</td>
|
||||||
|
|
|
@ -131,7 +131,7 @@ The rest of the server reply is a variable number of the following structure:
|
||||||
+=============+=====================+========================================+
|
+=============+=====================+========================================+
|
||||||
| int32_t | ip | The ip of a peer in the swarm. |
|
| int32_t | ip | The ip of a peer in the swarm. |
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
| uint16_t | port | The peers listen port. |
|
| uint16_t | port | The peer's listen port. |
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ Client sends packet:
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
| int32_t | transaction_id | Randomized by client. |
|
| int32_t | transaction_id | Randomized by client. |
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
| int8[20] | info_hash | The info hash that is to be scraped. |
|
| int8_t[20] | info_hash | The info hash that is to be scraped. |
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
|
|
||||||
Server replies with packet:
|
Server replies with packet:
|
||||||
|
@ -195,7 +195,7 @@ In case of a tracker error, the server replies with this packet:
|
||||||
| int32_t | transaction_id | Must match the transaction_id sent |
|
| int32_t | transaction_id | Must match the transaction_id sent |
|
||||||
| | | from the client. |
|
| | | from the client. |
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
| int8[] | error_string | The rest of the packet is a string |
|
| int8_t[] | error_string | The rest of the packet is a string |
|
||||||
| | | describing the error. |
|
| | | describing the error. |
|
||||||
+-------------+---------------------+----------------------------------------+
|
+-------------+---------------------+----------------------------------------+
|
||||||
|
|
||||||
|
|
|
@ -66,8 +66,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
// TODO: each time a block is 'taken over'
|
// TODO: each time a block is 'taken over'
|
||||||
// from another peer. That peer must be given
|
// from another peer. That peer must be given
|
||||||
// a chance to request another block instead.
|
// a chance to become not-interested.
|
||||||
// Where it also could become not-interested.
|
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
@ -199,7 +198,8 @@ namespace libtorrent
|
||||||
boost::shared_ptr<libtorrent::socket> get_socket() const { return m_socket; }
|
boost::shared_ptr<libtorrent::socket> get_socket() const { return m_socket; }
|
||||||
|
|
||||||
const peer_id& get_peer_id() const { return m_peer_id; }
|
const peer_id& get_peer_id() const { return m_peer_id; }
|
||||||
const std::vector<bool>& get_bitfield() const { return m_have_piece; }
|
const std::vector<bool>& get_bitfield() const
|
||||||
|
{ return m_have_piece; }
|
||||||
|
|
||||||
// this will cause this peer_connection to be disconnected.
|
// this will cause this peer_connection to be disconnected.
|
||||||
// what it does is that it puts a reference to it in
|
// what it does is that it puts a reference to it in
|
||||||
|
@ -446,6 +446,12 @@ namespace libtorrent
|
||||||
// the pieces the other end have
|
// the pieces the other end have
|
||||||
std::vector<bool> m_have_piece;
|
std::vector<bool> m_have_piece;
|
||||||
|
|
||||||
|
// the number of pieces this peer
|
||||||
|
// has. Must be the same as
|
||||||
|
// std::count(m_have_piece.begin(),
|
||||||
|
// m_have_piece.end(), true)
|
||||||
|
int m_num_pieces;
|
||||||
|
|
||||||
// the queue of requests we have got
|
// the queue of requests we have got
|
||||||
// from this peer
|
// from this peer
|
||||||
std::deque<peer_request> m_requests;
|
std::deque<peer_request> m_requests;
|
||||||
|
|
|
@ -98,6 +98,7 @@ namespace libtorrent
|
||||||
, m_interesting(false)
|
, m_interesting(false)
|
||||||
, m_choked(true)
|
, m_choked(true)
|
||||||
, m_supports_extensions(false)
|
, m_supports_extensions(false)
|
||||||
|
, m_num_pieces(0)
|
||||||
, m_free_upload(0)
|
, m_free_upload(0)
|
||||||
, m_send_quota(100)
|
, m_send_quota(100)
|
||||||
, m_send_quota_left(100)
|
, m_send_quota_left(100)
|
||||||
|
@ -160,6 +161,7 @@ namespace libtorrent
|
||||||
, m_interesting(false)
|
, m_interesting(false)
|
||||||
, m_choked(true)
|
, m_choked(true)
|
||||||
, m_supports_extensions(false)
|
, m_supports_extensions(false)
|
||||||
|
, m_num_pieces(0)
|
||||||
, m_free_upload(0)
|
, m_free_upload(0)
|
||||||
, m_send_quota(100)
|
, m_send_quota(100)
|
||||||
, m_send_quota_left(100)
|
, m_send_quota_left(100)
|
||||||
|
@ -454,8 +456,9 @@ namespace libtorrent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_have_piece[index] = true;
|
m_have_piece[index] = true;
|
||||||
|
++m_num_pieces;
|
||||||
m_torrent->peer_has(index);
|
m_torrent->peer_has(index);
|
||||||
|
|
||||||
if (!m_torrent->have_piece(index) && !is_interesting())
|
if (!m_torrent->have_piece(index) && !is_interesting())
|
||||||
m_torrent->get_policy().peer_is_interesting(*this);
|
m_torrent->get_policy().peer_is_interesting(*this);
|
||||||
|
|
||||||
|
@ -491,11 +494,13 @@ namespace libtorrent
|
||||||
if (have && !m_have_piece[i])
|
if (have && !m_have_piece[i])
|
||||||
{
|
{
|
||||||
m_have_piece[i] = true;
|
m_have_piece[i] = true;
|
||||||
|
++m_num_pieces;
|
||||||
piece_list.push_back(i);
|
piece_list.push_back(i);
|
||||||
}
|
}
|
||||||
else if (!have && m_have_piece[i])
|
else if (!have && m_have_piece[i])
|
||||||
{
|
{
|
||||||
m_have_piece[i] = false;
|
m_have_piece[i] = false;
|
||||||
|
--m_num_pieces;
|
||||||
m_torrent->peer_lost(i);
|
m_torrent->peer_lost(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1705,6 +1710,11 @@ namespace libtorrent
|
||||||
void peer_connection::check_invariant() const
|
void peer_connection::check_invariant() const
|
||||||
{
|
{
|
||||||
assert(has_data() == m_selector.is_writability_monitored(m_socket));
|
assert(has_data() == m_selector.is_writability_monitored(m_socket));
|
||||||
|
|
||||||
|
assert(m_num_pieces == std::count(
|
||||||
|
m_have_piece.begin()
|
||||||
|
, m_have_piece.end()
|
||||||
|
, true));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -243,7 +243,7 @@ namespace libtorrent
|
||||||
i != pieces.end();
|
i != pieces.end();
|
||||||
++i)
|
++i)
|
||||||
{
|
{
|
||||||
*i = i - pieces.begin();
|
*i = static_cast<int>(i - pieces.begin());
|
||||||
}
|
}
|
||||||
std::srand((unsigned int)std::time(0));
|
std::srand((unsigned int)std::time(0));
|
||||||
std::vector<int> targets(pieces);
|
std::vector<int> targets(pieces);
|
||||||
|
@ -1333,8 +1333,6 @@ namespace libtorrent
|
||||||
// case 1
|
// case 1
|
||||||
if (this_should_move && !other_should_move)
|
if (this_should_move && !other_should_move)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
|
||||||
|
|
||||||
assert(piece_index != current_slot);
|
assert(piece_index != current_slot);
|
||||||
|
|
||||||
const int other_slot = piece_index;
|
const int other_slot = piece_index;
|
||||||
|
@ -1372,8 +1370,6 @@ namespace libtorrent
|
||||||
// case 2
|
// case 2
|
||||||
else if (!this_should_move && other_should_move)
|
else if (!this_should_move && other_should_move)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
|
||||||
|
|
||||||
assert(piece_index != current_slot);
|
assert(piece_index != current_slot);
|
||||||
|
|
||||||
const int other_piece = current_slot;
|
const int other_piece = current_slot;
|
||||||
|
@ -1406,8 +1402,6 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
else if (this_should_move && other_should_move)
|
else if (this_should_move && other_should_move)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
|
||||||
|
|
||||||
assert(piece_index != current_slot);
|
assert(piece_index != current_slot);
|
||||||
assert(piece_index >= 0);
|
assert(piece_index >= 0);
|
||||||
|
|
||||||
|
@ -1463,8 +1457,6 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
|
||||||
|
|
||||||
assert(m_piece_to_slot[current_slot] == has_no_slot || piece_index != current_slot);
|
assert(m_piece_to_slot[current_slot] == has_no_slot || piece_index != current_slot);
|
||||||
assert(m_slot_to_piece[current_slot] == unallocated);
|
assert(m_slot_to_piece[current_slot] == unallocated);
|
||||||
assert(piece_index == unassigned || m_piece_to_slot[piece_index] == has_no_slot);
|
assert(piece_index == unassigned || m_piece_to_slot[piece_index] == has_no_slot);
|
||||||
|
|
Loading…
Reference in New Issue