#include "stdafx.h" #include "PacketHandler.Shared.h" #include #include #undef ADD_HANDLER_INFO_EOR #undef ADD_HANDLER_INFO #define ADD_HANDLER_INFO_EOR() { MAKEWORD(0, 0), PHASE_NOACTION, (PH_fnHandler)NULL } #define ADD_HANDLER_INFO( c, p, accptablePHASE ) \ { MAKEWORD(c, p), (ePHASE_SHIFT)(accptablePHASE), (PH_fnHandler)&PacketHandlerShared::On##p } sPACKET_HANDLER_INFO* PacketHandlerShared::GetHandlerInfo() { static sPACKET_HANDLER_INFO s_pHandlerInfo[] = { ADD_HANDLER_INFO(SERVERCOMMON, SERVERCOMMON_HEARTBEAT, PHASE_UNLIMITED), ADD_HANDLER_INFO_EOR(), }; return s_pHandlerInfo; } // // // HANDLER_COMMON_IMPL(SERVERCOMMON_HEARTBEAT) { // 0:1 //SERVERCOMMON_HEARTBEAT __TOUCHED((pServerSessionEx, pMsg, wSize)); // printf( "heartbeat\n" ); } VOID PacketHandlerShared::OnUSER_EMPTY_HANDLER( User* pSession, MSG_BASE* pMsg, WORD wSize ) { __TOUCHED((pSession, pMsg, wSize)); // SECURE_LOG??? SECURELOG( SECURELOG_USERINFO(pSession, eABUSE_LOGIC_VIOLATION, eABUSE_SUB_LOGIC_VIOLATION_UNKNOWN_PROTOCOL), _T("[Request Message] Unknown Protocol - old tool version") ); } #define PACKET_CATEGORY_SKIP_NODE( node ) case node: #define PACKET_CATEGORY_SKIP_FILTER() \ PACKET_CATEGORY_SKIP_NODE( CG_SYNC ) \ PACKET_CATEGORY_SKIP_NODE( CG_CONVERSATION ) \ PACKET_CATEGORY_SKIP_NODE( CG_TRIGGER ) \ PACKET_CATEGORY_SKIP_NODE( CG_BATTLE ) #define PACKET_PROTOCOL_SKIP_NODE( node ) case node: #define PACKET_PROTOCOL_SKIP_FILTER() \ PACKET_PROTOCOL_SKIP_NODE( MAKEWORD( CG_CHARINFO, CG_CHARINFO_SELECT_INFO_SYN ) ) VOID PacketHandlerShared::OnGAME_FORWARD_HANDLER( User* pSession, MSG_BASE* pMsg, WORD wSize ) { const DWORD ERR_UNLINKED_SERVER = 1000; const DWORD ERR_FORWARDING_FAIL = 1001; ////////////////////////////////////////////////////////////////////////// // FlowControl flow; FLOWCONTROL_START() { IfFailThenBreak(pSession->GetLinkedServer(), ERR_UNLINKED_SERVER); IfFailThenBreak(pSession->SendToLinkedServer((MSG_BASE_FORWARD *)pMsg, wSize), ERR_FORWARDING_FAIL); return /*RETURN TRUE VALUE*/; } FLOWCONTROL_END; ////////////////////////////////////////////////////////////////////////// // #ifndef _DEBUG switch( pMsg->m_byCategory ) { // ÇÁ·ÎÅäÄÝ ±×·ìº° PACKET_CATEGORY_SKIP_FILTER(); // (080522) - Çö ½ÃÁ¡ (±×·¡µµ ÁÖÀÇÇØ¾ß ÇÏ´Â ÆÐŶ) // - MSG_CG_TRIGGER_LEAVE_AREA_SYN, Ŭ¶ó Á¸ À̵¿ °ü·Ã µ¿±âÈ­ (¼ø¼­) ¹®Á¦·Î ¸¹ÀÌ ¹ß»ý Áß... break; default: switch( MAKEWORD( pMsg->m_byCategory, pMsg->m_byProtocol ) ) { // ÇÁ·ÎÅäÄÝ ¼¼ºÎ »ç·Êº°... PACKET_PROTOCOL_SKIP_FILTER(); break; default: SUNLOG( eCRITICAL_LOG, _T("CA ParsePacket, Try to Send Unlinked Server [%03u:%03u]"), pMsg->m_byCategory, pMsg->m_byProtocol ); break; } break; } #else SUNLOG( eCRITICAL_LOG, _T("CA ParsePacket, Try to Send Unlinked Server [%03u:%03u]"), pMsg->m_byCategory, pMsg->m_byProtocol ); #endif return /*RETURN FALSE VALUE*/; } //_NA000000_CW_PROTOCOL_UNIFICATION void PacketHandlerShared::OnWORLD_FORWARD_HANDLER(User* session, MSG_BASE* msg, WORD msg_size) { // TODO: f110914.1L, check enabled_world_service per session bool sent = (session->SendToWorldServer(msg, msg_size) != false); __TOUCHED(sent); // connected check.... hummm }