create new ratchets session if previous was not replied

This commit is contained in:
orignal 2020-10-27 08:32:38 -04:00
parent 56f3bdd746
commit c400372a79
3 changed files with 3 additions and 1 deletions

View file

@ -169,6 +169,7 @@ namespace garlic
bool IsInactive (uint64_t ts) const { return ts > m_LastActivityTimestamp + ECIESX25519_INACTIVITY_TIMEOUT && CanBeRestarted (ts); }
bool IsRatchets () const { return true; };
bool IsReadyToSend () const { return m_State != eSessionStateNewSessionSent; };
uint64_t GetLastActivityTimestamp () const { return m_LastActivityTimestamp; };
private:

View file

@ -114,6 +114,7 @@ namespace garlic
virtual bool CleanupUnconfirmedTags () { return false; }; // for I2CP, override in ElGamalAESSession
virtual bool MessageConfirmed (uint32_t msgID);
virtual bool IsRatchets () const { return false; };
virtual bool IsReadyToSend () const { return true; };
virtual uint64_t GetLastActivityTimestamp () const { return 0; }; // non-zero for rathets only
void SetLeaseSetUpdated ()

View file

@ -756,7 +756,7 @@ namespace stream
return;
}
}
if (!m_RoutingSession || !m_RoutingSession->GetOwner ()) // expired and detached
if (!m_RoutingSession || !m_RoutingSession->GetOwner () || !m_RoutingSession->IsReadyToSend ()) // expired and detached or new session sent
m_RoutingSession = m_LocalDestination.GetOwner ()->GetRoutingSession (m_RemoteLeaseSet, true);
if (!m_CurrentOutboundTunnel && m_RoutingSession) // first message to send
{