diff options
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 3 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 5 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.cpp | 9 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.h | 2 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSocket.cpp | 19 |
5 files changed, 18 insertions, 20 deletions
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 3b202a159ec..c7b889c864f 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1375,8 +1375,7 @@ void InitOpcodes() //DEFINE_OPCODE_HANDLER(SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT1, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_COMMENTATOR_SKIRMISH_QUEUE_RESULT2, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_COMPRESSED_UNKNOWN_1310, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_VERIFY_CONNECTIVITY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(CMSG_VERIFY_CONNECTIVITY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess ); + DEFINE_OPCODE_HANDLER(MSG_VERIFY_CONNECTIVITY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess ); //DEFINE_OPCODE_HANDLER(CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess ); DEFINE_OPCODE_HANDLER(CMSG_RETURN_TO_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReturnToGraveyard ); DEFINE_OPCODE_HANDLER(CMSG_RANDOMIZE_CHAR_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 8f9761c3b7c..070aed33ebd 100755 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -456,7 +456,6 @@ enum Opcodes CMSG_UPDATE_ACCOUNT_DATA = 0x4AFE, CMSG_UPDATE_PROJECTILE_POSITION = 0xEDB, CMSG_USE_ITEM = 0xD8EA, - CMSG_VERIFY_CONNECTIVITY_RESPONSE = 0x4C52, CMSG_VIOLENCE_LEVEL = 0x00, CMSG_VOICE_SESSION_ENABLE = 0x00, CMSG_WARDEN_DATA = 0x5847, @@ -533,7 +532,8 @@ enum Opcodes MSG_SET_DUNGEON_DIFFICULTY = 0x0C4F, MSG_SET_RAID_DIFFICULTY = 0x1A5A, MSG_TABARDVENDOR_ACTIVATE = 0x98EB, - MSG_TALENT_WIPE_CONFIRM = 0x4C52, //duplicate of CMSG_VERIFY_CONNECTIVITY_RESPONSE + MSG_TALENT_WIPE_CONFIRM = 0x4C52, + MSG_VERIFY_CONNECTIVITY = 0x4F57, SMSG_ACCOUNT_DATA_TIMES = 0x5EE2, SMSG_ACHIEVEMENT_DELETED = 0x9ED2, SMSG_ACHIEVEMENT_EARNED = 0x484E, @@ -1063,7 +1063,6 @@ enum Opcodes SMSG_USERLIST_ADD = 0x4CEE, SMSG_USERLIST_REMOVE = 0x9A6B, SMSG_USERLIST_UPDATE = 0x4A4B, - SMSG_VERIFY_CONNECTIVITY = 0x4F57, SMSG_VOICE_CHAT_STATUS = 0x9ADF, SMSG_VOICE_PARENTAL_CONTROLS = 0x5ADE, SMSG_VOICE_SESSION_LEAVE = 0xCE72, diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index bc9cf569b3d..84ccc3e574b 100755 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -43,15 +43,6 @@ #include "ScriptMgr.h" #include "Transport.h" -Opcodes PacketFilter::DropHighBytes(Opcodes opcode) -{ - if (opcode & 0xFFFF0000) // check if any High byte is present - return Opcodes(opcode >> 16); - - else - return Opcodes(opcode); -} - bool MapSessionFilter::Process(WorldPacket* packet) { Opcodes opcode = DropHighBytes(packet->GetOpcode()); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index dd53d69b451..ff07164e7b2 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -156,7 +156,7 @@ public: virtual bool Process(WorldPacket* /*packet*/) { return true; } virtual bool ProcessLogout() const { return true; } - static Opcodes DropHighBytes(Opcodes opcode); + static Opcodes DropHighBytes(Opcodes opcode) { return Opcodes(opcode & 0xFFFF); } protected: WorldSession* const m_pSession; diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 2b13e23a28b..881464ce40a 100755 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -259,8 +259,10 @@ int WorldSocket::open (void *a) } m_Address = remote_addr.get_host_addr(); - - WorldPacket packet(SMSG_VERIFY_CONNECTIVITY); + + // not an opcode. this packet sends raw string WORLD OF WARCRAFT CONNECTION - SERVER TO CLIENT" + // because of our implementation, bytes "WO" become the opcode + WorldPacket packet(MSG_VERIFY_CONNECTIVITY); packet << "RLD OF WARCRAFT CONNECTION - SERVER TO CLIENT"; if (SendPacket(packet) == -1) @@ -723,11 +725,18 @@ int WorldSocket::ProcessIncoming (WorldPacket* new_pct) sLog->outStaticDebug("CMSG_LOG_DISCONNECT , size: " UI64FMTD, uint64(new_pct->size())); sScriptMgr->OnPacketReceive(this, WorldPacket(*new_pct)); return 0; - case CMSG_VERIFY_CONNECTIVITY_RESPONSE: - sLog->outStaticDebug("CMSG_VERIFY_CONNECTIVITY_RESPONSE , size: " UI64FMTD, uint64(new_pct->size())); + // not an opcode, client sends string "WORLD OF WARCRAFT CONNECTION - CLIENT TO SERVER" without opcode + // first 4 bytes become the opcode (2 dropped) + case MSG_VERIFY_CONNECTIVITY: + { + sLog->outStaticDebug("MSG_VERIFY_CONNECTIVITY , size: " UI64FMTD, uint64(new_pct->size())); sScriptMgr->OnPacketReceive(this, WorldPacket(*new_pct)); + std::string str; + *new_pct >> str; + if (str != "D OF WARCRAFT CONNECTION - CLIENT TO SERVER") + return -1; return HandleSendAuthSession(); - + } default: { ACE_GUARD_RETURN (LockType, Guard, m_SessionLock, -1); |