2019-09-02 10:28:14 +00:00
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "RouteManager.h"
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
FSecure::C3::Core::RouteManager::Route::Route(RouteId routeId, std::weak_ptr<DeviceBridge> iface)
|
2019-09-02 10:28:14 +00:00
|
|
|
: m_RouteId(routeId)
|
|
|
|
, m_Channel(iface)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
std::shared_ptr<FSecure::C3::Core::RouteManager::Route> FSecure::C3::Core::RouteManager::FindRoute(RouteId const& routeId) const noexcept
|
2019-09-02 10:28:14 +00:00
|
|
|
{
|
|
|
|
return m_Routes.Find([&routeId](std::shared_ptr<Route> const& c) { return c->m_RouteId == routeId; });
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
std::shared_ptr<FSecure::C3::Core::RouteManager::Route> FSecure::C3::Core::RouteManager::FindRoute(AgentId const& agentId) const noexcept
|
2019-09-02 10:28:14 +00:00
|
|
|
{
|
|
|
|
return m_Routes.Find([&agentId](std::shared_ptr<Route> const& c) { return c->m_RouteId.GetAgentId() == agentId; });
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
std::shared_ptr<FSecure::C3::Core::RouteManager::Route> FSecure::C3::Core::RouteManager::AddRoute(RouteId routeId, std::shared_ptr<DeviceBridge> channel)
|
2019-09-02 10:28:14 +00:00
|
|
|
{
|
|
|
|
return m_Routes.TryAdd([&routeId](std::shared_ptr<Route> const& c) { return c->m_RouteId == routeId; }, std::make_shared<Route>(routeId, channel));
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
void FSecure::C3::Core::RouteManager::RemoveRoute(RouteId const& routeId)
|
2019-09-02 10:28:14 +00:00
|
|
|
{
|
|
|
|
m_Routes.Remove([&routeId](std::shared_ptr<Route> const& c) { return c->m_RouteId == routeId; });
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
std::shared_ptr<FSecure::C3::Core::RouteManager::Route> FSecure::C3::Core::RouteManager::FindRouteByOutgoingChannel(DeviceId deviceId) const noexcept
|
2019-09-02 10:28:14 +00:00
|
|
|
{
|
|
|
|
return m_Routes.Find([&deviceId](auto const& e) {auto pin = e->m_Channel.lock(); return pin ? pin->GetDid() == deviceId : false; });
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2020-03-05 15:30:50 +00:00
|
|
|
void FSecure::C3::Core::RouteManager::RemoveAllRoutes()
|
2019-09-02 10:28:14 +00:00
|
|
|
{
|
|
|
|
m_Routes.Clear();
|
|
|
|
}
|