mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
don't lookup streaming destination for each message
This commit is contained in:
parent
132557f941
commit
e20acb93cf
|
@ -930,7 +930,7 @@ namespace client
|
||||||
bool isPublic, const std::map<std::string, std::string> * params):
|
bool isPublic, const std::map<std::string, std::string> * params):
|
||||||
LeaseSetDestination (service, isPublic, params),
|
LeaseSetDestination (service, isPublic, params),
|
||||||
m_Keys (keys), m_StreamingAckDelay (DEFAULT_INITIAL_ACK_DELAY),
|
m_Keys (keys), m_StreamingAckDelay (DEFAULT_INITIAL_ACK_DELAY),
|
||||||
m_IsStreamingAnswerPings (DEFAULT_ANSWER_PINGS),
|
m_IsStreamingAnswerPings (DEFAULT_ANSWER_PINGS), m_LastPort (0),
|
||||||
m_DatagramDestination (nullptr), m_RefCounter (0),
|
m_DatagramDestination (nullptr), m_RefCounter (0),
|
||||||
m_ReadyChecker(service)
|
m_ReadyChecker(service)
|
||||||
{
|
{
|
||||||
|
@ -1058,6 +1058,7 @@ namespace client
|
||||||
//it.second->SetOwner (nullptr);
|
//it.second->SetOwner (nullptr);
|
||||||
}
|
}
|
||||||
m_StreamingDestinationsByPorts.clear ();
|
m_StreamingDestinationsByPorts.clear ();
|
||||||
|
m_LastStreamingDestination = nullptr;
|
||||||
if (m_DatagramDestination)
|
if (m_DatagramDestination)
|
||||||
{
|
{
|
||||||
delete m_DatagramDestination;
|
delete m_DatagramDestination;
|
||||||
|
@ -1082,10 +1083,15 @@ namespace client
|
||||||
case PROTOCOL_TYPE_STREAMING:
|
case PROTOCOL_TYPE_STREAMING:
|
||||||
{
|
{
|
||||||
// streaming protocol
|
// streaming protocol
|
||||||
auto dest = GetStreamingDestination (toPort);
|
if (toPort != m_LastPort || !m_LastStreamingDestination)
|
||||||
if (!dest) dest = m_StreamingDestination; // if no destination on port use default
|
{
|
||||||
if (dest)
|
m_LastStreamingDestination = GetStreamingDestination (toPort);
|
||||||
dest->HandleDataMessagePayload (buf, length);
|
if (!m_LastStreamingDestination)
|
||||||
|
m_LastStreamingDestination = m_StreamingDestination; // if no destination on port use default
|
||||||
|
m_LastPort = toPort;
|
||||||
|
}
|
||||||
|
if (m_LastStreamingDestination)
|
||||||
|
m_LastStreamingDestination->HandleDataMessagePayload (buf, length);
|
||||||
else
|
else
|
||||||
LogPrint (eLogError, "Destination: Missing streaming destination");
|
LogPrint (eLogError, "Destination: Missing streaming destination");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2022, The PurpleI2P Project
|
* Copyright (c) 2013-2023, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
|
@ -297,6 +297,7 @@ namespace client
|
||||||
bool m_IsStreamingAnswerPings;
|
bool m_IsStreamingAnswerPings;
|
||||||
std::shared_ptr<i2p::stream::StreamingDestination> m_StreamingDestination; // default
|
std::shared_ptr<i2p::stream::StreamingDestination> m_StreamingDestination; // default
|
||||||
std::map<uint16_t, std::shared_ptr<i2p::stream::StreamingDestination> > m_StreamingDestinationsByPorts;
|
std::map<uint16_t, std::shared_ptr<i2p::stream::StreamingDestination> > m_StreamingDestinationsByPorts;
|
||||||
|
std::shared_ptr<i2p::stream::StreamingDestination> m_LastStreamingDestination; uint16_t m_LastPort; // for server tunnels
|
||||||
i2p::datagram::DatagramDestination * m_DatagramDestination;
|
i2p::datagram::DatagramDestination * m_DatagramDestination;
|
||||||
int m_RefCounter; // how many clients(tunnels) use this destination
|
int m_RefCounter; // how many clients(tunnels) use this destination
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue