set only default receiver if port=0

This commit is contained in:
orignal
2026-04-02 17:35:30 -04:00
parent a683b98e73
commit 0fbf06ddf4
3 changed files with 24 additions and 22 deletions
+13 -9
View File
@@ -21,7 +21,7 @@ namespace datagram
DatagramDestination::DatagramDestination (std::shared_ptr<i2p::client::ClientDestination> owner,
bool gzip, DatagramVersion version):
m_Owner (owner), m_DefaultReceiver (nullptr), m_DefaultRawReceiver (nullptr),
m_Gzip (gzip), m_Version (version)
m_DefaultReceiverPort (0), m_DefaultRawReceiverPort (0), m_Gzip (gzip), m_Version (version)
{
if (m_Gzip)
m_Deflator.reset (new i2p::data::GzipDeflator);
@@ -353,8 +353,9 @@ namespace datagram
void DatagramDestination::SetReceiver (const Receiver& receiver, uint16_t port)
{
std::lock_guard<std::mutex> lock(m_ReceiversMutex);
m_ReceiversByPorts[port] = receiver;
if (!m_DefaultReceiver) {
if (port) m_ReceiversByPorts[port] = receiver;
if (!m_DefaultReceiver)
{
m_DefaultReceiver = receiver;
m_DefaultReceiverPort = port;
}
@@ -363,8 +364,9 @@ namespace datagram
void DatagramDestination::ResetReceiver (uint16_t port)
{
std::lock_guard<std::mutex> lock(m_ReceiversMutex);
m_ReceiversByPorts.erase (port);
if (m_DefaultReceiverPort == port) {
if (port) m_ReceiversByPorts.erase (port);
if (!port || m_DefaultReceiverPort == port)
{
m_DefaultReceiver = nullptr;
m_DefaultReceiverPort = 0;
}
@@ -374,8 +376,9 @@ namespace datagram
void DatagramDestination::SetRawReceiver (const RawReceiver& receiver, uint16_t port)
{
std::lock_guard<std::mutex> lock(m_RawReceiversMutex);
m_RawReceiversByPorts[port] = receiver;
if (!m_DefaultRawReceiver) {
if (port) m_RawReceiversByPorts[port] = receiver;
if (!m_DefaultRawReceiver)
{
m_DefaultRawReceiver = receiver;
m_DefaultRawReceiverPort = port;
}
@@ -384,8 +387,9 @@ namespace datagram
void DatagramDestination::ResetRawReceiver (uint16_t port)
{
std::lock_guard<std::mutex> lock(m_RawReceiversMutex);
m_RawReceiversByPorts.erase (port);
if (m_DefaultRawReceiverPort == port) {
if (port) m_RawReceiversByPorts.erase (port);
if (!port || m_DefaultRawReceiverPort == port)
{
m_DefaultRawReceiver = nullptr;
m_DefaultRawReceiverPort = 0;
}
+4 -4
View File
@@ -150,11 +150,11 @@ namespace datagram
void HandleDataMessagePayload (uint16_t fromPort, uint16_t toPort,
const uint8_t * buf, size_t len, uint8_t protocolType, i2p::garlic::ECIESX25519AEADRatchetSession * from);
void SetReceiver (const Receiver& receiver, uint16_t port);
void ResetReceiver (uint16_t port);
void SetReceiver (const Receiver& receiver, uint16_t port = 0);
void ResetReceiver (uint16_t port = 0);
void SetRawReceiver (const RawReceiver& receiver, uint16_t port);
void ResetRawReceiver (uint16_t port);
void SetRawReceiver (const RawReceiver& receiver, uint16_t port = 0);
void ResetRawReceiver (uint16_t port = 0);
std::shared_ptr<DatagramSession::Info> GetInfoForRemote(const i2p::data::IdentHash & remote);
+7 -9
View File
@@ -426,13 +426,10 @@ namespace client
dgram->SetReceiver (std::bind (&I2PUDPClientTunnel::HandleRecvFromI2P, this,
std::placeholders::_1, std::placeholders::_2,
std::placeholders::_3, std::placeholders::_4,
std::placeholders::_5, std::placeholders::_6),
RemotePort
);
std::placeholders::_5, std::placeholders::_6));
dgram->SetRawReceiver (std::bind (&I2PUDPClientTunnel::HandleRecvFromI2PRaw, this,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4),
RemotePort
);
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
m_LocalDest->Start ();
if (m_ResolveThread == nullptr)
@@ -443,9 +440,10 @@ namespace client
void I2PUDPClientTunnel::Stop ()
{
auto dgram = m_LocalDest->GetDatagramDestination ();
if (dgram) {
dgram->ResetReceiver (RemotePort);
dgram->ResetRawReceiver (RemotePort);
if (dgram)
{
dgram->ResetReceiver ();
dgram->ResetRawReceiver ();
}
m_cancel_resolve = true;