Skip to content

Commit

Permalink
Core/PacketsIO: Updated and enabled SMSG_CHANNEL_NOTIFY, CMSG_CHAT_RE…
Browse files Browse the repository at this point in the history
…GISTER_ADDON_PREFIXES, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES

- Thanks to @MitchesD for all his help, you're awesome!
- Packets have been sniffed & parsed and they all check out.
  • Loading branch information
DJScias committed May 27, 2015
1 parent fe52844 commit b5aebf4
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 18 deletions.
12 changes: 12 additions & 0 deletions src/server/game/Server/Packets/ChatPackets.cpp
Expand Up @@ -233,3 +233,15 @@ WorldPacket const* WorldPackets::Chat::ChatServerMessage::Write()

return &_worldPacket;
}

void WorldPackets::Chat::ChatRegisterAddonPrefixes::Read()
{
int32 count;
_worldPacket >> count;

for (int32 i = 0; i < count; ++i)
{
uint32 lenghts = _worldPacket.ReadBits(5);
Prefixes.push_back(_worldPacket.ReadString(lenghts));
}
}
18 changes: 18 additions & 0 deletions src/server/game/Server/Packets/ChatPackets.h
Expand Up @@ -250,6 +250,24 @@ namespace WorldPackets
int32 MessageID = 0;
std::string StringParam;
};

class ChatRegisterAddonPrefixes final : public ClientPacket
{
public:
ChatRegisterAddonPrefixes(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_REGISTER_ADDON_PREFIXES, std::move(packet)) { }

void Read() override;

std::vector<std::string> Prefixes;
};

class ChatUnregisterAllAddonPrefixes final : public ClientPacket
{
public:
ChatUnregisterAllAddonPrefixes(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, std::move(packet)) { }

void Read() override { }
};
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/server/game/Server/Protocol/Opcodes.cpp
Expand Up @@ -309,10 +309,10 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_SAY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessageWhisper, &WorldSession::HandleChatMessageWhisperOpcode);
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_YELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonRegisteredPrefixesOpcode);
DEFINE_HANDLER(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatRegisterAddonPrefixes, &WorldSession::HandleAddonRegisteredPrefixesOpcode);
DEFINE_HANDLER(CMSG_CHAT_REPORT_FILTERED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_REPORT_IGNORED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChatIgnoredOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAddonPrefixesOpcode);
DEFINE_HANDLER(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatUnregisterAllAddonPrefixes, &WorldSession::HandleUnregisterAllAddonPrefixesOpcode);
DEFINE_HANDLER(CMSG_CHECK_RAF_EMAIL_ENABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHOICE_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
Expand Down Expand Up @@ -991,7 +991,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_JOINED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_LEFT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_LOGIN_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
Expand Down
18 changes: 5 additions & 13 deletions src/server/game/Server/WorldSession.cpp
Expand Up @@ -913,31 +913,23 @@ bool WorldSession::IsAddonRegistered(const std::string& prefix) const
return itr != _registeredAddonPrefixes.end();
}

void WorldSession::HandleUnregisterAddonPrefixesOpcode(WorldPacket& /*recvPacket*/) // empty packet
void WorldSession::HandleUnregisterAllAddonPrefixesOpcode(WorldPackets::Chat::ChatUnregisterAllAddonPrefixes& /*packet*/) // empty packet
{
_registeredAddonPrefixes.clear();
}

void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket)
void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPackets::Chat::ChatRegisterAddonPrefixes& packet)
{
// This is always sent after CMSG_UNREGISTER_ALL_ADDON_PREFIXES
// This is always sent after CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES

uint32 count = recvPacket.ReadBits(25);

if (count > REGISTERED_ADDON_PREFIX_SOFTCAP)
if (packet.Prefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP)
{
// if we have hit the softcap (64) nothing should be filtered
_filterAddonMessages = false;
recvPacket.rfinish();
return;
}

std::vector<uint8> lengths(count);
for (uint32 i = 0; i < count; ++i)
lengths[i] = recvPacket.ReadBits(5);

for (uint32 i = 0; i < count; ++i)
_registeredAddonPrefixes.push_back(recvPacket.ReadString(lengths[i]));
_registeredAddonPrefixes.insert(_registeredAddonPrefixes.end(), packet.Prefixes.begin(), packet.Prefixes.end());

if (_registeredAddonPrefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP) // shouldn't happen
{
Expand Down
6 changes: 4 additions & 2 deletions src/server/game/Server/WorldSession.h
Expand Up @@ -186,6 +186,8 @@ namespace WorldPackets
class ChatMessageEmote;
class CTextEmote;
class EmoteClient;
class ChatRegisterAddonPrefixes;
class ChatUnregisterAllAddonPrefixes;
}

namespace Combat
Expand Down Expand Up @@ -1312,8 +1314,8 @@ class WorldSession
void HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet);
void HandleChatIgnoredOpcode(WorldPacket& recvPacket);

void HandleUnregisterAddonPrefixesOpcode(WorldPacket& recvPacket);
void HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket);
void HandleUnregisterAllAddonPrefixesOpcode(WorldPackets::Chat::ChatUnregisterAllAddonPrefixes& packet);
void HandleAddonRegisteredPrefixesOpcode(WorldPackets::Chat::ChatRegisterAddonPrefixes& packet);

void HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& packet);
void HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& packet);
Expand Down

0 comments on commit b5aebf4

Please sign in to comment.