forked from metin-server/m2dev-client-src
@@ -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<const uint8_t*>(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_
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -254,6 +254,7 @@ bool CPythonNetworkStream::RecvKeyAgreementCompletedPacket()
|
||||
Tracenf("KEY_AGREEMENT_COMPLETED RECV");
|
||||
|
||||
ActivateCipher();
|
||||
DecryptAlreadyReceivedData();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user