diff --git a/src/EterLib/NetStream.cpp b/src/EterLib/NetStream.cpp index 9705948..af492ff 100644 --- a/src/EterLib/NetStream.cpp +++ b/src/EterLib/NetStream.cpp @@ -857,6 +857,11 @@ bool CNetworkStream::SendSequence() return Send(sizeof(BYTE), &bSeq); } +uint8_t CNetworkStream::GetNextSequence() +{ + return m_SequenceGenerator(UINT8_MAX + 1); +} + bool CNetworkStream::OnProcess() { return true; diff --git a/src/EterLib/NetStream.h b/src/EterLib/NetStream.h index bd337d4..aba0009 100644 --- a/src/EterLib/NetStream.h +++ b/src/EterLib/NetStream.h @@ -53,6 +53,7 @@ class CNetworkStream void SetPacketSequenceMode(bool isOn); bool SendSequence(); + uint8_t GetNextSequence(); protected: virtual void OnConnectSuccess(); diff --git a/src/UserInterface/AccountConnector.cpp b/src/UserInterface/AccountConnector.cpp index f8e89eb..74061ac 100644 --- a/src/UserInterface/AccountConnector.cpp +++ b/src/UserInterface/AccountConnector.cpp @@ -288,12 +288,11 @@ bool CAccountConnector::__AuthState_SendPong() { TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; + kPacketPong.bSequence = GetNextSequence(); + if (!Send(sizeof(kPacketPong), &kPacketPong)) return false; - if (IsSecurityMode()) - return SendSequence(); - return true; } diff --git a/src/UserInterface/GuildMarkDownloader.cpp b/src/UserInterface/GuildMarkDownloader.cpp index 268226c..c3d4138 100644 --- a/src/UserInterface/GuildMarkDownloader.cpp +++ b/src/UserInterface/GuildMarkDownloader.cpp @@ -237,14 +237,12 @@ bool CGuildMarkDownloader::__LoginState_RecvPing() TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; + kPacketPong.bSequence = GetNextSequence(); if (!Send(sizeof(TPacketCGPong), &kPacketPong)) return false; - if (IsSecurityMode()) - return SendSequence(); - else - return true; + return true; } bool CGuildMarkDownloader::__LoginState_RecvPhase() diff --git a/src/UserInterface/GuildMarkUploader.cpp b/src/UserInterface/GuildMarkUploader.cpp index 46e6ffb..eabd2ee 100644 --- a/src/UserInterface/GuildMarkUploader.cpp +++ b/src/UserInterface/GuildMarkUploader.cpp @@ -376,14 +376,12 @@ bool CGuildMarkUploader::__LoginState_RecvPing() TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; + kPacketPong.bSequence = GetNextSequence(); if (!Send(sizeof(TPacketCGPong), &kPacketPong)) return false; - if (IsSecurityMode()) - return SendSequence(); - else - return true; + return true; } #ifdef _IMPROVED_PACKET_ENCRYPTION_ diff --git a/src/UserInterface/Packet.h b/src/UserInterface/Packet.h index 9685abe..f05c83c 100644 --- a/src/UserInterface/Packet.h +++ b/src/UserInterface/Packet.h @@ -1784,6 +1784,7 @@ typedef struct packet_ping typedef struct packet_pong { uint8_t bHeader; + uint8_t bSequence; } TPacketCGPong; typedef struct packet_script diff --git a/src/UserInterface/PythonNetworkStream.cpp b/src/UserInterface/PythonNetworkStream.cpp index fcd2bad..1d3d590 100644 --- a/src/UserInterface/PythonNetworkStream.cpp +++ b/src/UserInterface/PythonNetworkStream.cpp @@ -658,14 +658,12 @@ bool CPythonNetworkStream::RecvPingPacket() TPacketCGPong kPacketPong; kPacketPong.bHeader = HEADER_CG_PONG; + kPacketPong.bSequence = GetNextSequence(); if (!Send(sizeof(TPacketCGPong), &kPacketPong)) return false; - if (IsSecurityMode()) - return SendSequence(); - else - return true; + return true; } bool CPythonNetworkStream::RecvDefaultPacket(int header)