2019-06-17 23:19:39 +00:00
|
|
|
#include <path/ihophandler.hpp>
|
2019-09-16 16:21:21 +00:00
|
|
|
|
|
|
|
namespace llarp
|
|
|
|
{
|
|
|
|
namespace path
|
|
|
|
{
|
|
|
|
// handle data in upstream direction
|
|
|
|
bool
|
2020-04-07 18:38:56 +00:00
|
|
|
IHopHandler::HandleUpstream(const llarp_buffer_t& X, const TunnelNonce& Y, AbstractRouter*)
|
2019-09-16 16:21:21 +00:00
|
|
|
{
|
2020-05-21 14:23:54 +00:00
|
|
|
if (not m_UpstreamReplayFilter.Insert(Y))
|
|
|
|
return false;
|
2020-04-07 18:38:56 +00:00
|
|
|
if (m_UpstreamQueue == nullptr)
|
|
|
|
m_UpstreamQueue = std::make_shared<TrafficQueue_t>();
|
2019-09-16 16:21:21 +00:00
|
|
|
m_UpstreamQueue->emplace_back();
|
|
|
|
auto& pkt = m_UpstreamQueue->back();
|
|
|
|
pkt.first.resize(X.sz);
|
|
|
|
std::copy_n(X.base, X.sz, pkt.first.begin());
|
|
|
|
pkt.second = Y;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// handle data in downstream direction
|
|
|
|
bool
|
2020-04-07 18:38:56 +00:00
|
|
|
IHopHandler::HandleDownstream(const llarp_buffer_t& X, const TunnelNonce& Y, AbstractRouter*)
|
2019-09-16 16:21:21 +00:00
|
|
|
{
|
2020-05-21 14:23:54 +00:00
|
|
|
if (not m_DownstreamReplayFilter.Insert(Y))
|
|
|
|
return false;
|
2020-04-07 18:38:56 +00:00
|
|
|
if (m_DownstreamQueue == nullptr)
|
|
|
|
m_DownstreamQueue = std::make_shared<TrafficQueue_t>();
|
2019-09-16 16:21:21 +00:00
|
|
|
m_DownstreamQueue->emplace_back();
|
|
|
|
auto& pkt = m_DownstreamQueue->back();
|
|
|
|
pkt.first.resize(X.sz);
|
|
|
|
std::copy_n(X.base, X.sz, pkt.first.begin());
|
|
|
|
pkt.second = Y;
|
|
|
|
return true;
|
|
|
|
}
|
2020-05-21 14:23:54 +00:00
|
|
|
|
|
|
|
void
|
|
|
|
IHopHandler::DecayFilters(llarp_time_t now)
|
|
|
|
{
|
|
|
|
m_UpstreamReplayFilter.Decay(now);
|
|
|
|
m_DownstreamReplayFilter.Decay(now);
|
|
|
|
}
|
2019-09-16 16:21:21 +00:00
|
|
|
} // namespace path
|
2020-01-03 11:04:47 +00:00
|
|
|
} // namespace llarp
|