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; }
/**< 将消息包的信息赋予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; }