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; } }
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; } }