lt sync 3225
This commit is contained in:
parent
44ffcd4499
commit
9f369388e6
|
@ -262,8 +262,8 @@ namespace libtorrent
|
||||||
void write_pe3_sync();
|
void write_pe3_sync();
|
||||||
void write_pe4_sync(int crypto_select);
|
void write_pe4_sync(int crypto_select);
|
||||||
|
|
||||||
void write_pe_vc_cryptofield(buffer::interval& write_buf,
|
void write_pe_vc_cryptofield(buffer::interval& write_buf
|
||||||
int crypto_field, int pad_size);
|
, int crypto_field, int pad_size);
|
||||||
|
|
||||||
// stream key (info hash of attached torrent)
|
// stream key (info hash of attached torrent)
|
||||||
// secret is the DH shared secret
|
// secret is the DH shared secret
|
||||||
|
@ -282,7 +282,14 @@ public:
|
||||||
{
|
{
|
||||||
#ifndef TORRENT_DISABLE_ENCRYPTION
|
#ifndef TORRENT_DISABLE_ENCRYPTION
|
||||||
if (m_rc4_encrypted)
|
if (m_rc4_encrypted)
|
||||||
|
{
|
||||||
|
TORRENT_ASSERT(send_buffer_size() == m_encrypted_bytes);
|
||||||
m_RC4_handler->encrypt(buffer, size);
|
m_RC4_handler->encrypt(buffer, size);
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
m_encrypted_bytes += size;
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size() + size);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
peer_connection::append_send_buffer(buffer, size, destructor);
|
peer_connection::append_send_buffer(buffer, size, destructor);
|
||||||
}
|
}
|
||||||
|
@ -290,11 +297,13 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void encrypt_pending_buffer();
|
||||||
|
|
||||||
// Returns offset at which bytestream (src, src + src_size)
|
// Returns offset at which bytestream (src, src + src_size)
|
||||||
// matches bytestream(target, target + target_size).
|
// matches bytestream(target, target + target_size).
|
||||||
// If no sync found, return -1
|
// If no sync found, return -1
|
||||||
int get_syncoffset(char const* src, int src_size,
|
int get_syncoffset(char const* src, int src_size
|
||||||
char const* target, int target_size) const;
|
, char const* target, int target_size) const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum state
|
enum state
|
||||||
|
@ -412,6 +421,11 @@ private:
|
||||||
bool m_in_constructor;
|
bool m_in_constructor;
|
||||||
|
|
||||||
bool m_sent_handshake;
|
bool m_sent_handshake;
|
||||||
|
|
||||||
|
// the number of bytes in the send buffer
|
||||||
|
// that have been encrypted (only used for
|
||||||
|
// encrypted connections)
|
||||||
|
int m_encrypted_bytes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -120,6 +120,7 @@ namespace libtorrent
|
||||||
|
|
||||||
#ifdef TORRENT_DEBUG
|
#ifdef TORRENT_DEBUG
|
||||||
m_in_constructor = false;
|
m_in_constructor = false;
|
||||||
|
m_encrypted_bytes = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,6 +168,7 @@ namespace libtorrent
|
||||||
|
|
||||||
#ifdef TORRENT_DEBUG
|
#ifdef TORRENT_DEBUG
|
||||||
m_in_constructor = false;
|
m_in_constructor = false;
|
||||||
|
m_encrypted_bytes = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,6 +414,10 @@ namespace libtorrent
|
||||||
send_buf.begin);
|
send_buf.begin);
|
||||||
|
|
||||||
std::generate(send_buf.begin + dh_key_len, send_buf.end, std::rand);
|
std::generate(send_buf.begin + dh_key_len, send_buf.end, std::rand);
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
m_encrypted_bytes += send_buf.left();
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size());
|
||||||
|
#endif
|
||||||
setup_send();
|
setup_send();
|
||||||
|
|
||||||
#ifdef TORRENT_VERBOSE_LOGGING
|
#ifdef TORRENT_VERBOSE_LOGGING
|
||||||
|
@ -496,6 +502,12 @@ namespace libtorrent
|
||||||
|
|
||||||
write_pe_vc_cryptofield(send_buf, crypto_provide, pad_size);
|
write_pe_vc_cryptofield(send_buf, crypto_provide, pad_size);
|
||||||
m_RC4_handler->encrypt(send_buf.end - encrypt_size, encrypt_size);
|
m_RC4_handler->encrypt(send_buf.end - encrypt_size, encrypt_size);
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
const int packet_size = 20 + 20 + 8 + 4 + 2 + pad_size + 2;
|
||||||
|
TORRENT_ASSERT(send_buffer_size() - packet_size == m_encrypted_bytes);
|
||||||
|
m_encrypted_bytes += packet_size;
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size());
|
||||||
|
#endif
|
||||||
|
|
||||||
TORRENT_ASSERT(send_buf.begin == send_buf.end);
|
TORRENT_ASSERT(send_buf.begin == send_buf.end);
|
||||||
setup_send();
|
setup_send();
|
||||||
|
@ -519,6 +531,11 @@ namespace libtorrent
|
||||||
write_pe_vc_cryptofield(send_buf, crypto_select, pad_size);
|
write_pe_vc_cryptofield(send_buf, crypto_select, pad_size);
|
||||||
|
|
||||||
m_RC4_handler->encrypt(send_buf.end - buf_size, buf_size);
|
m_RC4_handler->encrypt(send_buf.end - buf_size, buf_size);
|
||||||
|
TORRENT_ASSERT(send_buffer_size() - buf_size == m_encrypted_bytes);
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
m_encrypted_bytes += buf_size;
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size());
|
||||||
|
#endif
|
||||||
setup_send();
|
setup_send();
|
||||||
|
|
||||||
// encryption method has been negotiated
|
// encryption method has been negotiated
|
||||||
|
@ -611,14 +628,24 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(buf);
|
TORRENT_ASSERT(buf);
|
||||||
TORRENT_ASSERT(size > 0);
|
TORRENT_ASSERT(size > 0);
|
||||||
|
|
||||||
|
encrypt_pending_buffer();
|
||||||
|
|
||||||
if (m_encrypted && m_rc4_encrypted)
|
if (m_encrypted && m_rc4_encrypted)
|
||||||
|
{
|
||||||
|
TORRENT_ASSERT(send_buffer_size() == m_encrypted_bytes);
|
||||||
m_RC4_handler->encrypt(const_cast<char*>(buf), size);
|
m_RC4_handler->encrypt(const_cast<char*>(buf), size);
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
m_encrypted_bytes += size;
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size() + size);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
peer_connection::send_buffer(buf, size, flags);
|
peer_connection::send_buffer(buf, size, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer::interval bt_peer_connection::allocate_send_buffer(int size)
|
buffer::interval bt_peer_connection::allocate_send_buffer(int size)
|
||||||
{
|
{
|
||||||
|
encrypt_pending_buffer();
|
||||||
if (m_encrypted && m_rc4_encrypted)
|
if (m_encrypted && m_rc4_encrypted)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(m_enc_send_buffer.left() == 0);
|
TORRENT_ASSERT(m_enc_send_buffer.left() == 0);
|
||||||
|
@ -632,16 +659,27 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bt_peer_connection::setup_send()
|
void bt_peer_connection::encrypt_pending_buffer()
|
||||||
{
|
{
|
||||||
if (m_encrypted && m_rc4_encrypted && m_enc_send_buffer.left())
|
if (m_encrypted && m_rc4_encrypted && m_enc_send_buffer.left())
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(m_enc_send_buffer.begin);
|
TORRENT_ASSERT(m_enc_send_buffer.begin);
|
||||||
TORRENT_ASSERT(m_enc_send_buffer.end);
|
TORRENT_ASSERT(m_enc_send_buffer.end);
|
||||||
|
TORRENT_ASSERT(m_RC4_handler);
|
||||||
|
TORRENT_ASSERT(send_buffer_size() - m_enc_send_buffer.left() == m_encrypted_bytes);
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
m_encrypted_bytes += m_enc_send_buffer.left();
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size());
|
||||||
|
#endif
|
||||||
|
|
||||||
m_RC4_handler->encrypt(m_enc_send_buffer.begin, m_enc_send_buffer.left());
|
m_RC4_handler->encrypt(m_enc_send_buffer.begin, m_enc_send_buffer.left());
|
||||||
m_enc_send_buffer.end = m_enc_send_buffer.begin;
|
m_enc_send_buffer.end = m_enc_send_buffer.begin;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void bt_peer_connection::setup_send()
|
||||||
|
{
|
||||||
|
encrypt_pending_buffer();
|
||||||
peer_connection::setup_send();
|
peer_connection::setup_send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1526,6 +1564,8 @@ namespace libtorrent
|
||||||
m_sent_bitfield = true;
|
m_sent_bitfield = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
setup_send();
|
||||||
|
|
||||||
if (num_lazy_pieces > 0)
|
if (num_lazy_pieces > 0)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < num_lazy_pieces; ++i)
|
for (int i = 0; i < num_lazy_pieces; ++i)
|
||||||
|
@ -1540,7 +1580,6 @@ namespace libtorrent
|
||||||
|
|
||||||
if (m_supports_fast)
|
if (m_supports_fast)
|
||||||
send_allowed_set();
|
send_allowed_set();
|
||||||
setup_send();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||||
|
@ -2629,6 +2668,15 @@ namespace libtorrent
|
||||||
std::remove_if(m_payloads.begin(), m_payloads.end(), range_below_zero)
|
std::remove_if(m_payloads.begin(), m_payloads.end(), range_below_zero)
|
||||||
, m_payloads.end());
|
, m_payloads.end());
|
||||||
|
|
||||||
|
#ifdef TORRENT_DEBUG
|
||||||
|
if (m_encrypted_bytes > 0)
|
||||||
|
{
|
||||||
|
m_encrypted_bytes -= bytes_transferred;
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes >= 0);
|
||||||
|
TORRENT_ASSERT(m_encrypted_bytes <= send_buffer_size());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TORRENT_ASSERT(amount_payload <= (int)bytes_transferred);
|
TORRENT_ASSERT(amount_payload <= (int)bytes_transferred);
|
||||||
m_statistics.sent_bytes(amount_payload, bytes_transferred - amount_payload);
|
m_statistics.sent_bytes(amount_payload, bytes_transferred - amount_payload);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,11 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
using boost::lexical_cast;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
@ -69,7 +73,6 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
using boost::bind;
|
using boost::bind;
|
||||||
using boost::lexical_cast;
|
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue