aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp26
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.h57
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;
};
}
}