diff options
-rw-r--r-- | src/server/bnetserver/Packets/BitStream.h | 1 | ||||
-rw-r--r-- | src/server/bnetserver/Packets/ConnectionPackets.h | 2 | ||||
-rw-r--r-- | src/server/bnetserver/Server/Session.cpp | 3 | ||||
-rw-r--r-- | src/server/bnetserver/Server/Session.h | 2 |
4 files changed, 6 insertions, 2 deletions
diff --git a/src/server/bnetserver/Packets/BitStream.h b/src/server/bnetserver/Packets/BitStream.h index 54c61ab3bbf..ef2c85a63c8 100644 --- a/src/server/bnetserver/Packets/BitStream.h +++ b/src/server/bnetserver/Packets/BitStream.h @@ -217,6 +217,7 @@ namespace Battlenet uint8* GetBuffer() { return _buffer.data(); } uint8 const* GetBuffer() const { return _buffer.data(); } + uint32 GetReadPos() const { return _readPos; } size_t GetSize() const { return ((_writePos + 7) & ~7) / 8; } // These methods are meant to only be used when their corresponding actions in the client ignore the value completely diff --git a/src/server/bnetserver/Packets/ConnectionPackets.h b/src/server/bnetserver/Packets/ConnectionPackets.h index 1c4619c6df3..238b2bff760 100644 --- a/src/server/bnetserver/Packets/ConnectionPackets.h +++ b/src/server/bnetserver/Packets/ConnectionPackets.h @@ -63,6 +63,8 @@ namespace Battlenet void Read() override { } std::string ToString() const override; void CallHandler(Session* session) override; + uint8* GetRemainingData() { return _stream.GetBuffer() + (((_stream.GetReadPos() + 7) & ~7) / 8); } + size_t GetRemainingSize() { return _stream.GetSize() - (((_stream.GetReadPos() + 7) & ~7) / 8); } }; class LogoutRequest final : public ClientPacket diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index 0a5a2de499a..fd6784152e8 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -393,9 +393,10 @@ void Battlenet::Session::HandlePing(Connection::Ping const& /*ping*/) AsyncWrite(new Connection::Pong()); } -void Battlenet::Session::HandleEnableEncryption(Connection::EnableEncryption const& /*enableEncryption*/) +void Battlenet::Session::HandleEnableEncryption(Connection::EnableEncryption& enableEncryption) { _crypt.Init(&K); + _crypt.DecryptRecv(enableEncryption.GetRemainingData(), enableEncryption.GetRemainingSize()); } void Battlenet::Session::HandleLogoutRequest(Connection::LogoutRequest const& /*logoutRequest*/) diff --git a/src/server/bnetserver/Server/Session.h b/src/server/bnetserver/Server/Session.h index ded5170ae32..4a1feb7c8a8 100644 --- a/src/server/bnetserver/Server/Session.h +++ b/src/server/bnetserver/Server/Session.h @@ -69,7 +69,7 @@ namespace Battlenet // Connection void HandlePing(Connection::Ping const& ping); - void HandleEnableEncryption(Connection::EnableEncryption const& enableEncryption); + void HandleEnableEncryption(Connection::EnableEncryption& enableEncryption); void HandleLogoutRequest(Connection::LogoutRequest const& logoutRequest); void HandleConnectionClosing(Connection::ConnectionClosing const& connectionClosing); |