lookup LeaseSet before sending ping

This commit is contained in:
orignal 2025-08-26 14:50:34 -04:00
parent 5dadecba03
commit a2073a8751
2 changed files with 65 additions and 33 deletions

View file

@ -823,6 +823,43 @@ namespace client
SendReplyError ("No local destination");
return;
}
if (addr->IsIdentHash ())
{
// we might have leaseset already
auto leaseSet = localDestination->FindLeaseSet (addr->identHash);
if (leaseSet)
{
boost::asio::post (localDestination->GetService (),
std::bind (&BOBCommandSession::SendPing, shared_from_this (), leaseSet));
return;
}
}
// request LeaseSet
if (addr->IsIdentHash ())
localDestination->RequestDestination (addr->identHash,
std::bind (&BOBCommandSession::SendPing, shared_from_this (), std::placeholders::_1));
else
localDestination->RequestDestinationWithEncryptedLeaseSet (addr->blindedPublicKey,
std::bind (&BOBCommandSession::SendPing, shared_from_this (), std::placeholders::_1));
}
else
SendReplyError ("empty ping address");
}
void BOBCommandSession::SendPing (std::shared_ptr<const i2p::data::LeaseSet> ls)
{
if (!ls)
{
SendReplyError ("LeaseSet Not found");
return;
}
auto localDestination = (m_CurrentDestination && m_CurrentDestination->IsRunning ()) ?
m_CurrentDestination->GetLocalDestination () : i2p::client::context.GetSharedLocalDestination ();
if (!localDestination)
{
SendReplyError ("No local destination");
return;
}
auto streamingDestination = localDestination->GetStreamingDestination ();
if (!streamingDestination)
{
@ -853,14 +890,7 @@ namespace client
else
s->SendReplyOK ({"pong: time=", std::to_string (t), " ms"});
});
if (addr->IsIdentHash ())
localDestination->SendPing (addr->identHash);
else
localDestination->SendPing (addr->blindedPublicKey);
}
else
SendReplyError ("empty ping address");
streamingDestination->SendPing (ls);
}
void BOBCommandSession::ClearCommandHandler (const char * operand, size_t len)

View file

@ -261,6 +261,8 @@ namespace client
void BuildStatusLine(bool currentTunnel, std::shared_ptr<BOBDestination> destination, std::string &out);
void SendPing (std::shared_ptr<const i2p::data::LeaseSet> ls);
private:
BOBCommandChannel& m_Owner;