Exemple #1
0
INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId;

	switch (message)
	{
	case WM_INITDIALOG:
		hMainWND = hWnd;
		hLogin = GetDlgItem(hWnd, IDC_LOGIN);
		hPassword = GetDlgItem(hWnd, IDC_PASSWORD);
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		wmId = LOWORD(wParam);
		if (wmId == IDB_START)
		{
			CheckAccount();
			if (StartGame())
			{ 
				// start game
				SetCurrentDirectory("./Bin32");
				ShellExecute(NULL, "open", "Icarus.exe", startparam, NULL, SW_NORMAL);
				Sleep(100);
				EndDialog(hWnd, LOWORD(wParam));
			}
		}
		break;

	case WM_CLOSE:
		EndDialog(hWnd, LOWORD(wParam));
		return (INT_PTR)TRUE;
	}
	return (INT_PTR)FALSE;
}
Exemple #2
0
/**< 将消息包的信息赋予MyData */
int Dataprocess::GetFieldValue(void)
{
    unsigned char cTemp[TLV_DATA_MAX_LEN]={0};
    unsigned int nLen=TLV_DATA_MAX_LEN;
    CTLVTemplet tlvData;
    int rLen;
    for(int index = 0; index < FIELDCOUNT; index++)
    {
        if(pMsg8583recv->FieldExist(index))
        {
            switch(index)
            {
                case 0:
                        rLen = pMsg8583recv->GetValueByStr(0, (char *)myData.cMsgType, sizeof(myData.cMsgType));   //消息类型
                        break;
                case 2:
                        rLen = pMsg8583recv->GetValueByStr(2, (char *)myData.cPriAccount, sizeof(myData.cPriAccount));   //主账号
                        memcpy(trasData.HeadData.Account,myData.cPriAccount,strlen((char*)myData.cPriAccount));
                        break;
                case 3:
                        rLen = pMsg8583recv->GetValueByStr(3, (char *)myData.cTransProcess, sizeof(myData.cTransProcess));   //处理码
                        break;
                case 4:
                        rLen = pMsg8583recv->GetValueByStr(4, (char *)myData.cTranAmount, sizeof(myData.cTranAmount)); //F4 交易金额
                        memcpy(trasData.HeadData.ReqAmount,myData.cTranAmount,strlen((char*)myData.cTranAmount));
                        break;
                case 11:
                        rLen = pMsg8583recv->GetValueByStr(11, (char *)myData.cSysTraceNo, sizeof(myData.cSysTraceNo));    //受卡方系统跟踪号
                        memcpy(trasData.HeadData.LPosSeq,myData.cSysTraceNo,strlen((char *)myData.cSysTraceNo));
                        break;
                case 14:
                        rLen = pMsg8583recv->GetValueByHex(14, myData.cExpiredDate, sizeof(myData.cExpiredDate));    //卡有效期
                        if(tlvData.AddTLVItemByEnum(TAG_INPUTEXPDATE,rLen,myData.cExpiredDate)!=1)
                        {
                            trace_log(ERR,"field14 AddTLV failse,myData.cExpiredDate is %s,len is %d",myData.cExpiredDate,strlen((char*)myData.cExpiredDate));
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field14 AddTLV fail");
                            return -1;
                        }
                        rLen = pMsg8583recv->GetValueByStr(14, (char *)myData.cExpiredDate, sizeof(myData.cExpiredDate));    //卡有效期
                        break;
                case 22:
                        rLen = pMsg8583recv->GetValueByStr(22, (char *)myData.cServiceEntry, sizeof(myData.cServiceEntry));   //F22 服务点输入码
                        memcpy(trasData.HeadData.SvrPointCode,myData.cServiceEntry,strlen((char*)myData.cServiceEntry));
                        break;
                case 23:
                        rLen = pMsg8583recv->GetValueByHex(23, myData.cCardSequence, sizeof(myData.cCardSequence));  //F23 卡片序列号
                        if(tlvData.AddTLVItemByEnum(TAG_ICCID,rLen,myData.cCardSequence)!=1)
                        {
                            trace_log(ERR,"field23 AddTLV failse,myData.cCardAccepCode is %s,len is %d",myData.cCardAccepCode,strlen((char*)myData.cCardAccepCode));
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field23 AddTLV fail");
                            return -1;
                        }
                        rLen = pMsg8583recv->GetValueByStr(23, (char *)myData.cCardSequence, sizeof(myData.cCardSequence));  //F23 卡片序列号
                        break;
                case 25:
                        rLen = pMsg8583recv->GetValueByStr(25, (char *)myData.cServiceCondition, sizeof(myData.cServiceCondition));//F25 服务点条件码
                        memcpy(trasData.HeadData.SerConCode,myData.cServiceCondition,strlen((char *)myData.cServiceCondition));
                        break;
                case 27:
                        rLen = pMsg8583recv->GetValueByStr(27, (char *)myData.cSettle, sizeof(myData.cSettle));   //跟老系统的清算类型
                        break;
                case 31:
                        rLen = pMsg8583recv->GetValueByStr(31,(char *)myData.cOrgCode, sizeof(myData.cOrgCode)); //接入机构标识码
                        break;
                case 32:
                        rLen = pMsg8583recv->GetValueByStr(32,(char *)myData.cAcquirIdenti,sizeof(myData.cAcquirIdenti));//受理方标识码
                        break;

                case 35:
                    {
                        rLen = pMsg8583recv->GetValueByHex(35, myData.cTrack2Data, sizeof(myData.cTrack2Data));//2磁道数据
                        break;
                    }
                case 36:
                    {
                        rLen = pMsg8583recv->GetValueByHex(36, myData.cTrack3Data, sizeof(myData.cTrack3Data));//3磁道数据
                        break;
                    }
                case 37:
                        rLen = pMsg8583recv->GetValueByStr(37, (char *)myData.cOldReferenceNo, sizeof(myData.cOldReferenceNo)); //检索参考号
                        break;
                case 38:
                        rLen = pMsg8583recv->GetValueByStr(38, (char *)myData.cAuthResponse, sizeof(myData.cAuthResponse)); //F38  授权标识应答码
                        //memcpy(trasData.HeadData.OrigAuthCode,myData.cAuthResponse,strlen((char *)myData.cAuthResponse));
                        break;
                case 39:
                    {
                        char cTmp[3]={0};
                        rLen = pMsg8583recv->GetValueByStr(39, cTmp, sizeof(cTmp)); //F39  返回码
                        if(0==memcmp(cTmp,"00",2)) pMsg8583recv->RemoveField(39);
                        break;
                    }
                case 41:
                        rLen = pMsg8583recv->GetValueByStr(41, (char *)myData.cCardAccepTerm, sizeof(myData.cCardAccepTerm)); //受卡机终端标识码
                        memcpy(trasData.HeadData.LTermNo,myData.cCardAccepTerm,strlen((char *)myData.cCardAccepTerm));
                        break;
                case 42:
                        rLen = pMsg8583recv->GetValueByStr(42,(char *)myData.cCardAccepCode, sizeof(myData.cCardAccepCode)); //F42  //受卡方标识码
                        memcpy(trasData.HeadData.LMerchNo,myData.cCardAccepCode,strlen((char *)myData.cCardAccepCode));
                        break;
                case 48:
                        rLen = pMsg8583recv->GetValueByStr(48,(char *)myData.cAddDataPri, sizeof(myData.cAddDataPri)); //F48  //附加数据 - 私有
                        break;
                case 52:
                        rLen = pMsg8583recv->GetValueByHex(52, myData.cPinData, sizeof(myData.cPinData));//F52 密码密文
                        if(tlvData.AddTLVItemByEnum(TAG_ENCRYPTPWD,rLen,myData.cPinData)!=1)
                        {
                            trace_log(ERR,"field52 AddTLV failse,myData.cPinData is %s,len is %d",myData.cPinData,rLen);
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field52 AddTLV fail");
                            return -1;
                        }
                        break;
                case 53:
                        rLen = pMsg8583recv->GetValueByHex(53, myData.cSecurityControlInfo, sizeof(myData.cSecurityControlInfo)); //F53 安全控制信息
                        if(tlvData.AddTLVItemByEnum(TAG_PINENCTYPE,rLen,myData.cSecurityControlInfo)!=1)
                        {
                            trace_log(ERR,"field52 AddTLV failse,myData.cPinData is %s,len is %d",myData.cPinData,strlen((char *)myData.cSecurityControlInfo));
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field53 AddTLV fail");
                            return -1;
                        }
                        rLen = pMsg8583recv->GetValueByStr(53, (char *)myData.cSecurityControlInfo, sizeof(myData.cSecurityControlInfo)); //F53 安全控制信息
                        break;
                case 55:
                        rLen = pMsg8583recv->GetValueByHex(55, myData.cICData, sizeof(myData.cICData));   //IC卡数据域
                        if(tlvData.AddTLVItemByEnum(TAG_FIELD55_RSP,rLen,myData.cICData)!=1)
                        {
                            trace_log(ERR,"field55 AddTLV failse,myData.cICData is %s,len is %d",myData.cICData,strlen((char *)myData.cICData));
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field55 AddTLV fail");
                            return -1;
                        }
                        rLen = pMsg8583recv->GetValueByStr(55, (char *)myData.cICData, sizeof(myData.cICData));
                        break;
                case 60:
                        rLen = pMsg8583recv->GetValueByHex(60, myData.cRerervedPri60, sizeof(myData.cRerervedPri60));
                        if(tlvData.AddTLVItemByEnum(TAG_RESERVED1,rLen,myData.cRerervedPri60)!=1)
                        {
                            trace_log(ERR,"field60 AddTLV failse,myData.cRerervedPri60 is %s,len is %d",myData.cRerervedPri60,strlen((char*)myData.cRerervedPri60));
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field60 AddTLV fail");
                            return -1;
                        }
                        rLen = pMsg8583recv->GetValueByStr(60, (char *)myData.cRerervedPri60, sizeof(myData.cRerervedPri60));
                        memcpy(trasData.HeadData.LBatchNo,myData.cRerervedPri60+2,6);
                        break;
                case 61:
                        rLen = pMsg8583recv->GetValueByHex(61, myData.cOriginalMsg, sizeof(myData.cOriginalMsg));
                        if(tlvData.AddTLVItemByEnum(TAG_RESERVED2,rLen,myData.cOriginalMsg)!=1)
                        {
                            trace_log(ERR,"TranBase::field61 AddTLV failse,myData.cOriginalMsg is %s,len is %d",myData.cOriginalMsg,strlen((char *)myData.cOriginalMsg));
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field61 AddTLV fail");
                            return -1;
                        }
                        rLen = pMsg8583recv->GetValueByStr(61, (char *)myData.cOriginalMsg, sizeof(myData.cOriginalMsg));
                        break;
                case 62:
                        rLen = pMsg8583recv->GetValueByHex(62,myData.cRerervedPri62,sizeof(myData.cRerervedPri62));
                        break;
                case 63:
                        rLen = pMsg8583recv->GetValueByHex(63,myData.cRerervedPri63,sizeof(myData.cRerervedPri63));
                        if(tlvData.AddTLVItemByEnum(TAG_RESERVED3,rLen,myData.cRerervedPri63)!=1)
                        {
                            trace_log(ERR,"field63 AddTLV failse,myData.cRerervedPri63 is %s,len is %d",myData.cRerervedPri63,rLen);
                            pMsg8583recv->SetValueByStr(39,"ZZ");
                            pMsg8583recv->SetValueByStr(56,"field63 AddTLV fail");
                            return -1;
                        }
                        break;
                default:
                        break;
            }
        }
    }
	
    // 35域处理 
    if( pMsg8583recv->FieldExist(35))
    {
        int nTrack=0;
        unsigned char cData[256]={0};
        char cTrace[256]={0};
        char cAccount[48]={0};
        nTrack=pMsg8583recv->GetValueByHex(35, myData.cTrack2Data, sizeof(myData.cTrack2Data));
        memcpy(cData,myData.cTrack2Data,nTrack);
        trace_log(NML," strat Decrypt data Track,track2 len:%d",nTrack);
        EnCrypt enCrypt;
        bool bRes = enCrypt.DecryptTrack((char*)myData.cCardAccepCode,(char*)myData.cCardAccepTerm,cData,nTrack,cTrace,cAccount);
        if(bRes)
        {

            if( CheckAccount(cAccount) )
            {
                int nAccLen=strlen(cAccount);
                memcpy(myData.cPriAccount,cAccount,nAccLen);
                pMsg8583recv->SetValueByStr(2,cAccount);//可根据22域 和2磁道数据设置
                memset(trasData.HeadData.Account, 0, sizeof(trasData.HeadData.Account));
                memcpy(trasData.HeadData.Account,cAccount,nAccLen);
            }
			else
			{
                trace_log(ERR,"ERR IN encrypt Trace: %s,len is %d",cTrace,strlen(cTrace));
                pMsg8583recv->SetValueByStr(39,"ZZ");
                pMsg8583recv->SetValueByStr(56,"Encrypt Trace Field3535 Fail");
                return -1;
            }

            if(tlvData.AddTLVItemByEnum(TAG_TRACK2,strlen(cTrace),(unsigned char*)cTrace)!=1)
            {
                trace_log(ERR,"field35 AddTLV failse,Trace2 is %s,len is %d",cTrace,strlen(cTrace));
                pMsg8583recv->SetValueByStr(39,"ZZ");
                pMsg8583recv->SetValueByStr(56,"field35 AddTLV fail");
                return -1;
            }

        }
		else
		{
            trace_log(ERR,"Decrypt data of field35 fail");
            pMsg8583recv->SetValueByStr(39,"ZZ");
            pMsg8583recv->SetValueByStr(56,"Decrypt data of field35 fail");
            return -1;
        }
    }
    // 36域处理 
    if( pMsg8583recv->FieldExist(36))
    {
        int             nTrack      = 0;
        unsigned char   cData[256]  = {0};
        char            cTrace[256]	= {0};
        char            cAccount[48]= {0};
        nTrack = pMsg8583recv->GetValueByHex(36, myData.cTrack3Data, sizeof(myData.cTrack3Data));
        memcpy(cData, myData.cTrack3Data, nTrack);
        trace_log(NML," strat Decrypt data Track,track3 len:%d", nTrack);
        EnCrypt enCrypt;
        bool bRes = enCrypt.DecryptTrack((char*)myData.cCardAccepCode, (char*)myData.cCardAccepTerm, cData, nTrack, cTrace, cAccount);
        if(bRes)
        {
            if(tlvData.AddTLVItemByEnum(TAG_TRACK3, strlen(cTrace), (unsigned char*)cTrace)!=1)
            {
                trace_log(ERR,"field36 AddTLV failse,Trace3 is %s,len is %d", cTrace, strlen(cTrace));
                pMsg8583recv->SetValueByStr(39,"ZZ");
                pMsg8583recv->SetValueByStr(56,"field36 AddTLV fail");
                return -1;
            }

        }
		else
		{
            trace_log(ERR,"Decrypt data of field36 feild");
            pMsg8583recv->SetValueByStr(39,"ZZ");
            pMsg8583recv->SetValueByStr(56,"Decrypt data of field36 feild");
            return -1;
        }
    }
    unsigned char cTpdu[30] = {0}, cATpdu[30] = {0};
    rLen = pMsg8583recv->GetTpdu(cTpdu, 30);
    BcdToAsc(cATpdu,cTpdu,rLen);
    memcpy(trasData.HeadData.arrTPDU, (char*)cATpdu, strlen((char*)cATpdu));

    /**< TLV打包 */
    int nResult = tlvData.PackTLVData(cTemp, nLen);
    if(nResult != 1)
    {
        trace_log(ERR,"tlv pack failse :%d", nResult);
        pMsg8583recv->SetValueByStr(39,"ZZ");
        pMsg8583recv->SetValueByStr(56,"tlv pack fail");
        return -1;
    }
    
    memcpy(trasData.TlvData, cTemp, nLen);
    trasData.TlvDataLen = nLen;
    trace_log(NML,"##################cTpdu is %s,  cATpdu is %s , arrTPDU is %s", cTpdu, cATpdu, trasData.HeadData.arrTPDU);
    return 0;
}