From a04393f5542cc02b1af0e4259d98cc40080972d1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 10 Oct 2014 23:19:40 +0200 Subject: Core/Auth: Moved battle.net handling to separate project --- .../bnetserver/Packets/AuthenticationPackets.cpp | 319 +++++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100644 src/server/bnetserver/Packets/AuthenticationPackets.cpp (limited to 'src/server/bnetserver/Packets/AuthenticationPackets.cpp') diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.cpp b/src/server/bnetserver/Packets/AuthenticationPackets.cpp new file mode 100644 index 00000000000..ae2db016972 --- /dev/null +++ b/src/server/bnetserver/Packets/AuthenticationPackets.cpp @@ -0,0 +1,319 @@ +/* + * Copyright (C) 2008-2014 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "AuthenticationPackets.h" +#include "Util.h" + +void Battlenet::Authentication::LogonRequest::Read() +{ + Program = _stream.ReadFourCC(); + Platform = _stream.ReadFourCC(); + Locale = _stream.ReadFourCC(); + + Components.resize(_stream.Read(6)); + for (size_t i = 0; i < Components.size(); ++i) + { + Component& component = Components[i]; + component.Program = _stream.ReadFourCC(); + component.Platform = _stream.ReadFourCC(); + component.Build = _stream.Read(32); + } + + if (_stream.Read(1)) + Login = _stream.ReadString(9, 3); +} + +std::string Battlenet::Authentication::LogonRequest::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::LogonRequest Program: " << Program << ", Platform: " << Platform << ", Locale: " << Locale; + for (Component const& component : Components) + stream << std::endl << "Battlenet::Component Program: " << component.Program << ", Platform: " << component.Platform << ", Build: " << component.Build; + + if (!Login.empty()) + stream << std::endl << "Battlenet::Authentication::LogonRequest Login: " << Login; + + return stream.str(); +} + +void Battlenet::Authentication::LogonRequest::CallHandler(Session* session) const +{ + session->HandleLogonRequest(*this); +} + +void Battlenet::Authentication::ResumeRequest::Read() +{ + Program = _stream.ReadFourCC(); + Platform = _stream.ReadFourCC(); + Locale = _stream.ReadFourCC(); + + Components.resize(_stream.Read(6)); + for (size_t i = 0; i < Components.size(); ++i) + { + Component& component = Components[i]; + component.Program = _stream.ReadFourCC(); + component.Platform = _stream.ReadFourCC(); + component.Build = _stream.Read(32); + } + + Login = _stream.ReadString(9, 3); + Region = _stream.Read(8); + GameAccountName = _stream.ReadString(5, 1); +} + +std::string Battlenet::Authentication::ResumeRequest::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::ResumeRequest Program: " << Program << ", Platform: " << Platform << ", Locale: " << Locale; + for (Component const& component : Components) + stream << std::endl << "Battlenet::Component Program: " << component.Program << ", Platform: " << component.Platform << ", Build: " << component.Build; + + stream << std::endl << "Login: " << Login; + stream << std::endl << "Region: " << uint32(Region); + stream << std::endl << "GameAccountName: " << GameAccountName; + + return stream.str(); +} + +void Battlenet::Authentication::ResumeRequest::CallHandler(Session* session) const +{ + session->HandleResumeRequest(*this); +} + +Battlenet::Authentication::ProofRequest::~ProofRequest() +{ + for (size_t i = 0; i < Modules.size(); ++i) + delete Modules[i]; +} + +void Battlenet::Authentication::ProofRequest::Write() +{ + _stream.Write(Modules.size(), 3); + for (ModuleInfo const* info : Modules) + { + _stream.WriteBytes(info->Type.c_str(), 4); + _stream.WriteFourCC(info->Region); + _stream.WriteBytes(info->ModuleId, 32); + _stream.Write(info->DataSize, 10); + _stream.WriteBytes(info->Data, info->DataSize); + } +} + +std::string Battlenet::Authentication::ProofRequest::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::ProofRequest modules " << Modules.size(); + for (ModuleInfo const* module : Modules) + stream << std::endl << "Battlenet::ModuleInfo Locale " << module->Region.c_str() << ", ModuleId " << ByteArrayToHexStr(module->ModuleId, 32) << ", DataSize " << module->DataSize << ", Data " << ByteArrayToHexStr(module->Data, module->DataSize); + + return stream.str(); +} + +Battlenet::Authentication::ProofResponse::~ProofResponse() +{ + for (size_t i = 0; i < Modules.size(); ++i) + delete Modules[i]; +} + +void Battlenet::Authentication::ProofResponse::Read() +{ + Modules.resize(_stream.Read(3)); + for (size_t i = 0; i < Modules.size(); ++i) + { + BitStream*& dataStream = Modules[i]; + dataStream = new BitStream(_stream.Read(10)); + memcpy(dataStream->GetBuffer(), _stream.ReadBytes(dataStream->GetSize()).get(), dataStream->GetSize()); + } +} + +std::string Battlenet::Authentication::ProofResponse::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::ProofResponse Modules " << Modules.size(); + for (BitStream* module : Modules) + { + std::string hexStr = ByteArrayToHexStr(module->GetBuffer(), module->GetSize()); + stream << std::endl << "Battlenet::Authentication::ProofResponse::ModuleData Size: " << module->GetSize() << ", Data: " << hexStr; + } + + return stream.str(); +} + +void Battlenet::Authentication::ProofResponse::CallHandler(Session* session) const +{ + session->HandleProofResponse(*this); +} + +Battlenet::Authentication::LogonResponse::~LogonResponse() +{ + for (ModuleInfo* m : Modules) + delete m; +} + +void Battlenet::Authentication::LogonResponse::Write() +{ + _stream.Write(Result.ResultValue != ResponseFailure::UPDATE, 1); + if (Result.ResultValue == ResponseFailure::UPDATE) + { + _stream.Write(Modules.size(), 3); + for (size_t i = 0; i < Modules.size(); ++i) + { + ModuleInfo* info = Modules[i]; + _stream.WriteBytes(info->Type.c_str(), 4); + _stream.WriteFourCC(info->Region); + _stream.WriteBytes(info->ModuleId, 32); + _stream.Write(info->DataSize, 10); + _stream.WriteBytes(info->Data, info->DataSize); + } + + _stream.Write(PingTimeout + std::numeric_limits::min(), 32); + _stream.Write(1, 1); // RegulatorRules != NULL (not a pointer for us, always write) + // if written == 1 + { + _stream.Write(RegulatorRules.Type == Regulator::LEAKY_BUCKET, 1); + if (RegulatorRules.Type == Regulator::LEAKY_BUCKET) + { + _stream.Write(RegulatorRules.Threshold, 32); + _stream.Write(RegulatorRules.Rate, 32); + } + } + + _stream.WriteString(FirstName, 8); // First name + _stream.WriteString(LastName, 8); // Last name - not set for WoW + + _stream.Write(AccountId, 32); + _stream.Write(Region, 8); + _stream.Write(Flags, 64); + + _stream.Write(GameAccountRegion, 8); + _stream.WriteString(GameAccountName, 5, -1); + _stream.Write(GameAccountFlags, 64); + + _stream.Write(FailedLogins, 32); + } + else + { + _stream.Write(!Modules.empty(), 1); + if (!Modules.empty()) + { + ModuleInfo* info = Modules[0]; + _stream.WriteBytes(info->Type.c_str(), 4); + _stream.WriteFourCC(info->Region); + _stream.WriteBytes(info->ModuleId, 32); + } + + _stream.Write(Result.ResultValue, 2); + if (Result.ResultValue == ResponseFailure::FAILURE) + { + _stream.Write(Result.Error, 16); + _stream.Write(Result.Wait + std::numeric_limits::min(), 32); + } + } +} + +std::string Battlenet::Authentication::LogonResponse::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::LogonResponse AuthResult " << Result.Error << " PingTimeout " << PingTimeout + << " RegulatorRules.Threshold " << RegulatorRules.Threshold << " RegulatorRules.Rate " << RegulatorRules.Rate + << " FirstName " << FirstName << " LastName " << LastName << " AccountId " << AccountId << " Region " << uint32(Region) << " GameAccountName " << GameAccountName + << " GameAccountFlags " << GameAccountFlags << " FailedLogins " << FailedLogins << " Modules " << Modules.size(); + + for (ModuleInfo const* module : Modules) + stream << std::endl << "Battlenet::ModuleInfo Locale " << module->Region.c_str() << ", ModuleId " << ByteArrayToHexStr(module->ModuleId, 32) << ", DataSize " << module->DataSize << ", Data " << ByteArrayToHexStr(module->Data, module->DataSize); + + return stream.str(); +} + +void Battlenet::Authentication::LogonResponse::SetAuthResult(AuthResult result) +{ + Result.ResultValue = result != AUTH_OK ? ResponseFailure::FAILURE : ResponseFailure::UPDATE; + Result.Error = result; +} + +Battlenet::Authentication::ResumeResponse::~ResumeResponse() +{ + for (ModuleInfo* m : Modules) + delete m; +} + +void Battlenet::Authentication::ResumeResponse::Write() +{ + _stream.Write(Result.ResultValue != ResponseFailure::UPDATE, 1); + if (Result.ResultValue == ResponseFailure::UPDATE) + { + _stream.Write(Modules.size(), 3); + for (size_t i = 0; i < Modules.size(); ++i) + { + ModuleInfo* info = Modules[i]; + _stream.WriteBytes(info->Type.c_str(), 4); + _stream.WriteFourCC(info->Region); + _stream.WriteBytes(info->ModuleId, 32); + _stream.Write(info->DataSize, 10); + _stream.WriteBytes(info->Data, info->DataSize); + } + + _stream.Write(PingTimeout + std::numeric_limits::min(), 32); + _stream.Write(1, 1); // RegulatorRules != NULL (not a pointer for us, always write) + // if written == 1 + { + _stream.Write(RegulatorRules.Type == Regulator::LEAKY_BUCKET, 1); + if (RegulatorRules.Type == Regulator::LEAKY_BUCKET) + { + _stream.Write(RegulatorRules.Threshold, 32); + _stream.Write(RegulatorRules.Rate, 32); + } + } + } + else + { + _stream.Write(!Modules.empty(), 1); + if (!Modules.empty()) + { + ModuleInfo* info = Modules[0]; + _stream.WriteBytes(info->Type.c_str(), 4); + _stream.WriteFourCC(info->Region); + _stream.WriteBytes(info->ModuleId, 32); + } + + _stream.Write(Result.ResultValue, 2); + if (Result.ResultValue == ResponseFailure::FAILURE) + { + _stream.Write(Result.Error, 16); + _stream.Write(Result.Wait + std::numeric_limits::min(), 32); + } + } +} + +std::string Battlenet::Authentication::ResumeResponse::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::ResumeResponse AuthResult " << Result.Error << " PingTimeout " << PingTimeout + << " RegulatorRules.Threshold " << RegulatorRules.Threshold << " RegulatorRules.Rate " << RegulatorRules.Rate + << " Modules " << Modules.size(); + + for (ModuleInfo const* module : Modules) + stream << std::endl << "Battlenet::ModuleInfo Locale " << module->Region.c_str() << ", ModuleId " << ByteArrayToHexStr(module->ModuleId, 32) << ", DataSize " << module->DataSize << ", Data " << ByteArrayToHexStr(module->Data, module->DataSize); + + return stream.str(); +} + +void Battlenet::Authentication::ResumeResponse::SetAuthResult(AuthResult result) +{ + Result.ResultValue = result != AUTH_OK ? ResponseFailure::FAILURE : ResponseFailure::UPDATE; + Result.Error = result; +} -- cgit v1.2.3 From cbabfe99200be41be0f6362756d044b653065171 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 11 Oct 2014 22:45:01 +0200 Subject: Core/Battle.net: Handle ConnectionClosing --- .../bnetserver/Packets/AuthenticationPackets.cpp | 6 +- .../bnetserver/Packets/AuthenticationPackets.h | 30 +++++----- .../bnetserver/Packets/ConnectionPackets.cpp | 60 ++++++++++++++++++- src/server/bnetserver/Packets/ConnectionPackets.h | 69 ++++++++++++++++++++-- src/server/bnetserver/Packets/FriendsPackets.cpp | 14 +---- src/server/bnetserver/Packets/FriendsPackets.h | 8 +-- src/server/bnetserver/Packets/PacketFactory.h | 2 + src/server/bnetserver/Packets/PacketsBase.cpp | 6 ++ src/server/bnetserver/Packets/PacketsBase.h | 8 ++- src/server/bnetserver/Packets/PresencePackets.cpp | 10 ---- src/server/bnetserver/Packets/PresencePackets.h | 2 - src/server/bnetserver/Packets/WoWRealmPackets.cpp | 6 +- src/server/bnetserver/Packets/WoWRealmPackets.h | 6 +- src/server/bnetserver/Server/Session.cpp | 8 ++- src/server/bnetserver/Server/Session.h | 1 + 15 files changed, 172 insertions(+), 64 deletions(-) (limited to 'src/server/bnetserver/Packets/AuthenticationPackets.cpp') diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.cpp b/src/server/bnetserver/Packets/AuthenticationPackets.cpp index ae2db016972..c1362cd5f03 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.cpp +++ b/src/server/bnetserver/Packets/AuthenticationPackets.cpp @@ -50,7 +50,7 @@ std::string Battlenet::Authentication::LogonRequest::ToString() const return stream.str(); } -void Battlenet::Authentication::LogonRequest::CallHandler(Session* session) const +void Battlenet::Authentication::LogonRequest::CallHandler(Session* session) { session->HandleLogonRequest(*this); } @@ -89,7 +89,7 @@ std::string Battlenet::Authentication::ResumeRequest::ToString() const return stream.str(); } -void Battlenet::Authentication::ResumeRequest::CallHandler(Session* session) const +void Battlenet::Authentication::ResumeRequest::CallHandler(Session* session) { session->HandleResumeRequest(*this); } @@ -153,7 +153,7 @@ std::string Battlenet::Authentication::ProofResponse::ToString() const return stream.str(); } -void Battlenet::Authentication::ProofResponse::CallHandler(Session* session) const +void Battlenet::Authentication::ProofResponse::CallHandler(Session* session) { session->HandleProofResponse(*this); } diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.h b/src/server/bnetserver/Packets/AuthenticationPackets.h index 72e598b858e..c698d3125cf 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.h +++ b/src/server/bnetserver/Packets/AuthenticationPackets.h @@ -49,7 +49,7 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; std::string Program; std::string Platform; @@ -68,7 +68,7 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; std::string Program; std::string Platform; @@ -91,23 +91,11 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; std::vector Modules; }; - class ProofRequest final : public ServerPacket - { - public: - ProofRequest() : ServerPacket(PacketHeader(SMSG_PROOF_REQUEST, AUTHENTICATION)) { } - ~ProofRequest(); - - void Write() override; - std::string ToString() const override; - - std::vector Modules; - }; - class ResponseFailure { public: @@ -192,6 +180,18 @@ namespace Battlenet int32 PingTimeout; Regulator RegulatorRules; }; + + class ProofRequest final : public ServerPacket + { + public: + ProofRequest() : ServerPacket(PacketHeader(SMSG_PROOF_REQUEST, AUTHENTICATION)) { } + ~ProofRequest(); + + void Write() override; + std::string ToString() const override; + + std::vector Modules; + }; } } diff --git a/src/server/bnetserver/Packets/ConnectionPackets.cpp b/src/server/bnetserver/Packets/ConnectionPackets.cpp index 0449ecbb756..aa934cb631a 100644 --- a/src/server/bnetserver/Packets/ConnectionPackets.cpp +++ b/src/server/bnetserver/Packets/ConnectionPackets.cpp @@ -23,7 +23,7 @@ std::string Battlenet::Connection::Ping::ToString() const return "Battlenet::Connection::Ping"; } -void Battlenet::Connection::Ping::CallHandler(Session* session) const +void Battlenet::Connection::Ping::CallHandler(Session* session) { session->HandlePing(*this); } @@ -33,7 +33,7 @@ std::string Battlenet::Connection::EnableEncryption::ToString() const return "Battlenet::Connection::EnableEncryption"; } -void Battlenet::Connection::EnableEncryption::CallHandler(Session* session) const +void Battlenet::Connection::EnableEncryption::CallHandler(Session* session) { session->HandleEnableEncryption(*this); } @@ -43,11 +43,65 @@ std::string Battlenet::Connection::LogoutRequest::ToString() const return "Battlenet::Connection::LogoutRequest"; } -void Battlenet::Connection::LogoutRequest::CallHandler(Session* session) const +void Battlenet::Connection::LogoutRequest::CallHandler(Session* session) { session->HandleLogoutRequest(*this); } +void Battlenet::Connection::DisconnectRequest::Read() +{ + Timeout = _stream.Read(16); + Tick = _stream.Read(32); +} + +std::string Battlenet::Connection::DisconnectRequest::ToString() const +{ + std::ostringstream str; + str << "Battlenet::Connection::DisconnectRequest Timeout: " << Timeout << ", Tick: " << Tick; + return str.str(); +} + +void Battlenet::Connection::ConnectionClosing::Read() +{ + Reason = _stream.Read(4); + if (_stream.Read(1)) // HasHeader + { + Header.Opcode = _stream.Read(6); + if (_stream.Read(1)) + Header.Channel = _stream.Read(4); + } + + Now = _stream.Read(32); + _stream.Read(25); + auto bytes = _stream.ReadBytes(_stream.Read(8)); // BadData + Packets.resize(_stream.Read(6)); + for (size_t i = 0; i < Packets.size(); ++i) + { + PacketInfo& info = Packets[i]; + info.CommandName = _stream.ReadFourCC(); + info.LayerId = _stream.Read(16); + info.Channel = _stream.ReadFourCC(); + info.Timestamp = _stream.Read(32); + info.Size = _stream.Read(16); + } +} + +std::string Battlenet::Connection::ConnectionClosing::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Connection::ConnectionClosing Reason: " << Reason << ", Now: " << Now << ", Packet history size: " << Packets.size(); + for (PacketInfo const& packet : Packets) + stream << std::endl << "Battlenet::Connection::ConnectionClosing::PacketInfo LayerId: " << packet.LayerId + << ", Channel: " << packet.Channel << ", CommandName: " << packet.CommandName << ", Size: " << packet.Size << ", Timestamp: " << packet.Timestamp; + + return stream.str(); +} + +void Battlenet::Connection::ConnectionClosing::CallHandler(Session* session) +{ + session->HandleConnectionClosing(*this); +} + std::string Battlenet::Connection::Pong::ToString() const { return "Battlenet::Connection::Pong"; diff --git a/src/server/bnetserver/Packets/ConnectionPackets.h b/src/server/bnetserver/Packets/ConnectionPackets.h index f3fa4852d07..8572cd5d854 100644 --- a/src/server/bnetserver/Packets/ConnectionPackets.h +++ b/src/server/bnetserver/Packets/ConnectionPackets.h @@ -29,8 +29,8 @@ namespace Battlenet CMSG_PING = 0x0, CMSG_ENABLE_ENCRYPTION = 0x5, CMSG_LOGOUT_REQUEST = 0x6, - CMSG_DISCONNECT_REQUEST = 0x7, // Not implemented - CMSG_CONNECTION_CLOSING = 0x9, // Not implemented + CMSG_DISCONNECT_REQUEST = 0x7, // Not handled + CMSG_CONNECTION_CLOSING = 0x9, SMSG_PONG = 0x0, SMSG_BOOM = 0x1, // Not implemented @@ -49,7 +49,7 @@ namespace Battlenet void Read() override { } std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; }; class EnableEncryption final : public ClientPacket @@ -62,7 +62,7 @@ namespace Battlenet void Read() override { } std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; }; class LogoutRequest final : public ClientPacket @@ -75,7 +75,66 @@ namespace Battlenet void Read() override { } std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; + }; + + class DisconnectRequest final : public ClientPacket + { + public: + DisconnectRequest(PacketHeader const& header, BitStream& stream) : ClientPacket(header, stream) + { + ASSERT(header == PacketHeader(CMSG_DISCONNECT_REQUEST, CONNECTION) && "Invalid packet header for DisconnectRequest"); + } + + void Read() override; + std::string ToString() const override; + + uint16 Timeout; + uint32 Tick; + }; + + class ConnectionClosing final : public ClientPacket + { + public: + enum ClosingReason + { + PACKET_TOO_LARGE, + PACKET_CORRUPT, + PACKET_INVALID, + PACKET_INCORRECT, + HEADER_CORRUPT, + HEADER_IGNORED, + HEADER_INCORRECT, + PACKET_REJECTED, + CHANNEL_UNHANDLED, + COMMAND_UNHANDLED, + COMMAND_BAD_PERMISSIONS, + DIRECT_CALL, + TIMEOUT, + }; + + struct PacketInfo + { + uint16 LayerId; + std::string Channel; + uint32 Timestamp; + std::string CommandName; + uint16 Size; + }; + + ConnectionClosing(PacketHeader const& header, BitStream& stream) : ClientPacket(header, stream) + { + ASSERT(header == PacketHeader(CMSG_CONNECTION_CLOSING, CONNECTION) && "Invalid packet header for ConnectionClosing"); + } + + void Read() override; + std::string ToString() const override; + void CallHandler(Session* session) override; + + PacketHeader Header; + ClosingReason Reason; + std::vector Packets; + time_t Now; }; class Pong final : public ServerPacket diff --git a/src/server/bnetserver/Packets/FriendsPackets.cpp b/src/server/bnetserver/Packets/FriendsPackets.cpp index cd920e91c9c..7a4bd7dd64f 100644 --- a/src/server/bnetserver/Packets/FriendsPackets.cpp +++ b/src/server/bnetserver/Packets/FriendsPackets.cpp @@ -28,7 +28,7 @@ std::string Battlenet::Friends::SocialNetworkCheckConnected::ToString() const return "Battlenet::Friends::SocialNetworkCheckConnected SocialNetworkId " + std::to_string(SocialNetworkId); } -void Battlenet::Friends::SocialNetworkCheckConnected::CallHandler(Session* session) const +void Battlenet::Friends::SocialNetworkCheckConnected::CallHandler(Session* session) { session->HandleSocialNetworkCheckConnected(*this); } @@ -47,11 +47,6 @@ std::string Battlenet::Friends::SocialNetworkConnect::ToString() const return "Battlenet::Friends::SocialNetworkConnect"; } -void Battlenet::Friends::SocialNetworkConnect::CallHandler(Session* session) const -{ - session->LogUnhandledPacket(*this); -} - std::string Battlenet::Friends::SocialNetworkConnectResult::ToString() const { return "Battlenet::Friends::SocialNetworkConnectResult"; @@ -84,11 +79,6 @@ std::string Battlenet::Friends::GetFriendsOfFriend::ToString() const return "Battlenet::Friends::GetFriendsOfFriend"; } -void Battlenet::Friends::GetFriendsOfFriend::CallHandler(Session* session) const -{ - session->LogUnhandledPacket(*this); -} - void Battlenet::Friends::RealIdFriendInvite::Read() { _stream.Read(32); @@ -139,7 +129,7 @@ std::string Battlenet::Friends::RealIdFriendInvite::ToString() const return "Battlenet::Friends::RealIdFriendInvite Mail: " + Email + " Message: " + Message; } -void Battlenet::Friends::RealIdFriendInvite::CallHandler(Session* session) const +void Battlenet::Friends::RealIdFriendInvite::CallHandler(Session* session) { FriendInviteResult* result = new FriendInviteResult(); session->AsyncWrite(result); diff --git a/src/server/bnetserver/Packets/FriendsPackets.h b/src/server/bnetserver/Packets/FriendsPackets.h index ec20f202098..a35b02e616d 100644 --- a/src/server/bnetserver/Packets/FriendsPackets.h +++ b/src/server/bnetserver/Packets/FriendsPackets.h @@ -59,12 +59,11 @@ namespace Battlenet public: SocialNetworkConnect(PacketHeader const& header, BitStream& stream) : ClientPacket(header, stream) { - ASSERT(header == PacketHeader(CMSG_SOCIAL_NETWORK_CONNECT, FRIENDS) && "Invalid packet header for SocialnetworkConnect"); + ASSERT(header == PacketHeader(CMSG_SOCIAL_NETWORK_CONNECT, FRIENDS) && "Invalid packet header for SocialNetworkConnect"); } void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; }; class SocialNetworkConnectResult final : public ServerPacket @@ -88,7 +87,7 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; uint32 SocialNetworkId; }; @@ -117,7 +116,6 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; }; class FriendsOfFriend final : public ServerPacket @@ -141,7 +139,7 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; std::string Email; std::string Message; diff --git a/src/server/bnetserver/Packets/PacketFactory.h b/src/server/bnetserver/Packets/PacketFactory.h index 418e56abea4..9d710101332 100644 --- a/src/server/bnetserver/Packets/PacketFactory.h +++ b/src/server/bnetserver/Packets/PacketFactory.h @@ -55,6 +55,8 @@ namespace Battlenet _creators[PacketHeader(Connection::CMSG_PING, CONNECTION)] = &New; _creators[PacketHeader(Connection::CMSG_ENABLE_ENCRYPTION, CONNECTION)] = &New; _creators[PacketHeader(Connection::CMSG_LOGOUT_REQUEST, CONNECTION)] = &New; + _creators[PacketHeader(Connection::CMSG_DISCONNECT_REQUEST, CONNECTION)] = &New; + _creators[PacketHeader(Connection::CMSG_CONNECTION_CLOSING, CONNECTION)] = &New; _creators[PacketHeader(WoWRealm::CMSG_LIST_SUBSCRIBE_REQUEST, WOWREALM)] = &New; _creators[PacketHeader(WoWRealm::CMSG_LIST_UNSUBSCRIBE, WOWREALM)] = &New; diff --git a/src/server/bnetserver/Packets/PacketsBase.cpp b/src/server/bnetserver/Packets/PacketsBase.cpp index 6471337060c..7eee6a6a9ba 100644 --- a/src/server/bnetserver/Packets/PacketsBase.cpp +++ b/src/server/bnetserver/Packets/PacketsBase.cpp @@ -36,3 +36,9 @@ Battlenet::ServerPacket::~ServerPacket() { delete &_stream; } + +void Battlenet::ClientPacket::CallHandler(Session* session) +{ + session->LogUnhandledPacket(*this); + _handled = false; +} diff --git a/src/server/bnetserver/Packets/PacketsBase.h b/src/server/bnetserver/Packets/PacketsBase.h index 839a10548e9..a225c3ebfa1 100644 --- a/src/server/bnetserver/Packets/PacketsBase.h +++ b/src/server/bnetserver/Packets/PacketsBase.h @@ -97,10 +97,14 @@ namespace Battlenet class ClientPacket : public Packet { public: - ClientPacket(PacketHeader const& header, BitStream& stream) : Packet(header, stream) { } + ClientPacket(PacketHeader const& header, BitStream& stream) : Packet(header, stream), _handled(true) { } void Write() override final { ASSERT(!"Write not implemented for this packet."); } - virtual void CallHandler(Session* session) const = 0; + virtual void CallHandler(Session* session); + bool WasHandled() const { return _handled; } + + private: + bool _handled; }; class ServerPacket : public Packet diff --git a/src/server/bnetserver/Packets/PresencePackets.cpp b/src/server/bnetserver/Packets/PresencePackets.cpp index da49f41af76..b72bf8daca8 100644 --- a/src/server/bnetserver/Packets/PresencePackets.cpp +++ b/src/server/bnetserver/Packets/PresencePackets.cpp @@ -28,11 +28,6 @@ std::string Battlenet::Presence::UpdateRequest::ToString() const return "Battlenet::Presence::UpdateRequest"; } -void Battlenet::Presence::UpdateRequest::CallHandler(Session* session) const -{ - session->LogUnhandledPacket(*this); -} - void Battlenet::Presence::StatisticSubscribe::Read() { } @@ -41,8 +36,3 @@ std::string Battlenet::Presence::StatisticSubscribe::ToString() const { return "Battlenet::Presence::StatisticSubscribe"; } - -void Battlenet::Presence::StatisticSubscribe::CallHandler(Session* session) const -{ - session->LogUnhandledPacket(*this); -} diff --git a/src/server/bnetserver/Packets/PresencePackets.h b/src/server/bnetserver/Packets/PresencePackets.h index c934228a3cb..45b8f3e0e82 100644 --- a/src/server/bnetserver/Packets/PresencePackets.h +++ b/src/server/bnetserver/Packets/PresencePackets.h @@ -44,7 +44,6 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; }; class StatisticSubscribe final : public ClientPacket @@ -57,7 +56,6 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; }; } } diff --git a/src/server/bnetserver/Packets/WoWRealmPackets.cpp b/src/server/bnetserver/Packets/WoWRealmPackets.cpp index 95176963c18..4d11dd0a11f 100644 --- a/src/server/bnetserver/Packets/WoWRealmPackets.cpp +++ b/src/server/bnetserver/Packets/WoWRealmPackets.cpp @@ -25,7 +25,7 @@ std::string Battlenet::WoWRealm::ListSubscribeRequest::ToString() const return "Battlenet::WoWRealm::ListSubscribeRequest"; } -void Battlenet::WoWRealm::ListSubscribeRequest::CallHandler(Session* session) const +void Battlenet::WoWRealm::ListSubscribeRequest::CallHandler(Session* session) { session->HandleListSubscribeRequest(*this); } @@ -35,7 +35,7 @@ std::string Battlenet::WoWRealm::ListUnsubscribe::ToString() const return "Battlenet::WoWRealm::ListUnsubscribe"; } -void Battlenet::WoWRealm::ListUnsubscribe::CallHandler(Session* session) const +void Battlenet::WoWRealm::ListUnsubscribe::CallHandler(Session* session) { session->HandleListUnsubscribe(*this); } @@ -152,7 +152,7 @@ std::string Battlenet::WoWRealm::JoinRequestV2::ToString() const return stream.str().c_str(); } -void Battlenet::WoWRealm::JoinRequestV2::CallHandler(Session* session) const +void Battlenet::WoWRealm::JoinRequestV2::CallHandler(Session* session) { session->HandleJoinRequestV2(*this); } diff --git a/src/server/bnetserver/Packets/WoWRealmPackets.h b/src/server/bnetserver/Packets/WoWRealmPackets.h index a27601f7478..fe211d6fea4 100644 --- a/src/server/bnetserver/Packets/WoWRealmPackets.h +++ b/src/server/bnetserver/Packets/WoWRealmPackets.h @@ -50,7 +50,7 @@ namespace Battlenet void Read() override { } std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; }; class ListUnsubscribe final : public ClientPacket @@ -63,7 +63,7 @@ namespace Battlenet void Read() override { } std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; }; class JoinRequestV2 final : public ClientPacket @@ -76,7 +76,7 @@ namespace Battlenet void Read() override; std::string ToString() const override; - void CallHandler(Session* session) const override; + void CallHandler(Session* session) override; uint32 ClientSeed; RealmId Realm; diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index 301a6b9bae1..42d5b6a5a06 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -396,6 +396,10 @@ void Battlenet::Session::HandleLogoutRequest(Connection::LogoutRequest const& /* LoginDatabase.Execute(stmt); } +void Battlenet::Session::HandleConnectionClosing(Connection::ConnectionClosing const& /*connectionClosing*/) +{ +} + void Battlenet::Session::HandleListSubscribeRequest(WoWRealm::ListSubscribeRequest const& /*listSubscribeRequest*/) { WoWRealm::ListSubscribeResponse* listSubscribeResponse = new WoWRealm::ListSubscribeResponse(); @@ -497,8 +501,10 @@ void Battlenet::Session::ReadHandler() if (ClientPacket* packet = sPacketFactory.Create(header, stream)) { - TC_LOG_TRACE("server.battlenet", "Battlenet::Session::ReadDataHandler %s", packet->ToString().c_str()); packet->CallHandler(this); + if (packet->WasHandled()) + TC_LOG_TRACE("server.battlenet", "Battlenet::Session::ReadDataHandler %s", packet->ToString().c_str()); + delete packet; } else diff --git a/src/server/bnetserver/Server/Session.h b/src/server/bnetserver/Server/Session.h index 7def3c70460..3f5e53389b8 100644 --- a/src/server/bnetserver/Server/Session.h +++ b/src/server/bnetserver/Server/Session.h @@ -71,6 +71,7 @@ namespace Battlenet void HandlePing(Connection::Ping const& ping); void HandleEnableEncryption(Connection::EnableEncryption const& enableEncryption); void HandleLogoutRequest(Connection::LogoutRequest const& logoutRequest); + void HandleConnectionClosing(Connection::ConnectionClosing const& connectionClosing); // WoWRealm void HandleListSubscribeRequest(WoWRealm::ListSubscribeRequest const& listSubscribeRequest); -- cgit v1.2.3 From 241fdc49a7c49bdf627aeb0d14b0e6540090a81a Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sun, 12 Oct 2014 02:02:40 +0200 Subject: Core: Fix non pch build --- src/server/bnetserver/Packets/AuthenticationPackets.cpp | 1 + src/server/bnetserver/Packets/PacketsBase.cpp | 1 + src/server/bnetserver/Realms/RealmList.h | 1 + 3 files changed, 3 insertions(+) (limited to 'src/server/bnetserver/Packets/AuthenticationPackets.cpp') diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.cpp b/src/server/bnetserver/Packets/AuthenticationPackets.cpp index c1362cd5f03..f5704f67153 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.cpp +++ b/src/server/bnetserver/Packets/AuthenticationPackets.cpp @@ -16,6 +16,7 @@ */ #include "AuthenticationPackets.h" +#include "Session.h" #include "Util.h" void Battlenet::Authentication::LogonRequest::Read() diff --git a/src/server/bnetserver/Packets/PacketsBase.cpp b/src/server/bnetserver/Packets/PacketsBase.cpp index 7eee6a6a9ba..6845fbfb0f0 100644 --- a/src/server/bnetserver/Packets/PacketsBase.cpp +++ b/src/server/bnetserver/Packets/PacketsBase.cpp @@ -16,6 +16,7 @@ */ #include "Packets.h" +#include "Session.h" #include std::string Battlenet::PacketHeader::ToString() const diff --git a/src/server/bnetserver/Realms/RealmList.h b/src/server/bnetserver/Realms/RealmList.h index c7108101056..a4d3d77ff56 100644 --- a/src/server/bnetserver/Realms/RealmList.h +++ b/src/server/bnetserver/Realms/RealmList.h @@ -22,6 +22,7 @@ #include #include #include +#include #include "Common.h" using namespace boost::asio; -- cgit v1.2.3