From 89ed8c2173cce778b31cbac81d18eff71f7d227d Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 3 Apr 2015 20:34:37 -0400 Subject: [PATCH] set datagram receiver per port --- Datagram.cpp | 7 +++++-- Datagram.h | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Datagram.cpp b/Datagram.cpp index 92a01b7f..a79bb069 100644 --- a/Datagram.cpp +++ b/Datagram.cpp @@ -16,7 +16,7 @@ namespace datagram m_Owner (owner), m_Receiver (nullptr) { } - + void DatagramDestination::SendDatagramTo (const uint8_t * payload, size_t len, const i2p::data::IdentHash& ident, uint16_t fromPort, uint16_t toPort) { uint8_t buf[MAX_DATAGRAM_SIZE]; @@ -105,7 +105,10 @@ namespace datagram if (verified) { - if (m_Receiver != nullptr) + auto it = m_ReceiversByPorts.find (toPort); + if (it != m_ReceiversByPorts.end ()) + it->second (identity, fromPort, toPort, buf + headerLen, len -headerLen); + else if (m_Receiver != nullptr) m_Receiver (identity, fromPort, toPort, buf + headerLen, len -headerLen); else LogPrint (eLogWarning, "Receiver for datagram is not set"); diff --git a/Datagram.h b/Datagram.h index 5acd79b2..969c7033 100644 --- a/Datagram.h +++ b/Datagram.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "Identity.h" #include "LeaseSet.h" #include "I2NPProtocol.h" @@ -32,6 +33,9 @@ namespace datagram void SetReceiver (const Receiver& receiver) { m_Receiver = receiver; }; void ResetReceiver () { m_Receiver = nullptr; }; + void SetReceiver (const Receiver& receiver, uint16_t port) { m_ReceiversByPorts[port] = receiver; }; + void ResetReceiver (uint16_t port) { m_ReceiversByPorts.erase (port); }; + private: void HandleLeaseSetRequestComplete (bool success, I2NPMessage * msg, i2p::data::IdentHash ident); @@ -43,7 +47,8 @@ namespace datagram private: i2p::client::ClientDestination& m_Owner; - Receiver m_Receiver; + Receiver m_Receiver; // default + std::map m_ReceiversByPorts; }; } }