/* * Copyright (C) 2008-2016 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 "WoWRealmPackets.h" #include "Session.h" #include #include void Battlenet::WoWRealm::ListSubscribeRequest::CallHandler(Session* session) { session->HandleListSubscribeRequest(*this); } void Battlenet::WoWRealm::ListUnsubscribe::CallHandler(Session* session) { session->HandleListUnsubscribe(*this); } void Battlenet::WoWRealm::JoinRequestV2::Read() { ClientSalt = _stream.Read(32); _stream.ReadSkip(20); Id.Region = _stream.Read(8); _stream.ReadSkip(12); Id.Site = _stream.Read(8); Id.Realm = _stream.Read(32); } std::string Battlenet::WoWRealm::JoinRequestV2::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::JoinRequestV2" << std::endl; APPEND_FIELD(stream, Id); APPEND_FIELD(stream, ClientSalt); return stream.str(); } void Battlenet::WoWRealm::JoinRequestV2::CallHandler(Session* session) { session->HandleJoinRequestV2(*this); } void Battlenet::WoWRealm::ListSubscribeResponse::Write() { _stream.Write(Type, 1); if (Type == SUCCESS) { _stream.Write(ToonCounts.size(), 7); for (ToonCountEntry const& entry : ToonCounts) { _stream.Write(entry.Realm.Region, 8); _stream.WriteSkip(12); _stream.Write(entry.Realm.Site, 8); _stream.Write(entry.Realm.Realm, 32); _stream.Write(entry.Count, 16); } } else _stream.Write(Failure, 8); } std::string Battlenet::WoWRealm::ListSubscribeResponse::ToonCountEntry::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::ListSubscribeResponse::ToonCountEntry" << std::endl; APPEND_FIELD(stream, Realm); APPEND_FIELD(stream, Count); return stream.str(); } std::string Battlenet::WoWRealm::ListSubscribeResponse::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::ListSubscribeResponse" << std::endl; if (Type == SUCCESS) APPEND_FIELD(stream, ToonCounts); else APPEND_FIELD(stream, Failure); return stream.str(); } void Battlenet::WoWRealm::ListUpdate::Write() { _stream.Write(State.Type, 1); if (State.Type == StateType::UPDATE) { _stream.Write(State.Update.Category, 32); _stream.WriteFloat(State.Update.Population); _stream.Write(State.Update.StateFlags, 8); _stream.WriteSkip(19); _stream.Write(State.Update.Type + -std::numeric_limits::min(), 32); _stream.WriteString(State.Update.Name, 10); _stream.Write(State.Update.PrivilegedData.is_initialized(), 1); if (State.Update.PrivilegedData.is_initialized()) { _stream.WriteString(State.Update.PrivilegedData->Version, 5); _stream.Write(State.Update.PrivilegedData->ConfigId, 32); boost::asio::ip::address_v4::bytes_type ip = State.Update.PrivilegedData->Address.address().to_v4().to_bytes(); uint16 port = State.Update.PrivilegedData->Address.port(); EndianConvertReverse(ip); EndianConvertReverse(port); _stream.WriteBytes(ip.data(), 4); _stream.WriteBytes(&port, 2); } _stream.Write(State.Update.InfoFlags, 8); } _stream.Write(Id.Region, 8); _stream.WriteSkip(12); _stream.Write(Id.Site, 8); _stream.Write(Id.Realm, 32); } std::string Battlenet::WoWRealm::ListUpdate::PrivilegedDataType::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::RealmInfo::PrivilegedData" << std::endl; APPEND_FIELD(stream, Version); APPEND_FIELD(stream, ConfigId); APPEND_FIELD(stream, Address); return stream.str(); } std::string Battlenet::WoWRealm::ListUpdate::StateType::UpdateType::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::ListUpdate::State::Update" << std::endl; APPEND_FIELD(stream, InfoFlags); APPEND_FIELD(stream, Name); APPEND_FIELD(stream, Type); APPEND_FIELD(stream, Category); APPEND_FIELD(stream, StateFlags); APPEND_FIELD(stream, Population); APPEND_FIELD(stream, PrivilegedData); return stream.str(); } std::string Battlenet::WoWRealm::ListUpdate::StateType::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::ListUpdate::State" << std::endl; if (Type == UPDATE) APPEND_FIELD(stream, Update); else APPEND_FIELD(stream, Delete); return stream.str(); } std::string Battlenet::WoWRealm::ListUpdate::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::ListUpdate" << std::endl; APPEND_FIELD(stream, Id); APPEND_FIELD(stream, State); return stream.str(); } void Battlenet::WoWRealm::ToonReady::Write() { _stream.Write(Name.Region, 8); _stream.WriteFourCC(Name.ProgramId); _stream.Write(Name.Realm, 32); _stream.WriteString(Name.Name, 7, -2); _stream.WriteSkip(21); _stream.Write(ProfileAddress.Id, 64); _stream.Write(ProfileAddress.Label, 32); _stream.Write(Handle.Id, 64); _stream.Write(Handle.Realm, 32); _stream.Write(Handle.Region, 8); _stream.WriteFourCC(Handle.ProgramId); } std::string Battlenet::WoWRealm::ToonReady::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::ToonReady" << std::endl; APPEND_FIELD(stream, Name); APPEND_FIELD(stream, Handle); APPEND_FIELD(stream, ProfileAddress); return stream.str(); } void Battlenet::WoWRealm::JoinResponseV2::Write() { _stream.Write(Type, 1); if (Type == SUCCESS) { _stream.Write(Success.ServerSalt, 32); _stream.Write(Success.IPv4.size(), 5); for (tcp::endpoint const& addr : Success.IPv4) { boost::asio::ip::address_v4::bytes_type ip = addr.address().to_v4().to_bytes(); uint16 port = addr.port(); EndianConvertReverse(port); _stream.WriteBytes(ip.data(), 4); _stream.WriteBytes(&port, 2); } _stream.Write(Success.IPv6.size(), 5); for (tcp::endpoint const& addr : Success.IPv6) { boost::asio::ip::address_v6::bytes_type ip = addr.address().to_v6().to_bytes(); uint16 port = addr.port(); EndianConvertReverse(port); _stream.WriteBytes(ip.data(), 16); _stream.WriteBytes(&port, 2); } } else _stream.Write(Failure, 8); } std::string Battlenet::WoWRealm::JoinResponseV2::SuccessType::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::JoinResponseV2::Success" << std::endl; APPEND_FIELD(stream, ServerSalt); APPEND_FIELD(stream, IPv4); APPEND_FIELD(stream, IPv6); return stream.str(); } std::string Battlenet::WoWRealm::JoinResponseV2::ToString() const { std::ostringstream stream; stream << "Battlenet::WoWRealm::JoinResponseV2" << std::endl; if (Type == SUCCESS) APPEND_FIELD(stream, Success); else APPEND_FIELD(stream, Failure); return stream.str(); }