diff --git a/include/libtorrent/peer_connection.hpp b/include/libtorrent/peer_connection.hpp index 42ca96f90..1bffa09bc 100644 --- a/include/libtorrent/peer_connection.hpp +++ b/include/libtorrent/peer_connection.hpp @@ -538,7 +538,7 @@ namespace libtorrent // these functions are virtual to let bt_peer_connection hook into them // and encrypt the content - enum message_type_flags { message_type_request = 1 }; + enum message_type_flags { message_type_request = 1, cork_message = 2 }; virtual void send_buffer(char const* begin, int size, int flags = 0 , void (*fun)(char*, int, void*) = 0, void* userdata = 0); virtual void setup_send(); diff --git a/src/bt_peer_connection.cpp b/src/bt_peer_connection.cpp index 93322b346..847467fd1 100644 --- a/src/bt_peer_connection.cpp +++ b/src/bt_peer_connection.cpp @@ -2339,12 +2339,12 @@ namespace libtorrent char* ptr = msg; detail::write_int32(r.length + 1 + 4 + 4 + 4 + piece_list_buf.size(), ptr); - send_buffer(msg, 17); - send_buffer(&piece_list_buf[0], piece_list_buf.size()); + send_buffer(msg, 17, cork_message); + send_buffer(&piece_list_buf[0], piece_list_buf.size(), cork_message); } else { - send_buffer(msg, 13); + send_buffer(msg, 13, cork_message); } append_send_buffer(buffer.get(), r.length diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index b4006a3fe..628e3e98a 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -4458,7 +4458,6 @@ namespace libtorrent if (j.buffer) m_ses.m_disk_thread.rename_buffer(j.buffer, "dispatched send buffer"); #endif write_piece(r, buffer); - setup_send(); } void peer_connection::assign_bandwidth(int channel, int amount) @@ -5005,7 +5004,7 @@ namespace libtorrent , boost::bind(&session_impl::free_buffer, boost::ref(m_ses), _1)); ++i; } - setup_send(); + if ((flags & cork_message) == 0) setup_send(); } template @@ -5030,7 +5029,7 @@ namespace libtorrent ++m_ses.m_num_messages[aux::session_impl::on_read_counter]; int size = 8; int index = 0; - while (bytes_transferred > size) { size <<= 1; ++index; } + while (bytes_transferred > size + 13) { size <<= 1; ++index; } int num_max = sizeof(m_ses.m_recv_buffer_sizes)/sizeof(m_ses.m_recv_buffer_sizes[0]); if (index >= num_max) index = num_max - 1; ++m_ses.m_recv_buffer_sizes[index]; @@ -5378,7 +5377,7 @@ namespace libtorrent ++m_ses.m_num_messages[aux::session_impl::on_write_counter]; int size = 8; int index = 0; - while (bytes_transferred > size) { size <<= 1; ++index; } + while (bytes_transferred > size + 13) { size <<= 1; ++index; } int num_max = sizeof(m_ses.m_send_buffer_sizes)/sizeof(m_ses.m_send_buffer_sizes[0]); if (index >= num_max) index = num_max - 1; ++m_ses.m_send_buffer_sizes[index];