aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp3
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h5
-rwxr-xr-xsrc/server/game/Server/WorldSession.cpp9
-rwxr-xr-xsrc/server/game/Server/WorldSession.h2
-rwxr-xr-xsrc/server/game/Server/WorldSocket.cpp19
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);