diff options
Diffstat (limited to 'src/server/game/Handlers/ChannelHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ChannelHandler.cpp | 100 |
1 files changed, 71 insertions, 29 deletions
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index 883c9444895..3c1ee3733a2 100644 --- a/src/server/game/Handlers/ChannelHandler.cpp +++ b/src/server/game/Handlers/ChannelHandler.cpp @@ -19,14 +19,21 @@ #include "ObjectMgr.h" // for normalizePlayerName #include "ChannelMgr.h" #include "Player.h" +#include "WorldSession.h" void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) { uint32 channelId; - uint8 unknown1, unknown2; + uint32 channelLength, passLength; std::string channelName, password; - recvPacket >> channelId >> unknown1 >> unknown2 >> channelName >> password; + recvPacket >> channelId; + uint8 unknown1 = recvPacket.ReadBit(); // unknowns + uint8 unknown2 = recvPacket.ReadBit(); + channelLength = recvPacket.ReadBits(8); + passLength = recvPacket.ReadBits(8); + channelName = recvPacket.ReadString(channelLength); + password = recvPacket.ReadString(passLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_JOIN_CHANNEL %s Channel: %u, unk1: %u, unk2: %u, channel: %s, password: %s", GetPlayerInfo().c_str(), channelId, unknown1, unknown2, channelName.c_str(), password.c_str()); @@ -57,7 +64,9 @@ void WorldSession::HandleLeaveChannel(WorldPacket& recvPacket) { uint32 unk; std::string channelName; - recvPacket >> unk >> channelName; + recvPacket >> unk; // channel id? + uint32 length = recvPacket.ReadBits(8); + channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_LEAVE_CHANNEL %s Channel: %s, unk1: %u", GetPlayerInfo().c_str(), channelName.c_str(), unk); @@ -75,8 +84,8 @@ void WorldSession::HandleLeaveChannel(WorldPacket& recvPacket) void WorldSession::HandleChannelList(WorldPacket& recvPacket) { - std::string channelName; - recvPacket >> channelName; + uint32 length = recvPacket.ReadBits(8); + std::string channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "%s %s Channel: %s", recvPacket.GetOpcode() == CMSG_CHANNEL_DISPLAY_LIST ? "CMSG_CHANNEL_DISPLAY_LIST" : "CMSG_CHANNEL_LIST", @@ -89,8 +98,11 @@ void WorldSession::HandleChannelList(WorldPacket& recvPacket) void WorldSession::HandleChannelPassword(WorldPacket& recvPacket) { - std::string channelName, password; - recvPacket >> channelName >> password; + uint32 nameLength = recvPacket.ReadBits(8); + uint32 passLength = recvPacket.ReadBits(7); + + std::string channelName = recvPacket.ReadString(nameLength); + std::string password = recvPacket.ReadString(passLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_PASSWORD %s Channel: %s, Password: %s", GetPlayerInfo().c_str(), channelName.c_str(), password.c_str()); @@ -102,8 +114,11 @@ void WorldSession::HandleChannelPassword(WorldPacket& recvPacket) void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 channelLength = recvPacket.ReadBits(8); + uint32 nameLength = recvPacket.ReadBits(7); + + std::string targetName = recvPacket.ReadString(nameLength); + std::string channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_SET_OWNER %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -118,8 +133,8 @@ void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket) void WorldSession::HandleChannelOwner(WorldPacket& recvPacket) { - std::string channelName; - recvPacket >> channelName; + uint32 length = recvPacket.ReadBits(8); + std::string channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_OWNER %s Channel: %s", GetPlayerInfo().c_str(), channelName.c_str()); @@ -131,8 +146,11 @@ void WorldSession::HandleChannelOwner(WorldPacket& recvPacket) void WorldSession::HandleChannelModerator(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 channelLength = recvPacket.ReadBits(8); + uint32 nameLength = recvPacket.ReadBits(7); + + std::string targetName = recvPacket.ReadString(nameLength); + std::string channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_MODERATOR %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -147,8 +165,11 @@ void WorldSession::HandleChannelModerator(WorldPacket& recvPacket) void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 nameLength = recvPacket.ReadBits(7); + uint32 channelLength = recvPacket.ReadBits(8); + + std::string channelName = recvPacket.ReadString(channelLength); + std::string targetName = recvPacket.ReadString(nameLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_UNMODERATOR %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -163,8 +184,11 @@ void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket) void WorldSession::HandleChannelMute(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 channelLength = recvPacket.ReadBits(8); + uint32 nameLength = recvPacket.ReadBits(7); + + std::string channelName = recvPacket.ReadString(channelLength); + std::string targetName = recvPacket.ReadString(nameLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_MUTE %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -179,8 +203,11 @@ void WorldSession::HandleChannelMute(WorldPacket& recvPacket) void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 nameLength = recvPacket.ReadBits(8); + uint32 channelLength = recvPacket.ReadBits(7); + + std::string targetName = recvPacket.ReadString(nameLength); + std::string channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_UNMUTE %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -195,8 +222,11 @@ void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket) void WorldSession::HandleChannelInvite(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 nameLength = recvPacket.ReadBits(7); + uint32 channelLength = recvPacket.ReadBits(8); + + std::string targetName = recvPacket.ReadString(nameLength); + std::string channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_INVITE %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -211,8 +241,11 @@ void WorldSession::HandleChannelInvite(WorldPacket& recvPacket) void WorldSession::HandleChannelKick(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 channelLength = recvPacket.ReadBits(8); + uint32 nameLength = recvPacket.ReadBits(7); + + std::string channelName = recvPacket.ReadString(channelLength); + std::string targetName = recvPacket.ReadString(nameLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_KICK %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -227,8 +260,14 @@ void WorldSession::HandleChannelKick(WorldPacket& recvPacket) void WorldSession::HandleChannelBan(WorldPacket& recvPacket) { + uint32 channelLength, nameLength; std::string channelName, targetName; - recvPacket >> channelName >> targetName; + + channelLength = recvPacket.ReadBits(8); + nameLength = recvPacket.ReadBits(7); + + targetName = recvPacket.ReadString(nameLength); + channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_BAN %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -243,8 +282,11 @@ void WorldSession::HandleChannelBan(WorldPacket& recvPacket) void WorldSession::HandleChannelUnban(WorldPacket& recvPacket) { - std::string channelName, targetName; - recvPacket >> channelName >> targetName; + uint32 channelLength = recvPacket.ReadBits(7); + uint32 nameLength = recvPacket.ReadBits(8); + + std::string targetName = recvPacket.ReadString(nameLength); + std::string channelName = recvPacket.ReadString(channelLength); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_UNBAN %s Channel: %s, Target: %s", GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str()); @@ -259,8 +301,8 @@ void WorldSession::HandleChannelUnban(WorldPacket& recvPacket) void WorldSession::HandleChannelAnnouncements(WorldPacket& recvPacket) { - std::string channelName; - recvPacket >> channelName; + uint32 length = recvPacket.ReadBits(8); + std::string channelName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_CHATSYS, "CMSG_CHANNEL_ANNOUNCEMENTS %s Channel: %s", GetPlayerInfo().c_str(), channelName.c_str()); @@ -300,7 +342,7 @@ void WorldSession::HandleGetChannelMemberCount(WorldPacket &recvPacket) } } -void WorldSession::HandleSetChannelWatch(WorldPacket &recvPacket) +void WorldSession::HandleSetChannelWatch(WorldPacket& recvPacket) { std::string channelName; recvPacket >> channelName; |