%{ #include #include #include #define Y_TELESC 1 #define Y_BEARSC 2 #define Y_CHUNIT 3 #define Y_CHITEM 4 #define Y_IMSI 5 #define Y_MSISDN 6 #define Y_CHRINFO 7 #define Y_UPI 8 #define Y_DATETIME 9 #define Y_OFFSET 10 #define Y_CALLC 11 #define Y_CTYPE 12 #define Y_DCATE 13 #define Y_TBAND 14 #define Y_MCHANNO 15 #define Y_CHANACC 16 #define Y_CHANCOD 17 #define Y_UCHANNO 18 #define Y_CHARGE 19 #define Y_EXCODE 20 #define Y_RADCHREQ 21 #define Y_SPEECHREQ 22 #define Y_SPEECHUSE 23 #define Y_CLIR 24 #define Y_CTYPE2 25 #define Y_CMSERVKEY 26 #define Y_CMSERVLEV 27 #define Y_CMSANO 28 #define Y_CMCRMSC 29 #define Y_CMCRNO 30 #define Y_CMCFIND 31 #define Y_CSEI 32 #define Y_CTYPE3 33 #define Y_QOSREL 34 #define Y_QOSDEL 35 #define Y_QOSPREC 36 #define Y_QOSPPUT 37 #define Y_QOSMPUT 38 #define Y_SSREQ 39 #define Y_SSCODE 40 #define Y_CHTYPE 41 #define STRING_MAX 100 /* Static list lengths */ #define RECENT_MAX 10000 #define CTIMEO_MAX 100 %} %union { char string[100][100]; } %token ABSOLUTEAMOUNT ABSOLUTEAMOUNT_END %token ACCESSPOINTNAMENI ACCESSPOINTNAMENI_END %token ACCESSPOINTNAMEOI ACCESSPOINTNAMEOI_END %token ACCOUNTINGINFO ACCOUNTINGINFO_END %token ACTUALDELIVERYTIMESTAMP ACTUALDELIVERYTIMESTAMP_END %token ADDRESSSTRINGDIGITS ADDRESSSTRINGDIGITS_END %token ADVISEDCHARGE ADVISEDCHARGE_END %token ADVISEDCHARGECURRENCY ADVISEDCHARGECURRENCY_END %token ADVISEDCHARGEINFORMATION ADVISEDCHARGEINFORMATION_END %token AGEOFLOCATION AGEOFLOCATION_END %token AIURREQUESTED AIURREQUESTED_END %token AUDITCONTROLINFO AUDITCONTROLINFO_END %token BASICHSCSDPARAMETERS BASICHSCSDPARAMETERS_END %token BASICSERVICE BASICSERVICE_END %token BASICSERVICECODELIST BASICSERVICECODELIST_END %token BASICSERVICEUSED BASICSERVICEUSED_END %token BASICSERVICEUSEDLIST BASICSERVICEUSEDLIST_END %token BATCHCONTROLINFO BATCHCONTROLINFO_END %token BEARERSERVICECODE BEARERSERVICECODE_END %token CALLEDCOUNTRYCODE CALLEDCOUNTRYCODE_END %token CALLEDNUMANALYSIS CALLEDNUMANALYSIS_END %token CALLEDNUMANALYSISCODE CALLEDNUMANALYSISCODE_END %token CALLEDNUMANALYSISLIST CALLEDNUMANALYSISLIST_END %token CALLEDPLACE CALLEDPLACE_END %token CALLEDREGION CALLEDREGION_END %token CALLEVENTDETAILLIST CALLEVENTDETAILLIST_END %token CALLEVENTDETAILSCOUNT CALLEVENTDETAILSCOUNT_END %token CALLEVENTSTARTTIMESTAMP CALLEVENTSTARTTIMESTAMP_END %token CALLORIGINATOR CALLORIGINATOR_END %token CALLREFERENCE CALLREFERENCE_END %token CALLTYPEGROUP CALLTYPEGROUP_END %token CALLTYPELEVEL1 CALLTYPELEVEL1_END %token CALLTYPELEVEL2 CALLTYPELEVEL2_END %token CALLTYPELEVEL3 CALLTYPELEVEL3_END %token CAMELCALLREFERENCE CAMELCALLREFERENCE_END %token CAMELCALLREFERENCENUMBER CAMELCALLREFERENCENUMBER_END %token CAMELINITIATEDCFINDICATOR CAMELINITIATEDCFINDICATOR_END %token CAMELMODIFICATION CAMELMODIFICATION_END %token CAMELMODIFICATIONLIST CAMELMODIFICATIONLIST_END %token CAMELSERVERADDRESS CAMELSERVERADDRESS_END %token CAMELSERVICEKEY CAMELSERVICEKEY_END %token CAMELSERVICELEVEL CAMELSERVICELEVEL_END %token CAMELSERVICEUSED CAMELSERVICEUSED_END %token CAUSEFORTERM CAUSEFORTERM_END %token CELLID CELLID_END %token CHANNELCODING CHANNELCODING_END %token CHANNELCODINGACCEPTABLELIST CHANNELCODINGACCEPTABLELIST_END %token CHARGE CHARGE_END %token CHARGEABLEUNITS CHARGEABLEUNITS_END %token CHARGEDETAIL CHARGEDETAIL_END %token CHARGEDETAILLIST CHARGEDETAILLIST_END %token CHARGEDITEM CHARGEDITEM_END %token CHARGEDPARTYEQUIPMENT CHARGEDPARTYEQUIPMENT_END %token CHARGEDPARTYHOMEIDENTIFICATION CHARGEDPARTYHOMEIDENTIFICATION_END %token CHARGEDPARTYHOMEIDLIST CHARGEDPARTYHOMEIDLIST_END %token CHARGEDPARTYIDENTIFICATION CHARGEDPARTYIDENTIFICATION_END %token CHARGEDPARTYIDENTIFIER CHARGEDPARTYIDENTIFIER_END %token CHARGEDPARTYIDLIST CHARGEDPARTYIDLIST_END %token CHARGEDPARTYIDTYPE CHARGEDPARTYIDTYPE_END %token CHARGEDPARTYINFORMATION CHARGEDPARTYINFORMATION_END %token CHARGEDPARTYLOCATION CHARGEDPARTYLOCATION_END %token CHARGEDPARTYLOCATIONLIST CHARGEDPARTYLOCATIONLIST_END %token CHARGEDPARTYSTATUS CHARGEDPARTYSTATUS_END %token CHARGEDUNITS CHARGEDUNITS_END %token CHARGEINFORMATION CHARGEINFORMATION_END %token CHARGEINFORMATIONLIST CHARGEINFORMATIONLIST_END %token CHARGEREFUNDINDICATOR CHARGEREFUNDINDICATOR_END %token CHARGETYPE CHARGETYPE_END %token CHARGINGCHARACTERISTICS CHARGINGCHARACTERISTICS_END %token CHARGINGID CHARGINGID_END %token CHARGINGPOINT CHARGINGPOINT_END %token CHARGINGTIMESTAMP CHARGINGTIMESTAMP_END %token CLIRINDICATOR CLIRINDICATOR_END %token COMMISSION COMMISSION_END %token COMPLETIONTIMESTAMP COMPLETIONTIMESTAMP_END %token CONTENTCHARGINGPOINT CONTENTCHARGINGPOINT_END %token CONTENTPROVIDER CONTENTPROVIDER_END %token CONTENTPROVIDERIDENTIFIER CONTENTPROVIDERIDENTIFIER_END %token CONTENTPROVIDERIDLIST CONTENTPROVIDERIDLIST_END %token CONTENTPROVIDERIDTYPE CONTENTPROVIDERIDTYPE_END %token CONTENTPROVIDERNAME CONTENTPROVIDERNAME_END %token CONTENTSERVICEUSED CONTENTSERVICEUSED_END %token CONTENTSERVICEUSEDLIST CONTENTSERVICEUSEDLIST_END %token CONTENTTRANSACTION CONTENTTRANSACTION_END %token CONTENTTRANSACTIONBASICINFO CONTENTTRANSACTIONBASICINFO_END %token CONTENTTRANSACTIONCODE CONTENTTRANSACTIONCODE_END %token CONTENTTRANSACTIONTYPE CONTENTTRANSACTIONTYPE_END %token COUNTRYCODE COUNTRYCODE_END %token COUNTRYCODELIST COUNTRYCODELIST_END %token CSEINFORMATION CSEINFORMATION_END %token CURRENCYCONVERSION CURRENCYCONVERSION_END %token CURRENCYCONVERSIONLIST CURRENCYCONVERSIONLIST_END %token CUSTOMERIDENTIFIER CUSTOMERIDENTIFIER_END %token CUSTOMERIDTYPE CUSTOMERIDTYPE_END %token DATAVOLUME DATAVOLUME_END %token DATAVOLUMEINCOMING DATAVOLUMEINCOMING_END %token DATAVOLUMEOUTGOING DATAVOLUMEOUTGOING_END %token DATAVOLUMEREFERENCE DATAVOLUMEREFERENCE_END %token DATETIME DATETIME_END %token DATETIMELONG DATETIMELONG_END %token DAYCATEGORY DAYCATEGORY_END %token DAYCATEGORYSUBTYPE DAYCATEGORYSUBTYPE_END %token DEFAULTCALLHANDLINGINDICATOR DEFAULTCALLHANDLINGINDICATOR_END %token DEPOSITTIMESTAMP DEPOSITTIMESTAMP_END %token DESTINATION DESTINATION_END %token DESTINATIONNETWORK DESTINATIONNETWORK_END %token DIALLEDDIGITS DIALLEDDIGITS_END %token DISCOUNTCODE DISCOUNTCODE_END %token DISCOUNTINFORMATION DISCOUNTINFORMATION_END %token DISCOUNTING DISCOUNTING_END %token DISCOUNTINGLIST DISCOUNTINGLIST_END %token DISCOUNTRATE DISCOUNTRATE_END %token DISCOUNTVALUE DISCOUNTVALUE_END %token DISTANCECHARGEBANDCODE DISTANCECHARGEBANDCODE_END %token DUALBEARERSERVICECODE DUALBEARERSERVICECODE_END %token DUALTELESERVICECODE DUALTELESERVICECODE_END %token EARLIESTCALLTIMESTAMP EARLIESTCALLTIMESTAMP_END %token EQUIPMENTID EQUIPMENTID_END %token EQUIPMENTIDTYPE EQUIPMENTIDTYPE_END %token EQUIPMENTINFORMATION EQUIPMENTINFORMATION_END %token ESN ESN_END %token EXCHANGERATE EXCHANGERATE_END %token EXCHANGERATECODE EXCHANGERATECODE_END %token FILEAVAILABLETIMESTAMP FILEAVAILABLETIMESTAMP_END %token FILECREATIONTIMESTAMP FILECREATIONTIMESTAMP_END %token FILESEQUENCENUMBER FILESEQUENCENUMBER_END %token FILETYPEINDICATOR FILETYPEINDICATOR_END %token FNUR FNUR_END %token FRAUDMONITORINDICATOR FRAUDMONITORINDICATOR_END %token GEOGRAPHICALLOCATION GEOGRAPHICALLOCATION_END %token GMLCADDRESS GMLCADDRESS_END %token GPRSBASICCALLINFORMATION GPRSBASICCALLINFORMATION_END %token GPRSCALL GPRSCALL_END %token GPRSCHARGEABLESUBSCRIBER GPRSCHARGEABLESUBSCRIBER_END %token GPRSDESTINATION GPRSDESTINATION_END %token GPRSLOCATIONINFORMATION GPRSLOCATIONINFORMATION_END %token GPRSNETWORKLOCATION GPRSNETWORKLOCATION_END %token GPRSSERVICEUSAGE GPRSSERVICEUSAGE_END %token GPRSSERVICEUSAGELIST GPRSSERVICEUSAGELIST_END %token GPRSSERVICEUSED GPRSSERVICEUSED_END %token GSMCHARGEABLESUBSCRIBER GSMCHARGEABLESUBSCRIBER_END %token GSMQOSINFORMATION GSMQOSINFORMATION_END %token GSMQOSREQUESTED GSMQOSREQUESTED_END %token GSMQOSUSED GSMQOSUSED_END %token GSNADDRESS GSNADDRESS_END %token HOMEBID HOMEBID_END %token HOMEIDENTIFIER HOMEIDENTIFIER_END %token HOMEIDTYPE HOMEIDTYPE_END %token HOMELOCATIONINFORMATION HOMELOCATIONINFORMATION_END %token HORIZONTALACCURACYDELIVERED HORIZONTALACCURACYDELIVERED_END %token HORIZONTALACCURACYREQUESTED HORIZONTALACCURACYREQUESTED_END %token HSCSDINFORMATION HSCSDINFORMATION_END %token HSCSDPARAMETERMODIFICATION HSCSDPARAMETERMODIFICATION_END %token HSCSDPARAMETERMODIFICATIONLIST HSCSDPARAMETERMODIFICATIONLIST_END %token IAC IAC_END %token IACLIST IACLIST_END %token IMEI IMEI_END %token IMSI IMSI_END %token INITIATINGPARTY INITIATINGPARTY_END %token INTERNETSERVICEPROVIDER INTERNETSERVICEPROVIDER_END %token INTERNETSERVICEPROVIDERIDLIST INTERNETSERVICEPROVIDERIDLIST_END %token IPTEXTV4ADDRESS IPTEXTV4ADDRESS_END %token IPTEXTV6ADDRESS IPTEXTV6ADDRESS_END %token ISPIDENTIFIER ISPIDENTIFIER_END %token ISPIDTYPE ISPIDTYPE_END %token ISPLIST ISPLIST_END %token LATESTCALLTIMESTAMP LATESTCALLTIMESTAMP_END %token LATITUDE LATITUDE_END %token LCSQOSDELIVERED LCSQOSDELIVERED_END %token LCSQOSREQUESTED LCSQOSREQUESTED_END %token LCSREQUESTTIMESTAMP LCSREQUESTTIMESTAMP_END %token LCSSPIDENTIFICATION LCSSPIDENTIFICATION_END %token LCSSPIDENTIFICATIONLIST LCSSPIDENTIFICATIONLIST_END %token LCSSPINFORMATION LCSSPINFORMATION_END %token LCSTRANSACTIONSTATUS LCSTRANSACTIONSTATUS_END %token LOCALCURRENCY LOCALCURRENCY_END %token LOCALTIMESTAMP LOCALTIMESTAMP_END %token LOCATIONAREA LOCATIONAREA_END %token LOCATIONDESCRIPTION LOCATIONDESCRIPTION_END %token LOCATIONIDENTIFIER LOCATIONIDENTIFIER_END %token LOCATIONIDTYPE LOCATIONIDTYPE_END %token LOCATIONINFORMATION LOCATIONINFORMATION_END %token LOCATIONSERVICE LOCATIONSERVICE_END %token LOCATIONSERVICEUSAGE LOCATIONSERVICEUSAGE_END %token LONGITUDE LONGITUDE_END %token MDN MDN_END %token MESSAGEDESCRIPTION MESSAGEDESCRIPTION_END %token MESSAGEDESCRIPTIONCODE MESSAGEDESCRIPTIONCODE_END %token MESSAGEDESCRIPTIONINFOLIST MESSAGEDESCRIPTIONINFOLIST_END %token MESSAGEDESCRIPTIONINFORMATION MESSAGEDESCRIPTIONINFORMATION_END %token MESSAGESTATUS MESSAGESTATUS_END %token MESSAGETYPE MESSAGETYPE_END %token MIN MIN_END %token MINCHARGEABLESUBSCRIBER MINCHARGEABLESUBSCRIBER_END %token MOBASICCALLINFORMATION MOBASICCALLINFORMATION_END %token MOBILEORIGINATEDCALL MOBILEORIGINATEDCALL_END %token MOBILESTATIONCLASSMARK MOBILESTATIONCLASSMARK_END %token MOBILETERMINATEDCALL MOBILETERMINATEDCALL_END %token MODIFICATIONTIMESTAMP MODIFICATIONTIMESTAMP_END %token MSCID MSCID_END %token MSISDN MSISDN_END %token MTBASICCALLINFORMATION MTBASICCALLINFORMATION_END %token MULTIRATEINDICATOR MULTIRATEINDICATOR_END %token NETWORK NETWORK_END %token NETWORKID NETWORKID_END %token NETWORKIDENTIFIER NETWORKIDENTIFIER_END %token NETWORKIDTYPE NETWORKIDTYPE_END %token NETWORKINFO NETWORKINFO_END %token NETWORKINITPDPCONTEXT NETWORKINITPDPCONTEXT_END %token NETWORKLIST NETWORKLIST_END %token NETWORKLOCATION NETWORKLOCATION_END %token NETWORKTYPE NETWORKTYPE_END %token NONCHARGEDPARTY NONCHARGEDPARTY_END %token NOTIFICATION NOTIFICATION_END %token NUMBEROFCHANNELS NUMBEROFCHANNELS_END %token NUMBEROFCHANNELSUSED NUMBEROFCHANNELSUSED_END %token NUMBEROFDECIMALPLACES NUMBEROFDECIMALPLACES_END %token OBJECTTYPE OBJECTTYPE_END %token OPERATORSPECINFOLIST OPERATORSPECINFOLIST_END %token OPERATORSPECINFORMATION OPERATORSPECINFORMATION_END %token ORDERPLACEDTIMESTAMP ORDERPLACEDTIMESTAMP_END %token ORIGINATINGNETWORK ORIGINATINGNETWORK_END %token PACKETDATAPROTOCOLADDRESS PACKETDATAPROTOCOLADDRESS_END %token PAIDINDICATOR PAIDINDICATOR_END %token PARTIALTYPEINDICATOR PARTIALTYPEINDICATOR_END %token PAYMENTMETHOD PAYMENTMETHOD_END %token PDPADDRESS PDPADDRESS_END %token PDPCONTEXTSTARTTIMESTAMP PDPCONTEXTSTARTTIMESTAMP_END %token PDPTYPE PDPTYPE_END %token PLMNID PLMNID_END %token POSITIONINGMETHOD POSITIONINGMETHOD_END %token PRIORITYCODE PRIORITYCODE_END %token QOSALLOCRETENPRIORITY QOSALLOCRETENPRIORITY_END %token QOSDELAY QOSDELAY_END %token QOSGUARANTEEDBITRATEDOWNLINK QOSGUARANTEEDBITRATEDOWNLINK_END %token QOSGUARANTEEDBITRATEUPLINK QOSGUARANTEEDBITRATEUPLINK_END %token QOSMAXBITRATEDOWNLINK QOSMAXBITRATEDOWNLINK_END %token QOSMAXBITRATEUPLINK QOSMAXBITRATEUPLINK_END %token QOSMEANTHROUGHPUT QOSMEANTHROUGHPUT_END %token QOSPEAKTHROUGHPUT QOSPEAKTHROUGHPUT_END %token QOSPRECEDENCE QOSPRECEDENCE_END %token QOSRELIABILITY QOSRELIABILITY_END %token QOSTRAFFICCLASS QOSTRAFFICCLASS_END %token RADIOCHANNELREQUESTED RADIOCHANNELREQUESTED_END %token RADIOCHANNELUSED RADIOCHANNELUSED_END %token RAPFILESEQUENCENUMBER RAPFILESEQUENCENUMBER_END %token RECENTITYCODE RECENTITYCODE_END %token RECENTITYCODELIST RECENTITYCODELIST_END %token RECENTITYINFOLIST RECENTITYINFOLIST_END %token RECENTITYINFORMATION RECENTITYINFORMATION_END %token RECENTITYTYPE RECENTITYTYPE_END %token RECIPIENT RECIPIENT_END %token RELEASEVERSIONNUMBER RELEASEVERSIONNUMBER_END %token REMOTEPDPADDRESSLIST REMOTEPDPADDRESSLIST_END %token REQUESTEDDELIVERYTIMESTAMP REQUESTEDDELIVERYTIMESTAMP_END %token RESPONSETIME RESPONSETIME_END %token RESPONSETIMECATEGORY RESPONSETIMECATEGORY_END %token SCUBASICINFORMATION SCUBASICINFORMATION_END %token SCUCHARGETYPE SCUCHARGETYPE_END %token SCUTIMESTAMPS SCUTIMESTAMPS_END %token SENDER SENDER_END %token SERVICECENTREUSAGE SERVICECENTREUSAGE_END %token SERVINGBID SERVINGBID_END %token SERVINGNETWORK SERVINGNETWORK_END %token SERVINGPARTIESINFORMATION SERVINGPARTIESINFORMATION_END %token SIMCHARGEABLESUBSCRIBER SIMCHARGEABLESUBSCRIBER_END %token SIMTOOLKITINDICATOR SIMTOOLKITINDICATOR_END %token SPECIFICATIONVERSIONNUMBER SPECIFICATIONVERSIONNUMBER_END %token SPEECHVERSION SPEECHVERSION_END %token SPEECHVERSIONREQUESTED SPEECHVERSIONREQUESTED_END %token SPEECHVERSIONUSED SPEECHVERSIONUSED_END %token SSPARAMETERS SSPARAMETERS_END %token SUPPLSERVICEACTIONCODE SUPPLSERVICEACTIONCODE_END %token SUPPLSERVICECODE SUPPLSERVICECODE_END %token SUPPLSERVICEEVENT SUPPLSERVICEEVENT_END %token SUPPLSERVICEUSED SUPPLSERVICEUSED_END %token SUPPLSERVICEUSEDLIST SUPPLSERVICEUSEDLIST_END %token TAPCURRENCY TAPCURRENCY_END %token TAPDECIMALPLACES TAPDECIMALPLACES_END %token TAXABLEAMOUNT TAXABLEAMOUNT_END %token TAXATION TAXATION_END %token TAXATIONLIST TAXATIONLIST_END %token TAXCODE TAXCODE_END %token TAXINFORMATION TAXINFORMATION_END %token TAXINFORMATIONLIST TAXINFORMATIONLIST_END %token TAXRATE TAXRATE_END %token TAXTYPE TAXTYPE_END %token TAXVALUE TAXVALUE_END %token TELESERVICECODE TELESERVICECODE_END %token THIRDPARTYINFORMATION THIRDPARTYINFORMATION_END %token TIMEBAND TIMEBAND_END %token TIMEBANDSUBTYPE TIMEBANDSUBTYPE_END %token TOTALADVISEDCHARGE TOTALADVISEDCHARGE_END %token TOTALADVISEDCHARGEREFUND TOTALADVISEDCHARGEREFUND_END %token TOTALADVISEDCHARGEVALUE TOTALADVISEDCHARGEVALUE_END %token TOTALADVISEDCHARGEVALUELIST TOTALADVISEDCHARGEVALUELIST_END %token TOTALCALLEVENTDURATION TOTALCALLEVENTDURATION_END %token TOTALCHARGEREFUND TOTALCHARGEREFUND_END %token TOTALCHARGEVALUE TOTALCHARGEVALUE_END %token TOTALCHARGEVALUELIST TOTALCHARGEVALUELIST_END %token TOTALCOMMISSION TOTALCOMMISSION_END %token TOTALCOMMISSIONREFUND TOTALCOMMISSIONREFUND_END %token TOTALDATAVOLUME TOTALDATAVOLUME_END %token TOTALDISCOUNTREFUND TOTALDISCOUNTREFUND_END %token TOTALDISCOUNTVALUE TOTALDISCOUNTVALUE_END %token TOTALTAXREFUND TOTALTAXREFUND_END %token TOTALTAXVALUE TOTALTAXVALUE_END %token TRACKEDCUSTOMEREQUIPMENT TRACKEDCUSTOMEREQUIPMENT_END %token TRACKEDCUSTOMERHOMEID TRACKEDCUSTOMERHOMEID_END %token TRACKEDCUSTOMERHOMEIDLIST TRACKEDCUSTOMERHOMEIDLIST_END %token TRACKEDCUSTOMERIDENTIFICATION TRACKEDCUSTOMERIDENTIFICATION_END %token TRACKEDCUSTOMERIDLIST TRACKEDCUSTOMERIDLIST_END %token TRACKEDCUSTOMERINFORMATION TRACKEDCUSTOMERINFORMATION_END %token TRACKEDCUSTOMERLOCATION TRACKEDCUSTOMERLOCATION_END %token TRACKEDCUSTOMERLOCLIST TRACKEDCUSTOMERLOCLIST_END %token TRACKINGCUSTOMEREQUIPMENT TRACKINGCUSTOMEREQUIPMENT_END %token TRACKINGCUSTOMERHOMEID TRACKINGCUSTOMERHOMEID_END %token TRACKINGCUSTOMERHOMEIDLIST TRACKINGCUSTOMERHOMEIDLIST_END %token TRACKINGCUSTOMERIDENTIFICATION TRACKINGCUSTOMERIDENTIFICATION_END %token TRACKINGCUSTOMERIDLIST TRACKINGCUSTOMERIDLIST_END %token TRACKINGCUSTOMERINFORMATION TRACKINGCUSTOMERINFORMATION_END %token TRACKINGCUSTOMERLOCATION TRACKINGCUSTOMERLOCATION_END %token TRACKINGCUSTOMERLOCLIST TRACKINGCUSTOMERLOCLIST_END %token TRACKINGFREQUENCY TRACKINGFREQUENCY_END %token TRACKINGPERIOD TRACKINGPERIOD_END %token TRANSACTIONAUTHCODE TRANSACTIONAUTHCODE_END %token TRANSACTIONDESCRIPTIONSUPP TRANSACTIONDESCRIPTIONSUPP_END %token TRANSACTIONDETAILDESCRIPTION TRANSACTIONDETAILDESCRIPTION_END %token TRANSACTIONIDENTIFIER TRANSACTIONIDENTIFIER_END %token TRANSACTIONSHORTDESCRIPTION TRANSACTIONSHORTDESCRIPTION_END %token TRANSACTIONSTATUS TRANSACTIONSTATUS_END %token TRANSFERBATCH TRANSFERBATCH_END %token TRANSFERCUTOFFTIMESTAMP TRANSFERCUTOFFTIMESTAMP_END %token TRANSPARENCYINDICATOR TRANSPARENCYINDICATOR_END %token TYPEOFCONTROLLINGNODE TYPEOFCONTROLLINGNODE_END %token UMTSQOSINFORMATION UMTSQOSINFORMATION_END %token UMTSQOSREQUESTED UMTSQOSREQUESTED_END %token UMTSQOSUSED UMTSQOSUSED_END %token USERPROTOCOLINDICATOR USERPROTOCOLINDICATOR_END %token UTCTIMEOFFSET UTCTIMEOFFSET_END %token UTCTIMEOFFSETCODE UTCTIMEOFFSETCODE_END %token UTCTIMEOFFSETINFO UTCTIMEOFFSETINFO_END %token UTCTIMEOFFSETINFOLIST UTCTIMEOFFSETINFOLIST_END %token VALUEADDEDSERVICE VALUEADDEDSERVICE_END %token VALUEADDEDSERVICEUSED VALUEADDEDSERVICEUSED_END %token VALUEADDEDSERVICEUSEDLIST VALUEADDEDSERVICEUSEDLIST_END %token VASCODE VASCODE_END %token VASDESCRIPTION VASDESCRIPTION_END %token VASINFOLIST VASINFOLIST_END %token VASINFORMATION VASINFORMATION_END %token VASSHORTDESCRIPTION VASSHORTDESCRIPTION_END %token VERTICALACCURACYDELIVERED VERTICALACCURACYDELIVERED_END %token VERTICALACCURACYREQUESTED VERTICALACCURACYREQUESTED_END %token DATA %start DataInterChange %% DataInterChange: TransferBatch | Notification; TransferBatch: { init(); } TRANSFERBATCH { /* Head */ init_inhouse(); memcpy(ri_cdr.head.cmt, "AAA", 3); ri_cdr.head.version[0] = 'T'; } BatchControlInfo AccountingInfo NetworkInfo VasInfoList MessageDescriptionInfoList { /* Write and store Head */ write_inhouse(); memcpy(&ri_head, &ri_cdr, sizeof(ri_cdr_t)); } /* CDR's */ CallEventDetailList { /* Tail */ init_inhouse(); memcpy(ri_cdr.tail.cmt, "ZZZ", 3); memcpy(ri_cdr.tail.soper, ri_head.head.soper, 14); memcpy(ri_cdr.tail.roper, ri_head.head.roper, 14); memcpy(ri_cdr.tail.fseqno, ri_head.head.fseqno, 9); } AuditControlInfo { /* Write Tail */ write_inhouse(); log_tap_file(); } TRANSFERBATCH_END; Notification: { init(); } NOTIFICATION { /* Head */ init_inhouse(); memcpy(ri_cdr.head.cmt, "AAA", 3); ri_cdr.head.version[0] = 'T'; } Sender Recipient FileSequenceNumber RapFileSequenceNumber FileCreationTimeStamp FileAvailableTimeStamp TransferCutOffTimeStamp SpecificationVersionNumber ReleaseVersionNumber FileTypeIndicator OperatorSpecInfoList NOTIFICATION_END { memstrcpy(ri_cdr.head.soper, $4.string[0], sizeof(ri_cdr.head.soper)); memstrcpy(ri_cdr.head.roper, $5.string[0], sizeof(ri_cdr.head.roper)); memstrcpy(ri_cdr.head.fcrdate, $8.string[Y_DATETIME], sizeof(ri_cdr.head.fcrdate)); memstrcpy(ri_cdr.head.ftmdate, $8.string[Y_DATETIME], sizeof(ri_cdr.head.ftmdate)); memstrcpy(ri_cdr.head.tcotime, $10.string[Y_DATETIME], sizeof(ri_cdr.head.tcotime)); memstrcpy(ri_cdr.head.ofseqno, $6.string[0], sizeof(ri_cdr.head.ofseqno)); memstrcpy(ri_cdr.head.fcrutc, $8.string[Y_OFFSET], sizeof(ri_cdr.head.fcrutc)); memstrcpy(ri_cdr.head.tcoutc, $10.string[Y_OFFSET], sizeof(ri_cdr.head.tcoutc)); write_inhouse(); memcpy(&ri_head, &ri_cdr, sizeof(ri_cdr_t)); init_inhouse(); memcpy(ri_cdr.tail.cmt, "ZZZ", 3); memcpy(ri_cdr.tail.soper, ri_head.head.soper, 14); memcpy(ri_cdr.tail.roper, ri_head.head.roper, 14); memcpy(ri_cdr.tail.fseqno, ri_head.head.fseqno, 9); memcpy(ri_cdr.tail.nocdr, "0000000", 7); memcpy(ri_cdr.tail.tcharge, "0000000000000", 13); memstrcpy(ri_cdr.tail.fcdate, "00000000000000", 14); memstrcpy(ri_cdr.tail.lcdate, "00000000000000", 14); tap_decimal_places = 0; /* Write Tail */ write_inhouse(); log_tap_file(); }; CallEventDetailList: CALLEVENTDETAILLIST CallEventDetail_iter CALLEVENTDETAILLIST_END; CallEventDetail_iter: /* empty */ { clear($$.string); } | CallEventDetail_iter { init_inhouse(); memcpy(ri_cdr.cdr.file_name, out_inhouse_file_name_p, strlen(out_inhouse_file_name_p)); if (out_inhouse_file_name_p[0] == 'T') { ri_cdr.cdr.testind[0] = RG_TEST; } else { ri_cdr.cdr.testind[0] = RG_NORMAL; } } CallEventDetail { write_inhouse(); }; CallEventDetail: MobileOriginatedCall | MobileTerminatedCall | SupplServiceEvent | ServiceCentreUsage | ValueAddedService | GprsCall | ContentTransaction | LocationService; BatchControlInfo: BATCHCONTROLINFO Sender Recipient FileSequenceNumber FileCreationTimeStamp TransferCutOffTimeStamp FileAvailableTimeStamp SpecificationVersionNumber ReleaseVersionNumber FileTypeIndicator RapFileSequenceNumber OperatorSpecInfoList BATCHCONTROLINFO_END { memstrcpy(ri_cdr.head.soper, $2.string[0], sizeof(ri_cdr.head.soper)); memstrcpy(ri_cdr.head.roper, $3.string[0], sizeof(ri_cdr.head.roper)); memstrcpy(ri_cdr.head.fcrdate, $5.string[Y_DATETIME], sizeof(ri_cdr.head.fcrdate)); memstrcpy(ri_cdr.head.ftmdate, $5.string[Y_DATETIME], sizeof(ri_cdr.head.ftmdate)); memstrcpy(ri_cdr.head.tcotime, $6.string[Y_DATETIME], sizeof(ri_cdr.head.tcotime)); memstrcpy(ri_cdr.head.ofseqno, $4.string[0], sizeof(ri_cdr.head.ofseqno)); memstrcpy(ri_cdr.head.fcrutc, $5.string[Y_OFFSET], sizeof(ri_cdr.head.fcrutc)); memstrcpy(ri_cdr.head.tcoutc, $6.string[Y_OFFSET], sizeof(ri_cdr.head.tcoutc)); } ; AccountingInfo: /* empty */ { clear($$.string); } | ACCOUNTINGINFO TaxationList DiscountingList LocalCurrency TapCurrency CurrencyConversionList TapDecimalPlaces ACCOUNTINGINFO_END { char* endptr; tap_decimal_places = strtol($7.string[0], &endptr, 0); if (*endptr != NULL) { fflush(stdout); fprintf(stderr, "TapDecimalPlaces error\n"); fflush(stderr); YYERROR; } }; NetworkInfo: /* empty */ { clear($$.string); } | NETWORKINFO UtcTimeOffsetInfoList RecEntityInfoList NetworkType CalledNumAnalysisList NETWORKINFO_END; VasInfoList: /* empty */ { clear($$.string); } | VASINFOLIST VasInformation_iter VASINFOLIST_END; VasInformation_iter: /* empty */ { clear($$.string); } | VasInformation_iter VasInformation; MessageDescriptionInfoList: /* empty */ { clear($$.string); } | MESSAGEDESCRIPTIONINFOLIST MessageDescriptionInformation_iter MESSAGEDESCRIPTIONINFOLIST_END; MessageDescriptionInformation_iter: /* empty */ { clear($$.string); } | MessageDescriptionInformation_iter MessageDescriptionInformation; MobileOriginatedCall: MOBILEORIGINATEDCALL { memcpy(ri_cdr.cdr.cmt, "MSO", 3); memcpy(ri_cdr.cdr.cdrtail.gsm.currency, "SEK", 3); memcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "0", 1); memset(ri_cdr.cdr.cdrtail.gsm.cdperc, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.cdamt, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge1, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc1, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt1, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge2, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc2, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt2, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge3, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc3, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt3, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge4, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc4, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt4, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.ccharge, '0', 9); no_of_cdrs++; } MoBasicCallInformation LocationInformation EquipmentInformation BasicServiceUsedList SupplServiceUsedList CamelServiceUsed ValueAddedServiceUsedList DualServiceCode OperatorSpecInfoList MOBILEORIGINATEDCALL_END { memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmservkey, $8.string[Y_CMSERVKEY], sizeof(ri_cdr.cdr.cdrtail.gsm.cmservkey)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmservlev, $8.string[Y_CMSERVLEV], sizeof(ri_cdr.cdr.cdrtail.gsm.cmservlev)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmsano, $8.string[Y_CMSANO], sizeof(ri_cdr.cdr.cdrtail.gsm.cmsano)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmcrmsc, $8.string[Y_CMCRMSC], sizeof(ri_cdr.cdr.cdrtail.gsm.cmcrmsc)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmcrno, $8.string[Y_CMCRNO], sizeof(ri_cdr.cdr.cdrtail.gsm.cmcrno)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmcfind, $8.string[Y_CMCFIND], sizeof(ri_cdr.cdr.cdrtail.gsm.cmcfind)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.csei, $8.string[Y_CSEI], sizeof(ri_cdr.cdr.cdrtail.gsm.csei)); }; MobileTerminatedCall: MOBILETERMINATEDCALL { memcpy(ri_cdr.cdr.cmt, "MST", 3); memcpy(ri_cdr.cdr.cdrtail.gsm.currency, "SEK", 3); memcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "0", 1); memset(ri_cdr.cdr.cdrtail.gsm.cdperc, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.cdamt, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge1, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc1, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt1, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge2, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc2, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt2, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge3, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc3, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt3, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge4, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc4, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt4, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.ccharge, '0', 9); no_of_cdrs++; } MtBasicCallInformation LocationInformation EquipmentInformation BasicServiceUsedList SupplServiceUsedList CamelServiceUsed ValueAddedServiceUsedList DualServiceCode OperatorSpecInfoList MOBILETERMINATEDCALL_END { memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmservkey, $8.string[Y_CMSERVKEY], sizeof(ri_cdr.cdr.cdrtail.gsm.cmservkey)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmservlev, $8.string[Y_CMSERVLEV], sizeof(ri_cdr.cdr.cdrtail.gsm.cmservlev)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmsano, $8.string[Y_CMSANO], sizeof(ri_cdr.cdr.cdrtail.gsm.cmsano)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmcrmsc, $8.string[Y_CMCRMSC], sizeof(ri_cdr.cdr.cdrtail.gsm.cmcrmsc)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmcrno, $8.string[Y_CMCRNO], sizeof(ri_cdr.cdr.cdrtail.gsm.cmcrno)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.cmcfind, $8.string[Y_CMCFIND], sizeof(ri_cdr.cdr.cdrtail.gsm.cmcfind)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.csei, $8.string[Y_CSEI], sizeof(ri_cdr.cdr.cdrtail.gsm.csei)); }; SupplServiceEvent: SUPPLSERVICEEVENT { memcpy(ri_cdr.cdr.cmt, "SSP", 3); memcpy(ri_cdr.cdr.cdrtail.gsm.currency, "SEK", 3); memset(ri_cdr.cdr.chunit, '0', sizeof(ri_cdr.cdr.chunit)); memcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "0", 1); memset(ri_cdr.cdr.cdrtail.gsm.cdperc, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.cdamt, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge1, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc1, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt1, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge2, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc2, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt2, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge3, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc3, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt3, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.echarge4, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.edperc4, '0', 3); memset(ri_cdr.cdr.cdrtail.gsm.edamt4, '0', 9); memset(ri_cdr.cdr.cdrtail.gsm.ccharge, '0', 9); no_of_cdrs++; } FraudMonitorIndicator ChargeableSubscriber RapFileSequenceNumber NetworkType LocationInformation EquipmentInformation SupplServiceUsed SimToolkitIndicator OperatorSpecInfoList SUPPLSERVICEEVENT_END { memstrcpy(ri_cdr.cdr.msisdn, $4.string[Y_MSISDN], sizeof(ri_cdr.cdr.msisdn)); memstrcpy(ri_cdr.cdr.schdate, $9.string[Y_DATETIME], sizeof(ri_cdr.cdr.schdate) + sizeof(ri_cdr.cdr.schtime)); memset(ri_cdr.cdr.chunit, '0', sizeof(ri_cdr.cdr.chunit)); addmemstrcpy(ri_cdr.cdr.chunit, $9.string[Y_CHUNIT], sizeof(ri_cdr.cdr.chunit)); memstrcpy(ri_cdr.cdr.chitem, $9.string[Y_CHITEM], sizeof(ri_cdr.cdr.chitem)); memstrcpy(ri_cdr.cdr.imsi, $4.string[Y_IMSI], sizeof(ri_cdr.cdr.imsi)); memstrcpy(ri_cdr.cdr.telesc, $9.string[Y_TELESC], sizeof(ri_cdr.cdr.telesc)); memstrcpy(ri_cdr.cdr.telesc, $9.string[Y_TELESC], sizeof(ri_cdr.cdr.telesc)); memstrcpy(ri_cdr.cdr.ssi, $9.string[0], sizeof(ri_cdr.cdr.ssi)); memstrcpy(ri_cdr.cdr.rapseq, $5.string[0], sizeof(ri_cdr.cdr.rapseq)); memstrcpy(ri_cdr.cdr.nettype, $6.string[0], sizeof(ri_cdr.cdr.nettype)); memstrcpy(ri_cdr.cdr.ssreq, $9.string[Y_SSREQ], sizeof(ri_cdr.cdr.ssreq)); write_ctimeo(ri_cdr.cdr.cdrtail.gsm.ctimeo, $9.string[Y_OFFSET]); memstrcpy(ri_cdr.cdr.cdrtail.gsm.dcate, $9.string[Y_DCATE], sizeof(ri_cdr.cdr.cdrtail.gsm.dcate)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.tband, $9.string[Y_TBAND], sizeof(ri_cdr.cdr.cdrtail.gsm.tband)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm.ccharge, ri_cdr.cdr.exch_rate, $9.string[Y_CHARGE]); }; ServiceCentreUsage: SERVICECENTREUSAGE FraudMonitorIndicator ScuBasicInformation RapFileSequenceNumber NetworkType ServingNetwork RecEntityCode ChargeInformation ScuChargeType ScuTimeStamps OperatorSpecInfoList SERVICECENTREUSAGE_END; ValueAddedService: VALUEADDEDSERVICE FraudMonitorIndicator ScuVasChargeableSubscriber RapFileSequenceNumber NetworkType ServingNetwork ValueAddedServiceUsed OperatorSpecInfoList VALUEADDEDSERVICE_END; GprsCall: GPRSCALL { memcpy(ri_cdr.cdr.cmt, "GPS", 3); memcpy(ri_cdr.cdr.cdrtail.gprs.currency, "SEK", 3); ri_cdr.cdr.cdrtail.gprs.udvitem[0] = 'B'; ri_cdr.cdr.cdrtail.gprs.ddvitem[0] = 'B'; memset(ri_cdr.cdr.cdrtail.gprs.gprsrn, '0', sizeof(ri_cdr.cdr.cdrtail.gprs.gprsrn)); memset(ri_cdr.cdr.cdrtail.gprs.ccharge, '0', 9); no_of_cdrs++; } TypeOfControllingNode GprsBasicCallInformation GprsLocationInformation EquipmentInformation GprsServiceUsed CamelServiceUsed ValueAddedServiceUsedList OperatorSpecInfoList GPRSCALL_END { memstrcpy(ri_cdr.cdr.cdrtail.gprs.tcn, $3.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.tcn)); }; ContentTransaction: CONTENTTRANSACTION ContentTransactionBasicInfo ChargedPartyInformation ServingPartiesInformation ContentServiceUsedList OperatorSpecInfoList CONTENTTRANSACTION_END; LocationService: LOCATIONSERVICE FraudMonitorIndicator RapFileSequenceNumber RecEntityCode CallReference TrackingCustomerInformation LCSSPInformation TrackedCustomerInformation LocationServiceUsage OperatorSpecInfoList LOCATIONSERVICE_END; AuditControlInfo: AUDITCONTROLINFO EarliestCallTimeStamp LatestCallTimeStamp TotalChargeValueList TotalTaxRefund TotalTaxValue TotalDiscountValue TotalDiscountRefund TotalAdvisedChargeValueList CallEventDetailsCount OperatorSpecInfoList AUDITCONTROLINFO_END { { /* NOCDR */ char nocdr_str [100]; sprintf(nocdr_str, "%07ld", no_of_cdrs); memcpy(ri_cdr.tail.nocdr, nocdr_str, strlen(nocdr_str)); } { /* check Total Charge */ double total_unrated_charge_tail; char* endptr; /* use TotalChargeValue + TotalTaxValue */ total_unrated_charge_tail = (atof($4.string[Y_CHARGE]) + atof($6.string[0])) / pow(10, tap_decimal_places); if (fabs(total_unrated_charge_tail - total_unrated_charge) > .00001) { fflush(stdout); fprintf(stderr, "Total Charge missmatch: %f != %f\n", total_unrated_charge_tail, total_unrated_charge); fflush(stderr); rg_exit(RG_TCHARGE_MISSMATCH, $4.string[Y_CHARGE]); } } memcpy(ri_cdr.tail.tcharge, double2amount_str(total_rated_charge, NULL, "%014.3f", 13), 13); memstrcpy(ri_cdr.tail.fcdate, $2.string[Y_DATETIME], sizeof(ri_cdr.tail.fcdate) + sizeof(ri_cdr.tail.fctime)); memstrcpy(ri_cdr.tail.lcdate, $3.string[Y_DATETIME], sizeof(ri_cdr.tail.lcdate) + sizeof(ri_cdr.tail.lctime)); /* Add TAP file log information */ tcharge += atof($4.string[Y_CHARGE]) / pow(10, tap_decimal_places); ttax += atof($6.string[0]) / pow(10, tap_decimal_places); }; AccessPointNameNI: /* empty */ { clear($$.string); } | ACCESSPOINTNAMENI AsciiString ACCESSPOINTNAMENI_END { $$ = $2; }; AccessPointNameOI: /* empty */ { clear($$.string); } | ACCESSPOINTNAMEOI AsciiString ACCESSPOINTNAMEOI_END { $$ = $2; }; ActualDeliveryTimeStamp: /* empty */ { clear($$.string); } | ACTUALDELIVERYTIMESTAMP DateTime ACTUALDELIVERYTIMESTAMP_END { $$ = $2; }; AddressStringDigits: /* empty */ { clear($$.string); } | ADDRESSSTRINGDIGITS BCDString ADDRESSSTRINGDIGITS_END { $$ = $2; } | BCDString { $$ = $1; } | ADDRESSSTRINGDIGITS ADDRESSSTRINGDIGITS_END { clear($$.string);}; /* Added last choice if no value exist */ AdvisedCharge: /* empty */ { clear($$.string); } | ADVISEDCHARGE Charge ADVISEDCHARGE_END { $$ = $2; }; AdvisedChargeCurrency: /* empty */ { clear($$.string); } | ADVISEDCHARGECURRENCY Currency ADVISEDCHARGECURRENCY_END { $$ = $2; }; AdvisedChargeInformation: /* empty */ { clear($$.string); } | ADVISEDCHARGEINFORMATION PaidIndicator PaymentMethod AdvisedChargeCurrency AdvisedCharge Commission ADVISEDCHARGEINFORMATION_END; AgeOfLocation: /* empty */ { clear($$.string); } | AGEOFLOCATION Integer AGEOFLOCATION_END { $$ = $2; }; AiurRequested: /* empty */ { clear($$.string); } | AIURREQUESTED Integer AIURREQUESTED_END { $$ = $2; }; BasicHSCSDParameters: /* empty */ { clear($$.string); } | BASICHSCSDPARAMETERS NumberOfChannels ChannelCodingAcceptableList ChannelCoding NumberOfChannelsUsed BASICHSCSDPARAMETERS_END { clear($$.string); strcpy($$.string[Y_MCHANNO], $2.string[0]); strcpy($$.string[Y_CHANACC], $3.string[0]); strcpy($$.string[Y_CHANCOD], $4.string[0]); strcpy($$.string[Y_UCHANNO], $5.string[0]); }; BasicService: /* empty */ { clear($$.string); } | BASICSERVICE BasicServiceCode RadioChannelRequested RadioChannelUsed SpeechVersionRequested SpeechVersionUsed TransparencyIndicator Fnur AiurRequested UserProtocolIndicator BASICSERVICE_END { clear($$.string); strcpy($$.string[Y_TELESC], $2.string[Y_TELESC]); strcpy($$.string[Y_BEARSC], $2.string[Y_BEARSC]); strcpy($$.string[Y_CHRINFO], $4.string[0]); strcpy($$.string[Y_UPI], $10.string[0]); strcpy($$.string[Y_RADCHREQ], $3.string[0]); strcpy($$.string[Y_SPEECHREQ], $5.string[0]); strcpy($$.string[Y_SPEECHUSE], $6.string[0]); }; BasicServiceCode: TeleServiceCode { clear($$.string); strcpy($$.string[Y_TELESC], $1.string[0]); } | BearerServiceCode { clear($$.string); strcpy($$.string[Y_BEARSC], $1.string[0]); }; BasicServiceCodeList: /* empty */ { clear($$.string); } | BASICSERVICECODELIST BasicServiceCode_iter BASICSERVICECODELIST_END { $$ = $2; }; BasicServiceCode_iter: /* empty */ { clear($$.string); } | BasicServiceCode_iter BasicServiceCode { /* only return first in list */ if ($1.string[Y_TELESC][0] == '\0' && $1.string[Y_BEARSC][0] == '\0') { $$ = $2; } else { $$ = $1; } }; BasicServiceUsed: BASICSERVICEUSED BasicService ChargingTimeStamp ChargeInformationList DataVolumeReference HSCSDInformation BASICSERVICEUSED_END { clear($$.string); strcpy($$.string[Y_TELESC], $2.string[Y_TELESC]); strcpy($$.string[Y_BEARSC], $2.string[Y_BEARSC]); strcpy($$.string[Y_CHUNIT], $4.string[Y_CHUNIT]); strcpy($$.string[Y_CHITEM], $4.string[Y_CHITEM]); strcpy($$.string[Y_CHRINFO], $2.string[Y_CHRINFO]); strcpy($$.string[Y_UPI], $2.string[Y_UPI]); strcpy($$.string[Y_CALLC], $4.string[Y_CALLC]); strcpy($$.string[Y_CTYPE], $4.string[Y_CTYPE]); strcpy($$.string[Y_DCATE], $4.string[Y_DCATE]); strcpy($$.string[Y_TBAND], $4.string[Y_TBAND]); strcpy($$.string[Y_MCHANNO], $6.string[Y_MCHANNO]); strcpy($$.string[Y_CHANACC], $6.string[Y_CHANACC]); strcpy($$.string[Y_CHANCOD], $6.string[Y_CHANCOD]); strcpy($$.string[Y_UCHANNO], $6.string[Y_UCHANNO]); strcpy($$.string[Y_CHARGE], $4.string[Y_CHARGE]); strcpy($$.string[Y_EXCODE], $4.string[Y_EXCODE]); strcpy($$.string[Y_RADCHREQ], $2.string[Y_RADCHREQ]); strcpy($$.string[Y_SPEECHREQ], $2.string[Y_SPEECHREQ]); strcpy($$.string[Y_SPEECHUSE], $2.string[Y_SPEECHUSE]); strcpy($$.string[Y_CTYPE2], $4.string[Y_CTYPE2]); strcpy($$.string[Y_CTYPE3], $4.string[Y_CTYPE3]); }; BasicServiceUsedList: /* empty */ { clear($$.string); } | BASICSERVICEUSEDLIST BasicServiceUsed_iter BASICSERVICEUSEDLIST_END { if ($2.string[Y_TELESC][0] != '\0') { /* TELESC */ if (memcmp(ri_cdr.cdr.cmt, "MSO", 3) == 0 && strcmp($2.string[Y_TELESC], "22") == 0) { memcpy(ri_cdr.cdr.cmt, "OMM", 3); } else if (memcmp(ri_cdr.cdr.cmt, "MST", 3) == 0 && strcmp($2.string[Y_TELESC], "21") == 0) { memcpy(ri_cdr.cdr.cmt, "TMM", 3); } memstrcpy(ri_cdr.cdr.telesc, $2.string[Y_TELESC], sizeof(ri_cdr.cdr.telesc)); } else { /* BEARSC */ memstrcpy(ri_cdr.cdr.bearsc, $2.string[Y_BEARSC], sizeof(ri_cdr.cdr.bearsc)); } memstrcpy(ri_cdr.cdr.chitem, $2.string[Y_CHITEM], sizeof(ri_cdr.cdr.chitem)); memset(ri_cdr.cdr.chunit, '0', sizeof(ri_cdr.cdr.chunit)); addmemstrcpy(ri_cdr.cdr.chunit, $2.string[Y_CHUNIT], sizeof(ri_cdr.cdr.chunit)); memstrcpy(ri_cdr.cdr.chrinfo, $2.string[Y_CHRINFO], sizeof(ri_cdr.cdr.chrinfo)); memstrcpy(ri_cdr.cdr.upi, $2.string[Y_UPI], sizeof(ri_cdr.cdr.upi)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.callc, $2.string[Y_CALLC], sizeof(ri_cdr.cdr.cdrtail.gsm.callc)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.dcate, $2.string[Y_DCATE], sizeof(ri_cdr.cdr.cdrtail.gsm.dcate)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.tband, $2.string[Y_TBAND], sizeof(ri_cdr.cdr.cdrtail.gsm.tband)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.mchanno, $2.string[Y_MCHANNO], sizeof(ri_cdr.cdr.cdrtail.gsm.mchanno)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.chanacc, $2.string[Y_CHANACC], sizeof(ri_cdr.cdr.cdrtail.gsm.chanacc)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.chancod, $2.string[Y_CHANCOD], sizeof(ri_cdr.cdr.cdrtail.gsm.chancod)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.uchanno, $2.string[Y_UCHANNO], sizeof(ri_cdr.cdr.cdrtail.gsm.uchanno)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm.ccharge, ri_cdr.cdr.exch_rate, $2.string[Y_CHARGE]); memstrcpy(ri_cdr.cdr.cdrtail.gsm.radchreq, $2.string[Y_RADCHREQ], sizeof(ri_cdr.cdr.cdrtail.gsm.radchreq)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.speechreq, $2.string[Y_SPEECHREQ], sizeof(ri_cdr.cdr.cdrtail.gsm.speechreq)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.speechuse, $2.string[Y_SPEECHUSE], sizeof(ri_cdr.cdr.cdrtail.gsm.speechuse)); { char ctype_buf[5 + 1]; sprintf(ctype_buf, "%5s", $2.string[Y_CTYPE]); memcpy(ri_cdr.cdr.ctype, ctype_buf, 5); sprintf(ctype_buf, "%5s", $2.string[Y_CTYPE2]); memcpy(ri_cdr.cdr.ctype2, ctype_buf, 5); sprintf(ctype_buf, "%5s", $2.string[Y_CTYPE3]); memcpy(ri_cdr.cdr.ctype3, ctype_buf, 5); } }; BasicServiceUsed_iter: /* empty */ { clear($$.string); } | BasicServiceUsed_iter BasicServiceUsed { if ($1.string[Y_TELESC] [0] == '\0' && $1.string[Y_BEARSC] [0] == '\0' && $1.string[Y_CHUNIT] [0] == '\0' && $1.string[Y_CHITEM] [0] == '\0' && $1.string[Y_CHRINFO][0] == '\0') { /* first BasicServiceUsed is empty - use second */ $$ = $2; } else { /* use first but add charges */ $$ = $1; sprintf($$.string[Y_CHARGE], "%lld", atoll($1.string[Y_CHARGE]) + atoll($2.string[Y_CHARGE])); } }; BearerServiceCode: BEARERSERVICECODE HexString BEARERSERVICECODE_END { $$ = $2; }; CalledCountryCode: /* empty */ { clear($$.string); } | CALLEDCOUNTRYCODE AsciiString CALLEDCOUNTRYCODE_END { $$ = $2; }; CalledNumAnalysis: CALLEDNUMANALYSIS CalledNumAnalysisCode CountryCodeList IacList CALLEDNUMANALYSIS_END; CalledNumAnalysisCode: /* empty */ { clear($$.string); } | CALLEDNUMANALYSISCODE Code CALLEDNUMANALYSISCODE_END { $$ = $2; }; CalledNumAnalysisList: /* empty */ { clear($$.string); } | CALLEDNUMANALYSISLIST CalledNumAnalysis_iter CALLEDNUMANALYSISLIST_END; CalledNumAnalysis_iter: /* empty */ { clear($$.string); } | CalledNumAnalysis_iter CalledNumAnalysis; CalledPlace: /* empty */ { clear($$.string); } | CALLEDPLACE AsciiString CALLEDPLACE_END { $$ = $2; } | CALLEDPLACE CALLEDPLACE_END { clear($$.string); }; CalledRegion: /* empty */ { clear($$.string); } | CALLEDREGION AsciiString CALLEDREGION_END { $$ = $2; } | CALLEDREGION CALLEDREGION_END { clear($$.string); } ; CallEventDetailsCount: /* empty */ { clear($$.string); } | CALLEVENTDETAILSCOUNT Integer CALLEVENTDETAILSCOUNT_END { $$ = $2; }; CallEventStartTimeStamp: /* empty */ { clear($$.string); } | CALLEVENTSTARTTIMESTAMP DateTime CALLEVENTSTARTTIMESTAMP_END { $$ = $2; }; CallOriginator: /* empty */ { clear($$.string); } | CALLORIGINATOR AddressStringDigits ClirIndicator CALLORIGINATOR_END { clear($$.string); strcpy($$.string[Y_MSISDN], $2.string[0]); strcpy($$.string[Y_CLIR], $3.string[0]); }; CallReference: /* empty */ { clear($$.string); } | CALLREFERENCE OctetString CALLREFERENCE_END { $$ = $2; }; CallTypeGroup: /* empty */ { clear($$.string); } | CALLTYPEGROUP CallTypeLevel1 CallTypeLevel2 CallTypeLevel3 CalledCountryCode CALLTYPEGROUP_END { clear($$.string); strcpy($$.string[Y_CALLC], $5.string[0]); strcpy($$.string[Y_CTYPE], $2.string[0]); strcpy($$.string[Y_CTYPE2], $3.string[0]); strcpy($$.string[Y_CTYPE3], $4.string[0]); }; CallTypeLevel1: /* empty */ { clear($$.string); } | CALLTYPELEVEL1 Integer CALLTYPELEVEL1_END { $$ = $2; }; CallTypeLevel2: /* empty */ { clear($$.string); } | CALLTYPELEVEL2 Integer CALLTYPELEVEL2_END { $$ = $2; }; CallTypeLevel3: /* empty */ { clear($$.string); } | CALLTYPELEVEL3 Integer CALLTYPELEVEL3_END { $$ = $2; }; CamelCallReference: /* empty */ { clear($$.string); } | CAMELCALLREFERENCE AddressStringDigits CamelCallReferenceNumber CAMELCALLREFERENCE_END { strcpy($$.string[Y_CMCRMSC], $2.string[0]); strcpy($$.string[Y_CMCRNO], $3.string[0]); }; CamelCallReferenceNumber: /* empty */ { clear($$.string); } | CAMELCALLREFERENCENUMBER HexString CAMELCALLREFERENCENUMBER_END { $$ = $2; }; CamelInitiatedCFIndicator: /* empty */ { clear($$.string); } | CAMELINITIATEDCFINDICATOR Integer CAMELINITIATEDCFINDICATOR_END { $$ = $2; }; CamelModification: CAMELMODIFICATION Integer CAMELMODIFICATION_END { $$ = $2; }; CamelModificationList: /* empty */ { clear($$.string); } | CAMELMODIFICATIONLIST CamelModification_iter CAMELMODIFICATIONLIST_END; CamelModification_iter: /* empty */ { clear($$.string); } | CamelModification_iter CamelModification; CamelServerAddress: /* empty */ { clear($$.string); } | CAMELSERVERADDRESS AddressStringDigits CAMELSERVERADDRESS_END { $$ = $2; }; CamelServiceKey: /* empty */ { clear($$.string); } | CAMELSERVICEKEY Integer CAMELSERVICEKEY_END { $$ = $2; }; CamelServiceLevel: /* empty */ { clear($$.string); } | CAMELSERVICELEVEL Integer CAMELSERVICELEVEL_END { $$ = $2; }; CamelServiceUsed: /* empty */ { clear($$.string); } | CAMELSERVICEUSED CamelServerAddress CamelServiceLevel CamelServiceKey DefaultCallHandlingIndicator CamelCallReference ChargeInformation CamelInitiatedCFIndicator CamelModificationList ThreeGcamelDestination CseInformation CAMELSERVICEUSED_END { clear($$.string); strcpy($$.string[Y_CMSERVKEY], $4.string[0]); strcpy($$.string[Y_CMSERVLEV], $3.string[0]); strcpy($$.string[Y_CMSANO], $2.string[0]); strcpy($$.string[Y_CMCRMSC], $6.string[Y_CMCRMSC]); strcpy($$.string[Y_CMCRNO], $6.string[Y_CMCRNO]); strcpy($$.string[Y_CMCFIND], $8.string[0]); strcpy($$.string[Y_CSEI], $11.string[0]); }; CauseForTerm: /* empty */ { clear($$.string); } | CAUSEFORTERM Integer CAUSEFORTERM_END { $$ = $2; }; CellId: /* empty */ { clear($$.string); } | CELLID Integer CELLID_END { $$ = $2; }; ChannelCoding: /* empty */ { clear($$.string); } | CHANNELCODING Integer CHANNELCODING_END { $$ = $2; }; ChannelCodingAcceptableList: /* empty */ { clear($$.string); } | CHANNELCODINGACCEPTABLELIST ChannelCoding_iter CHANNELCODINGACCEPTABLELIST_END { $$ = $2; }; ChannelCoding_iter: /* empty */ { clear($$.string); } | ChannelCoding_iter ChannelCoding { if ($1.string[0][0] == '\0') { $$ = $2; } else { $$ = $1; } }; Charge: /* empty */ { clear($$.string); } | CHARGE AbsoluteAmount CHARGE_END { $$ = $2; }; ChargeableSubscriber: SimChargeableSubscriber { $$ = $1; } | MinChargeableSubscriber { $$ = $1; }; ChargeableUnits: /* empty */ { clear($$.string); } | CHARGEABLEUNITS Integer CHARGEABLEUNITS_END { $$ = $2; }; ChargeDetail: CHARGEDETAIL ChargeType Charge ChargeableUnits ChargedUnits ChargingTimeStamp DayCategory DayCategorySubtype TimeBand TimeBandSubtype MultiRateIndicator CHARGEDETAIL_END { clear($$.string); strcpy($$.string[Y_CHTYPE], $2.string[0]); strcpy($$.string[Y_CHUNIT], $4.string[0]); strcpy($$.string[Y_DCATE], $7.string[0]); strcpy($$.string[Y_TBAND], $9.string[0]); strcpy($$.string[Y_CHARGE], $3.string[0]); }; ChargeDetailList: /* empty */ { clear($$.string); } | CHARGEDETAILLIST ChargeDetail_iter CHARGEDETAILLIST_END { $$ = $2; }; ChargeDetail_iter: /* empty */ { clear($$.string); } | ChargeDetail_iter ChargeDetail { if ($1.string[Y_DCATE][0] == '\0') { /* first detail is end of list - use second */ $$ = $2; } else { if (strcmp($1.string[Y_CHTYPE], "00") == 0) { /* first detail contains total charge */ $$ = $1; } else if (strcmp($2.string[Y_CHTYPE], "00") == 0) { /* second detail contains total charge */ $$ = $2; } else { /* use first but add charges */ $$ = $1; sprintf($$.string[Y_CHARGE], "%lld", atoll($1.string[Y_CHARGE]) + atoll($2.string[Y_CHARGE])); } } }; ChargedItem: /* empty */ { clear($$.string); } | CHARGEDITEM AsciiString CHARGEDITEM_END { $$ = $2; }; ChargedPartyEquipment: /* empty */ { clear($$.string); } | CHARGEDPARTYEQUIPMENT EquipmentIdType EquipmentId CHARGEDPARTYEQUIPMENT_END; ChargedPartyHomeIdentification: CHARGEDPARTYHOMEIDENTIFICATION HomeIdType HomeIdentifier CHARGEDPARTYHOMEIDENTIFICATION_END; ChargedPartyHomeIdList: /* empty */ { clear($$.string); } | CHARGEDPARTYHOMEIDLIST ChargedPartyHomeIdentification_iter CHARGEDPARTYHOMEIDLIST_END; ChargedPartyHomeIdentification_iter: /* empty */ { clear($$.string); } | ChargedPartyHomeIdentification_iter ChargedPartyHomeIdentification; ChargedPartyIdentification: CHARGEDPARTYIDENTIFICATION ChargedPartyIdType ChargedPartyIdentifier CHARGEDPARTYIDENTIFICATION_END; ChargedPartyIdentifier: /* empty */ { clear($$.string); } | CHARGEDPARTYIDENTIFIER AsciiString CHARGEDPARTYIDENTIFIER_END { $$ = $2; }; ChargedPartyIdList: /* empty */ { clear($$.string); } | CHARGEDPARTYIDLIST ChargedPartyIdentification_iter CHARGEDPARTYIDLIST_END; ChargedPartyIdentification_iter: /* empty */ { clear($$.string); } | ChargedPartyIdentification_iter ChargedPartyIdentification; ChargedPartyIdType: /* empty */ { clear($$.string); } | CHARGEDPARTYIDTYPE Integer CHARGEDPARTYIDTYPE_END { $$ = $2; }; ChargedPartyInformation: /* empty */ { clear($$.string); } | CHARGEDPARTYINFORMATION ChargedPartyIdList ChargedPartyHomeIdList ChargedPartyLocationList ChargedPartyEquipment CHARGEDPARTYINFORMATION_END; ChargedPartyLocation: CHARGEDPARTYLOCATION LocationIdType LocationIdentifier CHARGEDPARTYLOCATION_END; ChargedPartyLocationList: /* empty */ { clear($$.string); } | CHARGEDPARTYLOCATIONLIST ChargedPartyLocation_iter CHARGEDPARTYLOCATIONLIST_END; ChargedPartyLocation_iter: /* empty */ { clear($$.string); } | ChargedPartyLocation_iter ChargedPartyLocation; ChargedPartyStatus: /* empty */ { clear($$.string); } | CHARGEDPARTYSTATUS Integer CHARGEDPARTYSTATUS_END { $$ = $2; }; ChargedUnits: /* empty */ { clear($$.string); } | CHARGEDUNITS Integer CHARGEDUNITS_END { $$ = $2; }; ChargeInformation: /* empty */ { clear($$.string); } | CHARGEINFORMATION ChargedItem ExchangeRateCode CallTypeGroup ChargeDetailList TaxInformationList DiscountInformation CHARGEINFORMATION_END { clear($$.string); strcpy($$.string[Y_CHITEM], $2.string[0]); strcpy($$.string[Y_CHUNIT], $5.string[Y_CHUNIT]); strcpy($$.string[Y_CALLC], $4.string[Y_CALLC]); strcpy($$.string[Y_CTYPE], $4.string[Y_CTYPE]); strcpy($$.string[Y_DCATE], $5.string[Y_DCATE]); strcpy($$.string[Y_TBAND], $5.string[Y_TBAND]); strcpy($$.string[Y_EXCODE], $3.string[0]); strcpy($$.string[Y_CTYPE2], $4.string[Y_CTYPE2]); strcpy($$.string[Y_CTYPE3], $4.string[Y_CTYPE3]); strcpy($$.string[Y_CHITEM], $2.string[0]); /* Add Tax to Charge */ sprintf($$.string[Y_CHARGE], "%lld", atoll($5.string[Y_CHARGE]) + atol($6.string[0])); }; ChargeInformationList: /* empty */ { clear($$.string); } | CHARGEINFORMATIONLIST ChargeInformation_iter CHARGEINFORMATIONLIST_END { $$ = $2; } ; ChargeInformation_iter: /* empty */ { clear($$.string); } | ChargeInformation_iter ChargeInformation { if ($1.string[Y_CHITEM][0] == '\0') { /* first info is end of list - use second */ $$ = $2; } else { if (strcmp($1.string[Y_CHITEM], "X") == 0) { /* first info is valume based (gprs) */ $$ = $1; } else if (strcmp($2.string[Y_CHITEM], "X") == 0) { /* second info is volume based (gprs) */ $$ = $2; } else if (strcmp($1.string[Y_CHITEM], "D") == 0) { /* first info is duration based */ $$ = $1; } else if (strcmp($2.string[Y_CHITEM], "D") == 0) { /* second info is duration based */ $$ = $2; } else { /* use first */ $$ = $1; } /* add charges */ sprintf($$.string[Y_CHARGE], "%lld", atoll($1.string[Y_CHARGE]) + atoll($2.string[Y_CHARGE])); } }; ChargeRefundIndicator: /* empty */ { clear($$.string); } | CHARGEREFUNDINDICATOR Integer CHARGEREFUNDINDICATOR_END { $$ = $2; }; ChargeType: /* empty */ { clear($$.string); } | CHARGETYPE NumberString CHARGETYPE_END { $$ = $2; }; ChargingCharacteristics: /* empty */ { clear($$.string); } | CHARGINGCHARACTERISTICS OctetString CHARGINGCHARACTERISTICS_END { $$ = $2; }; ChargingId: /* empty */ { clear($$.string); } | CHARGINGID Integer CHARGINGID_END { $$ = $2; }; ChargingPoint: /* empty */ { clear($$.string); } | CHARGINGPOINT AsciiString CHARGINGPOINT_END { $$ = $2; }; ChargingTimeStamp: /* empty */ { clear($$.string); } | CHARGINGTIMESTAMP DateTime CHARGINGTIMESTAMP_END { $$ = $2; }; ClirIndicator: /* empty */ { clear($$.string); } | CLIRINDICATOR Integer CLIRINDICATOR_END { $$ = $2; }; Commission: /* empty */ { clear($$.string); } | COMMISSION Charge COMMISSION_END { $$ = $2; }; CompletionTimeStamp: /* empty */ { clear($$.string); } | COMPLETIONTIMESTAMP DateTime COMPLETIONTIMESTAMP_END { $$ = $2; }; ContentChargingPoint: /* empty */ { clear($$.string); } | CONTENTCHARGINGPOINT Integer CONTENTCHARGINGPOINT_END { $$ = $2; }; ContentProvider: CONTENTPROVIDER ContentProviderIdType ContentProviderIdentifier CONTENTPROVIDER_END; ContentProviderIdentifier: /* empty */ { clear($$.string); } | CONTENTPROVIDERIDENTIFIER AsciiString CONTENTPROVIDERIDENTIFIER_END { $$ = $2; }; ContentProviderIdList: /* empty */ { clear($$.string); } | CONTENTPROVIDERIDLIST ContentProvider_iter CONTENTPROVIDERIDLIST_END; ContentProvider_iter: /* empty */ { clear($$.string); } | ContentProvider_iter ContentProvider; ContentProviderIdType: /* empty */ { clear($$.string); } | CONTENTPROVIDERIDTYPE Integer CONTENTPROVIDERIDTYPE_END { $$ = $2; }; ContentProviderName: /* empty */ { clear($$.string); } | CONTENTPROVIDERNAME AsciiString CONTENTPROVIDERNAME_END { $$ = $2; }; ContentServiceUsed: CONTENTSERVICEUSED ContentTransactionCode ContentTransactionType ObjectType TransactionDescriptionSupp TransactionShortDescription TransactionDetailDescription TransactionIdentifier TransactionAuthCode DataVolumeIncoming DataVolumeOutgoing TotalDataVolume ChargeRefundIndicator ContentChargingPoint ChargeInformationList AdvisedChargeInformation CONTENTSERVICEUSED_END; ContentServiceUsedList: /* empty */ { clear($$.string); } | CONTENTSERVICEUSEDLIST ContentServiceUsed_iter CONTENTSERVICEUSEDLIST_END; ContentServiceUsed_iter: /* empty */ { clear($$.string); } | ContentServiceUsed_iter ContentServiceUsed; ContentTransactionBasicInfo: /* empty */ { clear($$.string); } | CONTENTTRANSACTIONBASICINFO FraudMonitorIndicator RapFileSequenceNumber OrderPlacedTimeStamp RequestedDeliveryTimeStamp ActualDeliveryTimeStamp TotalCallEventDuration TransactionStatus CONTENTTRANSACTIONBASICINFO_END; ContentTransactionCode: /* empty */ { clear($$.string); } | CONTENTTRANSACTIONCODE Integer CONTENTTRANSACTIONCODE_END { $$ = $2; }; ContentTransactionType: /* empty */ { clear($$.string); } | CONTENTTRANSACTIONTYPE Integer CONTENTTRANSACTIONTYPE_END { $$ = $2; }; CountryCode: COUNTRYCODE NumberString COUNTRYCODE_END { $$ = $2; }; CountryCodeList: /* empty */ { clear($$.string); } | COUNTRYCODELIST CountryCode_iter COUNTRYCODELIST_END; CountryCode_iter: /* empty */ { clear($$.string); } | CountryCode_iter CountryCode { if (ri_cdr.head.ccode1[0] == ' ') { memstrcpy(ri_cdr.head.ccode1, $2.string[0], sizeof(ri_cdr.head.ccode1)); } else if (ri_cdr.head.ccode2[0] == ' ') { memstrcpy(ri_cdr.head.ccode2, $2.string[0], sizeof(ri_cdr.head.ccode2)); } else if (ri_cdr.head.ccode3[0] == ' ') { memstrcpy(ri_cdr.head.ccode3, $2.string[0], sizeof(ri_cdr.head.ccode3)); } }; CseInformation: /* empty */ { clear($$.string); } | CSEINFORMATION OctetString CSEINFORMATION_END { $$ = $2; }; CurrencyConversion: CURRENCYCONVERSION ExchangeRateCode NumberOfDecimalPlaces ExchangeRate CURRENCYCONVERSION_END; CurrencyConversionList: /* empty */ { clear($$.string); } | CURRENCYCONVERSIONLIST CurrencyConversion_iter CURRENCYCONVERSIONLIST_END; CurrencyConversion_iter: /* empty */ { clear($$.string); } | CurrencyConversion_iter CurrencyConversion; CustomerIdentifier: /* empty */ { clear($$.string); } | CUSTOMERIDENTIFIER AsciiString CUSTOMERIDENTIFIER_END { $$ = $2; }; CustomerIdType: /* empty */ { clear($$.string); } | CUSTOMERIDTYPE Integer CUSTOMERIDTYPE_END { $$ = $2; }; DataVolumeIncoming: /* empty */ { clear($$.string); } | DATAVOLUMEINCOMING DataVolume DATAVOLUMEINCOMING_END { $$ = $2; }; DataVolumeOutgoing: /* empty */ { clear($$.string); } | DATAVOLUMEOUTGOING DataVolume DATAVOLUMEOUTGOING_END { $$ = $2; }; DataVolumeReference: /* empty */ { clear($$.string); } | DATAVOLUMEREFERENCE Integer DATAVOLUMEREFERENCE_END { $$ = $2; }; DateTime: LocalTimeStamp UtcTimeOffsetCode { clear($$.string); strcpy($$.string[Y_DATETIME], $1.string[0]); strcpy($$.string[Y_OFFSET], $2.string[0]); }; DateTimeLong: LocalTimeStamp UtcTimeOffset { clear($$.string); strcpy($$.string[Y_DATETIME], $1.string[0]); strcpy($$.string[Y_OFFSET], $2.string[0]); }; DayCategory: /* empty */ { clear($$.string); } | DAYCATEGORY AsciiString DAYCATEGORY_END { $$ = $2; }; DayCategorySubtype: /* empty */ { clear($$.string); } | DAYCATEGORYSUBTYPE AsciiString DAYCATEGORYSUBTYPE_END { $$ = $2; }; DefaultCallHandlingIndicator: /* empty */ { clear($$.string); } | DEFAULTCALLHANDLINGINDICATOR Integer DEFAULTCALLHANDLINGINDICATOR_END { $$ = $2; }; DepositTimeStamp: /* empty */ { clear($$.string); } | DEPOSITTIMESTAMP DateTime DEPOSITTIMESTAMP_END { $$ = $2; }; Destination: /* empty */ { clear($$.string); } | DESTINATION AddressStringDigits DialledDigits CalledPlace CalledRegion CalledNumAnalysisCode DESTINATION_END { if ($2.string[0][0] != '\0') { $$ = $2; } else { clear($$.string); } }; DestinationNetwork: /* empty */ { clear($$.string); } | DESTINATIONNETWORK NetworkId DESTINATIONNETWORK_END { $$ = $2; }; DialledDigits: /* empty */ { clear($$.string); } | DIALLEDDIGITS AsciiString DIALLEDDIGITS_END { $$ = $2; }; DiscountApplied: /* empty */ { clear($$.string); } | DiscountValue | DiscountRate; DiscountCode: /* empty */ { clear($$.string); } | DISCOUNTCODE Integer DISCOUNTCODE_END { $$ = $2; }; DiscountInformation: /* empty */ { clear($$.string); } | DISCOUNTINFORMATION DiscountCode DiscountValue DISCOUNTINFORMATION_END; Discounting: DISCOUNTING DiscountCode DiscountApplied DISCOUNTING_END; DiscountingList: /* empty */ { clear($$.string); } | DISCOUNTINGLIST Discounting_iter DISCOUNTINGLIST_END; Discounting_iter: /* empty */ { clear($$.string); } | Discounting_iter Discounting; DiscountRate: DISCOUNTRATE PercentageRate DISCOUNTRATE_END { $$ = $2; }; DiscountValue: /* empty */ { clear($$.string); } | DISCOUNTVALUE AbsoluteAmount DISCOUNTVALUE_END { $$ = $2; }; DistanceChargeBandCode: /* empty */ { clear($$.string); } | DISTANCECHARGEBANDCODE AsciiString DISTANCECHARGEBANDCODE_END { $$ = $2; }; DualBearerServiceCode: DUALBEARERSERVICECODE HexString DUALBEARERSERVICECODE_END { $$ = $2; }; DualServiceCode: /* empty */ { clear($$.string); } | DualTeleServiceCode | DualBearerServiceCode; DualTeleServiceCode: DUALTELESERVICECODE HexString DUALTELESERVICECODE_END { $$ = $2; }; EarliestCallTimeStamp: /* empty */ { clear($$.string); } | EARLIESTCALLTIMESTAMP DateTimeLong EARLIESTCALLTIMESTAMP_END { $$ = $2; }; EquipmentId: /* empty */ { clear($$.string); } | EQUIPMENTID AsciiString EQUIPMENTID_END { $$ = $2; }; EquipmentIdType: /* empty */ { clear($$.string); } | EQUIPMENTIDTYPE Integer EQUIPMENTIDTYPE_END { $$ = $2; }; EquipmentInformation: /* empty */ { clear($$.string); } | EQUIPMENTINFORMATION MobileStationClassMark ImeiOrEsn EQUIPMENTINFORMATION_END { memstrcpy(ri_cdr.cdr.imei, $3.string[0], sizeof(ri_cdr.cdr.imei)); memstrcpy(ri_cdr.cdr.rfpowc, $2.string[0], sizeof(ri_cdr.cdr.imei)); }; Esn: /* empty */ { clear($$.string); } | ESN NumberString ESN_END { $$ = $2; }; ExchangeRate: /* empty */ { clear($$.string); } | EXCHANGERATE Integer EXCHANGERATE_END { $$ = $2; }; ExchangeRateCode: /* empty */ { clear($$.string); } | EXCHANGERATECODE Code EXCHANGERATECODE_END { $$ = $2; }; FileAvailableTimeStamp: /* empty */ { clear($$.string); } | FILEAVAILABLETIMESTAMP DateTimeLong FILEAVAILABLETIMESTAMP_END { $$ = $2; }; FileCreationTimeStamp: /* empty */ { clear($$.string); } | FILECREATIONTIMESTAMP DateTimeLong FILECREATIONTIMESTAMP_END { $$ = $2; }; FileSequenceNumber: /* empty */ { clear($$.string); } | FILESEQUENCENUMBER NumberString FILESEQUENCENUMBER_END { $$ = $2; }; FileTypeIndicator: /* empty */ { clear($$.string); } | FILETYPEINDICATOR AsciiString FILETYPEINDICATOR_END { $$ = $2; }; Fnur: /* empty */ { clear($$.string); } | FNUR Integer FNUR_END { $$ = $2; }; FraudMonitorIndicator: /* empty */ { clear($$.string); } | FRAUDMONITORINDICATOR AsciiString FRAUDMONITORINDICATOR_END { $$ = $2; }; GeographicalLocation: /* empty */ { clear($$.string); } | GEOGRAPHICALLOCATION ServingNetwork ServingBid LocationDescription Longitude Latitude GEOGRAPHICALLOCATION_END { $$ = $2; }; GmlcAddress: GMLCADDRESS AsciiString GMLCADDRESS_END { $$ = $2; }; GprsBasicCallInformation: /* empty */ { clear($$.string); } | GPRSBASICCALLINFORMATION FraudMonitorIndicator GprsChargeableSubscriber RapFileSequenceNumber NetworkType GprsDestination CallEventStartTimeStamp TotalCallEventDuration CauseForTerm PartialTypeIndicator PDPContextStartTimestamp NetworkInitPDPContext ChargingId GPRSBASICCALLINFORMATION_END { memstrcpy(ri_cdr.cdr.schdate, $7.string[Y_DATETIME], sizeof(ri_cdr.cdr.schdate)+ sizeof(ri_cdr.cdr.schtime)); memset(ri_cdr.cdr.chunit, '0', sizeof(ri_cdr.cdr.chunit)); addmemstrcpy(ri_cdr.cdr.chunit, $8.string[0], sizeof(ri_cdr.cdr.chunit)); memset(ri_cdr.cdr.cin, '0', 8); memrevstrcpy(ri_cdr.cdr.cin, $13.string[0], sizeof(ri_cdr.cdr.cin)); memstrcpy(ri_cdr.cdr.rapseq, $4.string[0], sizeof(ri_cdr.cdr.rapseq)); memstrcpy(ri_cdr.cdr.nettype, $5.string[0], sizeof(ri_cdr.cdr.nettype)); memstrcpy(ri_cdr.cdr.mpcall, $10.string[0], sizeof(ri_cdr.cdr.mpcall)); write_ctimeo(ri_cdr.cdr.cdrtail.gsm.ctimeo, $7.string[Y_OFFSET]); memstrcpy(ri_cdr.cdr.cdrtail.gprs.cfrclose, $9.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.cfrclose)); }; GprsChargeableSubscriber: /* empty */ { clear($$.string); } | GPRSCHARGEABLESUBSCRIBER ChargeableSubscriber PdpType PdpAddress ChargingCharacteristics GPRSCHARGEABLESUBSCRIBER_END { clear($$.string); memstrcpy(ri_cdr.cdr.msisdn, $2.string[Y_MSISDN], sizeof(ri_cdr.cdr.msisdn)); memstrcpy(ri_cdr.cdr.imsi, $2.string[Y_IMSI], sizeof(ri_cdr.cdr.imsi)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.spdpaddr, $4.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.spdpaddr)); ri_cdr.cdr.cdrtail.gprs.spdptype[0] = $3.string[0][0]; }; GprsDestination: /* empty */ { clear($$.string); } | GPRSDESTINATION AccessPointNameNI AccessPointNameOI RemotePdpAddressList GPRSDESTINATION_END { memstrcpy(ri_cdr.cdr.cdrtail.gprs.acpn, $2.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.acpn)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.apnoper, $3.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.apnoper)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.rpdpaddr, $4.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.rpdpaddr)); }; GprsLocationInformation: /* empty */ { clear($$.string); } | GPRSLOCATIONINFORMATION GprsNetworkLocation HomeLocationInformation GeographicalLocation GPRSLOCATIONINFORMATION_END { memstrcpy(ri_cdr.cdr.snet, $4.string[0], sizeof(ri_cdr.cdr.snet)); }; GprsNetworkLocation: /* empty */ { clear($$.string); } | GPRSNETWORKLOCATION RecEntityCodeList LocationArea CellId GPRSNETWORKLOCATION_END { memstrcpy(ri_cdr.cdr.locarea, $3.string[0], sizeof(ri_cdr.cdr.locarea)); memstrcpy(ri_cdr.cdr.cellid, $4.string[0], sizeof(ri_cdr.cdr.cellid)); }; GprsServiceUsage: GPRSSERVICEUSAGE ChargingTimeStamp QoSRequested QoSUsed DataVolumeIncoming DataVolumeOutgoing GPRSSERVICEUSAGE_END { addmemstrcpy(ri_cdr.cdr.cdrtail.gprs.udv, $5.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.udv)); addmemstrcpy(ri_cdr.cdr.cdrtail.gprs.ddv, $6.string[0], sizeof(ri_cdr.cdr.cdrtail.gprs.ddv)); }; GprsServiceUsageList: /* empty */ { clear($$.string); } | GPRSSERVICEUSAGELIST GprsServiceUsage_iter GPRSSERVICEUSAGELIST_END; GprsServiceUsage_iter: /* empty */ { clear($$.string); } | GprsServiceUsage_iter GprsServiceUsage; GprsServiceUsed: /* empty */ { clear($$.string); } | GPRSSERVICEUSED GprsServiceUsageList ChargingTimeStamp ChargeInformationList GPRSSERVICEUSED_END { memstrcpy(ri_cdr.cdr.chitem, $4.string[Y_CHITEM], sizeof(ri_cdr.cdr.chitem)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.dcate, $4.string[Y_DCATE], sizeof(ri_cdr.cdr.cdrtail.gprs.dcate)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.tband, $4.string[Y_TBAND], sizeof(ri_cdr.cdr.cdrtail.gprs.tband)); { char ctype_buf[5 + 1]; sprintf(ctype_buf, "%5s", $4.string[Y_CTYPE]); memcpy(ri_cdr.cdr.ctype, ctype_buf, 5); } write_charge_exchrate(ri_cdr.cdr.cdrtail.gprs. ccharge, ri_cdr.cdr.exch_rate, $4.string[Y_CHARGE]); }; GsmChargeableSubscriber: GSMCHARGEABLESUBSCRIBER Imsi Msisdn GSMCHARGEABLESUBSCRIBER_END; GSMQoSInformation: QoSDelay QoSMeanThroughput QoSPeakThroughput QoSPrecedence QoSReliability { clear($$.string); strcpy($$.string[Y_QOSDEL ], $1.string[0]); strcpy($$.string[Y_QOSMPUT], $2.string[0]); strcpy($$.string[Y_QOSPPUT], $3.string[0]); strcpy($$.string[Y_QOSPREC], $4.string[0]); strcpy($$.string[Y_QOSREL ], $5.string[0]); }; GSMQoSRequested: /* empty */ { clear($$.string); } | GSMQOSREQUESTED GSMQoSInformation GSMQOSREQUESTED_END { memstrcpy(ri_cdr.cdr.cdrtail.gprs.qosrrel, $2.string[Y_QOSREL], sizeof(ri_cdr.cdr.cdrtail.gprs.qosrrel)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.qosrdel, $2.string[Y_QOSDEL], sizeof(ri_cdr.cdr.cdrtail.gprs.qosrdel)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.qosrprec, $2.string[Y_QOSPREC], sizeof(ri_cdr.cdr.cdrtail.gprs.qosrprec)); memset(ri_cdr.cdr.cdrtail.gprs.qosrpput, '0', sizeof(ri_cdr.cdr.cdrtail.gprs.qosrpput)); addmemstrcpy(ri_cdr.cdr.cdrtail.gprs.qosrpput, $2.string[Y_QOSPPUT], sizeof(ri_cdr.cdr.cdrtail.gprs. qosrpput)); memset(ri_cdr.cdr.cdrtail.gprs.qosrmput, '0', sizeof(ri_cdr.cdr.cdrtail.gprs.qosrmput)); addmemstrcpy(ri_cdr.cdr.cdrtail.gprs.qosrmput, $2.string[Y_QOSMPUT], sizeof(ri_cdr.cdr.cdrtail.gprs. qosrmput)); }; GSMQoSUsed: /* empty */ { clear($$.string); } | GSMQOSUSED GSMQoSInformation GSMQOSUSED_END { memstrcpy(ri_cdr.cdr.cdrtail.gprs.qosnrel, $2.string[Y_QOSREL], sizeof(ri_cdr.cdr.cdrtail.gprs.qosnrel)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.qosndel, $2.string[Y_QOSDEL], sizeof(ri_cdr.cdr.cdrtail.gprs.qosndel)); memstrcpy(ri_cdr.cdr.cdrtail.gprs.qosnprec, $2.string[Y_QOSPREC], sizeof(ri_cdr.cdr.cdrtail.gprs.qosnprec)); memset(ri_cdr.cdr.cdrtail.gprs.qosnpput, '0', sizeof(ri_cdr.cdr.cdrtail.gprs.qosnpput)); addmemstrcpy(ri_cdr.cdr.cdrtail.gprs.qosnpput, $2.string[Y_QOSPPUT], sizeof(ri_cdr.cdr.cdrtail.gprs. qosnpput)); memset(ri_cdr.cdr.cdrtail.gprs.qosnmput, '0', sizeof(ri_cdr.cdr.cdrtail.gprs.qosnmput)); addmemstrcpy(ri_cdr.cdr.cdrtail.gprs.qosnmput, $2.string[Y_QOSMPUT], sizeof(ri_cdr.cdr.cdrtail.gprs. qosnmput)); }; GsnAddress: GSNADDRESS IpAddress GSNADDRESS_END { $$ = $2; } | IpAddress; HomeBid: /* empty */ { clear($$.string); } | HOMEBID Bid HOMEBID_END { $$ = $2; }; HomeIdentifier: /* empty */ { clear($$.string); } | HOMEIDENTIFIER AsciiString HOMEIDENTIFIER_END { $$ = $2; }; HomeIdType: /* empty */ { clear($$.string); } | HOMEIDTYPE Integer HOMEIDTYPE_END { $$ = $2; }; HomeLocationInformation: /* empty */ { clear($$.string); } | HOMELOCATIONINFORMATION HomeBid LocationDescription HOMELOCATIONINFORMATION_END; HorizontalAccuracyDelivered: /* empty */ { clear($$.string); } | HORIZONTALACCURACYDELIVERED Integer HORIZONTALACCURACYDELIVERED_END { $$ = $2; }; HorizontalAccuracyRequested: /* empty */ { clear($$.string); } | HORIZONTALACCURACYREQUESTED Integer HORIZONTALACCURACYREQUESTED_END { $$ = $2; }; HSCSDInformation: /* empty */ { clear($$.string); } | HSCSDINFORMATION BasicHSCSDParameters HSCSDParameterModificationList HSCSDINFORMATION_END { clear($$.string); strcpy($$.string[Y_MCHANNO], $2.string[Y_MCHANNO]); strcpy($$.string[Y_CHANACC], $2.string[Y_CHANACC]); strcpy($$.string[Y_CHANCOD], $2.string[Y_CHANCOD]); strcpy($$.string[Y_UCHANNO], $2.string[Y_UCHANNO]); }; HSCSDParameterModification: HSCSDPARAMETERMODIFICATION AiurRequested NumberOfChannels ChannelCoding NumberOfChannelsUsed InitiatingParty ModificationTimestamp HSCSDPARAMETERMODIFICATION_END; HSCSDParameterModificationList: /* empty */ { clear($$.string); } | HSCSDPARAMETERMODIFICATIONLIST HSCSDParameterModification_iter HSCSDPARAMETERMODIFICATIONLIST_END; HSCSDParameterModification_iter: /* empty */ { clear($$.string); } | HSCSDParameterModification_iter HSCSDParameterModification; Iac: IAC NumberString IAC_END { $$ = $2; }; IacList: /* empty */ { clear($$.string); } | IACLIST Iac_iter IACLIST_END; Iac_iter: /* empty */ { clear($$.string); } | Iac_iter Iac { if (ri_cdr.head.ip1[0] == ' ') { memstrcpy(ri_cdr.head.ip1, $2.string[0], sizeof(ri_cdr.head.ip1)); } else if (ri_cdr.head.ip2[0] == ' ') { memstrcpy(ri_cdr.head.ip2, $2.string[0], sizeof(ri_cdr.head.ip2)); } else if (ri_cdr.head.ip3[0] == ' ') { memstrcpy(ri_cdr.head.ip3, $2.string[0], sizeof(ri_cdr.head.ip3)); } else if (ri_cdr.head.ip4[0] == ' ') { memstrcpy(ri_cdr.head.ip4, $2.string[0], sizeof(ri_cdr.head.ip4)); } else if (ri_cdr.head.ip5[0] == ' ') { memstrcpy(ri_cdr.head.ip5, $2.string[0], sizeof(ri_cdr.head.ip5)); } }; Imei: IMEI BCDString IMEI_END { $$ = $2; } | IMEI IMEI_END { clear($$.string); }; ImeiOrEsn: Imei { $$ = $1; } | Esn; Imsi: /* empty */ { clear($$.string); } | IMSI BCDString IMSI_END { $$ = $2; }; InitiatingParty: /* empty */ { clear($$.string); } | INITIATINGPARTY Integer INITIATINGPARTY_END { $$ = $2; }; InternetServiceProvider: INTERNETSERVICEPROVIDER IspIdType IspIdentifier INTERNETSERVICEPROVIDER_END; InternetServiceProviderIdList: /* empty */ { clear($$.string); } | INTERNETSERVICEPROVIDERIDLIST InternetServiceProvider_iter INTERNETSERVICEPROVIDERIDLIST_END; InternetServiceProvider_iter: /* empty */ { clear($$.string); } | InternetServiceProvider_iter InternetServiceProvider; IpAddress: /* empty */ { clear($$.string); } | IPTextV4Address | IPTextV6Address; IPTextV4Address: IPTEXTV4ADDRESS AsciiString IPTEXTV4ADDRESS_END { $$ = $2; }; IPTextV6Address: IPTEXTV6ADDRESS AsciiString IPTEXTV6ADDRESS_END { $$ = $2; }; IspIdentifier: /* empty */ { clear($$.string); } | ISPIDENTIFIER AsciiString ISPIDENTIFIER_END { $$ = $2; }; IspIdType: /* empty */ { clear($$.string); } | ISPIDTYPE Integer ISPIDTYPE_END { $$ = $2; }; ISPList: /* empty */ { clear($$.string); } | ISPLIST InternetServiceProvider_iter ISPLIST_END; NetworkIdType: /* empty */ { clear($$.string); } | NETWORKIDTYPE Integer NETWORKIDTYPE_END { $$ = $2; }; NetworkIdentifier: /* empty */ { clear($$.string); } | NETWORKIDENTIFIER AsciiString NETWORKIDENTIFIER_END { $$ = $2; }; Network: NETWORK NetworkIdType NetworkIdentifier NETWORK_END; NetworkList: /* empty */ { clear($$.string); } | NETWORKLIST Network_iter NETWORKLIST_END; Network_iter: /* empty */ { clear($$.string); } | Network_iter Network; LatestCallTimeStamp: /* empty */ { clear($$.string); } | LATESTCALLTIMESTAMP DateTimeLong LATESTCALLTIMESTAMP_END { $$ = $2; }; Latitude: /* empty */ { clear($$.string); } | LATITUDE Integer LATITUDE_END { $$ = $2; }; LCSQosDelivered: /* empty */ { clear($$.string); } | LCSQOSDELIVERED LCSTransactionStatus HorizontalAccuracyDelivered VerticalAccuracyDelivered ResponseTime PositioningMethod TrackingPeriod TrackingFrequency AgeOfLocation LCSQOSDELIVERED_END; LCSQosRequested: /* empty */ { clear($$.string); } | LCSQOSREQUESTED LCSRequestTimestamp HorizontalAccuracyRequested VerticalAccuracyRequested ResponseTimeCategory TrackingPeriod TrackingFrequency LCSQOSREQUESTED_END; LCSRequestTimestamp: /* empty */ { clear($$.string); } | LCSREQUESTTIMESTAMP DateTime LCSREQUESTTIMESTAMP_END { $$ = $2; }; LCSSPIdentification: LCSSPIDENTIFICATION ContentProviderIdType ContentProviderIdentifier LCSSPIDENTIFICATION_END; LCSSPIdentificationList: /* empty */ { clear($$.string); } | LCSSPIDENTIFICATIONLIST LCSSPIdentification_iter LCSSPIDENTIFICATIONLIST_END; LCSSPIdentification_iter: /* empty */ { clear($$.string); } | LCSSPIdentification_iter LCSSPIdentification; LCSSPInformation: /* empty */ { clear($$.string); } | LCSSPINFORMATION LCSSPIdentificationList ISPList NetworkList LCSSPINFORMATION_END; LCSTransactionStatus: /* empty */ { clear($$.string); } | LCSTRANSACTIONSTATUS Integer LCSTRANSACTIONSTATUS_END { $$ = $2; }; LocalCurrency: /* empty */ { clear($$.string); } | LOCALCURRENCY Currency LOCALCURRENCY_END { $$ = $2; }; LocalTimeStamp: /* empty */ { clear($$.string); } | LOCALTIMESTAMP NumberString LOCALTIMESTAMP_END { $$ = $2; }; LocationArea: /* empty */ { clear($$.string); } | LOCATIONAREA Integer LOCATIONAREA_END { $$ = $2; }; LocationDescription: /* empty */ { clear($$.string); } | LOCATIONDESCRIPTION AsciiString LOCATIONDESCRIPTION_END { $$ = $2; }; LocationIdentifier: /* empty */ { clear($$.string); } | LOCATIONIDENTIFIER AsciiString LOCATIONIDENTIFIER_END { $$ = $2; }; LocationIdType: /* empty */ { clear($$.string); } | LOCATIONIDTYPE Integer LOCATIONIDTYPE_END { $$ = $2; }; LocationInformation: /* empty */ { clear($$.string); } | LOCATIONINFORMATION NetworkLocation HomeLocationInformation GeographicalLocation LOCATIONINFORMATION_END { clear($$.string); memstrcpy(ri_cdr.cdr.snet, $4.string[0], sizeof(ri_cdr.cdr.snet)); }; LocationServiceUsage: /* empty */ { clear($$.string); } | LOCATIONSERVICEUSAGE LCSQosRequested LCSQosDelivered ChargingTimeStamp ChargeInformationList LOCATIONSERVICEUSAGE_END; Longitude: /* empty */ { clear($$.string); } | LONGITUDE Integer LONGITUDE_END { $$ = $2; }; Mdn: /* empty */ { clear($$.string); } | MDN NumberString MDN_END { $$ = $2; }; MessageDescription: /* empty */ { clear($$.string); } | MESSAGEDESCRIPTION AsciiString MESSAGEDESCRIPTION_END { $$ = $2; }; MessageDescriptionCode: /* empty */ { clear($$.string); } | MESSAGEDESCRIPTIONCODE Code MESSAGEDESCRIPTIONCODE_END { $$ = $2; }; MessageDescriptionInformation: MESSAGEDESCRIPTIONINFORMATION MessageDescriptionCode MessageDescription MESSAGEDESCRIPTIONINFORMATION_END; MessageStatus: /* empty */ { clear($$.string); } | MESSAGESTATUS Integer MESSAGESTATUS_END { $$ = $2; }; MessageType: /* empty */ { clear($$.string); } | MESSAGETYPE Integer MESSAGETYPE_END { $$ = $2; }; Min: /* empty */ { clear($$.string); } | MIN NumberString MIN_END { $$ = $2; }; MinChargeableSubscriber: MINCHARGEABLESUBSCRIBER Min Mdn MINCHARGEABLESUBSCRIBER_END; MoBasicCallInformation: /* empty */ { clear($$.string); } | MOBASICCALLINFORMATION FraudMonitorIndicator ChargeableSubscriber RapFileSequenceNumber NetworkType Destination DestinationNetwork CallEventStartTimeStamp TotalCallEventDuration SimToolkitIndicator CauseForTerm MOBASICCALLINFORMATION_END { memstrcpy(ri_cdr.cdr.msisdn, $3.string[Y_MSISDN], sizeof(ri_cdr.cdr.msisdn)); memstrcpy(ri_cdr.cdr.schdate, $8.string[Y_DATETIME], sizeof(ri_cdr.cdr.schdate) + sizeof(ri_cdr.cdr.schtime)); memset(ri_cdr.cdr.gsmbno, ' ', sizeof(ri_cdr.cdr.gsmbno)); memstrcpy(ri_cdr.cdr.gsmbno, $6.string[0], sizeof(ri_cdr.cdr.gsmbno)); memstrcpy(ri_cdr.cdr.imsi, $3.string[Y_IMSI], sizeof(ri_cdr.cdr.imsi)); memstrcpy(ri_cdr.cdr.rapseq, $4.string[0], sizeof(ri_cdr.cdr.rapseq)); memstrcpy(ri_cdr.cdr.nettype, $5.string[0], sizeof(ri_cdr.cdr.nettype)); write_ctimeo(ri_cdr.cdr.cdrtail.gsm.ctimeo, $8.string[Y_OFFSET]); /* DISCPART */ if (strcmp($11.string[0], "4") == 0) { ri_cdr.cdr.cdrtail.gsm.discpart[0] = '2'; } else { ri_cdr.cdr.cdrtail.gsm.discpart[0] = '0'; } /* BNET */ memstrcpy(ri_cdr.cdr.cdrtail.gsm.bnet, $7.string[0], sizeof(ri_cdr.cdr.cdrtail.gsm.bnet)); }; MobileStationClassMark: /* empty */ { clear($$.string); } | MOBILESTATIONCLASSMARK Integer MOBILESTATIONCLASSMARK_END { $$ = $2; }; ModificationTimestamp: /* empty */ { clear($$.string); } | MODIFICATIONTIMESTAMP DateTime MODIFICATIONTIMESTAMP_END { $$ = $2; }; MscId: MSCID AsciiString MSCID_END { $$ = $2; }; Msisdn: /* empty */ { clear($$.string); } | MSISDN BCDString MSISDN_END { $$ = $2; } | MSISDN MSISDN_END { clear($$.string ); }; MtBasicCallInformation: /* empty */ { clear($$.string); } | MTBASICCALLINFORMATION FraudMonitorIndicator ChargeableSubscriber RapFileSequenceNumber NetworkType CallOriginator OriginatingNetwork CallEventStartTimeStamp TotalCallEventDuration SimToolkitIndicator CauseForTerm MTBASICCALLINFORMATION_END { /* ChargeableSubscriber is A-part for Mt */ memset(ri_cdr.cdr.gsmbno, ' ', sizeof(ri_cdr.cdr.gsmbno)); memstrcpy(ri_cdr.cdr.gsmbno, $6.string[Y_MSISDN], sizeof(ri_cdr.cdr.gsmbno)); memstrcpy(ri_cdr.cdr.schdate, $8.string[Y_DATETIME], sizeof(ri_cdr.cdr.schdate) + sizeof(ri_cdr.cdr.schtime)); /* CallOriginator is B-Part for Mt */ memstrcpy(ri_cdr.cdr.msisdn, $3.string[Y_MSISDN], sizeof(ri_cdr.cdr.msisdn)); memstrcpy(ri_cdr.cdr.imsi, $3.string[Y_IMSI], sizeof(ri_cdr.cdr.imsi)); memstrcpy(ri_cdr.cdr.rapseq, $4.string[0], sizeof(ri_cdr.cdr.rapseq)); memstrcpy(ri_cdr.cdr.nettype, $5.string[0], sizeof(ri_cdr.cdr.nettype)); write_ctimeo(ri_cdr.cdr.cdrtail.gsm.ctimeo, $8.string[Y_OFFSET]); /* DISCPART */ if (strcmp($11.string[0], "4") == 0) { ri_cdr.cdr.cdrtail.gsm.discpart[0] = '2'; } else { ri_cdr.cdr.cdrtail.gsm.discpart[0] = '0'; } /* BNET */ memstrcpy(ri_cdr.cdr.cdrtail.gsm.bnet, $7.string[0], sizeof(ri_cdr.cdr.cdrtail.gsm.bnet)); strcpy($$.string[Y_CLIR], $6.string[Y_CLIR]); }; MultiRateIndicator: /* empty */ { clear($$.string); } | MULTIRATEINDICATOR Integer MULTIRATEINDICATOR_END { $$ = $2; }; NetworkInitPDPContext: /* empty */ { clear($$.string); } | NETWORKINITPDPCONTEXT Integer NETWORKINITPDPCONTEXT_END { $$ = $2; }; NetworkLocation: /* empty */ { clear($$.string); } | NETWORKLOCATION RecEntityCode CallReference LocationArea CellId NETWORKLOCATION_END { memset(ri_cdr.cdr.cin, '0', 8); memrevstrcpy(ri_cdr.cdr.cin, $3.string[0], sizeof(ri_cdr.cdr.cin)); /* LOCAREA */ memstrcpy(ri_cdr.cdr.locarea, $4.string[0], sizeof(ri_cdr.cdr.locarea)); /* CELLID */ memstrcpy(ri_cdr.cdr.cellid, $5.string[0], sizeof(ri_cdr.cdr.cellid)); /* MSCID & RECENTTYPE*/ { int recent_no; char* endptr; recent_no = strtol($2.string[0], &endptr, 0); if (*endptr != NULL || recent_no >= RECENT_MAX) { fflush(stdout); fprintf(stderr, "RecEntityCode error (%s)\n", $2.string[0]); fflush(stderr); yyerror($2.string[0]); YYERROR; } memstrcpy(ri_cdr.cdr.mscid, recentcode_list[recent_no], sizeof(ri_cdr.cdr.mscid)); memstrcpy(ri_cdr.cdr.cdrtail.gsm.recenttype, recenttype_list[recent_no], sizeof(ri_cdr.cdr.cdrtail.gsm. recenttype)); } }; NetworkType: /* empty */ { clear($$.string); } | NETWORKTYPE Integer NETWORKTYPE_END { $$ = $2; }; NonChargedParty: /* empty */ { clear($$.string); } | NONCHARGEDPARTY AddressStringDigits CalledNumAnalysisCode NONCHARGEDPARTY_END; NumberOfChannels: /* empty */ { clear($$.string); } | NUMBEROFCHANNELS Integer NUMBEROFCHANNELS_END { $$ = $2; }; NumberOfChannelsUsed: /* empty */ { clear($$.string); } | NUMBEROFCHANNELSUSED Integer NUMBEROFCHANNELSUSED_END { $$ = $2; }; NumberOfDecimalPlaces: /* empty */ { clear($$.string); } | NUMBEROFDECIMALPLACES Integer NUMBEROFDECIMALPLACES_END { $$ = $2; }; ObjectType: /* empty */ { clear($$.string); } | OBJECTTYPE Integer OBJECTTYPE_END { $$ = $2; }; OperatorSpecInfoList: /* empty */ { clear($$.string); } | OPERATORSPECINFOLIST OperatorSpecInformation_iter OPERATORSPECINFOLIST_END; OperatorSpecInformation_iter: /* empty */ { clear($$.string); } | OperatorSpecInformation_iter OperatorSpecInformation; OperatorSpecInformation: OPERATORSPECINFORMATION AsciiString OPERATORSPECINFORMATION_END { $$ = $2; } | OPERATORSPECINFORMATION OPERATORSPECINFORMATION_END; OrderPlacedTimeStamp: /* empty */ { clear($$.string); } | ORDERPLACEDTIMESTAMP DateTime ORDERPLACEDTIMESTAMP_END { $$ = $2; }; OriginatingNetwork: /* empty */ { clear($$.string); } | ORIGINATINGNETWORK NetworkId ORIGINATINGNETWORK_END { $$ = $2; }; PacketDataProtocolAddress: /* empty */ { clear($$.string); } | PACKETDATAPROTOCOLADDRESS AsciiString PACKETDATAPROTOCOLADDRESS_END { $$ = $2; } | AsciiString { $$ = $1; }; PaidIndicator: /* empty */ { clear($$.string); } | PAIDINDICATOR Integer PAIDINDICATOR_END { $$ = $2; }; PartialTypeIndicator: /* empty */ { clear($$.string); } | PARTIALTYPEINDICATOR AsciiString PARTIALTYPEINDICATOR_END { $$ = $2; }; PaymentMethod: /* empty */ { clear($$.string); } | PAYMENTMETHOD Integer PAYMENTMETHOD_END { $$ = $2; }; PdpAddress: /* empty */ { clear($$.string); } | PDPADDRESS PacketDataProtocolAddress PDPADDRESS_END { $$ = $2; }; PDPContextStartTimestamp: /* empty */ { clear($$.string); } | PDPCONTEXTSTARTTIMESTAMP DateTime PDPCONTEXTSTARTTIMESTAMP_END { $$ = $2; }; PdpType: /* empty */ { clear($$.string); } | PDPTYPE Integer PDPTYPE_END { $$ = $2; }; PositioningMethod: /* empty */ { clear($$.string); } | POSITIONINGMETHOD Integer POSITIONINGMETHOD_END { $$ = $2; }; PriorityCode: /* empty */ { clear($$.string); } | PRIORITYCODE Integer PRIORITYCODE_END { $$ = $2; }; QoSAllocRetenPriority: /* empty */ { clear($$.string); } | QOSALLOCRETENPRIORITY Integer QOSALLOCRETENPRIORITY_END { $$ = $2; }; QoSDelay: /* empty */ { clear($$.string); } | QOSDELAY Integer QOSDELAY_END { $$ = $2; }; QoSGuaranteedBitRateDownlink: /* empty */ { clear($$.string); } | QOSGUARANTEEDBITRATEDOWNLINK OctetString QOSGUARANTEEDBITRATEDOWNLINK_END { $$ = $2; }; QoSGuaranteedBitRateUplink: /* empty */ { clear($$.string); } | QOSGUARANTEEDBITRATEUPLINK OctetString QOSGUARANTEEDBITRATEUPLINK_END { $$ = $2; }; QoSMaxBitRateDownlink: /* empty */ { clear($$.string); } | QOSMAXBITRATEDOWNLINK OctetString QOSMAXBITRATEDOWNLINK_END { $$ = $2; }; QoSMaxBitRateUplink: /* empty */ { clear($$.string); } | QOSMAXBITRATEUPLINK OctetString QOSMAXBITRATEUPLINK_END { $$ = $2; }; QoSMeanThroughput: /* empty */ { clear($$.string); } | QOSMEANTHROUGHPUT Integer QOSMEANTHROUGHPUT_END { $$ = $2; }; QoSPeakThroughput: /* empty */ { clear($$.string); } | QOSPEAKTHROUGHPUT Integer QOSPEAKTHROUGHPUT_END { $$ = $2; }; QoSPrecedence: /* empty */ { clear($$.string); } | QOSPRECEDENCE Integer QOSPRECEDENCE_END { $$ = $2; }; QoSReliability: /* empty */ { clear($$.string); } | QOSRELIABILITY Integer QOSRELIABILITY_END { $$ = $2; }; QoSRequested: GSMQoSRequested | UMTSQoSRequested; QoSTrafficClass: /* empty */ { clear($$.string); } | QOSTRAFFICCLASS Integer QOSTRAFFICCLASS_END { $$ = $2; }; QoSUsed: GSMQoSUsed | UMTSQoSUsed; RadioChannelRequested: /* empty */ { clear($$.string); } | RADIOCHANNELREQUESTED Integer RADIOCHANNELREQUESTED_END { $$ = $2; }; RadioChannelUsed: /* empty */ { clear($$.string); } | RADIOCHANNELUSED Integer RADIOCHANNELUSED_END { $$ = $2; }; RapFileSequenceNumber: /* empty */ { clear($$.string); } | RAPFILESEQUENCENUMBER NumberString RAPFILESEQUENCENUMBER_END { $$ = $2; }; | RAPFILESEQUENCENUMBER RAPFILESEQUENCENUMBER_END { clear($$.string); }; RecEntityCode: RECENTITYCODE Code RECENTITYCODE_END { $$ = $2; }; RecEntityCodeList: /* empty */ { clear($$.string); } | RECENTITYCODELIST RecEntityCode_iter RECENTITYCODELIST_END; RecEntityCode_iter: /* empty */ { clear($$.string); } | RecEntityCode_iter RecEntityCode { int recent_no; char* endptr; recent_no = strtol($2.string[0], &endptr, 0); if (*endptr != NULL || recent_no >= RECENT_MAX) { fflush(stdout); fprintf(stderr, "RecEntityCode error (iter) (%s)\n", $2.string[0]); fflush(stderr); yyerror($2.string[0]); YYERROR; } if (recenttype_list[recent_no][0] == '3') { memstrcpy(ri_cdr.cdr.cdrtail.gprs.ggsnaddr, recentcode_list[recent_no], sizeof(ri_cdr.cdr.cdrtail.gprs. ggsnaddr)); ri_cdr.cdr.cdrtail.gprs.ggpdptype[0] = recenttype_list[recent_no][0]; } else if (recenttype_list[recent_no][0] == '4') { memstrcpy(ri_cdr.cdr.cdrtail.gprs.sgsnaddr, recentcode_list[recent_no], sizeof(ri_cdr.cdr.cdrtail.gprs. sgsnaddr)); ri_cdr.cdr.cdrtail.gprs.sgpdptype[0] = recenttype_list[recent_no][0]; } }; RecEntityId: GmlcAddress | MscId | Msisdn | GsnAddress; RecEntityInfoList: /* empty */ { clear($$.string); } | RECENTITYINFOLIST RecEntityInformation_iter RECENTITYINFOLIST_END; RecEntityInformation_iter: /* empty */ { clear($$.string); } | RecEntityInformation_iter RecEntityInformation; RecEntityInformation: RECENTITYINFORMATION RecEntityCode RecEntityType RecEntityId RECENTITYINFORMATION_END { int recent_no; char* endptr; recent_no = strtol($2.string[0], &endptr, 0); if (*endptr != NULL || recent_no >= RECENT_MAX) { fflush(stdout); fprintf(stderr, "RecEntityCode error (list)\n"); fflush(stderr); YYERROR; } strncpy(recentcode_list[recent_no], $4.string[0], 39); recentcode_list[recent_no][39] = '\0'; recenttype_list[recent_no][0] = $3.string[0][0]; recenttype_list[recent_no][1] = '\0'; }; RecEntityType: /* empty */ { clear($$.string); } | RECENTITYTYPE Integer RECENTITYTYPE_END { $$ = $2; }; Recipient: /* empty */ { clear($$.string); } | RECIPIENT PlmnId RECIPIENT_END { $$ = $2; }; ReleaseVersionNumber: /* empty */ { clear($$.string); } | RELEASEVERSIONNUMBER Integer RELEASEVERSIONNUMBER_END { $$ = $2; }; RemotePdpAddressList: /* empty */ { clear($$.string); } | REMOTEPDPADDRESSLIST PacketDataProtocolAddress_iter REMOTEPDPADDRESSLIST_END { $$ = $2; }; PacketDataProtocolAddress_iter: /* empty */ { clear($$.string); } | PacketDataProtocolAddress_iter PacketDataProtocolAddress { if ($1.string[0][0] == '\0') { $$ = $2; } else { $$ = $1; } }; RequestedDeliveryTimeStamp: /* empty */ { clear($$.string); } | REQUESTEDDELIVERYTIMESTAMP DateTime REQUESTEDDELIVERYTIMESTAMP_END { $$ = $2; }; ResponseTime: /* empty */ { clear($$.string); } | RESPONSETIME Integer RESPONSETIME_END { $$ = $2; }; ResponseTimeCategory: /* empty */ { clear($$.string); } | RESPONSETIMECATEGORY Integer RESPONSETIMECATEGORY_END { $$ = $2; }; ScuBasicInformation: /* empty */ { clear($$.string); } | SCUBASICINFORMATION ScuVasChargeableSubscriber ChargedPartyStatus NonChargedParty ClirIndicator OriginatingNetwork DestinationNetwork SCUBASICINFORMATION_END; ScuChargeType: /* empty */ { clear($$.string); } | SCUCHARGETYPE MessageStatus PriorityCode DistanceChargeBandCode MessageType MessageDescriptionCode SCUCHARGETYPE_END; ScuTimeStamps: /* empty */ { clear($$.string); } | SCUTIMESTAMPS DepositTimeStamp CompletionTimeStamp ChargingPoint SCUTIMESTAMPS_END; ScuVasChargeableSubscriber: GsmChargeableSubscriber | MinChargeableSubscriber; Sender: /* empty */ { clear($$.string); } | SENDER PlmnId SENDER_END { $$ = $2; }; ServingBid: /* empty */ { clear($$.string); } | SERVINGBID Bid SERVINGBID_END { $$ = $2; }; ServingNetwork: /* empty */ { clear($$.string); } | SERVINGNETWORK AsciiString SERVINGNETWORK_END { $$ = $2; }; ServingPartiesInformation: /* empty */ { clear($$.string); } | SERVINGPARTIESINFORMATION ContentProviderName ContentProviderIdList InternetServiceProviderIdList NetworkList SERVINGPARTIESINFORMATION_END; SimChargeableSubscriber: /* empty */ { clear($$.string); } | SIMCHARGEABLESUBSCRIBER Imsi Msisdn SIMCHARGEABLESUBSCRIBER_END { clear($$.string); strcpy($$.string[Y_IMSI], $2.string[0]); strcpy($$.string[Y_MSISDN], $3.string[0]);; }; SimToolkitIndicator: /* empty */ { clear($$.string); } | SIMTOOLKITINDICATOR AsciiString SIMTOOLKITINDICATOR_END { $$ = $2; }; SpecificationVersionNumber: /* empty */ { clear($$.string); } | SPECIFICATIONVERSIONNUMBER Integer SPECIFICATIONVERSIONNUMBER_END { $$ = $2; }; SpeechVersionRequested: /* empty */ { clear($$.string); } | SPEECHVERSIONREQUESTED SpeechVersion SPEECHVERSIONREQUESTED_END { $$ = $2; }; SpeechVersionUsed: /* empty */ { clear($$.string); } | SPEECHVERSIONUSED SpeechVersion SPEECHVERSIONUSED_END { $$ = $2; }; SsParameters: /* empty */ { clear($$.string); } | SSPARAMETERS AsciiString SSPARAMETERS_END { $$ = $2; }; SupplServiceActionCode: /* empty */ { clear($$.string); } | SUPPLSERVICEACTIONCODE Integer SUPPLSERVICEACTIONCODE_END { $$ = $2; } ; SupplServiceCode: /* empty */ { clear($$.string); } | SUPPLSERVICECODE HexString SUPPLSERVICECODE_END { $$ = $2; }; SupplServiceUsed: /* empty */ { clear($$.string); } | SUPPLSERVICEUSED SupplServiceCode SupplServiceActionCode SsParameters ThirdPartyInformation ChargingTimeStamp ChargeInformation BasicServiceCodeList SUPPLSERVICEUSED_END { $$ = $2; strcpy($$.string[Y_DATETIME], $6.string[Y_DATETIME]); strcpy($$.string[Y_OFFSET ], $6.string[Y_OFFSET ]); strcpy($$.string[Y_CHUNIT ], $7.string[Y_CHUNIT ]); strcpy($$.string[Y_CHARGE ], $7.string[Y_CHARGE ]); strcpy($$.string[Y_CHITEM ], $7.string[Y_CHITEM ]); strcpy($$.string[Y_TELESC ], $8.string[Y_TELESC ]); strcpy($$.string[Y_BEARSC ], $8.string[Y_BEARSC ]); strcpy($$.string[Y_SSREQ ], $3.string[0]); strcpy($$.string[Y_DCATE ], $7.string[Y_DCATE ]); strcpy($$.string[Y_TBAND ], $7.string[Y_TBAND ]); strcpy($$.string[Y_CHARGE ], $7.string[Y_CHARGE ]); strcpy($$.string[Y_EXCODE ], $7.string[Y_EXCODE ]); strcpy($$.string[Y_SSCODE ], $2.string[0]); strcpy($$.string[Y_SSREQ ], $3.string[0]); }; SupplServiceUsedList: /* empty */ { clear($$.string); } | SUPPLSERVICEUSEDLIST SupplServiceUsed_iter SUPPLSERVICEUSEDLIST_END { memstrcpy(ri_cdr.cdr.ssi, $2.string[0], sizeof(ri_cdr.cdr.ssi)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm.ccharge, ri_cdr.cdr.exch_rate, $2.string[Y_CHARGE]); }; SupplServiceUsed_iter: /* empty */ { clear($$.string); } | SupplServiceUsed_iter SupplServiceUsed { /* first SupplServiceUsed is empty */ if ($1.string[0][0] == '\0') { $$ = $2; } else { $$ = $1; switch (ri_cdr.cdr.cdrtail.gsm.noevent[0]) { case '0': memstrcpy(ri_cdr.cdr.cdrtail.gsm.em1.emt, "SSI", sizeof(ri_cdr.cdr.cdrtail.gsm. em1.emt)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em1.data.ssi.esscode, $2.string[Y_SSCODE], sizeof(ri_cdr.cdr.cdrtail.gsm. em1.data.ssi.esscode)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em1.data.ssi.essreq, $2.string[Y_SSREQ], sizeof(ri_cdr.cdr.cdrtail.gsm. em1.data.ssi.essreq)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm. echarge1, ri_cdr.cdr.exch_rate, $2.string[Y_CHARGE]); /* increase NOEVENT */ addmemstrcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "1", sizeof(ri_cdr.cdr.cdrtail.gsm. noevent)); break; case '1': memstrcpy(ri_cdr.cdr.cdrtail.gsm.em2.emt, "SSI", sizeof(ri_cdr.cdr.cdrtail.gsm. em2.emt)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em2.data.ssi.esscode, $2.string[Y_SSCODE], sizeof(ri_cdr.cdr.cdrtail.gsm. em2.data.ssi.esscode)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em2.data.ssi.essreq, $2.string[Y_SSREQ], sizeof(ri_cdr.cdr.cdrtail.gsm. em2.data.ssi.essreq)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm. echarge2, ri_cdr.cdr.exch_rate, $2.string[Y_CHARGE]); /* increase NOEVENT */ addmemstrcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "1", sizeof(ri_cdr.cdr.cdrtail.gsm. noevent)); break; case '2': memstrcpy(ri_cdr.cdr.cdrtail.gsm.em3.emt, "SSI", sizeof(ri_cdr.cdr.cdrtail.gsm. em3.emt)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em3.data.ssi.esscode, $2.string[Y_SSCODE], sizeof(ri_cdr.cdr.cdrtail.gsm. em3.data.ssi.esscode)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em3.data.ssi.essreq, $2.string[Y_SSREQ], sizeof(ri_cdr.cdr.cdrtail.gsm. em3.data.ssi.essreq)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm. echarge3, ri_cdr.cdr.exch_rate, $2.string[Y_CHARGE]); /* increase NOEVENT */ addmemstrcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "1", sizeof(ri_cdr.cdr.cdrtail.gsm. noevent)); break; case '3': memstrcpy(ri_cdr.cdr.cdrtail.gsm.em4.emt, "SSI", sizeof(ri_cdr.cdr.cdrtail.gsm. em4.emt)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em4.data.ssi.esscode, $2.string[Y_SSCODE], sizeof(ri_cdr.cdr.cdrtail.gsm. em4.data.ssi.esscode)); memstrcpy(ri_cdr.cdr.cdrtail.gsm. em4.data.ssi.essreq, $2.string[Y_SSREQ], sizeof(ri_cdr.cdr.cdrtail.gsm. em4.data.ssi.essreq)); write_charge_exchrate(ri_cdr.cdr.cdrtail.gsm. echarge4, ri_cdr.cdr.exch_rate, $2.string[Y_CHARGE]); /* increase NOEVENT */ addmemstrcpy(ri_cdr.cdr.cdrtail.gsm.noevent, "1", sizeof(ri_cdr.cdr.cdrtail.gsm. noevent)); break; default: if (atoll($2.string[Y_CHARGE]) > 0) { fflush(stdout); fprintf(stderr, "SupplServiceUsed to discard has charge (%s)\n", $2.string[Y_CHARGE]); fflush(stderr); yyerror(""); YYERROR; } /* discard */ break; } } }; TapCurrency: /* empty */ { clear($$.string); } | TAPCURRENCY Currency TAPCURRENCY_END { $$ = $2; }; TapDecimalPlaces: /* empty */ { clear($$.string); } | TAPDECIMALPLACES Integer TAPDECIMALPLACES_END { $$ = $2; }; TaxableAmount: /* empty */ { clear($$.string); } | TAXABLEAMOUNT AbsoluteAmount TAXABLEAMOUNT_END { $$ = $2; }; Taxation: TAXATION TaxCode TaxType TaxRate TAXATION_END; TaxationList: /* empty */ { clear($$.string); } | TAXATIONLIST Taxation_iter TAXATIONLIST_END; Taxation_iter: /* empty */ { clear($$.string); } | Taxation_iter Taxation; TaxCode: /* empty */ { clear($$.string); } | TAXCODE Integer TAXCODE_END { $$ = $2; }; TaxInformation: TAXINFORMATION TaxCode TaxValue ChargeType TaxableAmount TAXINFORMATION_END { $$ = $3; }; TaxInformationList: /* empty */ { clear($$.string); } | TAXINFORMATIONLIST TaxInformation_iter TAXINFORMATIONLIST_END { $$ = $2; }; TaxInformation_iter: /* empty */ { clear($$.string); } | TaxInformation_iter TaxInformation { if ($1.string[0][0] == '\0') { $$ = $2; } else { $$ = $1; sprintf($$.string[0], "%ld", atol($1.string[0]) + atol($2.string[0])); } }; TaxRate: /* empty */ { clear($$.string); } | TAXRATE NumberString TAXRATE_END { $$ = $2; }; TaxType: /* empty */ { clear($$.string); } | TAXTYPE AsciiString TAXTYPE_END { $$ = $2; }; TaxValue: /* empty */ { clear($$.string); } | TAXVALUE AbsoluteAmount TAXVALUE_END { $$ = $2; }; TeleServiceCode: TELESERVICECODE HexString TELESERVICECODE_END { $$ = $2; }; ThirdPartyInformation: /* empty */ { clear($$.string); } | THIRDPARTYINFORMATION AddressStringDigits ClirIndicator THIRDPARTYINFORMATION_END; ThreeGcamelDestination: AddressStringDigits { memset(ri_cdr.cdr.gsmbno, ' ', sizeof(ri_cdr.cdr.gsmbno)); memstrcpy(ri_cdr.cdr.gsmbno, $1.string[0], sizeof(ri_cdr.cdr.gsmbno)); } | GprsDestination; TimeBand: /* empty */ { clear($$.string); } | TIMEBAND AsciiString TIMEBAND_END { $$ = $2; }; TimeBandSubtype: /* empty */ { clear($$.string); } | TIMEBANDSUBTYPE AsciiString TIMEBANDSUBTYPE_END { $$ = $2; }; TotalAdvisedCharge: /* empty */ { clear($$.string); } | TOTALADVISEDCHARGE AbsoluteAmount TOTALADVISEDCHARGE_END { $$ = $2; }; TotalAdvisedChargeRefund: /* empty */ { clear($$.string); } | TOTALADVISEDCHARGEREFUND AbsoluteAmount TOTALADVISEDCHARGEREFUND_END { $$ = $2; }; TotalAdvisedChargeValue: TOTALADVISEDCHARGEVALUE AdvisedChargeCurrency TotalAdvisedCharge TotalAdvisedChargeRefund TotalCommission TotalCommissionRefund TOTALADVISEDCHARGEVALUE_END; TotalAdvisedChargeValueList: /* empty */ { clear($$.string); } | TOTALADVISEDCHARGEVALUELIST TotalAdvisedChargeValue_iter TOTALADVISEDCHARGEVALUELIST_END; TotalAdvisedChargeValue_iter: /* empty */ { clear($$.string); } | TotalAdvisedChargeValue_iter TotalAdvisedChargeValue; TotalCallEventDuration: /* empty */ { clear($$.string); } | TOTALCALLEVENTDURATION Integer TOTALCALLEVENTDURATION_END { $$ = $2; }; TotalChargeRefund: /* empty */ { clear($$.string); } | TOTALCHARGEREFUND AbsoluteAmount TOTALCHARGEREFUND_END { $$ = $2; }; TotalChargeValue: TOTALCHARGEVALUE ChargeType AbsoluteAmountTag TotalChargeRefund TOTALCHARGEVALUE_END { clear($$.string); strcpy($$.string[Y_CHTYPE], $2.string[0]); strcpy($$.string[Y_CHARGE], $3.string[0]); }; AbsoluteAmountTag: /* empty */ { clear($$.string); } | ABSOLUTEAMOUNT AbsoluteAmount ABSOLUTEAMOUNT_END { $$ = $2; }; TotalChargeValueList: /* empty */ { clear($$.string); } | TOTALCHARGEVALUELIST TotalChargeValue_iter TOTALCHARGEVALUELIST_END { $$ = $2; }; TotalChargeValue_iter: /* empty */ { clear($$.string); } | TotalChargeValue_iter TotalChargeValue { if ($1.string[Y_CHARGE][0] == '\0') { /* first detail is end of list - use second */ $$ = $2; } else { if (strcmp($1.string[Y_CHTYPE], "00") == 0) { /* first detail contains total charge */ $$ = $1; } else if (strcmp($2.string[Y_CHTYPE], "00") == 0) { /* second detail contains total charge */ $$ = $2; } else { /* use first */ $$ = $1; } } }; TotalCommission: /* empty */ { clear($$.string); } | TOTALCOMMISSION AbsoluteAmount TOTALCOMMISSION_END { $$ = $2; }; TotalCommissionRefund: /* empty */ { clear($$.string); } | TOTALCOMMISSIONREFUND AbsoluteAmount TOTALCOMMISSIONREFUND_END { $$ = $2; }; TotalDataVolume: /* empty */ { clear($$.string); } | TOTALDATAVOLUME DataVolume TOTALDATAVOLUME_END { $$ = $2; }; TotalDiscountRefund: /* empty */ { clear($$.string); } | TOTALDISCOUNTREFUND AbsoluteAmount TOTALDISCOUNTREFUND_END { $$ = $2; }; TotalDiscountValue: /* empty */ { clear($$.string); } | TOTALDISCOUNTVALUE AbsoluteAmount TOTALDISCOUNTVALUE_END { $$ = $2; }; TotalTaxRefund: /* empty */ { clear($$.string); } | TOTALTAXREFUND AbsoluteAmount TOTALTAXREFUND_END { $$ = $2; }; TotalTaxValue: /* empty */ { clear($$.string); } | TOTALTAXVALUE AbsoluteAmount TOTALTAXVALUE_END { $$ = $2; }; TrackedCustomerEquipment: /* empty */ { clear($$.string); } | TRACKEDCUSTOMEREQUIPMENT EquipmentIdType EquipmentId TRACKEDCUSTOMEREQUIPMENT_END; TrackedCustomerHomeId: TRACKEDCUSTOMERHOMEID HomeIdType HomeIdentifier TRACKEDCUSTOMERHOMEID_END; TrackedCustomerHomeIdList: /* empty */ { clear($$.string); } | TRACKEDCUSTOMERHOMEIDLIST TrackedCustomerHomeId_iter TRACKEDCUSTOMERHOMEIDLIST_END; TrackedCustomerHomeId_iter: /* empty */ { clear($$.string); } | TrackedCustomerHomeId_iter TrackedCustomerHomeId; TrackedCustomerIdentification: TRACKEDCUSTOMERIDENTIFICATION CustomerIdType CustomerIdentifier TRACKEDCUSTOMERIDENTIFICATION_END; TrackedCustomerIdList: /* empty */ { clear($$.string); } | TRACKEDCUSTOMERIDLIST TrackedCustomerIdentification_iter TRACKEDCUSTOMERIDLIST_END; TrackedCustomerIdentification_iter: /* empty */ { clear($$.string); } | TrackedCustomerIdentification_iter TrackedCustomerIdentification; TrackedCustomerInformation: /* empty */ { clear($$.string); } | TRACKEDCUSTOMERINFORMATION TrackedCustomerIdList TrackedCustomerHomeIdList TrackedCustomerLocList TrackedCustomerEquipment TRACKEDCUSTOMERINFORMATION_END; TrackedCustomerLocation: TRACKEDCUSTOMERLOCATION LocationIdType LocationIdentifier TRACKEDCUSTOMERLOCATION_END; TrackedCustomerLocList: /* empty */ { clear($$.string); } | TRACKEDCUSTOMERLOCLIST TrackedCustomerLocation_iter TRACKEDCUSTOMERLOCLIST_END; TrackedCustomerLocation_iter: /* empty */ { clear($$.string); } | TrackedCustomerLocation_iter TrackedCustomerLocation; TrackingCustomerEquipment: /* empty */ { clear($$.string); } | TRACKINGCUSTOMEREQUIPMENT EquipmentIdType EquipmentId TRACKINGCUSTOMEREQUIPMENT_END; TrackingCustomerHomeId: TRACKINGCUSTOMERHOMEID HomeIdType HomeIdentifier TRACKINGCUSTOMERHOMEID_END; TrackingCustomerHomeIdList: /* empty */ { clear($$.string); } | TRACKINGCUSTOMERHOMEIDLIST TrackingCustomerHomeId_iter TRACKINGCUSTOMERHOMEIDLIST_END; TrackingCustomerHomeId_iter: /* empty */ { clear($$.string); } | TrackingCustomerHomeId_iter TrackingCustomerHomeId; TrackingCustomerIdentification: TRACKINGCUSTOMERIDENTIFICATION CustomerIdType CustomerIdentifier TRACKINGCUSTOMERIDENTIFICATION_END; TrackingCustomerIdList: /* empty */ { clear($$.string); } | TRACKINGCUSTOMERIDLIST TrackingCustomerIdentification_iter TRACKINGCUSTOMERIDLIST_END; TrackingCustomerIdentification_iter: /* empty */ { clear($$.string); } | TrackingCustomerIdentification_iter TrackingCustomerIdentification; TrackingCustomerInformation: /* empty */ { clear($$.string); } | TRACKINGCUSTOMERINFORMATION TrackingCustomerIdList TrackingCustomerHomeIdList TrackingCustomerLocList TrackingCustomerEquipment TRACKINGCUSTOMERINFORMATION_END; TrackingCustomerLocation: TRACKINGCUSTOMERLOCATION LocationIdType LocationIdentifier TRACKINGCUSTOMERLOCATION_END; TrackingCustomerLocList: /* empty */ { clear($$.string); } | TRACKINGCUSTOMERLOCLIST TrackingCustomerLocation_iter TRACKINGCUSTOMERLOCLIST_END; TrackingCustomerLocation_iter: /* empty */ { clear($$.string); } | TrackingCustomerLocation_iter TrackingCustomerLocation; TrackingFrequency: /* empty */ { clear($$.string); } | TRACKINGFREQUENCY Integer TRACKINGFREQUENCY_END { $$ = $2; }; TrackingPeriod: /* empty */ { clear($$.string); } | TRACKINGPERIOD Integer TRACKINGPERIOD_END { $$ = $2; }; TransactionAuthCode: /* empty */ { clear($$.string); } | TRANSACTIONAUTHCODE AsciiString TRANSACTIONAUTHCODE_END { $$ = $2; }; TransactionDescriptionSupp: /* empty */ { clear($$.string); } | TRANSACTIONDESCRIPTIONSUPP Integer TRANSACTIONDESCRIPTIONSUPP_END { $$ = $2; }; TransactionDetailDescription: /* empty */ { clear($$.string); } | TRANSACTIONDETAILDESCRIPTION AsciiString TRANSACTIONDETAILDESCRIPTION_END { $$ = $2; }; TransactionIdentifier: /* empty */ { clear($$.string); } | TRANSACTIONIDENTIFIER AsciiString TRANSACTIONIDENTIFIER_END { $$ = $2; }; TransactionShortDescription: /* empty */ { clear($$.string); } | TRANSACTIONSHORTDESCRIPTION AsciiString TRANSACTIONSHORTDESCRIPTION_END { $$ = $2; }; TransactionStatus: /* empty */ { clear($$.string); } | TRANSACTIONSTATUS Integer TRANSACTIONSTATUS_END { $$ = $2; }; TransferCutOffTimeStamp: /* empty */ { clear($$.string); } | TRANSFERCUTOFFTIMESTAMP DateTimeLong TRANSFERCUTOFFTIMESTAMP_END { $$ = $2; }; TransparencyIndicator: /* empty */ { clear($$.string); } | TRANSPARENCYINDICATOR Integer TRANSPARENCYINDICATOR_END { $$ = $2; }; TypeOfControllingNode: /* empty */ { clear($$.string); } | TYPEOFCONTROLLINGNODE Integer TYPEOFCONTROLLINGNODE_END { $$ = $2; }; UMTSQoSInformation: QoSTrafficClass QoSMaxBitRateUplink QoSMaxBitRateDownlink QoSGuaranteedBitRateDownlink QoSGuaranteedBitRateUplink QoSAllocRetenPriority; UMTSQoSRequested: UMTSQOSREQUESTED UMTSQoSInformation UMTSQOSREQUESTED_END { $$ = $2; }; UMTSQoSUsed: UMTSQOSUSED UMTSQoSInformation UMTSQOSUSED_END { $$ = $2; }; UserProtocolIndicator: /* empty */ { clear($$.string); } | USERPROTOCOLINDICATOR Integer USERPROTOCOLINDICATOR_END { $$ = $2; }; UtcTimeOffset: /* empty */ { clear($$.string); } | UTCTIMEOFFSET AsciiString UTCTIMEOFFSET_END { $$ = $2; }; UtcTimeOffsetCode: /* empty */ { clear($$.string); } | UTCTIMEOFFSETCODE Code UTCTIMEOFFSETCODE_END { $$ = $2; }; UtcTimeOffsetInfo: UTCTIMEOFFSETINFO UtcTimeOffsetCode UtcTimeOffset UTCTIMEOFFSETINFO_END { int ctimeo_no; char* endptr; ctimeo_no = strtol($2.string[0], &endptr, 0); if (*endptr != NULL || ctimeo_no >= CTIMEO_MAX) { fflush(stdout); fprintf(stderr, "UtcTimeOffsetCode error (list) %s\n", $2.string[0]); fflush(stderr); YYERROR; } strncpy(ctimeo_list[ctimeo_no], $3.string[0], 5); ctimeo_list[ctimeo_no][5] = '\0'; }; UtcTimeOffsetInfoList: /* empty */ { clear($$.string); } | UTCTIMEOFFSETINFOLIST UtcTimeOffsetInfo_iter UTCTIMEOFFSETINFOLIST_END; UtcTimeOffsetInfo_iter: /* empty */ { clear($$.string); } | UtcTimeOffsetInfo_iter UtcTimeOffsetInfo; ValueAddedServiceUsed: /* empty */ { clear($$.string); } | VALUEADDEDSERVICEUSED VasCode ChargingTimeStamp ChargeInformation VALUEADDEDSERVICEUSED_END; ValueAddedServiceUsedList: /* empty */ { clear($$.string); } | VALUEADDEDSERVICEUSEDLIST ValueAddedServiceUsed_iter VALUEADDEDSERVICEUSEDLIST_END; ValueAddedServiceUsed_iter: /* empty */ { clear($$.string); } | ValueAddedServiceUsed_iter ValueAddedServiceUsed; VasCode: /* empty */ { clear($$.string); } | VASCODE Code VASCODE_END { $$ = $2; }; VasDescription: /* empty */ { clear($$.string); } | VASDESCRIPTION Description VASDESCRIPTION_END { $$ = $2; }; VasInformation: VASINFORMATION VasCode VasShortDescription VasDescription VASINFORMATION_END; VasShortDescription: /* empty */ { clear($$.string); } | VASSHORTDESCRIPTION Description VASSHORTDESCRIPTION_END { $$ = $2; }; VerticalAccuracyDelivered: /* empty */ { clear($$.string); } | VERTICALACCURACYDELIVERED Integer VERTICALACCURACYDELIVERED_END { $$ = $2; }; VerticalAccuracyRequested: /* empty */ { clear($$.string); } | VERTICALACCURACYREQUESTED Integer VERTICALACCURACYREQUESTED_END { $$ = $2; }; /* Common data types */ AbsoluteAmount: Integer { $$ = $1; } ; AsciiString: OctetString { $$ = $1; } ; BCDString: OctetString { $$ = $1; } ; Bid: AsciiString { $$ = $1; } ; Code: Integer { $$ = $1; } ; Currency: OctetString { $$ = $1; } ; DataVolume: Integer { $$ = $1; } ; Description: AsciiString { $$ = $1; } ; HexString: OctetString { $$ = $1; } ; NetworkId: AsciiString { $$ = $1; } ; NumberString: OctetString { $$ = $1; } ; PercentageRate: Integer { $$ = $1; } ; PlmnId: AsciiString { $$ = $1; } ; SpeechVersion: Integer { $$ = $1; } ; /* Basic data types */ OctetString: DATA { clear($$.string); rg_xml_decode($$.string[0], yylval.string[0]); } ; Integer: DATA { clear($$.string); strcpy($$.string[0], yylval.string[0]); } ; %%