notify inbound tunnels update

This commit is contained in:
orignal 2014-08-15 19:21:30 -04:00
parent eff3bb6ab1
commit 29243fcb47
5 changed files with 28 additions and 14 deletions

View File

@ -171,6 +171,7 @@ namespace data
virtual const uint8_t * GetEncryptionPrivateKey () const = 0;
virtual const uint8_t * GetEncryptionPublicKey () const = 0;
virtual void Sign (const uint8_t * buf, int len, uint8_t * signature) const = 0;
virtual void SetLeaseSetUpdated () = 0;
};
}
}

View File

@ -33,6 +33,7 @@ namespace i2p
const uint8_t * GetEncryptionPrivateKey () const { return GetPrivateKey (); };
const uint8_t * GetEncryptionPublicKey () const { return m_Keys.publicKey; };
void Sign (const uint8_t * buf, int len, uint8_t * signature) const;
void SetLeaseSetUpdated () {};
private:

View File

@ -575,7 +575,12 @@ namespace stream
const i2p::data::LeaseSet * StreamingDestination::GetLeaseSet ()
{
if (!m_Pool) return nullptr;
if (!m_LeaseSet || m_LeaseSet->HasExpiredLeases ())
if (!m_LeaseSet)
UpdateLeaseSet ();
return m_LeaseSet;
}
void StreamingDestination::UpdateLeaseSet ()
{
auto newLeaseSet = new i2p::data::LeaseSet (*m_Pool);
if (!m_LeaseSet)
@ -586,11 +591,14 @@ namespace stream
*m_LeaseSet = *newLeaseSet;
delete newLeaseSet;
}
}
void StreamingDestination::SetLeaseSetUpdated ()
{
UpdateLeaseSet ();
for (auto it: m_Streams)
it.second->SetLeaseSetUpdated ();
}
return m_LeaseSet;
}
void StreamingDestination::Sign (const uint8_t * buf, int len, uint8_t * signature) const
{

View File

@ -157,10 +157,12 @@ namespace stream
const uint8_t * GetEncryptionPrivateKey () const { return m_EncryptionPrivateKey; };
const uint8_t * GetEncryptionPublicKey () const { return m_EncryptionPublicKey; };
void Sign (const uint8_t * buf, int len, uint8_t * signature) const;
void SetLeaseSetUpdated ();
private:
Stream * CreateNewIncomingStream ();
void UpdateLeaseSet ();
private:

View File

@ -26,6 +26,7 @@ namespace tunnel
void TunnelPool::TunnelCreated (InboundTunnel * createdTunnel)
{
m_InboundTunnels.insert (createdTunnel);
m_LocalDestination.SetLeaseSetUpdated ();
}
void TunnelPool::TunnelExpired (InboundTunnel * expiredTunnel)
@ -126,6 +127,7 @@ namespace tunnel
{
it.second.second->SetState (eTunnelStateFailed);
m_InboundTunnels.erase (it.second.second);
m_LocalDestination.SetLeaseSetUpdated ();
}
else
it.second.second->SetState (eTunnelStateTestFailed);