aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-12-20 00:25:11 +0100
committerShauren <shauren.trinity@gmail.com>2014-12-20 00:25:11 +0100
commitc3e959b9db042c9c40c0d75bd6ee1aedf34b84b5 (patch)
tree0f97d475ce9228cdf4bda78f62fac7861db4d692 /src
parent9f0051c4e5d8de7e216bf3e55b759583e52ff681 (diff)
Core/Battle.net: Decrypt remainder of the packet that arrives together with EnableEncryption
Diffstat (limited to 'src')
-rw-r--r--src/server/bnetserver/Packets/BitStream.h1
-rw-r--r--src/server/bnetserver/Packets/ConnectionPackets.h2
-rw-r--r--src/server/bnetserver/Server/Session.cpp3
-rw-r--r--src/server/bnetserver/Server/Session.h2
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);