diff options
Diffstat (limited to 'src/server/bnetserver/Packets/ConnectionPackets.cpp')
| -rw-r--r-- | src/server/bnetserver/Packets/ConnectionPackets.cpp | 60 |
1 files changed, 57 insertions, 3 deletions
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<uint16>(16); + Tick = _stream.Read<uint32>(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<ClosingReason>(4); + if (_stream.Read<bool>(1)) // HasHeader + { + Header.Opcode = _stream.Read<uint32>(6); + if (_stream.Read<bool>(1)) + Header.Channel = _stream.Read<int32>(4); + } + + Now = _stream.Read<time_t>(32); + _stream.Read<uint32>(25); + auto bytes = _stream.ReadBytes(_stream.Read<uint8>(8)); // BadData + Packets.resize(_stream.Read<uint8>(6)); + for (size_t i = 0; i < Packets.size(); ++i) + { + PacketInfo& info = Packets[i]; + info.CommandName = _stream.ReadFourCC(); + info.LayerId = _stream.Read<uint32>(16); + info.Channel = _stream.ReadFourCC(); + info.Timestamp = _stream.Read<uint32>(32); + info.Size = _stream.Read<uint32>(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"; |
