aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/authserver/Server/BattlenetPackets.cpp48
-rw-r--r--src/server/authserver/Server/BattlenetPackets.h27
-rw-r--r--src/server/authserver/Server/BattlenetSocket.cpp6
-rw-r--r--src/server/authserver/Server/BattlenetSocket.h2
4 files changed, 42 insertions, 41 deletions
diff --git a/src/server/authserver/Server/BattlenetPackets.cpp b/src/server/authserver/Server/BattlenetPackets.cpp
index 56a088939a3..404b490a485 100644
--- a/src/server/authserver/Server/BattlenetPackets.cpp
+++ b/src/server/authserver/Server/BattlenetPackets.cpp
@@ -166,16 +166,14 @@ void Battlenet::AuthComplete::Write()
_stream.WriteString(LastName, 8); // Last name - not set for WoW
_stream.Write(GameAccountId, 32);
-
_stream.Write(2, 8);
_stream.Write(0, 64);
_stream.Write(2, 8);
_stream.WriteString(GameAccountName, 5, -1);
-
_stream.Write(AccountFlags, 64);
+
_stream.Write(0, 32);
- _stream.Write(0, 1);
}
else
{
@@ -222,10 +220,9 @@ void Battlenet::RealmCharacterCounts::Write()
_stream.Write(CharacterCounts.size(), 7);
for (CharacterCountEntry const& entry : CharacterCounts)
{
- _stream.Write(entry.Realm.Region, 8);
- _stream.Write(0, 12);
_stream.Write(entry.Realm.Battlegroup, 8);
_stream.Write(entry.Realm.Index, 32);
+ _stream.Write(entry.Realm.Region, 8);
_stream.Write(entry.CharacterCount, 16);
}
@@ -242,7 +239,10 @@ std::string Battlenet::RealmCharacterCounts::ToString() const
stream << "Battlenet::RealmCharacterCounts Realms " << CharacterCounts.size();
for (CharacterCountEntry const& entry : CharacterCounts)
- stream << std::endl << "Region " << entry.Realm.Region << " Battlegroup " << entry.Realm.Region << " Index " << entry.Realm.Index << " Characters " << entry.CharacterCount;
+ stream << std::endl << "Region " << uint32(entry.Realm.Region) << " Battlegroup " << uint32(entry.Realm.Region) << " Index " << entry.Realm.Index << " Characters " << entry.CharacterCount;
+
+ for (ServerPacket* realmData : RealmData)
+ stream << std::endl << realmData->ToString();
return stream.str().c_str();
}
@@ -250,13 +250,11 @@ std::string Battlenet::RealmCharacterCounts::ToString() const
void Battlenet::RealmUpdate::Write()
{
_stream.Write(true, 1); // Success
- _stream.Write(Timezone, 32);
+ _stream.Write(Type + -std::numeric_limits<int32>::min(), 32);
_stream.WriteFloat(Population);
+ _stream.Write(Flags, 8);
_stream.Write(Lock, 8);
- _stream.Write(0, 19);
- _stream.Write(Type + std::numeric_limits<int32>::min(), 32);
- _stream.WriteString(Name, 10);
-
+ _stream.Write(Timezone, 32);
_stream.Write(!Version.empty(), 1);
if (!Version.empty())
{
@@ -273,18 +271,18 @@ void Battlenet::RealmUpdate::Write()
_stream.WriteBytes(&port, 2);
}
- _stream.Write(Flags, 8);
- _stream.Write(Region, 8);
- _stream.Write(0, 12);
+ _stream.WriteString(Name, 10);
+
_stream.Write(Battlegroup, 8);
_stream.Write(Index, 32);
+ _stream.Write(Region, 8);
}
std::string Battlenet::RealmUpdate::ToString() const
{
std::ostringstream stream;
- stream << "Battlenet::RealmUpdate Timezone " << Timezone << " Population " << Population << " Lock " << Lock << " Type " << Type << " Name " << Name
- << " Flags " << Flags << " Region " << Region << " Battlegroup " << Battlegroup << " Index " << Index;
+ stream << "Battlenet::RealmUpdate Timezone " << Timezone << " Population " << Population << " Lock " << uint32(Lock) << " Type " << Type << " Name " << Name
+ << " Flags " << uint32(Flags) << " Region " << uint32(Region) << " Battlegroup " << uint32(Battlegroup) << " Index " << Index;
if (!Version.empty())
stream << " Version " << Version;
@@ -294,18 +292,16 @@ std::string Battlenet::RealmUpdate::ToString() const
void Battlenet::RealmJoinRequest::Read()
{
- ClientSeed = _stream.Read<uint32>(32);
- Unknown = _stream.Read<uint32>(20);
- Realm.Region = _stream.Read<uint8>(8);
- _stream.Read<uint16>(12);
Realm.Battlegroup = _stream.Read<uint8>(8);
Realm.Index = _stream.Read<uint32>(32);
+ Realm.Region = _stream.Read<uint8>(8);
+ ClientSeed = _stream.Read<uint32>(32);
}
std::string Battlenet::RealmJoinRequest::ToString() const
{
std::ostringstream stream;
- stream << "Battlenet::RealmJoinRequest ClientSeed" << ClientSeed << " Region " << Realm.Region << " Battlegroup " << Realm.Battlegroup << " Index " << Realm.Index;
+ stream << "Battlenet::RealmJoinRequest ClientSeed " << ClientSeed << " Region " << uint32(Realm.Region) << " Battlegroup " << uint32(Realm.Battlegroup) << " Index " << Realm.Index;
return stream.str().c_str();
}
@@ -313,6 +309,7 @@ void Battlenet::RealmJoinResult::Write()
{
_stream.Write(0, 1); // Fail
_stream.Write(ServerSeed, 32);
+ _stream.Write(0, 5); // IPv6 addresses
_stream.Write(IPv4.size(), 5);
for (ACE_INET_Addr const& addr : IPv4)
{
@@ -325,11 +322,14 @@ void Battlenet::RealmJoinResult::Write()
_stream.WriteBytes(&ip, 4);
_stream.WriteBytes(&port, 2);
}
-
- _stream.Write(0, 5); // IPv6 addresses
}
std::string Battlenet::RealmJoinResult::ToString() const
{
- return "Battlenet::RealmJoinResult";
+ std::ostringstream stream;
+ stream << "Battlenet::RealmJoinResult ServerSeed " << ServerSeed << " Addresses (IPv4)" << IPv4.size();
+ for (ACE_INET_Addr const& addr : IPv4)
+ stream << std::endl << "Battlenet::RealmJoinResult::Address " << GetAddressString(addr);
+
+ return stream.str().c_str();
}
diff --git a/src/server/authserver/Server/BattlenetPackets.h b/src/server/authserver/Server/BattlenetPackets.h
index bea9b5649e5..9acc707bd10 100644
--- a/src/server/authserver/Server/BattlenetPackets.h
+++ b/src/server/authserver/Server/BattlenetPackets.h
@@ -39,30 +39,33 @@ namespace Battlenet
enum AuthOpcode
{
CMSG_AUTH_CHALLENGE = 0x0,
+ CMSG_AUTH_RECONNECT = 0x1,
CMSG_AUTH_PROOF_RESPONSE = 0x2,
CMSG_AUTH_CHALLENGE_NEW = 0x9, // MoP
SMSG_AUTH_COMPLETE = 0x0,
- SMSG_AUTH_PROOF_REQUEST = 0x2,
+ SMSG_AUTH_PROOF_REQUEST = 0x2
};
enum CreepOpcodes
{
CMSG_PING = 0x0,
CMSG_ENABLE_ENCRYPTION = 0x5,
+ CMSG_INVALID_PACKET = 0x9,
SMSG_PONG = 0x0
};
enum WoWOpcodes
{
- CMSG_REALM_UPDATE = 0x0,
- CMSG_JOIN_REQUEST = 0x8,
-
- SMSG_CHARACTER_COUNTS = 0x0,
- SMSG_REALM_UPDATE = 0x2,
- SMSG_REALM_UPDATE_END = 0x3,
- SMSG_JOIN_RESULT = 0x8
+ CMSG_REALM_UPDATE_SUBSCRIBE = 0x0,
+ CMSG_REALM_UPDATE_UNSUBSCRIBE = 0x1,
+ CMSG_JOIN_REQUEST = 0x8,
+
+ SMSG_CHARACTER_COUNTS = 0x0,
+ SMSG_REALM_UPDATE = 0x2,
+ SMSG_REALM_UPDATE_END = 0x3,
+ SMSG_JOIN_RESULT = 0x8
};
struct PacketHeader
@@ -118,9 +121,7 @@ namespace Battlenet
public:
ClientPacket(PacketHeader const& header, BitStream& stream) : Packet(header, stream) { }
- void Write() override { ASSERT(!"Write not implemented for this packet."); }
-
- virtual std::string ToString() const override { return "Battenet::ClientPacket"; };
+ void Write() override final { ASSERT(!"Write not implemented for this packet."); }
};
class ServerPacket : public Packet
@@ -129,9 +130,7 @@ namespace Battlenet
ServerPacket(PacketHeader const& header);
~ServerPacket();
- void Read() override { ASSERT(!"Read not implemented for server packets."); }
-
- virtual std::string ToString() const override { return "Battenet::ServerPacket"; };
+ void Read() override final { ASSERT(!"Read not implemented for server packets."); }
uint8 const* GetData() const { return _stream.GetBuffer(); }
size_t GetSize() const { return _stream.GetSize(); }
diff --git a/src/server/authserver/Server/BattlenetSocket.cpp b/src/server/authserver/Server/BattlenetSocket.cpp
index 65e12aa602d..a0597dce2a0 100644
--- a/src/server/authserver/Server/BattlenetSocket.cpp
+++ b/src/server/authserver/Server/BattlenetSocket.cpp
@@ -39,7 +39,7 @@ std::map<Battlenet::PacketHeader, Battlenet::Socket::PacketHandler> InitHandlers
handlers[Battlenet::PacketHeader(Battlenet::CMSG_PING, Battlenet::CREEP)] = &Battlenet::Socket::HandlePing;
handlers[Battlenet::PacketHeader(Battlenet::CMSG_ENABLE_ENCRYPTION, Battlenet::CREEP)] = &Battlenet::Socket::HandleEnableEncryption;
- handlers[Battlenet::PacketHeader(Battlenet::CMSG_REALM_UPDATE, Battlenet::WOW)] = &Battlenet::Socket::HandleRealmUpdate;
+ handlers[Battlenet::PacketHeader(Battlenet::CMSG_REALM_UPDATE_SUBSCRIBE, Battlenet::WOW)] = &Battlenet::Socket::HandleRealmUpdateSubscribe;
handlers[Battlenet::PacketHeader(Battlenet::CMSG_JOIN_REQUEST, Battlenet::WOW)] = &Battlenet::Socket::HandleRealmJoinRequest;
return handlers;
@@ -371,7 +371,7 @@ bool Battlenet::Socket::HandleEnableEncryption(PacketHeader& /*header*/, BitStre
return false;
}
-bool Battlenet::Socket::HandleRealmUpdate(PacketHeader& /*header*/, BitStream& /*packet*/)
+bool Battlenet::Socket::HandleRealmUpdateSubscribe(PacketHeader& /*header*/, BitStream& /*packet*/)
{
sRealmList->UpdateIfNeed();
@@ -535,6 +535,8 @@ void Battlenet::Socket::OnClose()
void Battlenet::Socket::Send(ServerPacket& packet)
{
+ TC_LOG_TRACE("server.battlenet", "Battlenet::Socket::Send %s", packet.ToString().c_str());
+
packet.Write();
_crypt.EncryptSend(const_cast<uint8*>(packet.GetData()), packet.GetSize());
diff --git a/src/server/authserver/Server/BattlenetSocket.h b/src/server/authserver/Server/BattlenetSocket.h
index e8014e790a8..ef6157b022a 100644
--- a/src/server/authserver/Server/BattlenetSocket.h
+++ b/src/server/authserver/Server/BattlenetSocket.h
@@ -60,7 +60,7 @@ namespace Battlenet
bool HandleEnableEncryption(PacketHeader& header, BitStream& packet);
// WoW
- bool HandleRealmUpdate(PacketHeader& header, BitStream& packet);
+ bool HandleRealmUpdateSubscribe(PacketHeader& header, BitStream& packet);
bool HandleRealmJoinRequest(PacketHeader& header, BitStream& packet);
void OnRead() override;