mirror of https://github.com/oxen-io/lokinet
Move CachedTagResult and TagLookupJob to its own component
parent
6bf54e0925
commit
94ad84363a
@ -0,0 +1,61 @@
|
||||
#include <service/tag_lookup_job.hpp>
|
||||
|
||||
#include <dht/messages/findintro.hpp>
|
||||
#include <messages/dht.hpp>
|
||||
#include <service/endpoint.hpp>
|
||||
|
||||
namespace llarp
|
||||
{
|
||||
namespace service
|
||||
{
|
||||
bool
|
||||
CachedTagResult::HandleResponse(const std::set< IntroSet >& introsets)
|
||||
{
|
||||
auto now = parent->Now();
|
||||
|
||||
for(const auto& introset : introsets)
|
||||
if(result.insert(introset).second)
|
||||
lastModified = now;
|
||||
LogInfo("Tag result for ", tag.ToString(), " got ", introsets.size(),
|
||||
" results from lookup, have ", result.size(),
|
||||
" cached last modified at ", lastModified, " is ",
|
||||
now - lastModified, "ms old");
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
CachedTagResult::Expire(llarp_time_t now)
|
||||
{
|
||||
auto itr = result.begin();
|
||||
while(itr != result.end())
|
||||
{
|
||||
if(itr->HasExpiredIntros(now))
|
||||
{
|
||||
LogInfo("Removing expired tag Entry ", itr->A.Name());
|
||||
itr = result.erase(itr);
|
||||
lastModified = now;
|
||||
}
|
||||
else
|
||||
{
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
routing::IMessage*
|
||||
CachedTagResult::BuildRequestMessage(uint64_t txid)
|
||||
{
|
||||
routing::DHTMessage* msg = new routing::DHTMessage();
|
||||
msg->M.emplace_back(new dht::FindIntroMessage(tag, txid));
|
||||
lastRequest = parent->Now();
|
||||
return msg;
|
||||
}
|
||||
|
||||
TagLookupJob::TagLookupJob(Endpoint* parent, CachedTagResult* result)
|
||||
: IServiceLookup(parent, parent->GenTXID(), "taglookup")
|
||||
, m_result(result)
|
||||
{
|
||||
}
|
||||
} // namespace service
|
||||
|
||||
} // namespace llarp
|
@ -0,0 +1,79 @@
|
||||
#ifndef LLARP_SERVICE_TAG_LOOKUP_JOB_HPP
|
||||
#define LLARP_SERVICE_TAG_LOOKUP_JOB_HPP
|
||||
|
||||
#include <routing/message.hpp>
|
||||
#include <service/IntroSet.hpp>
|
||||
#include <service/lookup.hpp>
|
||||
#include <service/tag.hpp>
|
||||
#include <util/types.hpp>
|
||||
|
||||
#include <set>
|
||||
|
||||
namespace llarp
|
||||
{
|
||||
namespace service
|
||||
{
|
||||
struct Endpoint;
|
||||
|
||||
struct CachedTagResult
|
||||
{
|
||||
const static llarp_time_t TTL = 10000;
|
||||
llarp_time_t lastRequest = 0;
|
||||
llarp_time_t lastModified = 0;
|
||||
std::set< IntroSet > result;
|
||||
Tag tag;
|
||||
Endpoint* parent;
|
||||
|
||||
CachedTagResult(const Tag& t, Endpoint* p) : tag(t), parent(p)
|
||||
{
|
||||
}
|
||||
|
||||
~CachedTagResult()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Expire(llarp_time_t now);
|
||||
|
||||
bool
|
||||
ShouldRefresh(llarp_time_t now) const
|
||||
{
|
||||
if(now <= lastRequest)
|
||||
return false;
|
||||
return (now - lastRequest) > TTL;
|
||||
}
|
||||
|
||||
llarp::routing::IMessage*
|
||||
BuildRequestMessage(uint64_t txid);
|
||||
|
||||
bool
|
||||
HandleResponse(const std::set< IntroSet >& results);
|
||||
};
|
||||
|
||||
struct TagLookupJob : public IServiceLookup
|
||||
{
|
||||
TagLookupJob(Endpoint* parent, CachedTagResult* result);
|
||||
|
||||
~TagLookupJob()
|
||||
{
|
||||
}
|
||||
|
||||
llarp::routing::IMessage*
|
||||
BuildRequestMessage() override
|
||||
{
|
||||
return m_result->BuildRequestMessage(txid);
|
||||
}
|
||||
|
||||
bool
|
||||
HandleResponse(const std::set< IntroSet >& results) override
|
||||
{
|
||||
return m_result->HandleResponse(results);
|
||||
}
|
||||
|
||||
CachedTagResult* m_result;
|
||||
};
|
||||
|
||||
} // namespace service
|
||||
} // namespace llarp
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue