static void MOX2SendData2485(MXMSG * pMsg, BOOL bNeedRsp) { unsigned char AppTemp[1024]; int nAppTempLen = 0; BYTE DA[3] = {0}; BYTE SA[3] = {0}; memcpy(DA,pMsg->szDestDev,3); //nDataLen = *((unsigned char*)pmsg->pParam); // MsgGet.pParam store self ip address nAppTempLen = PckCommApp( pMsg->dwMsg, pMsg->pParam, pMsg->wDataLen , AppTemp); SendData2RS485(AppTemp, nAppTempLen, SA, DA,bNeedRsp, ++g_Seq); if (FC_LF_HEARTBEAT != pMsg->dwMsg) { SetProtocolStatus(pMsg->dwMsg,pMsg->dwParam); } }
static void MOX2HV2HVSendUnLockCMD(void) { unsigned char AppTemp[1024]; int nAppTempLen = 0; unsigned char nDataLen = 12-4+1*2; BYTE DA[3] = {0,0,1}; BYTE SA[3] = {0}; unsigned char Data[nDataLen]; MOXUSER * pDestUser; MOXLIFT * pLift; unsigned char * pData=Data; unsigned short sIdentity=0; unsigned short nFunCode; unsigned short sTime=0; pDestUser=GetpUserByCode( g_HV2HV.szDestUserCode,""); if(NULL==pDestUser) { return ; } pLift=GetpLiftByLiftID(pDestUser->cLiftID); if(NULL ==pLift) { return ; } nFunCode=FC_LF_UNLOCK; *pData=MOX2_LOCATION_TYPE_HV; pData++; *pData=pLift->cGroup; pData++; *pData=MOX2_LIFT_INDEX_BROADCAST; pData++; *pData=sIdentity>>8; pData++; *pData=sIdentity & 0xff; pData++; *pData=1; pData++; *pData=pDestUser->cLevel; pData++; *pData=pDestUser->cDoorType; pData++; *pData=sTime>>8; pData++; *pData=sTime & 0xff; pData++; DA[0]=pLift->cDA1; DA[1]=pLift->cDA2; DA[2]=pLift->cDA3; nAppTempLen = PckCommApp( nFunCode, Data, nDataLen , AppTemp); SendData2RS485(AppTemp, nAppTempLen, SA, DA,NEED_RSP,++g_Seq); SetProtocolStatus(FC_LF_A_B,0); g_HV2HV.nStatus=MOX2_HV2HV_STATUS_WAIT_STOP_ACK; return ; }
static void MOX2HV2HVSendStopCMD(MXMSG * pMsg) { //MOX2SendData2485(&msgRecv,NEED_RSP); unsigned char AppTemp[1024]; int nAppTempLen = 0; unsigned char nDataLen = 7; BYTE DA[3] = {0,0,1}; BYTE SA[3] = {0}; unsigned char Data[nDataLen]; // int i; MOXUSER * pSrcUser; MOXUSER * pDestUser; MOXLIFT * pLift; unsigned char * pData=Data; unsigned short sIdentity=0; unsigned short nFunCode; pSrcUser=GetpUserByCode( g_HV2HV.szSrcUserCode,""); pDestUser=GetpUserByCode( g_HV2HV.szDestUserCode,""); if(NULL ==pSrcUser || NULL==pDestUser) { return ; } pLift=GetpLiftByLiftID(pSrcUser->cLiftID); if(NULL ==pLift) { return ; } if(pSrcUser->cLevel>pDestUser->cLevel) { nFunCode=FC_LF_STOP_DOWN; } else { nFunCode=FC_LF_STOP_UP; } *pData=MOX2_LOCATION_TYPE_HV; pData++; *pData=pLift->cGroup; pData++; *pData=MOX2_LIFT_INDEX_BROADCAST; pData++; *pData=pSrcUser->cDoorType; pData++; *pData=sIdentity>>8; pData++; *pData=sIdentity & 0xff; pData++; *pData=pSrcUser->cLevel; pData++; DA[0]=pLift->cDA1; DA[1]=pLift->cDA2; DA[2]=pLift->cDA3; nAppTempLen = PckCommApp( nFunCode, Data, nDataLen , AppTemp); SendData2RS485(AppTemp, nAppTempLen, SA, DA,NEED_RSP,++g_Seq); SetProtocolStatus(FC_LF_A_B,pMsg->dwParam); g_HV2HV.nStatus=MOX2_HV2HV_STATUS_WAIT_STOP_ACK; return ; }
bool Protocol79::GameworldLogin () { // this is valid for 7.9! // 7.7 has a bit different order of stuff! check out old outcast's sources NetworkMessage nm; SetProtocolStatus("Preparing to transfer logon data..."); connectiontype = GAMEWORLD; nm.AddU8(0x0A); // protocol id // in 7.72 onwards move this BEFORE the keys and BEFORE the encryption nm.AddU16(0x02); // client OS nm.AddU16(protocolversion); SetProtocolStatus("RSA encryption..."); nm.RSABegin(); //key[3] = 92; // encryption keys for (int i = 0 ; i < 4 ; i++) { nm.AddU32(key[i]); //printf("KEY %d - %d\n", i, key[i]); } // are we a gamemaster nm.AddChar(0); // account number and password nm.AddU32(atol(this->username.c_str())); // this does NOT exist before 7.4 nm.AddString(this->charlist[this->charlistselected]->charactername); nm.AddString(this->password); nm.RSAEncrypt(); SetProtocolStatus("Transmitting logon data..."); if (!nm.Dump(s)) { this->errormsg = "Could not write to socket.\nPossible it's a premature disconnect.\n\nCheck you typed in the correct protocol!"; return false; } // SetStance(DEFENSIVE, STAND); SetProtocolStatus("Waiting for response..."); //nm.Clean(); NetworkMessage nm2; //nm.FillFromSocket(s); if (!nm2.FillFromSocket(s )) { this->errormsg = "Could not read from socket.\nPossibly it's a premature disconnect.\n\nCheck you typed in the correct protocol!"; return false; } nm2.XTEADecrypt(key); logonsuccessful = true; while ((signed int)(nm2.GetSize())>0 && ParsePacket(&nm2)); if ((signed int)(nm2.GetSize())!=0) printf("++++++++++++++++++++DIDNT EMPTY UP THE NETWORKMESSAGE!++++++++++++++++++\n"); if (logonsuccessful) active = true; return logonsuccessful; }