mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-27 21:34:17 +00:00
process remaining data from stream
This commit is contained in:
parent
ca56d3fc23
commit
882e7a845e
2
Garlic.h
2
Garlic.h
@ -44,7 +44,7 @@ namespace garlic
|
|||||||
const int OUTGOING_TAGS_CONFIRMATION_TIMEOUT = 10; // 10 seconds
|
const int OUTGOING_TAGS_CONFIRMATION_TIMEOUT = 10; // 10 seconds
|
||||||
const int LEASET_CONFIRMATION_TIMEOUT = 4000; // in milliseconds
|
const int LEASET_CONFIRMATION_TIMEOUT = 4000; // in milliseconds
|
||||||
const int ROUTING_PATH_EXPIRATION_TIMEOUT = 30; // 30 seconds
|
const int ROUTING_PATH_EXPIRATION_TIMEOUT = 30; // 30 seconds
|
||||||
const int ROUTING_PATH_MAX_NUM_TIMES_USED = 10; // how many times might be used
|
const int ROUTING_PATH_MAX_NUM_TIMES_USED = 100; // how many times might be used
|
||||||
|
|
||||||
struct SessionTag: public i2p::data::Tag<32>
|
struct SessionTag: public i2p::data::Tag<32>
|
||||||
{
|
{
|
||||||
|
@ -114,10 +114,25 @@ namespace client
|
|||||||
void I2PTunnelConnection::StreamReceive ()
|
void I2PTunnelConnection::StreamReceive ()
|
||||||
{
|
{
|
||||||
if (m_Stream)
|
if (m_Stream)
|
||||||
m_Stream->AsyncReceive (boost::asio::buffer (m_StreamBuffer, I2P_TUNNEL_CONNECTION_BUFFER_SIZE),
|
{
|
||||||
std::bind (&I2PTunnelConnection::HandleStreamReceive, shared_from_this (),
|
if (m_Stream->GetStatus () == i2p::stream::eStreamStatusNew ||
|
||||||
std::placeholders::_1, std::placeholders::_2),
|
m_Stream->GetStatus () == i2p::stream::eStreamStatusOpen) // regular
|
||||||
I2P_TUNNEL_CONNECTION_MAX_IDLE);
|
{
|
||||||
|
m_Stream->AsyncReceive (boost::asio::buffer (m_StreamBuffer, I2P_TUNNEL_CONNECTION_BUFFER_SIZE),
|
||||||
|
std::bind (&I2PTunnelConnection::HandleStreamReceive, shared_from_this (),
|
||||||
|
std::placeholders::_1, std::placeholders::_2),
|
||||||
|
I2P_TUNNEL_CONNECTION_MAX_IDLE);
|
||||||
|
}
|
||||||
|
else // closed by peer
|
||||||
|
{
|
||||||
|
// get remaning data
|
||||||
|
auto len = m_Stream->ReadSome (m_StreamBuffer, I2P_TUNNEL_CONNECTION_BUFFER_SIZE);
|
||||||
|
if (len > 0) // still some data
|
||||||
|
Write (m_StreamBuffer, len);
|
||||||
|
else // no more data
|
||||||
|
Terminate ();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void I2PTunnelConnection::HandleStreamReceive (const boost::system::error_code& ecode, std::size_t bytes_transferred)
|
void I2PTunnelConnection::HandleStreamReceive (const boost::system::error_code& ecode, std::size_t bytes_transferred)
|
||||||
@ -126,7 +141,12 @@ namespace client
|
|||||||
{
|
{
|
||||||
LogPrint (eLogError, "I2PTunnel: stream read error: ", ecode.message ());
|
LogPrint (eLogError, "I2PTunnel: stream read error: ", ecode.message ());
|
||||||
if (ecode != boost::asio::error::operation_aborted)
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
Terminate ();
|
{
|
||||||
|
if (bytes_transferred > 0)
|
||||||
|
Write (m_StreamBuffer, bytes_transferred); // postpone termination
|
||||||
|
else
|
||||||
|
Terminate ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Write (m_StreamBuffer, bytes_transferred);
|
Write (m_StreamBuffer, bytes_transferred);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user