Browse Source

don't look for session if a packet is from same endpoint as previous

pull/158/head
orignal 10 years ago
parent
commit
23907e6cb1
  1. 5
      SSU.cpp
  2. 1
      SSUData.cpp
  3. 1
      SSUSession.cpp

5
SSU.cpp

@ -211,10 +211,12 @@ namespace transport
void SSUServer::HandleReceivedPackets (std::vector<SSUPacket *> packets) void SSUServer::HandleReceivedPackets (std::vector<SSUPacket *> packets)
{ {
std::shared_ptr<SSUSession> session;
for (auto it1: packets) for (auto it1: packets)
{ {
auto packet = it1; auto packet = it1;
std::shared_ptr<SSUSession> session; if (session && session->GetRemoteEndpoint () != packet->from) // we received packet for other session than previous
{
auto it = m_Sessions.find (packet->from); auto it = m_Sessions.find (packet->from);
if (it != m_Sessions.end ()) if (it != m_Sessions.end ())
session = it->second; session = it->second;
@ -228,6 +230,7 @@ namespace transport
} }
LogPrint ("New SSU session from ", packet->from.address ().to_string (), ":", packet->from.port (), " created"); LogPrint ("New SSU session from ", packet->from.address ().to_string (), ":", packet->from.port (), " created");
} }
}
session->ProcessNextMessage (packet->buf, packet->len, packet->from); session->ProcessNextMessage (packet->buf, packet->len, packet->from);
delete packet; delete packet;
} }

1
SSUData.cpp

@ -153,7 +153,6 @@ namespace transport
uint16_t fragmentSize = fragmentInfo & 0x1FFF; // bits 0 - 13 uint16_t fragmentSize = fragmentInfo & 0x1FFF; // bits 0 - 13
bool isLast = fragmentInfo & 0x010000; // bit 16 bool isLast = fragmentInfo & 0x010000; // bit 16
uint8_t fragmentNum = fragmentInfo >> 17; // bits 23 - 17 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");
if (fragmentSize >= SSU_V4_MAX_PACKET_SIZE) if (fragmentSize >= SSU_V4_MAX_PACKET_SIZE)
{ {
LogPrint (eLogError, "Fragment size ", fragmentSize, "exceeds max SSU packet size"); LogPrint (eLogError, "Fragment size ", fragmentSize, "exceeds max SSU packet size");

1
SSUSession.cpp

@ -130,7 +130,6 @@ namespace transport
switch (header->GetPayloadType ()) switch (header->GetPayloadType ())
{ {
case PAYLOAD_TYPE_DATA: case PAYLOAD_TYPE_DATA:
LogPrint (eLogDebug, "SSU data received");
ProcessData (buf + sizeof (SSUHeader), len - sizeof (SSUHeader)); ProcessData (buf + sizeof (SSUHeader), len - sizeof (SSUHeader));
break; break;
case PAYLOAD_TYPE_SESSION_REQUEST: case PAYLOAD_TYPE_SESSION_REQUEST:

Loading…
Cancel
Save