forked from premiere/premiere-libtorrent
fix merkle torrents assert
This commit is contained in:
parent
42a220f9b8
commit
0f72cd3148
|
@ -1111,12 +1111,36 @@ namespace libtorrent
|
||||||
// classify the received data as protocol chatter
|
// classify the received data as protocol chatter
|
||||||
// or data payload for the statistics
|
// or data payload for the statistics
|
||||||
int piece_bytes = 0;
|
int piece_bytes = 0;
|
||||||
if (recv_pos <= 9)
|
|
||||||
|
int header_size = merkle?13:9;
|
||||||
|
|
||||||
|
peer_request p;
|
||||||
|
int list_size = 0;
|
||||||
|
|
||||||
|
if (recv_pos >= header_size)
|
||||||
|
{
|
||||||
|
const char* ptr = recv_buffer.begin + 1;
|
||||||
|
p.piece = detail::read_int32(ptr);
|
||||||
|
p.start = detail::read_int32(ptr);
|
||||||
|
|
||||||
|
if (merkle)
|
||||||
|
{
|
||||||
|
list_size = detail::read_int32(ptr);
|
||||||
|
p.length = packet_size() - list_size - header_size;
|
||||||
|
header_size += list_size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p.length = packet_size() - header_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recv_pos <= header_size)
|
||||||
{
|
{
|
||||||
// only received protocol data
|
// only received protocol data
|
||||||
m_statistics.received_bytes(0, received);
|
m_statistics.received_bytes(0, received);
|
||||||
}
|
}
|
||||||
else if (recv_pos - received >= 9)
|
else if (recv_pos - received >= header_size)
|
||||||
{
|
{
|
||||||
// only received payload data
|
// only received payload data
|
||||||
m_statistics.received_bytes(received, 0);
|
m_statistics.received_bytes(received, 0);
|
||||||
|
@ -1125,36 +1149,17 @@ namespace libtorrent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// received a bit of both
|
// received a bit of both
|
||||||
TORRENT_ASSERT(recv_pos - received < 9);
|
TORRENT_ASSERT(recv_pos - received < header_size);
|
||||||
TORRENT_ASSERT(recv_pos > 9);
|
TORRENT_ASSERT(recv_pos > header_size);
|
||||||
TORRENT_ASSERT(9 - (recv_pos - received) <= 9);
|
TORRENT_ASSERT(header_size - (recv_pos - received) <= header_size);
|
||||||
m_statistics.received_bytes(
|
m_statistics.received_bytes(
|
||||||
recv_pos - 9
|
recv_pos - header_size
|
||||||
, 9 - (recv_pos - received));
|
, header_size - (recv_pos - received));
|
||||||
piece_bytes = recv_pos - 9;
|
piece_bytes = recv_pos - header_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int header_size = merkle?13:9;
|
|
||||||
|
|
||||||
if (recv_pos < header_size) return;
|
if (recv_pos < header_size) return;
|
||||||
|
|
||||||
const char* ptr = recv_buffer.begin + 1;
|
|
||||||
peer_request p;
|
|
||||||
p.piece = detail::read_int32(ptr);
|
|
||||||
p.start = detail::read_int32(ptr);
|
|
||||||
|
|
||||||
int list_size = 0;
|
|
||||||
|
|
||||||
if (merkle)
|
|
||||||
{
|
|
||||||
list_size = detail::read_int32(ptr);
|
|
||||||
p.length = packet_size() - list_size - header_size;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
p.length = packet_size() - header_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef TORRENT_VERBOSE_LOGGING
|
#ifdef TORRENT_VERBOSE_LOGGING
|
||||||
// peer_log("<== PIECE_FRAGMENT p: %d start: %d length: %d"
|
// peer_log("<== PIECE_FRAGMENT p: %d start: %d length: %d"
|
||||||
// , p.piece, p.start, p.length);
|
// , p.piece, p.start, p.length);
|
||||||
|
|
Loading…
Reference in New Issue