diff --git a/src/EterLib/NetStream.cpp b/src/EterLib/NetStream.cpp index 1041060..279fa55 100644 --- a/src/EterLib/NetStream.cpp +++ b/src/EterLib/NetStream.cpp @@ -780,7 +780,7 @@ bool CNetworkStream::Send(int size, const char * pSrcBuf) if (*pSrcBuf != 0) { const auto kHeader = *pSrcBuf; - TraceError("SEND> %s %u(0x%X) (%d)", GetRecvHeaderName(kHeader), kHeader, kHeader, size); + TraceError("SEND> %s %u(0x%X) (%d)", GetSendHeaderName(kHeader), kHeader, kHeader, size); const auto contents = dump_hex(reinterpret_cast(pSrcBuf), size); TraceError("%s", contents.c_str()); @@ -956,4 +956,17 @@ void CNetworkStream::ActivateCipher() { return m_cipher.set_activated(true); } + +// If cipher is active and there's unread data in buffer, decrypt it in-place +void CNetworkStream::DecryptAlreadyReceivedData() +{ + if (!IsSecurityMode()) + return; + + const int unreadSize = m_recvBufInputPos - m_recvBufOutputPos; + if (unreadSize <= 0) + return; + + m_cipher.Decrypt(m_recvBuf + m_recvBufOutputPos, unreadSize); +} #endif // _IMPROVED_PACKET_ENCRYPTION_ diff --git a/src/EterLib/NetStream.h b/src/EterLib/NetStream.h index 0c35a82..bd337d4 100644 --- a/src/EterLib/NetStream.h +++ b/src/EterLib/NetStream.h @@ -72,6 +72,7 @@ class CNetworkStream size_t Prepare(void* buffer, size_t* length); bool Activate(size_t agreed_length, const void* buffer, size_t length); void ActivateCipher(); + void DecryptAlreadyReceivedData(); #endif private: diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp index d87b6a8..993a542 100644 --- a/src/UserInterface/PythonNetworkStream.cpp +++ b/src/UserInterface/PythonNetworkStream.cpp @@ -587,7 +587,7 @@ bool CPythonNetworkStream::CheckPacket(TPacketHeader * pRetHeader) bool CPythonNetworkStream::RecvErrorPacket(int header) { - TraceError("Phase %s does not handle this header (header: %u(0x%X)) Last packets: ", m_strPhase.c_str(), header); + TraceError("Phase %s does not handle this header (header: %u(0x%X)) Last packets: ", m_strPhase.c_str(), header, header); for (const auto& it : gs_vecLastHeaders) TraceError("%u(0x%X)", it, it); diff --git a/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp b/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp index f99ddb0..aafede3 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseHandShake.cpp @@ -254,6 +254,7 @@ bool CPythonNetworkStream::RecvKeyAgreementCompletedPacket() Tracenf("KEY_AGREEMENT_COMPLETED RECV"); ActivateCipher(); + DecryptAlreadyReceivedData(); return true; }