2019-07-15 09:15:51 +00:00
|
|
|
#include <service/endpoint_state.hpp>
|
|
|
|
|
|
|
|
#include <exit/session.hpp>
|
|
|
|
#include <hook/shell.hpp>
|
2019-07-18 16:28:17 +00:00
|
|
|
#include <service/endpoint.hpp>
|
2019-07-15 09:15:51 +00:00
|
|
|
#include <service/outbound_context.hpp>
|
|
|
|
#include <util/str.hpp>
|
|
|
|
|
|
|
|
namespace llarp
|
|
|
|
{
|
|
|
|
namespace service
|
|
|
|
{
|
|
|
|
bool
|
2020-04-22 21:52:53 +00:00
|
|
|
EndpointState::Configure(EndpointConfig conf)
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
2020-04-22 20:04:47 +00:00
|
|
|
m_Keyfile = std::move(conf.m_keyfile);
|
|
|
|
m_Tag = std::move(conf.m_tag);
|
|
|
|
m_PrefetchTags = std::move(conf.m_prefetchTags);
|
|
|
|
m_PrefetchAddrs = std::move(conf.m_prefetchAddrs);
|
|
|
|
m_MinPathLatency = conf.m_minLatency;
|
|
|
|
m_BundleRC = conf.m_bundleRC;
|
|
|
|
|
2020-04-22 21:52:53 +00:00
|
|
|
// TODO: update EndpointConfig to treat these as RouterIDs and detect dupes
|
2020-04-22 20:04:47 +00:00
|
|
|
for (const auto& item : conf.m_snodeBlacklist)
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
|
|
|
RouterID snode;
|
2020-04-22 20:04:47 +00:00
|
|
|
if (not snode.FromString(item))
|
|
|
|
throw std::runtime_error(stringify("Invalide RouterID: ", item));
|
|
|
|
|
|
|
|
m_SnodeBlacklist.insert(snode);
|
2019-07-15 09:15:51 +00:00
|
|
|
}
|
2020-04-22 20:04:47 +00:00
|
|
|
|
|
|
|
// TODO:
|
|
|
|
/*
|
2020-04-07 18:38:56 +00:00
|
|
|
if (k == "on-up")
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
|
|
|
m_OnUp = hooks::ExecShellBackend(v);
|
2020-04-07 18:38:56 +00:00
|
|
|
if (m_OnUp)
|
2019-07-15 09:15:51 +00:00
|
|
|
LogInfo(name, " added on up script: ", v);
|
|
|
|
else
|
|
|
|
LogError(name, " failed to add on up script");
|
|
|
|
}
|
2020-04-07 18:38:56 +00:00
|
|
|
if (k == "on-down")
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
|
|
|
m_OnDown = hooks::ExecShellBackend(v);
|
2020-04-07 18:38:56 +00:00
|
|
|
if (m_OnDown)
|
2019-07-15 09:15:51 +00:00
|
|
|
LogInfo(name, " added on down script: ", v);
|
|
|
|
else
|
|
|
|
LogError(name, " failed to add on down script");
|
|
|
|
}
|
2020-04-07 18:38:56 +00:00
|
|
|
if (k == "on-ready")
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
|
|
|
m_OnReady = hooks::ExecShellBackend(v);
|
2020-04-07 18:38:56 +00:00
|
|
|
if (m_OnReady)
|
2019-07-15 09:15:51 +00:00
|
|
|
LogInfo(name, " added on ready script: ", v);
|
|
|
|
else
|
|
|
|
LogError(name, " failed to add on ready script");
|
|
|
|
}
|
2020-04-22 20:04:47 +00:00
|
|
|
*/
|
2019-07-15 09:15:51 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
util::StatusObject
|
|
|
|
EndpointState::ExtractStatus(util::StatusObject& obj) const
|
|
|
|
{
|
2020-04-07 18:38:56 +00:00
|
|
|
obj["lastPublished"] = to_json(m_LastPublish);
|
2020-02-25 17:05:13 +00:00
|
|
|
obj["lastPublishAttempt"] = to_json(m_LastPublishAttempt);
|
2020-04-07 18:38:56 +00:00
|
|
|
obj["introset"] = m_IntroSet.ExtractStatus();
|
2019-07-15 09:15:51 +00:00
|
|
|
|
2020-04-07 18:38:56 +00:00
|
|
|
if (!m_Tag.IsZero())
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
2019-08-19 09:33:26 +00:00
|
|
|
obj["tag"] = m_Tag.ToString();
|
|
|
|
}
|
|
|
|
|
|
|
|
static auto getSecond = [](const auto& item) -> auto
|
|
|
|
{
|
|
|
|
return item.second->ExtractStatus();
|
2019-07-15 09:15:51 +00:00
|
|
|
};
|
2019-08-19 09:33:26 +00:00
|
|
|
|
|
|
|
std::transform(
|
2020-04-07 18:38:56 +00:00
|
|
|
m_DeadSessions.begin(),
|
|
|
|
m_DeadSessions.end(),
|
|
|
|
std::back_inserter(obj["deadSessions"]),
|
|
|
|
getSecond);
|
|
|
|
std::transform(
|
|
|
|
m_RemoteSessions.begin(),
|
|
|
|
m_RemoteSessions.end(),
|
|
|
|
std::back_inserter(obj["remoteSessions"]),
|
|
|
|
getSecond);
|
|
|
|
std::transform(
|
|
|
|
m_PendingLookups.begin(),
|
|
|
|
m_PendingLookups.end(),
|
|
|
|
std::back_inserter(obj["lookups"]),
|
|
|
|
getSecond);
|
|
|
|
std::transform(
|
|
|
|
m_SNodeSessions.begin(),
|
|
|
|
m_SNodeSessions.end(),
|
2019-08-19 09:33:26 +00:00
|
|
|
std::back_inserter(obj["snodeSessions"]),
|
|
|
|
[](const auto& item) { return item.second.first->ExtractStatus(); });
|
2019-07-15 09:15:51 +00:00
|
|
|
|
|
|
|
util::StatusObject sessionObj{};
|
|
|
|
|
2020-04-07 18:38:56 +00:00
|
|
|
for (const auto& item : m_Sessions)
|
2019-07-15 09:15:51 +00:00
|
|
|
{
|
|
|
|
std::string k = item.first.ToHex();
|
2019-08-19 09:33:26 +00:00
|
|
|
sessionObj[k] = item.second.ExtractStatus();
|
2019-07-15 09:15:51 +00:00
|
|
|
}
|
|
|
|
|
2019-08-19 09:33:26 +00:00
|
|
|
obj["converstations"] = sessionObj;
|
2019-07-15 09:15:51 +00:00
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
} // namespace service
|
|
|
|
} // namespace llarp
|