fix merkle torrents assert

This commit is contained in:
Arvid Norberg 2011-08-05 06:10:12 +00:00
parent 42a220f9b8
commit 0f72cd3148
1 changed files with 32 additions and 27 deletions

View File

@ -1111,12 +1111,36 @@ namespace libtorrent
// classify the received data as protocol chatter
// or data payload for the statistics
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
m_statistics.received_bytes(0, received);
}
else if (recv_pos - received >= 9)
else if (recv_pos - received >= header_size)
{
// only received payload data
m_statistics.received_bytes(received, 0);
@ -1125,36 +1149,17 @@ namespace libtorrent
else
{
// received a bit of both
TORRENT_ASSERT(recv_pos - received < 9);
TORRENT_ASSERT(recv_pos > 9);
TORRENT_ASSERT(9 - (recv_pos - received) <= 9);
TORRENT_ASSERT(recv_pos - received < header_size);
TORRENT_ASSERT(recv_pos > header_size);
TORRENT_ASSERT(header_size - (recv_pos - received) <= header_size);
m_statistics.received_bytes(
recv_pos - 9
, 9 - (recv_pos - received));
piece_bytes = recv_pos - 9;
recv_pos - header_size
, header_size - (recv_pos - received));
piece_bytes = recv_pos - header_size;
}
const int header_size = merkle?13:9;
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
// peer_log("<== PIECE_FRAGMENT p: %d start: %d length: %d"
// , p.piece, p.start, p.length);