Move CachedTagResult and TagLookupJob to its own component

pull/536/head
Michael 5 years ago
parent 6bf54e0925
commit 94ad84363a
No known key found for this signature in database
GPG Key ID: 2D51757B47E2434C

@ -214,23 +214,24 @@ set(LIB_SRC
routing/path_latency.cpp
routing/path_transfer.cpp
rpc/rpc.cpp
service/async_key_exchange.cpp
service/hidden_service_address_lookup.cpp
service/Identity.cpp
service/Intro.cpp
service/IntroSet.cpp
service/address.cpp
service/async_key_exchange.cpp
service/config.cpp
service/context.cpp
service/endpoint.cpp
service/handler.cpp
service/hidden_service_address_lookup.cpp
service/Identity.cpp
service/info.cpp
service/Intro.cpp
service/IntroSet.cpp
service/lookup.cpp
service/outbound_context.cpp
service/pendingbuffer.cpp
service/protocol.cpp
service/sendcontext.cpp
service/tag.cpp
service/tag_lookup_job.cpp
service/types.cpp
service/vanity.cpp
utp/inbound_message.cpp

@ -599,50 +599,6 @@ namespace llarp
{
}
bool
Endpoint::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
Endpoint::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*
Endpoint::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;
}
bool
Endpoint::PublishIntroSet(AbstractRouter* r)
{

@ -7,11 +7,12 @@
#include <path/path.hpp>
#include <path/pathbuilder.hpp>
#include <service/address.hpp>
#include <service/Identity.hpp>
#include <service/handler.hpp>
#include <service/Identity.hpp>
#include <service/pendingbuffer.hpp>
#include <service/sendcontext.hpp>
#include <service/protocol.hpp>
#include <service/sendcontext.hpp>
#include <service/tag_lookup_job.hpp>
// minimum time between introset shifts
#ifndef MIN_SHIFT_INTERVAL
@ -444,68 +445,6 @@ namespace llarp
ConvoMap_t m_Sessions;
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)
: IServiceLookup(parent, parent->GenTXID(), "taglookup")
, m_result(result)
{
}
~TagLookupJob()
{
}
llarp::routing::IMessage*
BuildRequestMessage()
{
return m_result->BuildRequestMessage(txid);
}
bool
HandleResponse(const std::set< IntroSet >& results)
{
return m_result->HandleResponse(results);
}
CachedTagResult* m_result;
};
std::unordered_map< Tag, CachedTagResult, Tag::Hash > m_PrefetchedTags;
};
} // namespace service

@ -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…
Cancel
Save