|
|
|
@ -220,18 +220,45 @@ namespace client
@@ -220,18 +220,45 @@ namespace client
|
|
|
|
|
if (m_Session) |
|
|
|
|
{ |
|
|
|
|
m_SocketType = eSAMSocketTypeSession; |
|
|
|
|
uint8_t buf[1024]; |
|
|
|
|
char priv[1024]; |
|
|
|
|
size_t l = m_Session->localDestination->GetPrivateKeys ().ToBuffer (buf, 1024); |
|
|
|
|
size_t l1 = i2p::data::ByteStreamToBase64 (buf, l, priv, 1024); |
|
|
|
|
priv[l1] = 0; |
|
|
|
|
size_t l2 = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_SESSION_CREATE_REPLY_OK, priv); |
|
|
|
|
SendMessageReply (m_Buffer, l2, false); |
|
|
|
|
if (m_Session->localDestination->IsReady ()) |
|
|
|
|
SendSessionCreateReplyOk (); |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
m_Timer.expires_from_now (boost::posix_time::seconds(SAM_SESSION_READINESS_CHECK_INTERVAL)); |
|
|
|
|
m_Timer.async_wait (boost::bind (&SAMSocket::HandleSessionReadinessCheckTimer, |
|
|
|
|
this, boost::asio::placeholders::error)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
SendMessageReply (SAM_SESSION_CREATE_DUPLICATED_DEST, strlen(SAM_SESSION_CREATE_DUPLICATED_DEST), true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SAMSocket::HandleSessionReadinessCheckTimer (const boost::system::error_code& ecode) |
|
|
|
|
{ |
|
|
|
|
if (ecode != boost::asio::error::operation_aborted) |
|
|
|
|
{ |
|
|
|
|
if (m_Session->localDestination->IsReady ()) |
|
|
|
|
SendSessionCreateReplyOk (); |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
m_Timer.expires_from_now (boost::posix_time::seconds(SAM_SESSION_READINESS_CHECK_INTERVAL)); |
|
|
|
|
m_Timer.async_wait (boost::bind (&SAMSocket::HandleSessionReadinessCheckTimer, |
|
|
|
|
this, boost::asio::placeholders::error)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SAMSocket::SendSessionCreateReplyOk () |
|
|
|
|
{ |
|
|
|
|
uint8_t buf[1024]; |
|
|
|
|
char priv[1024]; |
|
|
|
|
size_t l = m_Session->localDestination->GetPrivateKeys ().ToBuffer (buf, 1024); |
|
|
|
|
size_t l1 = i2p::data::ByteStreamToBase64 (buf, l, priv, 1024); |
|
|
|
|
priv[l1] = 0; |
|
|
|
|
size_t l2 = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_SESSION_CREATE_REPLY_OK, priv); |
|
|
|
|
SendMessageReply (m_Buffer, l2, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SAMSocket::ProcessStreamConnect (char * buf, size_t len) |
|
|
|
|
{ |
|
|
|
|
LogPrint ("SAM stream connect: ", buf); |
|
|
|
|