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 * GetEncryptionPrivateKey () const = 0;
virtual const uint8_t * GetEncryptionPublicKey () 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 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 * GetEncryptionPrivateKey () const { return GetPrivateKey (); };
const uint8_t * GetEncryptionPublicKey () const { return m_Keys.publicKey; }; const uint8_t * GetEncryptionPublicKey () const { return m_Keys.publicKey; };
void Sign (const uint8_t * buf, int len, uint8_t * signature) const; void Sign (const uint8_t * buf, int len, uint8_t * signature) const;
void SetLeaseSetUpdated () {};
private: private:

View file

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

View file

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