#ifndef LLARP_SERVICE_TAG_LOOKUP_JOB_HPP #define LLARP_SERVICE_TAG_LOOKUP_JOB_HPP #include #include #include #include #include #include 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* m_parent; CachedTagResult(const Tag& t, Endpoint* p) : tag(t), m_parent(p) { } ~CachedTagResult() = default; void Expire(llarp_time_t now); bool ShouldRefresh(llarp_time_t now) const { if(now <= lastRequest) return false; return (now - lastRequest) > TTL; } std::shared_ptr< routing::IMessage > BuildRequestMessage(uint64_t txid); bool HandleResponse(const std::set< IntroSet >& results); }; struct TagLookupJob : public IServiceLookup { TagLookupJob(Endpoint* parent, CachedTagResult* result); ~TagLookupJob() override = default; std::shared_ptr< 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