mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 08:00:38 +03:00
create additional streaming destination
This commit is contained in:
parent
7b938b246a
commit
6fc0b2ecfb
@ -87,7 +87,9 @@ namespace client
|
|||||||
m_Pool->SetActive (true);
|
m_Pool->SetActive (true);
|
||||||
m_Thread = new std::thread (std::bind (&ClientDestination::Run, this));
|
m_Thread = new std::thread (std::bind (&ClientDestination::Run, this));
|
||||||
m_StreamingDestination->Start ();
|
m_StreamingDestination->Start ();
|
||||||
|
for (auto it: m_StreamingDestinationsByPorts)
|
||||||
|
it.second->Start ();
|
||||||
|
|
||||||
m_CleanupTimer.expires_from_now (boost::posix_time::minutes (DESTINATION_CLEANUP_TIMEOUT));
|
m_CleanupTimer.expires_from_now (boost::posix_time::minutes (DESTINATION_CLEANUP_TIMEOUT));
|
||||||
m_CleanupTimer.async_wait (std::bind (&ClientDestination::HandleCleanupTimer,
|
m_CleanupTimer.async_wait (std::bind (&ClientDestination::HandleCleanupTimer,
|
||||||
this, std::placeholders::_1));
|
this, std::placeholders::_1));
|
||||||
@ -101,6 +103,8 @@ namespace client
|
|||||||
m_CleanupTimer.cancel ();
|
m_CleanupTimer.cancel ();
|
||||||
m_IsRunning = false;
|
m_IsRunning = false;
|
||||||
m_StreamingDestination->Stop ();
|
m_StreamingDestination->Stop ();
|
||||||
|
for (auto it: m_StreamingDestinationsByPorts)
|
||||||
|
it.second->Stop ();
|
||||||
if (m_DatagramDestination)
|
if (m_DatagramDestination)
|
||||||
{
|
{
|
||||||
auto d = m_DatagramDestination;
|
auto d = m_DatagramDestination;
|
||||||
@ -373,19 +377,9 @@ namespace client
|
|||||||
case PROTOCOL_TYPE_STREAMING:
|
case PROTOCOL_TYPE_STREAMING:
|
||||||
{
|
{
|
||||||
// streaming protocol
|
// streaming protocol
|
||||||
if (toPort) // not null
|
auto dest = GetStreamingDestination (toPort);
|
||||||
{
|
if (dest)
|
||||||
auto it = m_StreamingDestinationsByPorts.find (toPort);
|
dest->HandleDataMessagePayload (buf, length);
|
||||||
if (it != m_StreamingDestinationsByPorts.end ())
|
|
||||||
{
|
|
||||||
// found destination for specific port
|
|
||||||
it->second->HandleDataMessagePayload (buf, length);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if port is zero, or destination for port not found, use default
|
|
||||||
if (m_StreamingDestination)
|
|
||||||
m_StreamingDestination->HandleDataMessagePayload (buf, length);
|
|
||||||
else
|
else
|
||||||
LogPrint ("Missing streaming destination");
|
LogPrint ("Missing streaming destination");
|
||||||
}
|
}
|
||||||
@ -434,6 +428,18 @@ namespace client
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<i2p::stream::StreamingDestination> ClientDestination::GetStreamingDestination (int port) const
|
||||||
|
{
|
||||||
|
if (port)
|
||||||
|
{
|
||||||
|
auto it = m_StreamingDestinationsByPorts.find (port);
|
||||||
|
if (it != m_StreamingDestinationsByPorts.end ())
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
// if port is zero or not found, use default destination
|
||||||
|
return m_StreamingDestination;
|
||||||
|
}
|
||||||
|
|
||||||
void ClientDestination::AcceptStreams (const i2p::stream::StreamingDestination::Acceptor& acceptor)
|
void ClientDestination::AcceptStreams (const i2p::stream::StreamingDestination::Acceptor& acceptor)
|
||||||
{
|
{
|
||||||
if (m_StreamingDestination)
|
if (m_StreamingDestination)
|
||||||
@ -445,7 +451,7 @@ namespace client
|
|||||||
if (m_StreamingDestination)
|
if (m_StreamingDestination)
|
||||||
m_StreamingDestination->ResetAcceptor ();
|
m_StreamingDestination->ResetAcceptor ();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClientDestination::IsAcceptingStreams () const
|
bool ClientDestination::IsAcceptingStreams () const
|
||||||
{
|
{
|
||||||
if (m_StreamingDestination)
|
if (m_StreamingDestination)
|
||||||
@ -453,6 +459,16 @@ namespace client
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<i2p::stream::StreamingDestination> ClientDestination::CreateStreamingDestination (int port)
|
||||||
|
{
|
||||||
|
auto dest = std::make_shared<i2p::stream::StreamingDestination> (*this, port);
|
||||||
|
if (port)
|
||||||
|
m_StreamingDestinationsByPorts[port] = dest;
|
||||||
|
else // update default
|
||||||
|
m_StreamingDestination = dest;
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
i2p::datagram::DatagramDestination * ClientDestination::CreateDatagramDestination ()
|
i2p::datagram::DatagramDestination * ClientDestination::CreateDatagramDestination ()
|
||||||
{
|
{
|
||||||
if (!m_DatagramDestination)
|
if (!m_DatagramDestination)
|
||||||
|
@ -68,13 +68,15 @@ namespace client
|
|||||||
bool RequestDestination (const i2p::data::IdentHash& dest, RequestComplete requestComplete = nullptr);
|
bool RequestDestination (const i2p::data::IdentHash& dest, RequestComplete requestComplete = nullptr);
|
||||||
|
|
||||||
// streaming
|
// streaming
|
||||||
std::shared_ptr<i2p::stream::StreamingDestination> GetStreamingDestination () const { return m_StreamingDestination; };
|
std::shared_ptr<i2p::stream::StreamingDestination> CreateStreamingDestination (int port); // additional
|
||||||
|
std::shared_ptr<i2p::stream::StreamingDestination> GetStreamingDestination (int port = 0) const;
|
||||||
|
// following methods operate with default streaming destination
|
||||||
void CreateStream (StreamRequestComplete streamRequestComplete, const i2p::data::IdentHash& dest, int port = 0);
|
void CreateStream (StreamRequestComplete streamRequestComplete, const i2p::data::IdentHash& dest, int port = 0);
|
||||||
std::shared_ptr<i2p::stream::Stream> CreateStream (std::shared_ptr<const i2p::data::LeaseSet> remote, int port = 0);
|
std::shared_ptr<i2p::stream::Stream> CreateStream (std::shared_ptr<const i2p::data::LeaseSet> remote, int port = 0);
|
||||||
void AcceptStreams (const i2p::stream::StreamingDestination::Acceptor& acceptor);
|
void AcceptStreams (const i2p::stream::StreamingDestination::Acceptor& acceptor);
|
||||||
void StopAcceptingStreams ();
|
void StopAcceptingStreams ();
|
||||||
bool IsAcceptingStreams () const;
|
bool IsAcceptingStreams () const;
|
||||||
|
|
||||||
// datagram
|
// datagram
|
||||||
i2p::datagram::DatagramDestination * GetDatagramDestination () const { return m_DatagramDestination; };
|
i2p::datagram::DatagramDestination * GetDatagramDestination () const { return m_DatagramDestination; };
|
||||||
i2p::datagram::DatagramDestination * CreateDatagramDestination ();
|
i2p::datagram::DatagramDestination * CreateDatagramDestination ();
|
||||||
|
Loading…
Reference in New Issue
Block a user