mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-28 11:47:48 +02:00
SAM subsessions
This commit is contained in:
parent
0b9cb4e75b
commit
fffa550bb0
4 changed files with 84 additions and 5 deletions
|
@ -270,6 +270,10 @@ namespace client
|
|||
ProcessDestGenerate (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||
else if (!strcmp (m_Buffer, SAM_NAMING_LOOKUP))
|
||||
ProcessNamingLookup (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||
else if (!strcmp (m_Buffer, SAM_SESSION_ADD))
|
||||
ProcessSessionAdd (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||
else if (!strcmp (m_Buffer, SAM_SESSION_REMOVE))
|
||||
ProcessSessionRemove (separator + 1, bytes_transferred - (separator - m_Buffer) - 1);
|
||||
else if (!strcmp (m_Buffer, SAM_DATAGRAM_SEND) || !strcmp (m_Buffer, SAM_RAW_SEND))
|
||||
{
|
||||
size_t len = bytes_transferred - (separator - m_Buffer) - 1;
|
||||
|
@ -759,6 +763,16 @@ namespace client
|
|||
}
|
||||
}
|
||||
|
||||
void SAMSocket::ProcessSessionAdd (char * buf, size_t len)
|
||||
{
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
void SAMSocket::ProcessSessionRemove (char * buf, size_t len)
|
||||
{
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
void SAMSocket::SendI2PError(const std::string & msg)
|
||||
{
|
||||
LogPrint (eLogError, "SAM: i2p error ", msg);
|
||||
|
@ -1132,6 +1146,39 @@ namespace client
|
|||
{
|
||||
i2p::client::context.DeleteLocalDestination (localDestination);
|
||||
}
|
||||
|
||||
void SAMSingleSession::StopLocalDestination ()
|
||||
{
|
||||
localDestination->Release ();
|
||||
localDestination->StopAcceptingStreams ();
|
||||
}
|
||||
|
||||
SAMSubSession::SAMSubSession (std::shared_ptr<SAMMasterSession> master, const std::string& name, SAMSessionType type, int port):
|
||||
SAMSession (master->m_Bridge, name, type), masterSession (master), inPort (port)
|
||||
{
|
||||
if (Type == eSAMSessionTypeStream)
|
||||
{
|
||||
auto d = masterSession->GetLocalDestination ()->CreateStreamingDestination (inPort);
|
||||
if (d) d->Start ();
|
||||
}
|
||||
// TODO: implement datagrams
|
||||
}
|
||||
|
||||
std::shared_ptr<ClientDestination> SAMSubSession::GetLocalDestination ()
|
||||
{
|
||||
return masterSession ? masterSession->GetLocalDestination () : nullptr;
|
||||
}
|
||||
|
||||
void SAMSubSession::StopLocalDestination ()
|
||||
{
|
||||
auto dest = GetLocalDestination ();
|
||||
if (dest && Type == eSAMSessionTypeStream)
|
||||
{
|
||||
auto d = dest->RemoveStreamingDestination (inPort);
|
||||
if (d) d->Stop ();
|
||||
}
|
||||
// TODO: implement datagrams
|
||||
}
|
||||
|
||||
SAMBridge::SAMBridge (const std::string& address, int port, bool singleThread):
|
||||
RunnableService ("SAM"), m_IsSingleThread (singleThread),
|
||||
|
@ -1295,8 +1342,7 @@ namespace client
|
|||
}
|
||||
if (session)
|
||||
{
|
||||
session->GetLocalDestination ()->Release ();
|
||||
session->GetLocalDestination ()->StopAcceptingStreams ();
|
||||
session->StopLocalDestination ();
|
||||
session->CloseStreams ();
|
||||
if (m_IsSingleThread)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue