Merge pull request #1115 from majestrate/handle-multiple-responses-per-lookup-2020-02-20

handle multiple responses per hidden service lookup
pull/1131/head
Jeff 4 years ago committed by GitHub
commit 4f29405e9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -279,7 +279,8 @@ namespace llarp
}
std::unique_ptr< IServiceLookup > lookup = std::move(itr->second);
lookups.erase(itr);
lookup->HandleResponse(remote);
if(not lookup->HandleResponse(remote))
lookups.emplace(msg->txid, std::move(lookup));
return true;
}

@ -16,6 +16,7 @@ namespace llarp
, relayOrder(order)
, location(l)
, handle(std::move(h))
, requestsSent(0)
{
}
@ -38,7 +39,19 @@ namespace llarp
if(maybe.has_value())
found = maybe.value();
}
return handle(remote, found, endpoint);
handle(remote, found, endpoint);
requestsSent--;
return requestsSent == 0;
}
bool
HiddenServiceAddressLookup::SendRequestViaPath(path::Path_ptr p,
AbstractRouter* r)
{
if(not IServiceLookup::SendRequestViaPath(p, r))
return false;
requestsSent += 2;
return true;
}
std::shared_ptr< routing::IMessage >

@ -18,6 +18,7 @@ namespace llarp
using HandlerFunc = std::function< bool(
const Address&, nonstd::optional< IntroSet >, const RouterID&) >;
HandlerFunc handle;
size_t requestsSent;
HiddenServiceAddressLookup(Endpoint* p, HandlerFunc h,
const dht::Key_t& location,
@ -26,6 +27,9 @@ namespace llarp
~HiddenServiceAddressLookup() override = default;
bool
SendRequestViaPath(path::Path_ptr p, AbstractRouter* r) override;
bool
HandleResponse(const std::set< EncryptedIntroSet >& results) override;

@ -47,7 +47,7 @@ namespace llarp
BuildRequestMessage() = 0;
/// build a new request message and send it via a path
bool
virtual bool
SendRequestViaPath(path::Path_ptr p, AbstractRouter* r);
ILookupHolder* m_parent;

Loading…
Cancel
Save