?? scdrfiltration.cpp
字號:
/* * Copyright 2006 上海國響信息技術有限公司 PD部 * All rights reserved * * 文 件 名:SCdrFiltration.cpp * 文件標識:charging gateway * 功能描述:話單過濾 * * 版 本:v1.0 * 作 者:倪 海 兵 * 日 期:2006.06.28 * * 取代版本:v1.0 * 原 作 者:馮 睿 * 完成日期:2006.05.13 */#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <iostream.h>#include "ConfigXml.h"#include "CTempFileManager.h"#include "SCdrFiltration.h"#include "db/CDRReadForBill.h"#include "asn1/File.h"#include "asn1/Property.h"#include "asn1/BERRead.h"#include "asn1/BERWrite.h"using namespace ASN1;using namespace std;bool C_SCdrFiltration::m_NeedCDRHeader = false;// 過濾條件默認值bool C_SCdrFiltration::m_IsFiltrateByUpDataVol = false;int C_SCdrFiltration::m_UpDataVolLimit = 1;bool C_SCdrFiltration::m_IsFiltrateByDownDataVol = false;int C_SCdrFiltration::m_DownDataVolLimit = 1;bool C_SCdrFiltration::m_IsFiltrateByDuration = false;int C_SCdrFiltration::m_DurationLimit = 1;bool C_SCdrFiltration::m_IsFiltrateByGgsnAddr = false;bool C_SCdrFiltration::m_IsFiltrateBySgsnAddr = false;// 過濾條件補充bool C_SCdrFiltration::m_IsFiltrateByRecordType = false;bool C_SCdrFiltration::m_IsFiltrateByNetworkInitiatedPDPContext = false;bool C_SCdrFiltration::m_IsFiltrateByServedIMEI = false;bool C_SCdrFiltration::m_IsFiltrateByMSNetworkCapability = false;bool C_SCdrFiltration::m_IsFiltrateByRoutingAreaCode = false;bool C_SCdrFiltration::m_IsFiltrateByLocationAreaCode = false;bool C_SCdrFiltration::m_IsFiltrateByCellIdentity = false;bool C_SCdrFiltration::m_IsFiltrateByChargingID = false;bool C_SCdrFiltration::m_IsFiltrateByAccessPointNameNI = false;bool C_SCdrFiltration::m_IsFiltrateByPDPTypeNumber = false;bool C_SCdrFiltration::m_IsFiltrateByServedPDPAddress = false;bool C_SCdrFiltration::m_IsFiltrateByRecordOpenTime = false;bool C_SCdrFiltration::m_IsFiltrateByDiagnostics = false;bool C_SCdrFiltration::m_IsFiltrateByAPNSelectionMode = false;bool C_SCdrFiltration::m_IsFiltrateByAccessPointNameOI = false;bool C_SCdrFiltration::m_IsFiltrateByServedMSISDN = false;bool C_SCdrFiltration::m_IsFiltrateByChargingCharacteristics = false;bool C_SCdrFiltration::m_IsFiltrateByConsolidationResult = false;bool C_SCdrFiltration::m_IsFiltrateByChargingCharacterSelectionMode = false;bool C_SCdrFiltration::m_IsFiltrateBySCFAddress = false;bool C_SCdrFiltration::m_IsFiltrateByServiceKey = false;bool C_SCdrFiltration::m_IsFiltrateByDefaultTransacHandling = false;bool C_SCdrFiltration::m_IsFiltrateByCAMELAPNNI = false;bool C_SCdrFiltration::m_IsFiltrateByCAMELAPNOI = false;bool C_SCdrFiltration::m_IsFiltrateByNumberOfDPEncounter = false;bool C_SCdrFiltration::m_IsFiltrateByLevelOfCamelService = false;bool C_SCdrFiltration::m_IsFiltrateByFreeFormatData = false;bool C_SCdrFiltration::m_IsFiltrateByFFDAppendIndicator = false;bool C_SCdrFiltration::m_IsFiltrateByDefaultSMSHandling = false;bool C_SCdrFiltration::m_IsFiltrateByCAMELCallingPartyNumber = false;bool C_SCdrFiltration::m_IsFiltrateByCAMELAccessDestinationSubNumber = false;bool C_SCdrFiltration::m_IsFiltrateByCAMELSMSAdress = false;bool C_SCdrFiltration::m_IsFiltrateBySmsReferenceNumber = false;bool C_SCdrFiltration::m_IsFiltrateByDynamicAddressFlag = false;bool C_SCdrFiltration::m_IsFiltrateByAPNOperatorIdentifier = false;bool C_SCdrFiltration::m_IsFiltrateByAnonyAccessIndicator = false;bool C_SCdrFiltration::m_IsFiltrateBySystemType = false;bool C_SCdrFiltration::m_IsFiltrateBySGSNChange = false;bool C_SCdrFiltration::m_IsFiltrateByCauseForRecClosing = false;bool C_SCdrFiltration::m_IsFiltrateByRecordSequenceNumber = false;bool C_SCdrFiltration::m_IsFiltrateByNodeID = false;bool C_SCdrFiltration::m_IsFiltrateByLocalRecordSequeceNumnber = false;bool C_SCdrFiltration::m_IsFiltrateByUnsentDownlinkVolume = false;bool C_SCdrFiltration::m_IsFiltrateByRecordExtensions = false;//#define CONF_PATH "CdrFiltration.FilterRule.SCDR"#define CONF_NEED_CDR_HEADER "NeedCDRHeader"// 過濾條件的Key#define CONF_ISFILTER_BYUPDATAVOL "IsFiltrateByUpDataVol"#define CONF_VALUE_DATAVOL_UP "ListOfDataVol.DataVolGprsUp"#define CONF_FILTER_BYDOWNDATAVOL "IsFiltrateByDownDataVol"#define CONF_VALUE_DATAVOL_DOWN "ListOfDataVol.DataVolGprsDown"#define CONF_FILTER_BYDURATION "IsFiltrateByDuration"#define CONF_VALUE_DURATION "Duration"#define CONF_ISFILTERBYGGSNADDR "IsFiltrateByGgsnAddr"#define CONF_VALUE_GGSNADDR "GgsnAddr"#define CONF_ISFILTERBYSGSNADDR "IsFiltrateBySgsnAddr"#define CONF_VALUE_SGSNADDR "SgsnAddr"// 過濾條件補充// 過濾開關#define CONF_ISFILT_BY_RECORDTYPE "IsFiltrateByRecordType"#define CONF_ISFILT_BY_NETWORKINITIATEDPDPCONTEXT "IsFiltrateByNetworkInitiatedPDPContext"#define CONF_ISFILT_BY_SERVEDIMSI "IsFiltrateByServedIMSI"#define CONF_ISFILT_BY_SERVEDIMEI "IsFiltrateByServedIMEI"#define CONF_ISFILT_BY_MSNETWORKCAPABILITY "IsFiltrateByMSNetworkCapability"#define CONF_ISFILT_BY_ROUTINGAREACODE "IsFiltrateByRoutingAreaCode"#define CONF_ISFILT_BY_LOCATIONAREACODE "IsFiltrateByLocationAreaCode"#define CONF_ISFILT_BY_CELLIDENTITY "IsFiltrateByCellIdentity"#define CONF_ISFILT_BY_CHARGINGID "IsFiltrateByChargingID"#define CONF_ISFILT_BY_ACCESSPOINTNAMENI "IsFiltrateByAccessPointNameNI"#define CONF_ISFILT_BY_PDPTYPENUMBER "IsFiltrateByPDPTypeNumber"#define CONF_ISFILT_BY_SERVEDPDPADDRESS "IsFiltrateByServedPDPAddress"#define CONF_ISFILT_BY_RECORDOPENTIME "IsFiltrateByRecordOpenTime"#define CONF_ISFILT_BY_DIAGNOSTICS "IsFiltrateByDiagnostics"#define CONF_ISFILT_BY_APNSELECTIONMODE "IsFiltrateByAPNSelectionMode"#define CONF_ISFILT_BY_ACCESSPOINTNAMEOI "IsFiltrateByAccessPointNameOI"#define CONF_ISFILT_BY_SERVEDMSISDN "IsFiltrateByServedMSISDN"#define CONF_ISFILT_BY_CHARGINGCHARACTERISTICS "IsFiltrateByChargingCharacteristics"#define CONF_ISFILT_BY_CONSOLIDATIONRESULT "IsFiltrateByConsolidationResult"#define CONF_ISFILT_BY_CHARGINGCHARACTERSELECTIONMODE "IsFiltrateByChargingCharacterSelectionMode"#define CONF_ISFILT_BY_SCFADDRESS "IsFiltrateBySCFAddress"#define CONF_ISFILT_BY_SERVICEKEY "IsFiltrateByServiceKey"#define CONF_ISFILT_BY_DEFAULTTRANSACHANDLING "IsFiltrateByDefaultTransacHandling"#define CONF_ISFILT_BY_CAMELAPNNI "IsFiltrateByCAMELAPNNI"#define CONF_ISFILT_BY_CAMELAPNOI "IsFiltrateByCAMELAPNOI"#define CONF_ISFILT_BY_NUMBEROFDPENCOUNTER "IsFiltrateByNumberOfDPEncounter"#define CONF_ISFILT_BY_LEVELOFCAMELSERVICE "IsFiltrateByLevelOfCamelService"#define CONF_ISFILT_BY_FREEFORMATDATA "IsFiltrateByFreeFormatData"#define CONF_ISFILT_BY_FFDAPPENDINDICATOR "IsFiltrateByFFDAppendIndicator"#define CONF_ISFILT_BY_DEFAULTSMSHANDLING "IsFiltrateByDefaultSMSHandling"#define CONF_ISFILT_BY_CAMELCALLINGPARTYNUMBER "IsFiltrateByCAMELCallingPartyNumber"#define CONF_ISFILT_BY_CAMELACCESSDESTINATIONSUBNUMBER "IsFiltrateByCAMELAccessDestinationSubNumber"#define CONF_ISFILT_BY_CAMELSMSADRESS "IsFiltrateByCAMELSMSAdress"#define CONF_ISFILT_BY_SMSREFERENCENUMBER "IsFiltrateBySmsReferenceNumber"#define CONF_ISFILT_BY_DYNAMICADDRESSFLAG "IsFiltrateByDynamicAddressFlag"#define CONF_ISFILT_BY_APNOPERATORIDENTIFIER "IsFiltrateByAPNOperatorIdentifier"#define CONF_ISFILT_BY_ANONYACCESSINDICATOR "IsFiltrateByAnonyAccessIndicator"#define CONF_ISFILT_BY_SYSTEMTYPE "IsFiltrateBySystemType"#define CONF_ISFILT_BY_SGSNCHANGE "IsFiltrateBySGSNChange"#define CONF_ISFILT_BY_CAUSEFORRECCLOSING "IsFiltrateByCauseForRecClosing"#define CONF_ISFILT_BY_RECORDSEQUENCENUMBER "IsFiltrateByRecordSequenceNumber"#define CONF_ISFILT_BY_NODEID "IsFiltrateByNodeID"#define CONF_ISFILT_BY_LOCALRECORDSEQUECENUMNBER "IsFiltrateByLocalRecordSequeceNumnber"#define CONF_ISFILT_BY_UNSENTDOWNLINKVOLUME "IsFiltrateByUnsentDownlinkVolume"#define CONF_ISFILT_BY_RECORDEXTENSIONS "IsFiltrateByRecordExtensions"// 過濾數據#define CONF_FILTERRECORDTYPE "FilterRecordType"#define CONF_FILTERNETWORKINITIATEDPDPCONTEXT "FilterNetworkInitiatedPDPContext"#define CONF_FILTERSERVEDIMSI "FilterServedIMSI"#define CONF_FILTERSERVEDIMEI "FilterServedIMEI"#define CONF_FILTERMSNETWORKCAPABILITY "FilterMSNetworkCapability"#define CONF_FILTERROUTINGAREACODE "FilterRoutingAreaCode"#define CONF_FILTERLOCATIONAREACODE "FilterLocationAreaCode"#define CONF_FILTERCELLIDENTITY "FilterCellIdentity"#define CONF_FILTERCHARGINGID "FilterChargingID"#define CONF_FILTERACCESSPOINTNAMENI "FilterAccessPointNameNI"#define CONF_FILTERPDPTYPENUMBER "FilterPDPTypeNumber"#define CONF_FILTERSERVEDPDPADDRESS "FilterServedPDPAddress"#define CONF_FILTERRECORDOPENTIME "FilterRecordOpenTime"#define CONF_FILTERDIAGNOSTICS "FilterDiagnostics"#define CONF_FILTERAPNSELECTIONMODE "FilterAPNSelectionMode"#define CONF_FILTERACCESSPOINTNAMEOI "FilterAccessPointNameOI"#define CONF_FILTERSERVEDMSISDN "FilterServedMSISDN"#define CONF_FILTERCHARGINGCHARACTERISTICS "FilterChargingCharacteristics"#define CONF_FILTERCONSOLIDATIONRESULT "FilterConsolidationResult"#define CONF_FILTERCHARGINGCHARACTERSELECTIONMODE "FilterChargingCharacterSelectionMode"#define CONF_FILTERSCFADDRESS "FilterSCFAddress"#define CONF_FILTERSERVICEKEY "FilterServiceKey"#define CONF_FILTERDEFAULTTRANSACHANDLING "FilterDefaultTransacHandling"#define CONF_FILTERCAMELAPNNI "FilterCAMELAPNNI"#define CONF_FILTERCAMELAPNOI "FilterCAMELAPNOI"#define CONF_FILTERNUMBEROFDPENCOUNTER "FilterNumberOfDPEncounter"#define CONF_FILTERLEVELOFCAMELSERVICE "FilterLevelOfCamelService"#define CONF_FILTERFREEFORMATDATA "FilterFreeFormatData"#define CONF_FILTERFFDAPPENDINDICATOR "FilterFFDAppendIndicator"#define CONF_FILTERDEFAULTSMSHANDLING "FilterDefaultSMSHandling"#define CONF_FILTERCAMELCALLINGPARTYNUMBER "FilterCAMELCallingPartyNumber"#define CONF_FILTERCAMELACCESSDESTINATIONSUBNUMBER "FilterCAMELAccessDestinationSubNumber"#define CONF_FILTERCAMELSMSADRESS "FilterCAMELSMSAdress"#define CONF_FILTERSMSREFERENCENUMBER "FilterSmsReferenceNumber"#define CONF_FILTERDYNAMICADDRESSFLAG "FilterDynamicAddressFlag"#define CONF_FILTERAPNOPERATORIDENTIFIER "FilterAPNOperatorIdentifier"#define CONF_FILTERANONYACCESSINDICATOR "FilterAnonyAccessIndicator"#define CONF_FILTERSYSTEMTYPE "FilterSystemType"#define CONF_FILTERSGSNCHANGE "FilterSGSNChange"#define CONF_FILTERCAUSEFORRECCLOSING "FilterCauseForRecClosing"#define CONF_FILTERRECORDSEQUENCENUMBER "FilterRecordSequenceNumber"#define CONF_FILTERNODEID "FilterNodeID"#define CONF_FILTERLOCALRECORDSEQUECENUMNBER "FilterLocalRecordSequeceNumnber"#define CONF_FILTERUNSENTDOWNLINKVOLUME "FilterUnsentDownlinkVolume"#define CONF_FILTERRECORDEXTENSIONS "FilterRecordExtensions"#define FILE_NAME_OF_CONFIG "../config/charginggateway.xml"#ifdef __cplusplusextern "C"{#endif// ASN1 encodestatic void ASN1Encode(CBERWrite &writer,S_OSCDR *pOSCdr,S_CSCDR *pSCdr,S_LLOTV *pLOTV,int nLOTV,S_LCOMM *pCommon,int nCommon);// Add CDR Header//bool AddCDRHeader2Buf(const bool bBCDFormatFlag,int nCDRLength,char *pCDRBuf);#ifdef __cplusplus}#endifstatic void ASN1Encode(CBERWrite &writer,S_OSCDR *pOSCdr,S_CSCDR *pSCdr,S_LLOTV *pLOTV,int nLOTV,S_LCOMM *pCommon,int nCommon){ printf("*********writer asn1 encode start*********\n"); //asn1 encode ... writer.Start(); writer.SetRecordType("GMCC-SCDR"); writer.AddUserOctet("GMCC-SCDR", "", 0);//OCTET writer.AddUserInteger("GMCC-SCDR.RecordType", 18);//pSCdr->RecordType);//INT if ( NULL != pSCdr ) { //writer.AddUserInteger("GMCC-SCDR.NetworkInitiation", pSCdr->NetworkInitiatedPDPContext);//INT writer.AddUserBool("GMCC-SCDR.NetworkInitiation", pSCdr->NetworkInitiatedPDPContext);//BOOL * //if ( 2 == pSCdr->SystemType ) { writer.AddUserInteger("GMCC-SCDR.anonymousAccessIndicator", pSCdr->AnonyAccessIndicator);//INT } if (strlen(pSCdr->ServedIMSI) > 0) { writer.AddUserBCDString("GMCC-SCDR.ServedIMSI", pSCdr->ServedIMSI);//BCDSTRING } if (strlen(pSCdr->ServedIMEI) > 0) { writer.AddUserBCDString("GMCC-SCDR.ServedIMEI", pSCdr->ServedIMEI);//BCDSTRING } //if (strlen(pSCdr->SGSNIPAddress) > 0) //{ // writer.AddUserOctet("GMCC-SCDR.SGSNAddress", "", 0);//OCTET // //writer.AddUserString("GMCC-SCDR.SGSNAddress", "");//STRING // writer.AddUserIpAddress("GMCC-SCDR.SGSNAddress.IPBinaryAddress", pSCdr->SGSNIPAddress);//IPADDSTRING //} if (nCommon > 0 && pCommon != NULL) { writer.AddUserOctet("GMCC-SCDR.SGSNAddress", "", 0);//OCTET for (int i=0; i<nCommon; i++) { //writer.AddUserOctet("GMCC-SCDR.SGSNAddress.Set", "", 0);//OCTET if (pCommon[i].SubId == 0) { if (strlen(pCommon[i].SGSNAddr) > 0) { writer.AddUserIpAddress("GMCC-SCDR.SGSNAddress.IPBinaryAddress", pCommon[i].SGSNAddr);//IPADDRSTRING break; } } } } if (strlen(pSCdr->MSNetworkCapability) > 0) { writer.AddUserOctet("GMCC-SCDR.MsNetworkCapability", pSCdr->MSNetworkCapability);//OCTET } if (strlen(pSCdr->RoutingAreaCode) > 0) { writer.AddUserOctet("GMCC-SCDR.RoutingArea", pSCdr->RoutingAreaCode);//OCTET } if (strlen(pSCdr->LocationAreaCode) > 0) { writer.AddUserOctet("GMCC-SCDR.LocationAreaCode", pSCdr->LocationAreaCode);//OCTET } if (strlen(pSCdr->CellIdentity) > 0) { writer.AddUserOctet("GMCC-SCDR.CellIdentity", pSCdr->CellIdentity);//OCTET } if (strlen(pSCdr->ChargingID) > 0) { writer.AddUserInteger("GMCC-SCDR.ChargingID", pSCdr->ChargingID);//INT } if (strlen(pSCdr->GGSNAddress) > 0) { writer.AddUserOctet("GMCC-SCDR.GGSNAddressUsed", "", 0);//OCTET writer.AddUserIpAddress("GMCC-SCDR.GGSNAddressUsed.IPBinaryAddress", pSCdr->GGSNAddress);//IPADDRSTRING } if (strlen(pSCdr->AccessPointNameNI) > 0) { writer.AddUserString("GMCC-SCDR.AccessPointNameNI", pSCdr->AccessPointNameNI);//STRING } if (strlen(pSCdr->PDPTypeNumber) > 0) { writer.AddUserOctet("GMCC-SCDR.PDPType", pSCdr->PDPTypeNumber);//OCTET } if (strlen(pSCdr->ServedPDPAddress) > 0) { writer.AddUserOctet("GMCC-SCDR.ServedPDPAddress", "",0);//OCTET writer.AddUserOctet("GMCC-SCDR.ServedPDPAddress.IPAddress", "",0);//OCTET writer.AddUserIpAddress("GMCC-SCDR.ServedPDPAddress.IPAddress.IPBinaryAddress", pSCdr->ServedPDPAddress);//IPADDRSTRING } if (nLOTV > 0 && pLOTV != NULL) { writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes", "", 0);//OCTET for (int i=0; i<nLOTV; i++) { writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq", "", 0);//OCTET // QosRequested writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested", "", 0);//OCTET writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.gsmQosInformation", "", 0);//OCTET writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.gsmQosInformation.Reliability", pLOTV[i].QoSRReliability);//INT writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.gsmQosInformation.Delay", pLOTV[i].QoSRDelay);//INT writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.gsmQosInformation.Precedence", pLOTV[i].QoSRPrecedence);//INT if (strlen(pLOTV[i].QoSRPeakThrougput) > 0) { writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.gsmQosInformation.PeakThroughput", pLOTV[i].QoSRPeakThrougput);//INT } if (strlen(pLOTV[i].QoSRMeanThroughput) > 0) { writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.gsmQosInformation.MeanThroughput", pLOTV[i].QoSRMeanThroughput);//INT } if (strlen(pLOTV[i].QoSRUMTS) > 0) { writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosRequested.umtsQosInformation", pLOTV[i].QoSRUMTS);//OCTET } // QosNegotiated writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated", "", 0);//OCTET writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.gsmQosInformation", "", 0);//OCTET writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.gsmQosInformation.Reliability", pLOTV[i].QoSNReliability);//INT writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.gsmQosInformation.Delay", pLOTV[i].QoSNDelay);//INT writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.gsmQosInformation.Precedence", pLOTV[i].QoSNPrecedence);//INT if (strlen(pLOTV[i].QoSNPeakThrougput) > 0) { writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.gsmQosInformation.PeakThroughput", pLOTV[i].QoSNPeakThrougput);//INT } if (strlen(pLOTV[i].QoSNMeanThroughput) > 0) { writer.AddUserInteger("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.gsmQosInformation.MeanThroughput", pLOTV[i].QoSNMeanThroughput);//INT } if (strlen(pLOTV[i].QoSNUMTS) > 0) { writer.AddUserOctet("GMCC-SCDR.ListOfTrafficVolumes.Seq.QosNegotiated.umtsQosInformation", pLOTV[i].QoSNUMTS);//OCTET } if (strlen(pLOTV[i].DataVolumeGPRSUp))
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -