|
|
|
@ -99,6 +99,8 @@ namespace datagram
@@ -99,6 +99,8 @@ namespace datagram
|
|
|
|
|
size_t uncompressedLen = m_Inflator.Inflate (buf, len, uncompressed, MAX_DATAGRAM_SIZE); |
|
|
|
|
if (uncompressedLen) |
|
|
|
|
HandleDatagram (fromPort, toPort, uncompressed, uncompressedLen); |
|
|
|
|
else |
|
|
|
|
LogPrint (eLogWarning, "Datagram: decompression failed"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::shared_ptr<I2NPMessage> DatagramDestination::CreateDataMessage (const uint8_t * payload, size_t len, uint16_t fromPort, uint16_t toPort) |
|
|
|
@ -134,6 +136,7 @@ namespace datagram
@@ -134,6 +136,7 @@ namespace datagram
|
|
|
|
|
if (now - it->second->LastActivity() >= DATAGRAM_SESSION_MAX_IDLE) |
|
|
|
|
{ |
|
|
|
|
LogPrint(eLogInfo, "DatagramDestination: expiring idle session with ", it->first.ToBase32()); |
|
|
|
|
it->second->Stop (); |
|
|
|
|
it = m_Sessions.erase (it); // we are expired
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
@ -149,6 +152,7 @@ namespace datagram
@@ -149,6 +152,7 @@ namespace datagram
|
|
|
|
|
if (itr == m_Sessions.end()) { |
|
|
|
|
// not found, create new session
|
|
|
|
|
session = std::make_shared<DatagramSession>(m_Owner, identity); |
|
|
|
|
session->Start (); |
|
|
|
|
m_Sessions[identity] = session; |
|
|
|
|
} else { |
|
|
|
|
session = itr->second; |
|
|
|
@ -172,11 +176,20 @@ namespace datagram
@@ -172,11 +176,20 @@ namespace datagram
|
|
|
|
|
m_RemoteIdent(remoteIdent), |
|
|
|
|
m_SendQueueTimer(localDestination->GetService()), |
|
|
|
|
m_RequestingLS(false) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DatagramSession::Start () |
|
|
|
|
{ |
|
|
|
|
m_LastUse = i2p::util::GetMillisecondsSinceEpoch (); |
|
|
|
|
ScheduleFlushSendQueue(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DatagramSession::Stop () |
|
|
|
|
{ |
|
|
|
|
m_SendQueueTimer.cancel (); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DatagramSession::SendMsg(std::shared_ptr<I2NPMessage> msg) |
|
|
|
|
{ |
|
|
|
|
// we used this session
|
|
|
|
|