|
|
@ -5,6 +5,46 @@ namespace i2p |
|
|
|
{ |
|
|
|
{ |
|
|
|
namespace client |
|
|
|
namespace client |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
I2CPSession::I2CPSession (std::shared_ptr<boost::asio::ip::tcp::socket> socket): |
|
|
|
|
|
|
|
m_Socket (socket) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ReadProtocolByte (); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void I2CPSession::ReadProtocolByte () |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (m_Socket) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
auto s = shared_from_this (); |
|
|
|
|
|
|
|
m_Socket->async_read_some (boost::asio::buffer (m_Buffer, 1), |
|
|
|
|
|
|
|
[s](const boost::system::error_code& ecode, std::size_t bytes_transferred) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!ecode && bytes_transferred > 0 && s->m_Buffer[0] == I2CP_PRTOCOL_BYTE) |
|
|
|
|
|
|
|
s->Receive (); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
s->Terminate (); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void I2CPSession::Receive () |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
m_Socket->async_read_some (boost::asio::buffer (m_Buffer, I2CP_SESSION_BUFFER_SIZE), |
|
|
|
|
|
|
|
std::bind (&I2CPSession::HandleReceived, shared_from_this (), std::placeholders::_1, std::placeholders::_2)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void I2CPSession::HandleReceived (const boost::system::error_code& ecode, std::size_t bytes_transferred) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (ecode) |
|
|
|
|
|
|
|
Terminate (); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
Receive (); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void I2CPSession::Terminate () |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
I2CPServer::I2CPServer (const std::string& interface, int port) |
|
|
|
I2CPServer::I2CPServer (const std::string& interface, int port) |
|
|
|
{ |
|
|
|
{ |
|
|
|
} |
|
|
|
} |
|
|
|