} else { strTemp = strTempVal.Left(iIndex); pEntity->m_nMinLen = atoi(strTemp.GetBuffer(0)); strTemp = strTempVal.Mid(iIndex+1); pEntity->m_nMaxLen = atoi(strTemp.GetBuffer(0)); } } } AddTLVMapItem(pEntity); } return ICC_SUCCESS; }
//建立终端AID列表
//XmlDoc为IC配置文件的句柄
int CICParam::InitAIDList(CXmlDocumentWrapper XmlDoc) { int iAIDTemp,iTerminalAIDNum; CString strTemp,strTempName,strTempVal; CXmlNodeWrapper node(XmlDoc.AsNode()); CXmlNodeListWrapper nodeList(node.FindNodes(\ int ncount = nodeList.Count(); if (ncount != 1) { MessageBox(NULL,\节点错误\ return ICC_ERR_XMLNODE; } CXmlNodeWrapper ParamNode = nodeList.Node(0); CString strName = ParamNode.Name(); iTerminalAIDNum = ParamNode.NumNodes(); for (int i=0; i continue; } AIDITEM *pItem = new AIDITEM; ZeroMemory(pItem,sizeof(AIDITEM)); for (int j = 0; j < ChildNode.NumAttributes(); j++) { strTempName = ChildNode.GetAttribName(j); strTempName.TrimLeft(); strTempName.TrimRight(); strTempVal = ChildNode.GetAttribVal(j); strTempVal.TrimLeft(); strTempVal.TrimRight(); if (strTempName.CompareNoCase(\ { Formater.GetDECData(pItem->ucAID,&iAIDTemp,strTempVal); pItem->ucAIDLen = (BYTE)iAIDTemp; } //应用选择指示器(ASI)指示应用选择时终端上的AID 与卡片中的AID 是完全匹配,还是部分匹配 //0为部分名称匹配,1为全部名称匹配 if (strTempName.CompareNoCase(\ { pItem->ucASI = strTempVal.GetAt(0); } if (strTempName.CompareNoCase(\ { if ((strTempVal.GetLength()+1)/3 > 2) TRACE(_T(\ VERSION ERR\\r\\n\ Formater.GetDECData(pItem->ucVersionNo,&iAIDTemp,strTempVal); } } AddAIDItem(pItem); } return ICC_SUCCESS; } int CICParam::InitSysParam(CXmlDocumentWrapper XmlDoc) { CString strTemp,strTempName,strTempVal; CXmlNodeWrapper ChildNode; CXmlNodeWrapper node(XmlDoc.AsNode()); ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ strTempVal.TrimLeft(); strTempVal.TrimRight(); if (strTempVal.CompareNoCase(\ { m_SysType = TYPE_CALLBACK; } else if (strTempVal.CompareNoCase(\ { m_SysType = TYPE_IDC; } else { m_SysType = TYPE_CardReader; } } return ICC_SUCCESS; } //获取终端参数,参数有一部分是固定设置,一部分应该是下载所得 int CICParam::InitTerminalParms(CXmlDocumentWrapper XmlDoc) { CString strTemp,strTempName,strTempVal; CXmlNodeWrapper ChildNode; int iTemp; BYTE ucValue[255]; TLVDATA tlvData = {0}; ZeroMemory(&m_TerminalParams,sizeof(TERMINALPARAM)); CXmlNodeWrapper node(XmlDoc.AsNode()); ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ //交易证书数据对列表(TDOL) //ConvertHexTlvData(strTempVal,TAG_TDOL,&m_TerminalParams.DefaultTDOL); m_TerminalParams.DefaultTDOL.nTag = TAG_TDOL; Formater.GetDECData(m_TerminalParams.DefaultTDOL.pValue,&m_TerminalParams.DefaultTDOL.nLength,strTempVal); } ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ strTempVal.TrimLeft(); strTempVal.TrimRight(); ConvertHexTlvData(strTempVal,TAG_DDOL,&m_TerminalParams.DefaultDDOL); // m_TerminalParams.DefaultDDOL.nTag = TAG_DDOL; // Formater.GetDECData(m_TerminalParams.DefaultDDOL.pValue,&m_TerminalParams.DefaultDDOL.nLength,strTempVal); } ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ strTempVal.TrimLeft(); strTempVal.TrimRight(); Formater.GetDECData(m_TerminalParams.DenialTAC,&iTemp,strTempVal); } ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ strTempVal.TrimLeft(); strTempVal.TrimRight(); Formater.GetDECData(m_TerminalParams.OnlineTAC,&iTemp,strTempVal); } ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ strTempVal.TrimLeft(); strTempVal.TrimRight(); Formater.GetDECData(m_TerminalParams.DefaultTAC,&iTemp,strTempVal); } ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ ConvertHexTlvData(strTempVal,TAG_TERMINAL_COUNTRY_CODE,&tlvData); _ASSERT(tlvData.nLength == 2); memcpy(m_TerminalParams.ucTerminalCountryCode,tlvData.pValue,tlvData.nLength); } ChildNode = node.FindNode(\ if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ //终端标识 ConvertStrTlvData(strTempVal,TAG_TERMINAL_ID,&tlvData); _ASSERT(tlvData.nLength == 8); memcpy(m_TerminalParams.ucTerminalID,tlvData.pValue,tlvData.nLength); } ; // // // // // // // // ChildNode = node.FindNode(\if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ ConvertHexTlvData(strTempVal,TAG_TERMINAL_TYPE,&tlvData); _ASSERT(tlvData.nLength == 1); } m_TerminalParams.ucTerminalType = tlvData.pValue[0]; ChildNode = node.FindNode(\if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ //终端性能 ConvertHexTlvData(strTempVal,TAG_TERMINAL_CAPABILITIES,&tlvData); _ASSERT(tlvData.nLength == 3); } memcpy(m_TerminalParams.ucTerminalCaps,tlvData.pValue,tlvData.nLength); ChildNode = node.FindNode(\if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ //附加终端性能 ConvertHexTlvData(strTempVal,TAG_ADDITIONAL_TERMINAL_CAPABILITIES,&tlvData) } _ASSERT(tlvData.nLength == 5); memcpy(m_TerminalParams.ucAdditionalTerminalCaps,tlvData.pValue,tlvData.nLength); ZeroMemory(&tlvData,sizeof(TAGDATA)); ChildNode = node.FindNode(\if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ //销售点(POS)输入方式 ConvertHexTlvData(strTempVal,TAG_POS_ENTRY_MODE,&tlvData); } ChildNode = node.FindNode(\if (ChildNode.IsValid()) { strTempVal = ChildNode.GetValue(\ //交易货币代码 ConvertHexTlvData(strTempVal,TAG_TRANSACTION_CURRENCY_CODE,&tlvData); _ASSERT(tlvData.nLength == 2); memcpy(m_TerminalParams.ucTransCurrencyCode,tlvData.pValue,tlvData.nLength);