diff options
Diffstat (limited to 'src/server/game/Server/Packets')
| -rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.cpp | 26 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.h | 57 |
2 files changed, 71 insertions, 12 deletions
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index 2540b9ce05a..23a27ae4114 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -18,6 +18,32 @@ #include "AuthenticationPackets.h" #include "HmacHash.h" +bool WorldPackets::Auth::EarlyProcessClientPacket::ReadNoThrow() +{ + try + { + Read(); + return true; + } + catch (ByteBufferPositionException const& ex) + { + } + + return false; +} + +void WorldPackets::Auth::Ping::Read() +{ + _worldPacket >> Serial; + _worldPacket >> Latency; +} + +const WorldPacket* WorldPackets::Auth::Pong::Write() +{ + _worldPacket << uint32(Serial); + return &_worldPacket; +} + WorldPacket const* WorldPackets::Auth::AuthChallenge::Write() { _worldPacket.append(DosChallenge, 8); diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index f8716521801..a127b4b2e62 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -31,6 +31,36 @@ namespace WorldPackets { namespace Auth { + class EarlyProcessClientPacket : public ClientPacket + { + public: + EarlyProcessClientPacket(OpcodeClient opcode, WorldPacket&& packet) : ClientPacket(opcode, std::move(packet)) { } + + bool ReadNoThrow(); + }; + + class Ping final : public EarlyProcessClientPacket + { + public: + Ping(WorldPacket&& packet) : EarlyProcessClientPacket(CMSG_PING, std::move(packet)) { } + + uint32 Serial = 0; + uint32 Latency = 0; + + private: + void Read(); + }; + + class Pong final : public ServerPacket + { + public: + Pong(uint32 serial) : ServerPacket(SMSG_PONG, 4), Serial(serial) { } + + WorldPacket const* Write() override; + + uint32 Serial = 0; + }; + class AuthChallenge final : public ServerPacket { public: @@ -43,19 +73,17 @@ namespace WorldPackets uint8 DosZeroBits = 0; }; - class AuthSession final : public ClientPacket + class AuthSession final : public EarlyProcessClientPacket { public: static uint32 const DigestLength = 24; - AuthSession(WorldPacket&& packet) : ClientPacket(CMSG_AUTH_SESSION, std::move(packet)) + AuthSession(WorldPacket&& packet) : EarlyProcessClientPacket(CMSG_AUTH_SESSION, std::move(packet)) { LocalChallenge.fill(0); Digest.fill(0); } - void Read() override; - uint16 Build = 0; int8 BuildType = 0; uint32 RegionID = 0; @@ -67,6 +95,9 @@ namespace WorldPackets ByteBuffer AddonInfo; std::string RealmJoinTicket; bool UseIPv6 = false; + + private: + void Read() override; }; class AuthResponse final : public ServerPacket @@ -173,23 +204,24 @@ namespace WorldPackets BigNumber iqmp; }; - class AuthContinuedSession final : public ClientPacket + class AuthContinuedSession final : public EarlyProcessClientPacket { public: static uint32 const DigestLength = 24; - AuthContinuedSession(WorldPacket&& packet) : ClientPacket(CMSG_AUTH_CONTINUED_SESSION, std::move(packet)) + AuthContinuedSession(WorldPacket&& packet) : EarlyProcessClientPacket(CMSG_AUTH_CONTINUED_SESSION, std::move(packet)) { LocalChallenge.fill(0); Digest.fill(0); } - void Read() override; - uint64 DosResponse = 0; uint64 Key = 0; std::array<uint8, 16> LocalChallenge; std::array<uint8, DigestLength> Digest; + + private: + void Read() override; }; class ResumeComms final : public ServerPacket @@ -200,15 +232,16 @@ namespace WorldPackets WorldPacket const* Write() override { return &_worldPacket; } }; - class ConnectToFailed final : public ClientPacket + class ConnectToFailed final : public EarlyProcessClientPacket { public: - ConnectToFailed(WorldPacket&& packet) : ClientPacket(CMSG_CONNECT_TO_FAILED, std::move(packet)) { } - - void Read() override; + ConnectToFailed(WorldPacket&& packet) : EarlyProcessClientPacket(CMSG_CONNECT_TO_FAILED, std::move(packet)) { } ConnectToSerial Serial = ConnectToSerial::None; uint8 Con = 0; + + private: + void Read() override; }; } } |
