Browse Source

select tunnel from TunnelPool rather than from LeaseSet for DeliveryStatus

pull/177/head
orignal 9 years ago
parent
commit
10577cd1e5
  1. 1
      Destination.h
  2. 11
      Garlic.cpp
  3. 1
      Garlic.h
  4. 5
      RouterContext.cpp
  5. 1
      RouterContext.h

1
Destination.h

@ -88,6 +88,7 @@ namespace client
// implements GarlicDestination // implements GarlicDestination
const i2p::data::LeaseSet * GetLeaseSet (); const i2p::data::LeaseSet * GetLeaseSet ();
std::shared_ptr<i2p::tunnel::TunnelPool> GetTunnelPool () const { return m_Pool; }
void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from); void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from);
// override GarlicDestination // override GarlicDestination

11
Garlic.cpp

@ -297,16 +297,15 @@ namespace garlic
size_t size = 0; size_t size = 0;
if (m_Owner) if (m_Owner)
{ {
auto leases = m_Owner->GetLeaseSet ()->GetNonExpiredLeases (); auto inboundTunnel = m_Owner->GetTunnelPool ()->GetNextInboundTunnel ();
if (!leases.empty ()) if (inboundTunnel)
{ {
buf[size] = eGarlicDeliveryTypeTunnel << 5; // delivery instructions flag tunnel buf[size] = eGarlicDeliveryTypeTunnel << 5; // delivery instructions flag tunnel
size++; size++;
uint32_t i = m_Rnd.GenerateWord32 (0, leases.size () - 1);
// hash and tunnelID sequence is reversed for Garlic // hash and tunnelID sequence is reversed for Garlic
memcpy (buf + size, leases[i].tunnelGateway, 32); // To Hash memcpy (buf + size, inboundTunnel->GetNextIdentHash (), 32); // To Hash
size += 32; size += 32;
htobe32buf (buf + size, leases[i].tunnelID); // tunnelID htobe32buf (buf + size, inboundTunnel->GetNextTunnelID ()); // tunnelID
size += 4; size += 4;
// create msg // create msg
I2NPMessage * msg = CreateDeliveryStatusMsg (msgID); I2NPMessage * msg = CreateDeliveryStatusMsg (msgID);
@ -333,7 +332,7 @@ namespace garlic
size += 3; size += 3;
} }
else else
LogPrint ("All tunnels of local LeaseSet expired"); LogPrint (eLogError, "No inbound tunnels in the pool for DeliveryStatus");
} }
else else
LogPrint ("Missing local LeaseSet"); LogPrint ("Missing local LeaseSet");

1
Garlic.h

@ -133,6 +133,7 @@ namespace garlic
virtual void SetLeaseSetUpdated (); virtual void SetLeaseSetUpdated ();
virtual const i2p::data::LeaseSet * GetLeaseSet () = 0; // TODO virtual const i2p::data::LeaseSet * GetLeaseSet () = 0; // TODO
virtual std::shared_ptr<i2p::tunnel::TunnelPool> GetTunnelPool () const = 0;
virtual void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from) = 0; virtual void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from) = 0;
protected: protected:

5
RouterContext.cpp

@ -289,6 +289,11 @@ namespace i2p
fk.write ((char *)&keys, sizeof (keys)); fk.write ((char *)&keys, sizeof (keys));
} }
std::shared_ptr<i2p::tunnel::TunnelPool> RouterContext::GetTunnelPool () const
{
return i2p::tunnel::tunnels.GetExploratoryPool ();
}
void RouterContext::HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from) void RouterContext::HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from)
{ {
i2p::HandleI2NPMessage (CreateI2NPMessage (buf, GetI2NPMessageLength (buf), from)); i2p::HandleI2NPMessage (CreateI2NPMessage (buf, GetI2NPMessageLength (buf), from));

1
RouterContext.h

@ -73,6 +73,7 @@ namespace i2p
// implements GarlicDestination // implements GarlicDestination
const i2p::data::LeaseSet * GetLeaseSet () { return nullptr; }; const i2p::data::LeaseSet * GetLeaseSet () { return nullptr; };
std::shared_ptr<i2p::tunnel::TunnelPool> GetTunnelPool () const;
void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from); void HandleI2NPMessage (const uint8_t * buf, size_t len, std::shared_ptr<i2p::tunnel::InboundTunnel> from);
private: private:

Loading…
Cancel
Save