mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-05-04 22:48:40 +02:00
don't exceed stream max send buffer size
This commit is contained in:
parent
539cd5a656
commit
aece5bb16c
2 changed files with 17 additions and 5 deletions
|
@ -151,15 +151,21 @@ namespace client
|
||||||
void I2PTunnelConnection::Receive ()
|
void I2PTunnelConnection::Receive ()
|
||||||
{
|
{
|
||||||
if (m_IsReceiving) return; // already receiving
|
if (m_IsReceiving) return; // already receiving
|
||||||
|
size_t bufSize = I2P_TUNNEL_CONNECTION_BUFFER_SIZE;
|
||||||
size_t unsentSize = m_Stream ? m_Stream->GetSendBufferSize () : 0;
|
size_t unsentSize = m_Stream ? m_Stream->GetSendBufferSize () : 0;
|
||||||
if (unsentSize >= I2P_TUNNEL_CONNECTION_STREAM_MAX_SEND_BUFFER_SIZE) return; // buffer is full
|
if (unsentSize)
|
||||||
|
{
|
||||||
|
if (unsentSize >= I2P_TUNNEL_CONNECTION_STREAM_MAX_SEND_BUFFER_SIZE) return; // buffer is full
|
||||||
|
if (unsentSize > I2P_TUNNEL_CONNECTION_STREAM_MAX_SEND_BUFFER_SIZE - I2P_TUNNEL_CONNECTION_BUFFER_SIZE)
|
||||||
|
bufSize = I2P_TUNNEL_CONNECTION_STREAM_MAX_SEND_BUFFER_SIZE - unsentSize;
|
||||||
|
}
|
||||||
m_IsReceiving = true;
|
m_IsReceiving = true;
|
||||||
if (m_SSL)
|
if (m_SSL)
|
||||||
m_SSL->async_read_some (boost::asio::buffer(m_Buffer, I2P_TUNNEL_CONNECTION_BUFFER_SIZE),
|
m_SSL->async_read_some (boost::asio::buffer(m_Buffer, bufSize),
|
||||||
std::bind(&I2PTunnelConnection::HandleReceive, shared_from_this (),
|
std::bind(&I2PTunnelConnection::HandleReceive, shared_from_this (),
|
||||||
std::placeholders::_1, std::placeholders::_2));
|
std::placeholders::_1, std::placeholders::_2));
|
||||||
else
|
else
|
||||||
m_Socket->async_read_some (boost::asio::buffer(m_Buffer, I2P_TUNNEL_CONNECTION_BUFFER_SIZE),
|
m_Socket->async_read_some (boost::asio::buffer(m_Buffer, bufSize),
|
||||||
std::bind(&I2PTunnelConnection::HandleReceive, shared_from_this (),
|
std::bind(&I2PTunnelConnection::HandleReceive, shared_from_this (),
|
||||||
std::placeholders::_1, std::placeholders::_2));
|
std::placeholders::_1, std::placeholders::_2));
|
||||||
}
|
}
|
||||||
|
|
|
@ -947,10 +947,16 @@ namespace client
|
||||||
if (m_SocketType == eSAMSocketTypeStream)
|
if (m_SocketType == eSAMSocketTypeStream)
|
||||||
{
|
{
|
||||||
if (m_IsReceiving) return;
|
if (m_IsReceiving) return;
|
||||||
|
size_t bufSize = SAM_SOCKET_BUFFER_SIZE;
|
||||||
size_t unsentSize = m_Stream ? m_Stream->GetSendBufferSize () : 0;
|
size_t unsentSize = m_Stream ? m_Stream->GetSendBufferSize () : 0;
|
||||||
if (unsentSize >= SAM_STREAM_MAX_SEND_BUFFER_SIZE) return; // buffer is full
|
if (unsentSize)
|
||||||
|
{
|
||||||
|
if (unsentSize >= SAM_STREAM_MAX_SEND_BUFFER_SIZE) return; // buffer is full
|
||||||
|
if (unsentSize > SAM_STREAM_MAX_SEND_BUFFER_SIZE - SAM_SOCKET_BUFFER_SIZE)
|
||||||
|
bufSize = SAM_STREAM_MAX_SEND_BUFFER_SIZE - unsentSize;
|
||||||
|
}
|
||||||
m_IsReceiving = true;
|
m_IsReceiving = true;
|
||||||
m_Socket.async_read_some (boost::asio::buffer(m_Buffer, SAM_SOCKET_BUFFER_SIZE),
|
m_Socket.async_read_some (boost::asio::buffer(m_Buffer, bufSize),
|
||||||
std::bind(&SAMSocket::HandleReceived, shared_from_this (), std::placeholders::_1, std::placeholders::_2));
|
std::bind(&SAMSocket::HandleReceived, shared_from_this (), std::placeholders::_1, std::placeholders::_2));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue