|
|
@ -388,23 +388,31 @@ namespace ssu |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto it = m_IncomleteMessages.find (msgID); |
|
|
|
auto it = m_IncomleteMessages.find (msgID); |
|
|
|
if (it != m_IncomleteMessages.end ()) |
|
|
|
if (it != m_IncomleteMessages.end ()) |
|
|
|
|
|
|
|
{ |
|
|
|
msg = it->second; |
|
|
|
msg = it->second; |
|
|
|
|
|
|
|
memcpy (msg->buf + msg->len, buf, fragmentSize); |
|
|
|
|
|
|
|
msg->len += fragmentSize; |
|
|
|
|
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
// TODO:
|
|
|
|
// TODO:
|
|
|
|
LogPrint ("Unexpected follow-on fragment ", fragmentNum, " of message ", msgID); |
|
|
|
LogPrint ("Unexpected follow-on fragment ", fragmentNum, " of message ", msgID); |
|
|
|
} |
|
|
|
} |
|
|
|
else // first fragment
|
|
|
|
else // first fragment
|
|
|
|
|
|
|
|
{ |
|
|
|
msg = NewI2NPMessage (); |
|
|
|
msg = NewI2NPMessage (); |
|
|
|
|
|
|
|
memcpy (msg->GetSSUHeader (), buf, fragmentSize); |
|
|
|
|
|
|
|
msg->len += fragmentSize - sizeof (I2NPHeaderShort); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (msg) |
|
|
|
if (msg) |
|
|
|
{ |
|
|
|
{ |
|
|
|
memcpy (msg->buf + msg->len, buf, fragmentSize); |
|
|
|
|
|
|
|
msg->len += fragmentSize; |
|
|
|
|
|
|
|
if (!fragmentNum && !isLast) |
|
|
|
if (!fragmentNum && !isLast) |
|
|
|
m_IncomleteMessages[msgID] = msg; |
|
|
|
m_IncomleteMessages[msgID] = msg; |
|
|
|
if (isLast) |
|
|
|
if (isLast) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (fragmentNum > 0) |
|
|
|
if (fragmentNum > 0) |
|
|
|
m_IncomleteMessages.erase (msgID); |
|
|
|
m_IncomleteMessages.erase (msgID); |
|
|
|
|
|
|
|
msg->FromSSU (msgID); |
|
|
|
i2p::HandleI2NPMessage (msg, false); |
|
|
|
i2p::HandleI2NPMessage (msg, false); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|