accept have messages without having metadata and without having received a bitfield
This commit is contained in:
parent
3b4cccf1dd
commit
ba172954e6
|
@ -1339,6 +1339,11 @@ namespace libtorrent
|
|||
send_allowed_set();
|
||||
return;
|
||||
}
|
||||
else if (t->num_pieces() == 0)
|
||||
{
|
||||
// don't send a bitfield if we don't have any pieces
|
||||
return;
|
||||
}
|
||||
|
||||
int num_pieces = bitfield.size();
|
||||
int lazy_pieces[50];
|
||||
|
|
|
@ -909,8 +909,26 @@ namespace libtorrent
|
|||
<< " <== HAVE [ piece: " << index << "]\n";
|
||||
#endif
|
||||
|
||||
if (!t->valid_metadata() && index > int(m_have_piece.size()))
|
||||
{
|
||||
if (index < 65536)
|
||||
{
|
||||
// if we don't have metadata
|
||||
// and we might not have received a bitfield
|
||||
// extend the bitmask to fit the new
|
||||
// have message
|
||||
m_have_piece.resize(index + 1, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// unless the index > 64k, in which case
|
||||
// we just ignore it
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// if we got an invalid message, abort
|
||||
if (index >= (int)m_have_piece.size() || index < 0)
|
||||
if (index >= int(m_have_piece.size()) || index < 0)
|
||||
throw protocol_error("got 'have'-message with higher index "
|
||||
"than the number of pieces");
|
||||
|
||||
|
|
Loading…
Reference in New Issue