⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recvmsg.cpp

📁 Proxy in c++ for DragonRaja
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -