|
|
@ -611,22 +611,19 @@ namespace stream |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (!m_CurrentOutboundTunnel) // first message to send
|
|
|
|
if (!m_RoutingSession || !m_RoutingSession->GetOwner ()) // expired and detached
|
|
|
|
|
|
|
|
m_RoutingSession = m_LocalDestination.GetOwner ()->GetRoutingSession (m_RemoteLeaseSet, true); |
|
|
|
|
|
|
|
if (!m_CurrentOutboundTunnel && m_RoutingSession) // first message to send
|
|
|
|
{ |
|
|
|
{ |
|
|
|
// try to get shared path first
|
|
|
|
// try to get shared path first
|
|
|
|
if (!m_RoutingSession) |
|
|
|
auto routingPath = m_RoutingSession->GetSharedRoutingPath (); |
|
|
|
m_RoutingSession = m_LocalDestination.GetOwner ()->GetRoutingSession (m_RemoteLeaseSet, true); |
|
|
|
if (routingPath) |
|
|
|
if (m_RoutingSession) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_CurrentOutboundTunnel = routingPath->outboundTunnel; |
|
|
|
auto routingPath = m_RoutingSession->GetSharedRoutingPath (); |
|
|
|
m_CurrentRemoteLease = routingPath->remoteLease; |
|
|
|
if (routingPath) |
|
|
|
m_RTT = routingPath->rtt; |
|
|
|
{ |
|
|
|
m_RTO = m_RTT*1.5; // TODO: implement it better
|
|
|
|
m_CurrentOutboundTunnel = routingPath->outboundTunnel; |
|
|
|
} |
|
|
|
m_CurrentRemoteLease = routingPath->remoteLease; |
|
|
|
|
|
|
|
m_RTT = routingPath->rtt; |
|
|
|
|
|
|
|
m_RTO = m_RTT*1.5; // TODO: implement it better
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
if (!m_CurrentOutboundTunnel || !m_CurrentOutboundTunnel->IsEstablished ()) |
|
|
|
if (!m_CurrentOutboundTunnel || !m_CurrentOutboundTunnel->IsEstablished ()) |
|
|
|
m_CurrentOutboundTunnel = m_LocalDestination.GetOwner ()->GetTunnelPool ()->GetNewOutboundTunnel (m_CurrentOutboundTunnel); |
|
|
|
m_CurrentOutboundTunnel = m_LocalDestination.GetOwner ()->GetTunnelPool ()->GetNewOutboundTunnel (m_CurrentOutboundTunnel); |
|
|
@ -900,13 +897,13 @@ namespace stream |
|
|
|
if (packet->IsSYN () && !packet->GetSeqn ()) // new incoming stream
|
|
|
|
if (packet->IsSYN () && !packet->GetSeqn ()) // new incoming stream
|
|
|
|
{ |
|
|
|
{ |
|
|
|
uint32_t receiveStreamID = packet->GetReceiveStreamID (); |
|
|
|
uint32_t receiveStreamID = packet->GetReceiveStreamID (); |
|
|
|
/* if (receiveStreamID == m_LastIncomingReceiveStreamID)
|
|
|
|
if (receiveStreamID == m_LastIncomingReceiveStreamID) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// already pending
|
|
|
|
// already pending
|
|
|
|
LogPrint(eLogWarning, "Streaming: Incoming streaming with rSID=", receiveStreamID, " already exists"); |
|
|
|
LogPrint(eLogWarning, "Streaming: Incoming streaming with rSID=", receiveStreamID, " already exists"); |
|
|
|
delete packet; // drop it, because previous should be connected
|
|
|
|
delete packet; // drop it, because previous should be connected
|
|
|
|
return; |
|
|
|
return; |
|
|
|
} */ |
|
|
|
} |
|
|
|
auto incomingStream = CreateNewIncomingStream (); |
|
|
|
auto incomingStream = CreateNewIncomingStream (); |
|
|
|
incomingStream->HandleNextPacket (packet); // SYN
|
|
|
|
incomingStream->HandleNextPacket (packet); // SYN
|
|
|
|
auto ident = incomingStream->GetRemoteIdentity(); |
|
|
|
auto ident = incomingStream->GetRemoteIdentity(); |
|
|
|