📄 recvmsg.cpp
字号:
break;
}
}
//Added by KBS 020330
extern inline void MgrSend(DWORD dwConnectionIndex, void* pMsg, DWORD dwLength);
//
void __stdcall ReceivedMsgUser(DWORD dwConnectionIndex,char* pMsg,DWORD dwLength)
{
// Added by chan78 at 2001/03/16
// 立加等 努扼捞攫飘啊 Packet阑 焊郴绰 版快, CONTROL_CLIENT狼 牢刘 矫档 菩哦捞 酒囱版快
// 辑滚俊 困秦甫 尝摹妨绰 矫档肺 啊沥, 鞘夸茄 扁废阑 巢变 饶 立加阑 谗绰促.
USERINFO *pUserInfo = NULL;
if( !(pUserInfo = (USERINFO *)g_pINet->GetUserInfo( dwConnectionIndex )) )
{
MyLog( LOG_FATAL, "RecvMsgUser() :: pUserInfo is NULL!!!" );
// 乐绢辑绰 救登绰 惑炔.
return;
}
// 牢刘 惑怕俊 蝶弗 贸府.
switch( pUserInfo->dwType )
{
case CLIENT_TYPE_ILLEGAL:
{
// 阂樊 努扼捞攫飘肺何磐 菩哦捞 朝酒坷搁 公矫茄促.
// 捞 版快 阂樊 努扼捞攫飘肺 沥狼且锭 CompulsiveDisconnect() 秦 敌 惑怕捞绊.
// 捞 盒幅绰 立加辆丰 贸府啊 登扁 傈鳖瘤 朝酒棵 荐 乐绰 菩哦甸阑 贸府茄促.
// 肺弊狼 剧阑 临捞扁 困秦 茄锅 阂樊 努扼捞攫飘肺 贸府等巴 甸篮 公矫茄促.
return;
}
break;
case CLIENT_TYPE_MANAGER: // 牢刘等 MANAGER
{
//Modified 020330 KBS
BYTE bID;
bID = (BYTE)pMsg[0];
if( bID == PTCL_RM || bID == PTCL_RM_FROM_PROXY )
{
RMProc(dwConnectionIndex, pMsg, dwLength);
return;
}
//
/*
// 咯扁辑 叼内爹茄促.
// Not Yet.
// 叼内爹秦辑 掘篮 蔼篮...
LP_MANAGER_PACKET pPacket = (LP_MANAGER_PACKET)pMsg;
if( dwLength < sizeof(MANAGER_PACKET_HEADER) )
{
MyLog( LOG_IMPORTANT, "CLIENT_TYPE_MANAGER :: Illegal Packet(%d)", dwLength );
MyLog( LOG_IMPORTANT, "_____ at (CI:%d, IP:%d, PORT:%d) (PacketSize:%d)", dwConnectionIndex, pUserInfo->szIP, pUserInfo->wPort );
pUserInfo->dwType = CLIENT_TYPE_ILLEGAL;
g_pINet->CompulsiveDisconnectUser( dwConnectionIndex );
return;
}
if( !OnRecvMsgFromManager( pUserInfo, pPacket, dwLength ) )
{
// 阂樊 CLIENT肺 盒幅. 捞 版快绰 农贰欧捞扼扁焊促绰 滚弊老 犬伏捞 臭绊, 秦欧捞扼搁 决没 缴阿窍促.
MyLog( LOG_IMPORTANT, "CLIENT_TYPE_MANAGER :: Illegal Packet(wCMD:%d, CRC:%d, dwLength:%d)", pPacket->h.wCMD, pPacket->h.dwCRC, dwLength );
MyLog( LOG_IMPORTANT, "_____ at (CI:%d, IP:%d, PORT:%d) (PacketSize:%d)", dwConnectionIndex, pUserInfo->szIP, pUserInfo->wPort );
pUserInfo->dwType = CLIENT_TYPE_ILLEGAL;
g_pINet->CompulsiveDisconnectUser( dwConnectionIndex );
return;
}
*/
// 沥惑贸府凳.
return;
}
break;
case CLIENT_TYPE_MANAGER_UNDER_AUTHENTICATION:
{
//Modified 020330 KBS
BYTE header;
memcpy(&header,pMsg+1, 1);
switch(header)
{
case MSG_RM_LOGIN:
{
PACKET_RM_LOGIN *packet = (PACKET_RM_LOGIN*)pMsg;
if(g_pRMTable->CheckCertainIP(dwConnectionIndex, packet->IP))
{
pUserInfo->dwType = CLIENT_TYPE_MANAGER;
pUserInfo->dwStatus = STATUS_USER_ACTIVATED;
// 立加辆丰 措扁 府胶飘俊辑 哗霖促.
g_pUserTable->RemoveUserFromAwaitingDisconnectUserList( pUserInfo );
//肺弊牢 铰牢 皋技瘤.. 磊脚捞 辑滚悸 逞滚客 窃膊..
PACKET_RM_LOGIN_OK pck(g_pServerTable->m_dwServerSetNumber);
MgrSend(dwConnectionIndex, &pck, pck.GetPacketSize());
}
else
{
//殿废等 IP啊 酒囱磊府俊辑 肺弊牢 茄 版快
PACKET_RM_LOGIN_FAIL pck;
MgrSend(dwConnectionIndex, &pck, pck.GetPacketSize());
MyLog( LOG_IMPORTANT, "CLIENT_TYPE_MANAGER_UNDER_AUTHENTICATION :: Illegal Packet(%d)", dwLength );
MyLog( LOG_IMPORTANT, "_____ at (CI:%d, IP:%s, PORT:%d) (PacketSize:%d)", dwConnectionIndex, pUserInfo->szIP, pUserInfo->wPort );
pUserInfo->dwType = CLIENT_TYPE_ILLEGAL;
g_pINet->CompulsiveDisconnectUser( dwConnectionIndex );
return;
}
g_pRMTable->AddClient(dwConnectionIndex, packet);
if(g_pRMTable->GetClientNum() == 1) //RMClient啊 窍唱扼档 立加等 惑怕搁 眉农 矫累!
{
StopWaitTimer();
StartEchoTimer(); //辑滚 促款灯唱 救灯唱 眉农 累诀 矫累
}
}
break;
}
//
/*
// 捞镑俊辑 SSL(Secure Socket Layer)甫 备己窍绊,
// 老窜 MANAGER CLIENT老 啊瓷己捞 乐促绊 牢沥等 CLIENT 肺辑.
// 老访狼 牢刘 苞沥阑 芭媚 CLIENT_TYPE_MANAGER 肺 牢刘登搁 MANAGER 肺辑 开且阑 荐青且 荐 乐霸等促.
// 牢刘侩 菩哦阑 罐绰促.
if( !OnRecvAuthMsgFromManager( pUserInfo, (LP_MANAGER_PACKET)pMsg, dwLength ) )
{
MyLog( LOG_IMPORTANT, "CLIENT_TYPE_MANAGER_UNDER_AUTHENTICATION :: Illegal Packet(%d)", dwLength );
MyLog( LOG_IMPORTANT, "_____ at (CI:%d, IP:%d, PORT:%d) (PacketSize:%d)", dwConnectionIndex, pUserInfo->szIP, pUserInfo->wPort );
pUserInfo->dwType = CLIENT_TYPE_ILLEGAL;
g_pINet->CompulsiveDisconnectUser( dwConnectionIndex );
return;
}
else
{
// 牢刘 登菌促.
pUserInfo->dwType = CLIENT_TYPE_MANAGER;
pUserInfo->dwStatus = STATUS_USER_ACTIVATED;
// 立加辆丰 措扁 府胶飘俊辑 哗霖促.
g_pUserTable->RemoveUserFromAwaitingDisconnectUserList( pUserInfo );
// 20010508 Add Proxy-OwnPort 鞘夸
AnswerAuthPacket( pUserInfo );
}
*/
}
break;
case CLIENT_TYPE_NORMAL: // 老馆 蜡历.
{
// 沥惑利牢 努扼捞攫飘绰 PROXY俊 皋矫瘤甫 焊郴瘤 臼绰促.
// 窍瘤父 MANAGER CLIENT 老 啊瓷己捞 乐栏骨肺,
// 啊厘 贸澜 朝酒柯 PACKET 栏肺 阂樊 CLIENT 客 MANAGER CLIENT甫 1瞒利栏肺 盒幅茄促.
// --------------------------------
// MyLog( LOG_IMPORTANT, "RecvPacket Size : %d, %d", dwLength, sizeof(MANAGER_PACKET_HEADER));
if( dwLength <= sizeof(MANAGER_PACKET_HEADER) )
{
LP_MANAGER_PACKET pPacket = (LP_MANAGER_PACKET)pMsg;
if( pPacket->h.wCMD == MANAGER_CLIENT_FIRST_PACKET_TYPE )
{
if( pPacket->h.dwCRC == MANAGER_CLIENT_FIRST_PACKET_CRC )
{
// 老窜 MANAGER CLIENT 老 啊瓷己阑 牢沥茄促.
// pUserInfo->dwType = CLIENT_TYPE_MANAGER_UNDER_AUTHENTICATION;
pUserInfo->dwType = CLIENT_TYPE_MANAGER_UNDER_AUTHENTICATION; // 老窜 公炼扒 牢刘.
return;
}
}
}
// --------------------------------
// 困 炼扒俊辑 吧矾瘤瘤 臼篮 CLIENT 甸篮 阂樊.
// 阂樊 立加矫档肺 扁废窍绊 立加阑 谗绰促.
MyLog( LOG_IMPORTANT, "--- ILLEGAL CLIENT at (CI:%d, IP:%s, PORT:%d)", dwConnectionIndex, pUserInfo->szIP, pUserInfo->wPort );
pUserInfo->dwType = CLIENT_TYPE_ILLEGAL;
g_pINet->CompulsiveDisconnectUser( dwConnectionIndex );
return;
}
default:
{
// 裹困甫 哈绢唱绰 鸥涝阑 啊廉辑绰 救等促.
// 倾侩且 荐 乐绰 搬窃栏肺 盒幅窍搁 歹 奴 滚弊甫 父甸荐档 乐栏骨肺
// 辑滚甫 磷牢促.
MyLog( LOG_FATAL, "RecvMsgUser() :: UNKNOWN 'CLIENT_TYPE'(%d)", pUserInfo->dwType );
#ifdef __ON_DEBUG
// _asm int 3;
#else
g_pServerTable->DestroyServer( FINISH_TYPE_UNKNOWN_ERROR );
#endif
}
}
return;
}
void __stdcall OnDisconnectUser(DWORD dwConnectionIndex)
{
//Modified by KBS 020330
USERINFO *pUserInfo = (USERINFO*)g_pINet->GetUserInfo( dwConnectionIndex );
if(pUserInfo->dwType == CLIENT_TYPE_MANAGER)
{
g_pRMTable->RemoveClient( dwConnectionIndex );
if(g_pRMTable->GetClientNum() == 0) //RMClient啊 葛滴 立加 秦力 登菌栏搁 眉农 弊父
{
StopWaitTimer();
StopEchoTimer();
}
}
//
// Modified by chan78 at 2001/02/27
g_pUserTable->RemoveUser( dwConnectionIndex );
return;
}
//Added by KBS 011220
BOOL CheckValidConnection(DWORD dwConnectionIndex, int type)
{
RM_LISTENER_INFO* cur = NULL;
RM_LISTENER_INFO* next = NULL;
cur = g_pRMTable->m_ListenerTable.m_ppInfoTable[ type ];
while (cur)
{
next = cur->pNextInfo;
if(cur->dwConnectionIndex == dwConnectionIndex)
{
return TRUE;
}
cur = next;
}
return FALSE;
}
//
void __stdcall OnDisconnectServer(DWORD dwConnectionIndex)
{
//Added by KBS 011119
void *pVoid = g_pINet->GetServerInfo(dwConnectionIndex);
if(pVoid) //Listener Disconnect
{
BYTE bConnectType;
memcpy(&bConnectType,pVoid,1);
switch((int)bConnectType)
{
case RM_TYPE_TOOL:
{
// 021008 YGI
/*
//Modified by KBS 011213
g_pRMTable->RemoveClient( dwConnectionIndex );
if(g_pRMTable->GetClientNum() == 0) //RMClient啊 葛滴 立加 秦力 登菌栏搁 眉农 弊父
{
StopWaitTimer();
StopEchoTimer();
}*/
}
break;
case RM_TYPE_LISTENER:
{
//Modified by KBS 0112
if(CheckValidConnection( dwConnectionIndex, 1 ))
{
//Listener啊 立加 谗绢咙..
in_addr addr;
addr.S_un = g_pINet->GetServerAddress( dwConnectionIndex )->sin_addr.S_un;
g_pRMTable->m_ListenerTable.MoveToDisconnectStatus(inet_ntoa(addr));
MyLog( LOG_NORMAL, "Valid Listener Disconnected :: dwConnectionIndex = %d", dwConnectionIndex );
}
else
{
char ip[20]; memset(ip,0,20);
WORD port;
g_pINet->GetServerAddress( dwConnectionIndex, ip, &port);
MyLog( LOG_NORMAL, "Invalid Listener Disconnected :: dwConnectionIndex = %d, IP = %s, Port = %d",dwConnectionIndex, ip, port );
}
}
break;
}
}
else //老馆 辑滚
{
//Added by KBS 011205
LP_SERVER_DATA pServerData;
pServerData = g_pServerTable->GetConnectedServerData( dwConnectionIndex );
if(pServerData)
{
PACKET_RM_SERVER_DISCONNECT packet((BYTE)g_pServerTable->m_dwServerSetNumber,
pServerData->wPort);
g_pRMTable->BroadcastAllRMClient((char*)&packet,packet.GetPacketSize());
}
//
g_pServerTable->RemoveConnectedServerDataFromHashTable(dwConnectionIndex);
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -