#ifndef LLARP_SERVICE_CONTEXT_HPP #define LLARP_SERVICE_CONTEXT_HPP #include #include #include #include #include namespace llarp { namespace service { /// holds all the hidden service endpoints we own struct Context { explicit Context(AbstractRouter* r); ~Context(); void Tick(llarp_time_t now); /// stop all held services bool StopAll(); util::StatusObject ExtractStatus() const; bool hasEndpoints(); /// function visitor returns false to prematurely break iteration void ForEachService(std::function visit) const; /// add default endpoint with options bool AddDefaultEndpoint(const std::unordered_multimap& opts); /// add endpoint via config void AddEndpoint(const EndpointConfig& conf, bool autostart = false); /// inject endpoint instance void InjectEndpoint(std::string name, std::shared_ptr ep); /// stop and remove an endpoint by name /// return false if we don't have the hidden service with that name bool RemoveEndpoint(const std::string& name); Endpoint_ptr GetEndpointByName(const std::string& name); Endpoint_ptr GetDefault() { return GetEndpointByName("default"); } bool StartAll(); private: AbstractRouter* const m_Router; std::unordered_map> m_Endpoints; std::list> m_Stopped; }; } // namespace service } // namespace llarp #endif