diff --git a/SSU.cpp b/SSU.cpp index 1ad3c3fd..bb515ac9 100644 --- a/SSU.cpp +++ b/SSU.cpp @@ -211,22 +211,25 @@ namespace transport void SSUServer::HandleReceivedPackets (std::vector packets) { + std::shared_ptr session; for (auto it1: packets) { auto packet = it1; - std::shared_ptr session; - auto it = m_Sessions.find (packet->from); - if (it != m_Sessions.end ()) - session = it->second; - if (!session) + if (session && session->GetRemoteEndpoint () != packet->from) // we received packet for other session than previous { - session = std::make_shared (*this, packet->from); - session->WaitForConnect (); + auto it = m_Sessions.find (packet->from); + if (it != m_Sessions.end ()) + session = it->second; + if (!session) { - std::unique_lock l(m_SessionsMutex); - m_Sessions[packet->from] = session; - } - LogPrint ("New SSU session from ", packet->from.address ().to_string (), ":", packet->from.port (), " created"); + session = std::make_shared (*this, packet->from); + session->WaitForConnect (); + { + std::unique_lock l(m_SessionsMutex); + m_Sessions[packet->from] = session; + } + LogPrint ("New SSU session from ", packet->from.address ().to_string (), ":", packet->from.port (), " created"); + } } session->ProcessNextMessage (packet->buf, packet->len, packet->from); delete packet; diff --git a/SSUData.cpp b/SSUData.cpp index c66241b7..bfc17d31 100644 --- a/SSUData.cpp +++ b/SSUData.cpp @@ -152,8 +152,7 @@ namespace transport uint32_t fragmentInfo = bufbe32toh (frag); // fragment info uint16_t fragmentSize = fragmentInfo & 0x1FFF; // bits 0 - 13 bool isLast = fragmentInfo & 0x010000; // bit 16 - uint8_t fragmentNum = fragmentInfo >> 17; // bits 23 - 17 - LogPrint (eLogDebug, "SSU data fragment ", (int)fragmentNum, " of message ", msgID, " size=", (int)fragmentSize, isLast ? " last" : " non-last"); + uint8_t fragmentNum = fragmentInfo >> 17; // bits 23 - 17 if (fragmentSize >= SSU_V4_MAX_PACKET_SIZE) { LogPrint (eLogError, "Fragment size ", fragmentSize, "exceeds max SSU packet size"); diff --git a/SSUSession.cpp b/SSUSession.cpp index ed7fa9a4..1ee5d5f5 100644 --- a/SSUSession.cpp +++ b/SSUSession.cpp @@ -130,7 +130,6 @@ namespace transport switch (header->GetPayloadType ()) { case PAYLOAD_TYPE_DATA: - LogPrint (eLogDebug, "SSU data received"); ProcessData (buf + sizeof (SSUHeader), len - sizeof (SSUHeader)); break; case PAYLOAD_TYPE_SESSION_REQUEST: