mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-18 16:49:58 +00:00
send all outgoing messages in one buffer
This commit is contained in:
parent
11231abe8a
commit
5ad25376bb
@ -635,14 +635,7 @@ namespace transport
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NTCPSession::Send (std::shared_ptr<i2p::I2NPMessage> msg)
|
size_t NTCPSession::CreateMsgBuffer (std::shared_ptr<I2NPMessage> msg, uint8_t * buf)
|
||||||
{
|
|
||||||
m_IsSending = true;
|
|
||||||
boost::asio::async_write (m_Socket, CreateMsgBuffer (msg), boost::asio::transfer_all (),
|
|
||||||
std::bind(&NTCPSession::HandleSent, shared_from_this (), std::placeholders::_1, std::placeholders::_2, std::vector<std::shared_ptr<I2NPMessage> >{ msg }));
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::asio::const_buffers_1 NTCPSession::CreateMsgBuffer (std::shared_ptr<I2NPMessage> msg)
|
|
||||||
{
|
{
|
||||||
uint8_t * sendBuffer;
|
uint8_t * sendBuffer;
|
||||||
int len;
|
int len;
|
||||||
@ -674,24 +667,29 @@ namespace transport
|
|||||||
htobe32buf (sendBuffer + len + 2 + padding, adler32 (adler32 (0, Z_NULL, 0), sendBuffer, len + 2+ padding));
|
htobe32buf (sendBuffer + len + 2 + padding, adler32 (adler32 (0, Z_NULL, 0), sendBuffer, len + 2+ padding));
|
||||||
|
|
||||||
int l = len + padding + 6;
|
int l = len + padding + 6;
|
||||||
m_Encryption.Encrypt(sendBuffer, l, sendBuffer);
|
m_Encryption.Encrypt(sendBuffer, l, buf);
|
||||||
return boost::asio::buffer ((const uint8_t *)sendBuffer, l);
|
return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void NTCPSession::Send (const std::vector<std::shared_ptr<I2NPMessage> >& msgs)
|
void NTCPSession::Send (const std::vector<std::shared_ptr<I2NPMessage> >& msgs)
|
||||||
{
|
{
|
||||||
|
if (!msgs.size ()) return;
|
||||||
m_IsSending = true;
|
m_IsSending = true;
|
||||||
std::vector<boost::asio::const_buffer> bufs;
|
size_t len = 0;
|
||||||
for (const auto& it: msgs)
|
for (const auto& it: msgs)
|
||||||
bufs.push_back (CreateMsgBuffer (it));
|
len += it->GetLength () + 22; // 6 + 16
|
||||||
boost::asio::async_write (m_Socket, bufs, boost::asio::transfer_all (),
|
uint8_t * buf = new uint8_t[len];
|
||||||
std::bind(&NTCPSession::HandleSent, shared_from_this (), std::placeholders::_1, std::placeholders::_2, msgs));
|
len = 0;
|
||||||
|
for (const auto& it: msgs)
|
||||||
|
len += CreateMsgBuffer (it, buf + len);
|
||||||
|
boost::asio::async_write (m_Socket, boost::asio::buffer (buf, len), boost::asio::transfer_all (),
|
||||||
|
std::bind(&NTCPSession::HandleSent, shared_from_this (), std::placeholders::_1, std::placeholders::_2, buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NTCPSession::HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred, std::vector<std::shared_ptr<I2NPMessage> > msgs)
|
void NTCPSession::HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred, uint8_t * buf)
|
||||||
{
|
{
|
||||||
(void) msgs;
|
delete[] buf;
|
||||||
m_IsSending = false;
|
m_IsSending = false;
|
||||||
if (ecode)
|
if (ecode)
|
||||||
{
|
{
|
||||||
@ -716,7 +714,11 @@ namespace transport
|
|||||||
|
|
||||||
void NTCPSession::SendTimeSyncMessage ()
|
void NTCPSession::SendTimeSyncMessage ()
|
||||||
{
|
{
|
||||||
Send (nullptr);
|
uint8_t * buf = new uint8_t[16];
|
||||||
|
m_IsSending = true;
|
||||||
|
auto len = CreateMsgBuffer (nullptr, buf); // nullptr means timestamp
|
||||||
|
boost::asio::async_write (m_Socket, boost::asio::buffer (buf, len), boost::asio::transfer_all (),
|
||||||
|
std::bind(&NTCPSession::HandleSent, shared_from_this (), std::placeholders::_1, std::placeholders::_2, buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,10 +91,9 @@ namespace transport
|
|||||||
void HandleReceived (const boost::system::error_code& ecode, std::size_t bytes_transferred);
|
void HandleReceived (const boost::system::error_code& ecode, std::size_t bytes_transferred);
|
||||||
bool DecryptNextBlock (const uint8_t * encrypted);
|
bool DecryptNextBlock (const uint8_t * encrypted);
|
||||||
|
|
||||||
void Send (std::shared_ptr<i2p::I2NPMessage> msg);
|
size_t CreateMsgBuffer (std::shared_ptr<I2NPMessage> msg, uint8_t * buf);
|
||||||
boost::asio::const_buffers_1 CreateMsgBuffer (std::shared_ptr<I2NPMessage> msg);
|
|
||||||
void Send (const std::vector<std::shared_ptr<I2NPMessage> >& msgs);
|
void Send (const std::vector<std::shared_ptr<I2NPMessage> >& msgs);
|
||||||
void HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred, std::vector<std::shared_ptr<I2NPMessage> > msgs);
|
void HandleSent (const boost::system::error_code& ecode, std::size_t bytes_transferred, uint8_t * buf);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user