Пример #1
0
void ProtocolCore(int aIndex, LPBYTE aRecv, int aLen)
{
	BYTE protoNum = 0;
	if((aRecv[0] == 0xC1) || (aRecv[0] == 0xC3))
	{
		protoNum = aRecv[2];
	}else
	{
		protoNum = aRecv[3];
	}

	switch(protoNum)
	{
		case 0x05 :
			CSVersionRecv(aIndex,(PMSG_VERSION *)aRecv);
		break;	

		case 0x04 :		// HTTP
			CSHTTPVersionRecv(aIndex, (PMSG_VERSION *)aRecv);
		break;

		case 0xF4:
		{
			PMSG_DEFAULT2 * lpDef = (PMSG_DEFAULT2 *)aRecv;
			switch(lpDef->subcode)
			{
				case 3: //Connect to Server
				{
					//PMSG_DEFAULT2 encPacket ={0};
					//PHeadSubSetB((LPBYTE)&encPacket, 0xEE, 0x54, sizeof(encPacket));
					//DataSend(aIndex, (unsigned char*)&encPacket, encPacket.h.size);

					BYTE i=aRecv[5];
					BYTE j=aRecv[4];
					PMSG_SENDSERVER pResult;
					PHeadSubSetB((LPBYTE)&pResult, 0xF4, 0x03, sizeof(pResult));
					strcpy(pResult.IpAddress,serverManager.Server[i][j].IpAddress);
					pResult.port = serverManager.Server[i][j].Port;
					DataSend(aIndex, (unsigned char*)&pResult, pResult.h.size);
					LogAddTD("IP: %s is connected to server [%d,%d](%s:%d)",Obj[aIndex].Ip_addr,i,j,serverManager.Server[i][j].IpAddress,serverManager.Server[i][j].Port);
					serverManager.DelAutoAntiFloodIP(Obj[aIndex].Ip_addr);
				}break;
				case 6: //Send Server List
				{
					if(Obj[aIndex].SendListCount>=serverManager.MaxSendListCount)
					{
						LogAddC(2,"[AntiFlood] IP: %s requested serverlist %d times",Obj[aIndex].Ip_addr,Obj[aIndex].SendListCount);
						serverManager.AutoAntiFloodCheck(Obj[aIndex].Ip_addr);
						CloseClient(aIndex);
						return;
					}
					Obj[aIndex].SendListCount++;
					LogAddTD("IP: %s requested serverlist",Obj[aIndex].Ip_addr);
					DataSend(aIndex,serverManager.List,serverManager.ListSize);
				}break;
				default:
				{
					LogAdd("error-L2 : IP:%s HEAD:%x SUBCODE:%x",Obj[aIndex].Ip_addr,protoNum,lpDef->subcode);
					CloseClient(aIndex);
				}
			}
		}break;
		default:
		{
			LogAdd("error-L2 : IP:%s HEAD:%x",Obj[aIndex].Ip_addr,protoNum);
			CloseClient(aIndex);
		}break;
	}
}
Пример #2
0
void ProtocolCore(BYTE protoNum, BYTE *aRecv, int aLen, int aIndex)
{
#if ( LOG_PROTOCOL == 1 )
    LogProtocol("RECV",aRecv,aLen);
#endif
    // ----
    switch(protoNum)
    {
    case 0x01:	//-> 20040304
    {
        //40140B
    }
    break;
    // --
    case 0x05:
    {
        CSVersionRecv((LPPMSG_VERSION)aRecv, aIndex);
    }
    break;
    // --
    case 0x06:
    {
        CSVersionHttpRecv((LPPMSG_VERSION)aRecv, aIndex);
    }
    break;
    // --
    case 0x07:	//-> 20040304
    {
        //401226
    }
    break;
    // --
    case 0xF4:
    {
        switch(aRecv[3])
        {
        case 0x02:	//-> 20040304
        {
            //4013E8
        }
        break;
        // --
        case 0x03:
        {
            CLGetServerInfo((LPMSG_REQ_SERVER_INFO)aRecv,aIndex);
        }
        break;
        // --
        case 0x04:	//-> 20040304
        {
            //401253
        }
        break;
        // --
        case 0x06:
        {
            CLGetServerList(aIndex);
        }
        break;
        // --
        case 0x07:
        {
            CLGetServerList((PMSG_REQ_SERVERLIST*)aRecv,aIndex);
        }
        break;
        }
    }
    break;
    }
}