diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/asn1/camel | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/asn1/camel')
19 files changed, 10183 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/camel/CAP-GPRS-ReferenceNumber.asn b/epan/dissectors/asn1/camel/CAP-GPRS-ReferenceNumber.asn new file mode 100644 index 00000000..f8859782 --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-GPRS-ReferenceNumber.asn @@ -0,0 +1,32 @@ +-- 3GPP TS 29.078 29.078 11.0.0 (2011-09) +-- 8.1.1 GPRS Reference Number + +CAP-GPRS-ReferenceNumber {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-dialogueInformation(111) version8(7)} +-- Module CAP-GPRS-ReferenceNumber is updated to version8(7) for Rel-6. The definitions +-- in this module are not modified, compared to Rel-5. + +DEFINITIONS ::= BEGIN + +EXPORTS + id-CAP-GPRS-ReferenceNumber, + cAP-GPRS-ReferenceNumber-Abstract-Syntax; + +IMPORTS + + Integer4 +FROM CS1-DataTypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +modules(0) cs1-datatypes(2) version1(0)} +; + +id-CAP-GPRS-ReferenceNumber OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) as(1) cap-GPRS-ReferenceNumber(5) version3(2)} + +cAP-GPRS-ReferenceNumber-Abstract-Syntax ABSTRACT-SYNTAX ::= {CAP-GPRS-ReferenceNumber IDENTIFIED BY id-CAP-GPRS-ReferenceNumber} + +CAP-GPRS-ReferenceNumber ::= SEQUENCE { + destinationReference [0] Integer4 OPTIONAL, + originationReference [1] Integer4 OPTIONAL + } +-- This parameter is used to identify the relationship between SGSN and the gsmSCF. + +END -- of CAP-GPRS-ReferenceNumber diff --git a/epan/dissectors/asn1/camel/CAP-SMS-ops-args.asn b/epan/dissectors/asn1/camel/CAP-SMS-ops-args.asn new file mode 100644 index 00000000..a337ace9 --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-SMS-ops-args.asn @@ -0,0 +1,269 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 7 SMS Control +-- 7.1 SMS operations and arguments +CAP-SMS-ops-args {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-SMS-ops-args(105) version8(7)} +-- The module CAP-SMS-ops-args is updated to version8(7) for Rel-6. The OPERATION definitions +-- are not modified. + +DEFINITIONS IMPLICIT TAGS::= BEGIN + +-- This module contains the operations and operation arguments used for the +-- smsSSF? gsmSCF interface, for the control of MO-SMS and MT-SMS. + +-- The table in subclause 2.1 lists the specifications that contain the modules +-- that are used by CAP. + +IMPORTS + + errortypes, + datatypes, + operationcodes, + classes, + ros-InformationObjects, + tc-Messages +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + OPERATION +FROM Remote-Operations-Information-Objects ros-InformationObjects + + ServiceKey +FROM CS1-DataTypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +modules(0) cs1-datatypes(2) version1(0)} + + MiscCallInfo +FROM CS2-datatypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +cs2(20) modules(0) in-cs2-datatypes (0) version1(0)} + + IMEI, + IMSI, + ISDN-AddressString +FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CommonDataTypes(18) version12(12)} + + GPRSMSClass, + LocationInformation, + MS-Classmark2 +FROM MAP-MS-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-MS-DataTypes(11) version12(12)} + + PARAMETERS-BOUND +FROM CAP-classes classes + + opcode-connectSMS, + opcode-continueSMS, + opcode-eventReportSMS, + opcode-furnishChargingInformationSMS, + opcode-initialDPSMS, + opcode-releaseSMS, + opcode-requestReportSMSEvent, + opcode-resetTimerSMS +FROM CAP-operationcodes operationcodes +-- The CAP Operation identifiers for CAP V3 and CAP V4 for SMS in Rel-6 are the same as in Rel-5. + + CalledPartyBCDNumber {}, + EventSpecificInformationSMS, + EventTypeSMS, + Extensions {}, + FCISMSBillingChargingCharacteristics, + LocationInformationGPRS, + RPCause, + SMS-AddressString, + SMSEvent, + TimeAndTimezone {}, + TimerID, + TimerValue, + TPDataCodingScheme, + TPProtocolIdentifier, + TPShortMessageSpecificInfo, + TPValidityPeriod +FROM CAP-datatypes datatypes +-- For Rel-6, the CAP-datatypes module is updated to version8(7); Object Identifier 'datatypes' +-- is also updated to version8(7). As a result, the present module uses Rel-6 data type definitions. + + missingCustomerRecord, + missingParameter, + parameterOutOfRange, + systemFailure, + taskRefused, + unexpectedComponentSequence, + unexpectedDataValue, + unexpectedParameter +FROM CAP-errortypes errortypes +-- For Rel-6, the CAP-errortypes module is updated to version8(7); Object Identifier +-- 'errortypes' is also updated to version8(7). As a result, the present module uses Rel-6 +-- error type definitions. + + CallReferenceNumber +FROM MAP-CH-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CH-DataTypes(13) version12(12)} + +; + +connectSMS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ConnectSMSArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-connectSMS} +-- Direction: gsmSCF -> gsmSSF or gprsSSF, Timer: Tconsms +-- This operation is used to request the smsSSF to perform the SMS processing +-- actions to route or forward a short message to a specified destination. + +ConnectSMSArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + callingPartysNumber [0] SMS-AddressString OPTIONAL, + destinationSubscriberNumber [1] CalledPartyBCDNumber {bound} OPTIONAL, + sMSCAddress [2] ISDN-AddressString OPTIONAL, + extensions [10] Extensions {bound} OPTIONAL, + ... + } + +continueSMS OPERATION ::= { + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-continueSMS} +-- Direction: gsmSCF -> smsSSF, Timer: Tcuesms +-- This operation is used to request the smsSSF to proceed with +-- Short Message processing at the DP at which it previously suspended +-- Short Message processing to await gsmSCF instructions (i.e. proceed +-- to the next Point in Association in the SMS FSM). The smsSSF +-- continues SMS processing without substituting new data from the gsmSCF. + +eventReportSMS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT EventReportSMSArg {bound} + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-eventReportSMS} +-- Direction: gsmSSF or gprsSSF -> gsmSCF, Timer: Terbsms +-- This operation is used to notify the gsmSCF of a Short Message related event (FSM events +-- such as submission, delivery or failure) previously requested by the gsmSCF in a +-- RequestReportSMSEvent operation. + +EventReportSMSArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + eventTypeSMS [0] EventTypeSMS, + eventSpecificInformationSMS [1] EventSpecificInformationSMS OPTIONAL, + miscCallInfo [2] MiscCallInfo DEFAULT {messageType request}, + extensions [10] Extensions {bound} OPTIONAL, + ... + } + +furnishChargingInformationSMS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT FurnishChargingInformationSMSArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-furnishChargingInformationSMS} +-- Direction: gsmSCF ?? gsmSSF or gprsSSF, Timer: Tfcisms +-- This operation is used to request the smsSSF to generate, register a charging record +-- or to include some information in the default SM record. The registered charging record is +-- intended for off line charging of the Short Message. + +FurnishChargingInformationSMSArg {PARAMETERS-BOUND : bound} ::= + FCISMSBillingChargingCharacteristics {bound} + +initialDPSMS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT InitialDPSMSArg {bound} + RETURN RESULT FALSE + ERRORS {missingCustomerRecord | + missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-initialDPSMS} +-- Direction: gsmSSF or gprsSSF -> gsmSCF, Timer: Tidpsms +-- This operation is used after a TDP to indicate request for service. + +InitialDPSMSArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + serviceKey [0] ServiceKey, + destinationSubscriberNumber [1] CalledPartyBCDNumber {bound} OPTIONAL, + callingPartyNumber [2] SMS-AddressString OPTIONAL, + eventTypeSMS [3] EventTypeSMS OPTIONAL, + iMSI [4] IMSI OPTIONAL, + locationInformationMSC [5] LocationInformation OPTIONAL, + locationInformationGPRS [6] LocationInformationGPRS OPTIONAL, + sMSCAddress [7] ISDN-AddressString OPTIONAL, + timeAndTimezone [8] TimeAndTimezone {bound} OPTIONAL, + tPShortMessageSpecificInfo [9] TPShortMessageSpecificInfo OPTIONAL, + tPProtocolIdentifier [10] TPProtocolIdentifier OPTIONAL, + tPDataCodingScheme [11] TPDataCodingScheme OPTIONAL, + tPValidityPeriod [12] TPValidityPeriod OPTIONAL, + extensions [13] Extensions {bound} OPTIONAL, + ..., + smsReferenceNumber [14] CallReferenceNumber OPTIONAL, + mscAddress [15] ISDN-AddressString OPTIONAL, + sgsn-Number [16] ISDN-AddressString OPTIONAL, + ms-Classmark2 [17] MS-Classmark2 OPTIONAL, + gPRSMSClass [18] GPRSMSClass OPTIONAL, + iMEI [19] IMEI OPTIONAL, + calledPartyNumber [20] ISDN-AddressString OPTIONAL + } + +-- The UserCSGInformation is conveyed in the LocationInformation for CS and LocationInformationGPRS +-- for GPRS. The encoding of the parameter is as defined in 3GPP TS 29.002 [11]. + +releaseSMS OPERATION ::= { + ARGUMENT ReleaseSMSArg + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-releaseSMS} +-- Direction: gsmSCF -> gsmSSF or gprsSSF, Timer: Trelsms +-- This operation is used to prevent an attempt to submit or deliver a short message. + +ReleaseSMSArg ::= RPCause + +requestReportSMSEvent {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT RequestReportSMSEventArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-requestReportSMSEvent} +-- Direction: gsmSCF -> gsmSSF or gprsSSF, Timer: Trrbsms +-- This operation is used to request the gsmSSF or gprsSSF to monitor for a +-- Short Message related event (FSM events such as submission, delivery or failure) +-- and to send a notification to the gsmSCF when the event is detected. + +RequestReportSMSEventArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + sMSEvents [0] SEQUENCE SIZE (1..bound.&numOfSMSEvents) OF SMSEvent, + extensions [10] Extensions {bound} OPTIONAL, + ... + } +-- Indicates the Short Message related events(s) for notification. + +resetTimerSMS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ResetTimerSMSArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-resetTimerSMS} +-- Direction: gsmSCF -> smsSSF, Timer: Trtsms +-- This operation is used to request the smsSSF to refresh an application +-- timer in the smsSSF. + +ResetTimerSMSArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + timerID [0] TimerID DEFAULT tssf, + timervalue [1] TimerValue, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +END diff --git a/epan/dissectors/asn1/camel/CAP-U-ABORT-Data.asn b/epan/dissectors/asn1/camel/CAP-U-ABORT-Data.asn new file mode 100644 index 00000000..ebbd786b --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-U-ABORT-Data.asn @@ -0,0 +1,48 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5.7 User Abort Data +CAP-U-ABORT-Data {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-u-abort-data(110) version8(7)} + +DEFINITIONS ::= BEGIN + +id-CAP-U-ABORT-Reason OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-Network(1) as(1) cap-u-abort-reason(2) version3(2)} + +cAP-U-ABORT-Reason-Abstract-Syntax ABSTRACT-SYNTAX ::= {CAP-U-ABORT-REASON IDENTIFIED BY +id-CAP-U-ABORT-Reason} + +CAP-U-ABORT-REASON ::= ENUMERATED { + no-reason-given (1), + application-timer-expired (2), + not-allowed-procedures (3), + abnormal-processing (4), + congestion (5), + invalid-reference (6), + missing-reference (7), + overlapping-dialogue (8) + } +-- application-timer-expired shall be set when application timer (e.g. Tssf) is expired. +-- not-allowed-procedures shall be set when received signal is not allowed in CAP +-- procedures. +-- For example, when a class 4 operation is received from the +-- gsmSCF and the operation is not allowed in gsmSSF FSM. +-- (gsmSSF FSM cannot continue state transition). (e.g. ReleaseCall +-- operation received in Waiting for End of Temporary Connection +-- state.) +-- abnormal-processing shall be set when abnormal procedures occur at entity action. +-- congestion shall be set when requested resource is unavailable due to +-- congestion at TC user (CAP) level. +-- invalid-reference shall be set if the received destinationReference is unknown or +-- for a known destination Reference the received originationReference +-- does not match with the stored originationReference. +-- This abort reason is used for CAP defined GPRS-ReferenceNumber. +-- missing-reference shall be set when the destinationReference or the +-- originationReference is absent in the received message but is +-- required to be present according to the procedures in +-- subclause 14.1.7. +-- This abort reason is used for CAP defined GPRS ReferenceNumber. +-- overlapping-dialogue shall be used by the gprsSSF to indicate to the gsmSCF that a +-- specific instance already has a TC dialogue open. This error +-- cause is typically obtained when both the gsmSCF and gprsSSF +-- open a new dialogue at the same time. +-- no-reason-given shall be set when any other reasons above do not apply +END -- of CAP-U-ABORT-Data + diff --git a/epan/dissectors/asn1/camel/CAP-classes.asn b/epan/dissectors/asn1/camel/CAP-classes.asn new file mode 100644 index 00000000..f35ea95c --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-classes.asn @@ -0,0 +1,306 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5.5 Classes +CAP-classes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) +modules(3) cap-classes(54) version8(7)} + +DEFINITIONS ::= BEGIN + +IMPORTS + + ROS-OBJECT-CLASS, + Code +FROM Remote-Operations-Information-Objects ros-InformationObjects + + id-rosObject-gprsSSF, + id-rosObject-gsmSRF, + id-rosObject-gsmSSF, + id-rosObject-smsSSF-V3, + id-rosObject-smsSSF-V4, + ros-InformationObjects, + gsmSSF-gsmSCF-Protocol, + gsmSCF-gsmSRF-Protocol, + smsSSF-gsmSCF-Protocol, + gprsSSF-gsmSCF-Protocol +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + capSsfToScfGeneric, + capAssistHandoffssfToScf, + capScfToSsfGeneric +FROM CAP-gsmSSF-gsmSCF-pkgs-contracts-acs gsmSSF-gsmSCF-Protocol + + gsmSRF-gsmSCF-contract +FROM CAP-gsmSCF-gsmSRF-pkgs-contracts-acs gsmSCF-gsmSRF-Protocol + + cap3SMS, + cap4SMS +FROM CAP-smsSSF-gsmSCF-pkgs-contracts-acs smsSSF-gsmSCF-Protocol + + capGprsSsfToScf, + capGsmScfToGprsSsf +FROM CAP-gprsSSF-gsmSCF-pkgs-contracts-acs gprsSSF-gsmSCF-Protocol + + CriticalityType +FROM CS2-datatypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) cs2(20) +modules(0) in-cs2-datatypes(0) version1(0)} + +; + +gsmSSF ROS-OBJECT-CLASS ::= { + INITIATES {capSsfToScfGeneric| + capAssistHandoffssfToScf} + RESPONDS {capScfToSsfGeneric} + ID id-rosObject-gsmSSF} +-- The Rel-6 'gsmSSF' definition uses the Rel-6 capSsfToScfGeneric, capAssistHandoffssfToScf +-- and capScfToSsfGeneric CONTRACT definitions. + +gsmSRF ROS-OBJECT-CLASS ::= { + INITIATES {gsmSRF-gsmSCF-contract} + ID id-rosObject-gsmSRF} +-- The Rel-6 'gsmSRF' definition uses the Rel-6 gsmSRF-gsmSCF-contract CONTRACT definition. + +smsSSF-V3 ROS-OBJECT-CLASS ::= { + INITIATES {cap3SMS} + ID id-rosObject-smsSSF-V3} +-- The Rel-6 'smsSSF-V3' definition uses the Rel-6 cap3SMS CONTRACT definition. The smsSSF-V3 +-- ROS-OBJECT-CLASS is used for MO SMS control. + +smsSSF-V4 ROS-OBJECT-CLASS ::= { + INITIATES {cap4SMS} + ID id-rosObject-smsSSF-V4} +-- The Rel-6 'smsSSF-V4' definition uses the Rel-6 cap4SMS CONTRACT definition. The smsSSF-V4 +-- ROS-OBJECT-CLASS is used for MT SMS control. + +gprsSSF ROS-OBJECT-CLASS ::= { + INITIATES {capGprsSsfToScf} + RESPONDS {capGsmScfToGprsSsf} + ID id-rosObject-gprsSSF} +-- The Rel-6 'gprsSSF' definition uses the Rel-6 capGprsSsfTogsmScf and capGsmScfToGprsSsf +-- CONTRACT definitions. + +EXTENSION ::= CLASS { + &ExtensionType, + &criticality CriticalityType DEFAULT ignore, + &id Code} + +WITH SYNTAX { + EXTENSION-SYNTAX &ExtensionType + CRITICALITY &criticality + IDENTIFIED BY &id + } +-- Only value Global OBJECT IDENTIFIER is used for &id; +-- Only the value ignore (0) is used for &criticality. + +-- Example of addition of an extension named 'Some Network Specific Indicator' of type +-- BOOLEAN, with criticality 'ignore' and identified by global Object Identifier. +-- +-- Example of definition using the above information object class: +-- +-- SomeNetworkSpecificIndicator EXTENSION ::= { +-- EXTENSION-SYNTAX BOOLEAN +-- CRITICALITY ignore +-- IDENTIFIED BY global : {itu-t(0) identified-organization(4) organisation(0) gsm(1) +-- capextension(2)} +-- } + +-- Example of transfer syntax, using the ExtensionField datatype as specified in clause 5. +-- Assuming the value of the extension is set to TRUE, the extensions parameter becomes +-- a Sequence of type {itu-t(0) identified-organization(4) organisation(0) gsm(1) +-- capextension(2)}, criticality ENUMERATED ::= ignore(0) and value [1] EXPLICIT BOOLEAN +-- ::= TRUE. +-- +-- Use of ITU-T Recommendation Q.1400 [52] defined Extension is for further study. +-- In addition the extension mechanism marker is used to identify the future minor additions +-- to CAP. + +firstExtension EXTENSION ::= { + EXTENSION-SYNTAX NULL + CRITICALITY ignore + IDENTIFIED BY global : {itu-t(0) identified-organization(4) organisation(0) gsm(1) + capextension(2)} + } +-- firstExtension is just an example. + +SupportedExtensions EXTENSION ::= {firstExtension, ... +-- full set of network operator extensions -- +} +-- SupportedExtension is the full set of the network operator extensions. + +PARAMETERS-BOUND ::= CLASS { + &minAccessPointNameLength INTEGER, + &maxAccessPointNameLength INTEGER, + &minAChBillingChargingLength INTEGER, + &maxAChBillingChargingLength INTEGER, + &minAttributesLength INTEGER, + &maxAttributesLength INTEGER, + &maxBearerCapabilityLength INTEGER, + &minCalledPartyBCDNumberLength INTEGER, + &maxCalledPartyBCDNumberLength INTEGER, + &minCalledPartyNumberLength INTEGER, + &maxCalledPartyNumberLength INTEGER, + &minCallingPartyNumberLength INTEGER, + &maxCallingPartyNumberLength INTEGER, + &minCallResultLength INTEGER, + &maxCallResultLength INTEGER, + &minCarrierLength INTEGER, + &maxCarrierLength INTEGER, + &minCauseLength INTEGER, + &maxCauseLength INTEGER, + &minDigitsLength INTEGER, + &maxDigitsLength INTEGER, + &minFCIBillingChargingDataLength INTEGER, + &maxFCIBillingChargingDataLength INTEGER, + &minFCIBillingChargingLength INTEGER, + &maxFCIBillingChargingLength INTEGER, + &minGenericNumberLength INTEGER, + &maxGenericNumberLength INTEGER, + &minGPRSCauseLength INTEGER, + &maxGPRSCauseLength INTEGER, + &minIPSSPCapabilitiesLength INTEGER, + &maxIPSSPCapabilitiesLength INTEGER, + &minLocationNumberLength INTEGER, + &maxLocationNumberLength INTEGER, + &minLowLayerCompatibilityLength INTEGER, + &maxLowLayerCompatibilityLength INTEGER, + &minMessageContentLength INTEGER, + &maxMessageContentLength INTEGER, + &minOriginalCalledPartyIDLength INTEGER, + &maxOriginalCalledPartyIDLength INTEGER, + &minPDPAddressLength INTEGER, + &maxPDPAddressLength INTEGER, + &minRedirectingPartyIDLength INTEGER, + &maxRedirectingPartyIDLength INTEGER, + &minScfIDLength INTEGER, + &maxScfIDLength INTEGER, + &minSCIBillingChargingLength INTEGER, + &maxSCIBillingChargingLength INTEGER, + &minTimeAndTimezoneLength INTEGER, + &maxTimeAndTimezoneLength INTEGER, + &numOfBCSMEvents INTEGER, + &numOfChangeOfPositionControlInfo INTEGER, + &numOfCSs INTEGER, + &numOfSMSEvents INTEGER, + &numOfGPRSEvents INTEGER, + &numOfExtensions INTEGER, + &numOfGenericNumbers INTEGER, + &numOfMessageIDs INTEGER} + +WITH SYNTAX { + MINIMUM-FOR-ACCESS-POINT-NAME &minAccessPointNameLength + MAXIMUM-FOR-ACCESS-POINT-NAME &maxAccessPointNameLength + MINIMUM-FOR-ACH-BILLING-CHARGING &minAChBillingChargingLength + MAXIMUM-FOR-ACH-BILLING-CHARGING &maxAChBillingChargingLength + MINIMUM-FOR-ATTRIBUTES &minAttributesLength + MAXIMUM-FOR-ATTRIBUTES &maxAttributesLength + MAXIMUM-FOR-BEARER-CAPABILITY &maxBearerCapabilityLength + MINIMUM-FOR-CALLED-PARTY-BCD-NUMBER &minCalledPartyBCDNumberLength + MAXIMUM-FOR-CALLED-PARTY-BCD-NUMBER &maxCalledPartyBCDNumberLength + MINIMUM-FOR-CALLED-PARTY-NUMBER &minCalledPartyNumberLength + MAXIMUM-FOR-CALLED-PARTY-NUMBER &maxCalledPartyNumberLength + MINIMUM-FOR-CALLING-PARTY-NUMBER &minCallingPartyNumberLength + MAXIMUM-FOR-CALLING-PARTY-NUMBER &maxCallingPartyNumberLength + MINIMUM-FOR-CALL-RESULT &minCallResultLength + MAXIMUM-FOR-CALL-RESULT &maxCallResultLength + MINIMUM-FOR-CARRIER &minCarrierLength + MAXIMUM-FOR-CARRIER &maxCarrierLength + MINIMUM-FOR-CAUSE &minCauseLength + MAXIMUM-FOR-CAUSE &maxCauseLength + MINIMUM-FOR-DIGITS &minDigitsLength + MAXIMUM-FOR-DIGITS &maxDigitsLength + MINIMUM-FOR-FCI-BILLING-CHARGING-DATA &minFCIBillingChargingDataLength + MAXIMUM-FOR-FCI-BILLING-CHARGING-DATA &maxFCIBillingChargingDataLength + MINIMUM-FOR-FCI-BILLING-CHARGING &minFCIBillingChargingLength + MAXIMUM-FOR-FCI-BILLING-CHARGING &maxFCIBillingChargingLength + MINIMUM-FOR-GENERIC-NUMBER &minGenericNumberLength + MAXIMUM-FOR-GENERIC-NUMBER &maxGenericNumberLength + MINIMUM-FOR-GPRS-CAUSE-LENGTH &minGPRSCauseLength + MAXIMUM-FOR-GPRS-CAUSE-LENGTH &maxGPRSCauseLength + MINIMUM-FOR-IP-SSP-CAPABILITIES &minIPSSPCapabilitiesLength + MAXIMUM-FOR-IP-SSP-CAPABILITIES &maxIPSSPCapabilitiesLength + MINIMUM-FOR-LOCATION-NUMBER &minLocationNumberLength + MAXIMUM-FOR-LOCATION-NUMBER &maxLocationNumberLength + MINIMUM-FOR-LOW-LAYER-COMPATIBILITY &minLowLayerCompatibilityLength + MAXIMUM-FOR-LOW-LAYER-COMPATIBILITY &maxLowLayerCompatibilityLength + MINIMUM-FOR-MESSAGE-CONTENT &minMessageContentLength + MAXIMUM-FOR-MESSAGE-CONTENT &maxMessageContentLength + MINIMUM-FOR-ORIGINAL-CALLED-PARTY-ID &minOriginalCalledPartyIDLength + MAXIMUM-FOR-ORIGINAL-CALLED-PARTY-ID &maxOriginalCalledPartyIDLength + MINIMUM-FOR-PDP-ADDRESS-LENGTH &minPDPAddressLength + MAXIMUM-FOR-PDP-ADDRESS-LENGTH &maxPDPAddressLength + MINIMUM-FOR-REDIRECTING-ID &minRedirectingPartyIDLength + MAXIMUM-FOR-REDIRECTING-ID &maxRedirectingPartyIDLength + MINIMUM-FOR-GSMSCF-ID &minScfIDLength + MAXIMUM-FOR-GSMSCF-ID &maxScfIDLength + MINIMUM-FOR-SCI-BILLING-CHARGING &minSCIBillingChargingLength + MAXIMUM-FOR-SCI-BILLING-CHARGING &maxSCIBillingChargingLength + MINIMUM-FOR-TIME-AND-TIMEZONE &minTimeAndTimezoneLength + MAXIMUM-FOR-TIME-AND-TIMEZONE &maxTimeAndTimezoneLength + NUM-OF-BCSM-EVENT &numOfBCSMEvents + NUM-OF-CHANGE-OF-POSITION-CONTROL-INFO &numOfChangeOfPositionControlInfo + NUM-OF-CSS &numOfCSs + NUM-OF-SMS-EVENTS &numOfSMSEvents + NUM-OF-GPRS-EVENTS &numOfGPRSEvents + NUM-OF-EXTENSIONS &numOfExtensions + NUM-OF-GENERIC-NUMBERS &numOfGenericNumbers + NUM-OF-MESSAGE-IDS &numOfMessageIDs} + +cAPSpecificBoundSet PARAMETERS-BOUND ::= { + MINIMUM-FOR-ACCESS-POINT-NAME 1 + MAXIMUM-FOR-ACCESS-POINT-NAME 100 + MINIMUM-FOR-ACH-BILLING-CHARGING 5 + MAXIMUM-FOR-ACH-BILLING-CHARGING 177 + MINIMUM-FOR-ATTRIBUTES 2 + MAXIMUM-FOR-ATTRIBUTES 10 + MAXIMUM-FOR-BEARER-CAPABILITY 11 + MINIMUM-FOR-CALLED-PARTY-BCD-NUMBER 1 + MAXIMUM-FOR-CALLED-PARTY-BCD-NUMBER 41 + MINIMUM-FOR-CALLED-PARTY-NUMBER 2 + MAXIMUM-FOR-CALLED-PARTY-NUMBER 18 + MINIMUM-FOR-CALLING-PARTY-NUMBER 2 + MAXIMUM-FOR-CALLING-PARTY-NUMBER 10 + MINIMUM-FOR-CALL-RESULT 12 + MAXIMUM-FOR-CALL-RESULT 193 + MINIMUM-FOR-CARRIER 4 + MAXIMUM-FOR-CARRIER 4 + MINIMUM-FOR-CAUSE 2 + MAXIMUM-FOR-CAUSE 32 + MINIMUM-FOR-DIGITS 2 + MAXIMUM-FOR-DIGITS 16 + MINIMUM-FOR-FCI-BILLING-CHARGING-DATA 1 + MAXIMUM-FOR-FCI-BILLING-CHARGING-DATA 160 + MINIMUM-FOR-FCI-BILLING-CHARGING 5 + MAXIMUM-FOR-FCI-BILLING-CHARGING 225 + MINIMUM-FOR-GENERIC-NUMBER 3 + MAXIMUM-FOR-GENERIC-NUMBER 11 + MINIMUM-FOR-GPRS-CAUSE-LENGTH 1 + MAXIMUM-FOR-GPRS-CAUSE-LENGTH 1 + MINIMUM-FOR-IP-SSP-CAPABILITIES 1 + MAXIMUM-FOR-IP-SSP-CAPABILITIES 4 + MINIMUM-FOR-LOCATION-NUMBER 2 + MAXIMUM-FOR-LOCATION-NUMBER 10 + MINIMUM-FOR-LOW-LAYER-COMPATIBILITY 1 + MAXIMUM-FOR-LOW-LAYER-COMPATIBILITY 16 + MINIMUM-FOR-MESSAGE-CONTENT 1 + MAXIMUM-FOR-MESSAGE-CONTENT 127 + MINIMUM-FOR-ORIGINAL-CALLED-PARTY-ID 2 + MAXIMUM-FOR-ORIGINAL-CALLED-PARTY-ID 10 + MINIMUM-FOR-PDP-ADDRESS-LENGTH 1 + MAXIMUM-FOR-PDP-ADDRESS-LENGTH 63 + MINIMUM-FOR-REDIRECTING-ID 2 + MAXIMUM-FOR-REDIRECTING-ID 10 + MINIMUM-FOR-GSMSCF-ID 2 + MAXIMUM-FOR-GSMSCF-ID 10 + MINIMUM-FOR-SCI-BILLING-CHARGING 4 + MAXIMUM-FOR-SCI-BILLING-CHARGING 225 + MINIMUM-FOR-TIME-AND-TIMEZONE 8 + MAXIMUM-FOR-TIME-AND-TIMEZONE 8 + NUM-OF-BCSM-EVENT 30 + NUM-OF-CHANGE-OF-POSITION-CONTROL-INFO 10 + NUM-OF-CSS 127 + NUM-OF-SMS-EVENTS 10 + NUM-OF-GPRS-EVENTS 10 + NUM-OF-EXTENSIONS 10 + NUM-OF-GENERIC-NUMBERS 5 + NUM-OF-MESSAGE-IDS 16} + +END diff --git a/epan/dissectors/asn1/camel/CAP-datatypes.asn b/epan/dissectors/asn1/camel/CAP-datatypes.asn new file mode 100644 index 00000000..df8d1df0 --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-datatypes.asn @@ -0,0 +1,1527 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5 Common CAP Types +-- 5.1 Data types + +CAP-datatypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-datatypes(52) version8(7)} + +DEFINITIONS IMPLICIT TAGS ::= BEGIN + +IMPORTS + + Duration, + Integer4, + Interval, + LegID, + ServiceKey +FROM CS1-DataTypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +modules(0) cs1-datatypes(2) version1(0)} + + BothwayThroughConnectionInd, + CriticalityType, + MiscCallInfo +FROM CS2-datatypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +cs2(20) modules(0) in-cs2-datatypes(0) version1(0)} + + AddressString, + CellGlobalIdOrServiceAreaIdFixedLength, + Ext-BasicServiceCode, + IMSI, + ISDN-AddressString, + LAIFixedLength, + GSN-Address, -- WS moved to common datatypes in rel 9.0.0 + RAIdentity, -- WS moved to common datatypes in rel 10.4.0 + NAEA-CIC +FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CommonDataTypes(18) version12(12)} + + Ext-QoS-Subscribed, + Ext2-QoS-Subscribed, + Ext3-QoS-Subscribed, + GeographicalInformation, +-- GSN-Address, WS moved to common datatypes in rel 9.0.0 + LocationInformation, + LSAIdentity, + QoS-Subscribed, +-- RAIdentity, WS moved to common datatypes in rel 10.4.0 + SubscriberState, + GPRSChargingID +FROM MAP-MS-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-MS-DataTypes(11) version12(12)} + + CallReferenceNumber, + SuppressionOfAnnouncement +FROM MAP-CH-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CH-DataTypes(13) version12(12)} + + tc-Messages, + classes +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + EXTENSION, + PARAMETERS-BOUND, + SupportedExtensions +FROM CAP-classes classes + + ExtensionContainer +FROM MAP-ExtensionDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-ExtensionDataTypes(21) version12(12)} + +; + +AccessPointName {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minAccessPointNameLength .. bound.&maxAccessPointNameLength)) +-- Indicates the AccessPointName, refer to 3GPP TS 24.008 [9] for the encoding. +-- It shall be coded as in the value part defined in 3GPP TS 24.008, +-- i.e. the 3GPP TS 24.008 IEI and 3GPP TS 24.008 octet length indicator +-- shall not be included. + +AChBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE + (bound.&minAChBillingChargingLength .. bound.&maxAChBillingChargingLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of the type -- + CAMEL-AChBillingChargingCharacteristics {bound}}) +-- The AChBillingChargingCharacteristics parameter specifies the charging related information +-- to be provided by the gsmSSF and the conditions on which this information has to be reported +-- back to the gsmSCF with the ApplyChargingReport operation. The value of the +-- AChBillingChargingCharacteristics of type OCTET STRING carries a value of the ASN.1 data type: +-- CAMEL-AChBillingChargingCharacteristics. The normal encoding rules are used to encode this +-- value. +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +AChChargingAddress {PARAMETERS-BOUND : bound} ::= CHOICE { + legID [2] LegID, + srfConnection [50] CallSegmentID {bound} + } + +AdditionalCallingPartyNumber {PARAMETERS-BOUND : bound} ::= Digits {bound} +-- Indicates the Additional Calling Party Number. + +AlertingPattern ::= OCTET STRING (SIZE(3)) +-- Indicates a specific pattern that is used to alert a subscriber +-- (e.g. distinctive ringing, tones, etc.). +-- The encoding of the last octet of this parameter is as defined in 3GPP TS 29.002 [11]. +-- Only the trailing OCTET is used, the remaining OCTETS shall be sent as NULL (zero) +-- The receiving side shall ignore the leading two OCTETS. + +AOCBeforeAnswer ::= SEQUENCE { + aOCInitial [0] CAI-GSM0224, + aOCSubsequent [1] AOCSubsequent OPTIONAL + } + +AOCGPRS ::= SEQUENCE { + aOCInitial [0] CAI-GSM0224, + aOCSubsequent [1] AOCSubsequent OPTIONAL + } + +AOCSubsequent ::= SEQUENCE { + cAI-GSM0224 [0] CAI-GSM0224 , + tariffSwitchInterval [1] INTEGER (1..86400) OPTIONAL + } +-- tariffSwitchInterval is measured in 1 second units + +AppendFreeFormatData ::= ENUMERATED { + overwrite (0), + append (1) + } + +ApplicationTimer ::=INTEGER (0..2047) +-- Used by the gsmSCF to set a timer in the gsmSSF. The timer is in seconds. + +AssistingSSPIPRoutingAddress {PARAMETERS-BOUND : bound} ::= Digits {bound} +-- Indicates the destination address of the gsmSRF for the assist procedure. + +AudibleIndicator ::= CHOICE { + tone BOOLEAN, + burstList [1] BurstList + } + +BackwardServiceInteractionInd ::= SEQUENCE { + conferenceTreatmentIndicator [1] OCTET STRING (SIZE(1)) OPTIONAL, + -- acceptConferenceRequest 'xxxx xx01'B + -- rejectConferenceRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect conference treatement + callCompletionTreatmentIndicator [2] OCTET STRING (SIZE(1)) OPTIONAL, + -- acceptCallCompletionServiceRequest 'xxxx xx01'B, + -- rejectCallCompletionServiceRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call completion treatment + ... + } + +BasicGapCriteria {PARAMETERS-BOUND : bound} ::= CHOICE { + calledAddressValue [0] Digits {bound}, + gapOnService [2] GapOnService, + calledAddressAndService [29] SEQUENCE { + calledAddressValue [0] Digits {bound}, + serviceKey [1] ServiceKey, + ... + }, + callingAddressAndService [30] SEQUENCE { + callingAddressValue [0] Digits {bound}, + serviceKey [1] ServiceKey, + ... + } + } +-- Both calledAddressValue and callingAddressValue can be +-- incomplete numbers, in the sense that a limited amount of digits can be given. +-- For the handling of numbers starting with the same digit string refer to the detailed +-- procedure of the CallGap operation + +BCSMEvent{PARAMETERS-BOUND : bound} ::= SEQUENCE { + eventTypeBCSM [0] EventTypeBCSM, + monitorMode [1] MonitorMode, + legID [2] LegID OPTIONAL, + dpSpecificCriteria [30] DpSpecificCriteria {bound} OPTIONAL, + automaticRearm [50] NULL OPTIONAL, + ... + } +-- Indicates the BCSM Event information for monitoring. + +BCSM-Failure {PARAMETERS-BOUND : bound} ::= SEQUENCE { + legID [0] LegID OPTIONAL, + cause [2] Cause {bound} OPTIONAL, + ... + } + +BearerCapability {PARAMETERS-BOUND : bound} ::= CHOICE { + bearerCap [0] OCTET STRING (SIZE(2..bound.&maxBearerCapabilityLength)) + } +-- Indicates the type of bearer capability connection to the user. For bearerCap, the ISUP User +-- Service Information, ETSI EN 300 356-1 [23] +-- encoding shall be used. + +Burst ::= SEQUENCE { + numberOfBursts [0] INTEGER (1..3) DEFAULT 1, + burstInterval [1] INTEGER (1..1200) DEFAULT 2, + numberOfTonesInBurst [2] INTEGER (1..3) DEFAULT 3, + toneDuration [3] INTEGER (1..20) DEFAULT 2, + toneInterval [4] INTEGER (1..20) DEFAULT 2, + ... + } +-- burstInterval, toneDurartion and toneInterval are measured in 100 millisecond units + +BurstList ::= SEQUENCE { + warningPeriod [0] INTEGER (1..1200) DEFAULT 30, + bursts [1] Burst, + ... + } +-- warningPeriod is measured in 1 second units. + +CAI-GSM0224 ::= SEQUENCE { + e1 [0] INTEGER (0..8191) OPTIONAL, + e2 [1] INTEGER (0..8191) OPTIONAL, + e3 [2] INTEGER (0..8191) OPTIONAL, + e4 [3] INTEGER (0..8191) OPTIONAL, + e5 [4] INTEGER (0..8191) OPTIONAL, + e6 [5] INTEGER (0..8191) OPTIONAL, + e7 [6] INTEGER (0..8191) OPTIONAL + } +-- Indicates Charge Advice Information to the Mobile Station. For information regarding +-- parameter usage, refer to 3GPP TS 22.024 [2]. + +CalledPartyBCDNumber {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minCalledPartyBCDNumberLength .. bound.&maxCalledPartyBCDNumberLength)) +-- Indicates the Called Party Number, including service selection information. +-- Refer to 3GPP TS 24.008 [9] for encoding. +-- This data type carries only the 'type of number', 'numbering plan +-- identification' and 'number digit' fields defined in 3GPP TS 24.008 [9]; +-- it does not carry the 'called party BCD number IEI' or 'length of called +-- party BCD number contents'. +-- In the context of the DestinationSubscriberNumber field in ConnectSMSArg or +-- InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric +-- character string. In this case, type-of-number '101'B is used, in accordance +-- with 3GPP TS 23.040 [6]. The address is coded in accordance with the +-- GSM 7 bit default alphabet definition and the SMS packing rules +-- as specified in 3GPP TS 23.038 [15] in this case. + +CalledPartyNumber {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minCalledPartyNumberLength .. bound.&maxCalledPartyNumberLength)) +-- Indicates the Called Party Number. Refer to ETS EN 300 356 1 [23] for encoding. + +-- A CalledPartyNumber may contain national-specific values of the Nature Of Address +-- indicator. The filling-in of the national-specific Nature Of Address indicator +-- values shall be done in accordance with the national ISUP of the gsmSSF country, e.g. +-- ANSI T1.113-1995 [92]. +-- In terms of ETS EN 300 356-1 [23], the Destination Address Field is not present if the +-- destination address length is set to zero. This is the case e.g. when the ANSI +-- ISUP Nature Of Address indicator indicates no number present, operator requested +-- (1110100) or no number present, cut-through call to carrier (1110101). +-- See also see 3GPP TS 23.078 [7]. + +CallingPartyNumber {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minCallingPartyNumberLength .. bound.&maxCallingPartyNumberLength)) +-- Indicates the Calling Party Number. Refer to ETSI EN 300 356 1 [23] for encoding. + +CallResult {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minCallResultLength .. bound.&maxCallResultLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of type - + CAMEL-CallResult {bound}}) +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +-- This parameter provides the gsmSCF with the charging related information previously requested +-- using the ApplyCharging operation. This shall include the partyToCharge parameter as +-- received in the related ApplyCharging operation to correlate the result to the request + +CallSegmentFailure {PARAMETERS-BOUND : bound} ::= SEQUENCE { + callSegmentID [0] CallSegmentID {bound} OPTIONAL, + cause [2] Cause {bound} OPTIONAL, + ... + } + +CallSegmentID {PARAMETERS-BOUND : bound} ::= INTEGER (1..bound.&numOfCSs) + +CallSegmentToCancel {PARAMETERS-BOUND : bound} ::= SEQUENCE { + invokeID [0] InvokeID OPTIONAL, + callSegmentID [1] CallSegmentID {bound} OPTIONAL, + ... + } + +CAMEL-AChBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= CHOICE { + timeDurationCharging [0] SEQUENCE { + maxCallPeriodDuration [0] INTEGER (1..864000), + releaseIfdurationExceeded [1] BOOLEAN DEFAULT FALSE, + tariffSwitchInterval [2] INTEGER (1..86400) OPTIONAL, + audibleIndicator [3] AudibleIndicator DEFAULT tone: FALSE, + extensions [4] Extensions {bound} OPTIONAL, + ... + } + } +-- tariffSwitchInterval is measured in 1 second units. +-- maxCallPeriodDuration is measured in 100 millisecond units + +CAMEL-CallResult {PARAMETERS-BOUND : bound} ::= CHOICE { + timeDurationChargingResult [0] SEQUENCE { + partyToCharge [0] ReceivingSideID, + timeInformation [1] TimeInformation, + legActive [2] BOOLEAN DEFAULT TRUE, + callLegReleasedAtTcpExpiry [3] NULL OPTIONAL, + extensions [4] Extensions {bound} OPTIONAL, + aChChargingAddress [5] AChChargingAddress {bound} + DEFAULT legID:receivingSideID:leg1, + ... + } + } + +CAMEL-FCIBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= CHOICE{ + fCIBCCCAMELsequence1 [0] SEQUENCE { + freeFormatData [0] OCTET STRING (SIZE( + bound.&minFCIBillingChargingDataLength .. bound.&maxFCIBillingChargingDataLength)), + partyToCharge [1] SendingSideID DEFAULT sendingSideID: leg1, + appendFreeFormatData [2] AppendFreeFormatData DEFAULT overwrite, + ... + } + } + +CAMEL-FCIGPRSBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= SEQUENCE{ + fCIBCCCAMELsequence1 [0] SEQUENCE { + freeFormatData [0] OCTET STRING (SIZE( + bound.&minFCIBillingChargingDataLength .. bound.&maxFCIBillingChargingDataLength)), + pDPID [1] PDPID OPTIONAL, + appendFreeFormatData [2] AppendFreeFormatData DEFAULT overwrite, + ... + } + } + +CAMEL-FCISMSBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= CHOICE{ + fCIBCCCAMELsequence1 [0] SEQUENCE { + freeFormatData [0] OCTET STRING (SIZE( + bound.&minFCIBillingChargingDataLength .. bound.&maxFCIBillingChargingDataLength)), + appendFreeFormatData [1] AppendFreeFormatData DEFAULT overwrite + } + } + +CAMEL-SCIBillingChargingCharacteristics ::= CHOICE { + aOCBeforeAnswer [0] AOCBeforeAnswer, + aOCAfterAnswer [1] AOCSubsequent, + aOC-extension [2] CAMEL-SCIBillingChargingCharacteristicsAlt + } + +CAMEL-SCIBillingChargingCharacteristicsAlt ::= SEQUENCE { + ... + } +-- This datatype is for extension in future releases. + +CAMEL-SCIGPRSBillingChargingCharacteristics ::= SEQUENCE { + aOCGPRS [0] AOCGPRS, + pDPID [1] PDPID OPTIONAL, + ... + } + +Carrier {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minCarrierLength .. bound.&maxCarrierLength)) +-- This parameter is used for North America (na) only. +-- It contains the carrier selection field (first octet) followed by Carrier ID +-- information (North America (na)). + +-- The Carrier selection is one octet and is encoded as: +-- 00000000 No indication +-- 00000001 Selected carrier identification code (CIC) pre subscribed and not +-- input by calling party +-- 00000010 Selected carrier identification code (CIC) pre subscribed and input by +-- calling party +-- 00000011 Selected carrier identification code (CIC) pre subscribed, no +-- indication of whether input by calling party (undetermined) +-- 00000100 Selected carrier identification code (CIC) not pre subscribed and +-- input by calling party +-- 00000101 +-- to Spare +-- 11111110 +-- 11111111 Reserved + +-- Refer to ANSI T1.113-1995 [92] for encoding of na carrier ID information (3 octets). + +Cause {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minCauseLength .. bound.&maxCauseLength)) +-- Indicates the cause for interface related information. +-- Refer to ETSI EN 300 356 1 [23] Cause parameter for encoding. +-- For the use of cause and location values refer to ITU T Recommendation Q.850 [47] +-- Shall always include the cause value and shall also include the diagnostics field, +-- if available. + +CGEncountered ::= ENUMERATED { + noCGencountered (0), + manualCGencountered (1), + scpOverload (2) + } +-- Indicates the type of automatic call gapping encountered, if any. + +ChangeOfPositionControlInfo {PARAMETERS-BOUND : bound} ::= SEQUENCE SIZE (1..bound.&numOfChangeOfPositionControlInfo) OF ChangeOfLocation {bound} + +ChangeOfLocation {PARAMETERS-BOUND : bound} ::= CHOICE { + cellGlobalId [0] CellGlobalIdOrServiceAreaIdFixedLength, + serviceAreaId [1] CellGlobalIdOrServiceAreaIdFixedLength, + locationAreaId [2] LAIFixedLength, + inter-SystemHandOver [3] NULL, + inter-PLMNHandOver [4] NULL, + inter-MSCHandOver [5] NULL, + changeOfLocationAlt [6] ChangeOfLocationAlt {bound} +} +-- The cellGlobalId shall contain a Cell Global Identification. +-- The serviceAreaId shall contain a Service Area Identification. + +ChangeOfLocationAlt {PARAMETERS-BOUND : bound} ::= SEQUENCE { + ... + } + +ChargeIndicator ::= OCTET STRING (SIZE (1)) +-- As specified in ITU-T Recommendation Q.763 as follows: +-- no indication 'xxxx xx00'B +-- no charge 'xxxx xx01'B +-- charge 'xxxx xx10'B +-- spare 'xxxx xx11'B +-- Sending entity shall fill the upper six bits with '0's. +-- Receiving entity shall ignore the upper six bits. + +ChargeNumber {PARAMETERS-BOUND : bound} ::= LocationNumber {bound} +-- Information sent in either direction indicating the chargeable number for the call and +-- consisting of the odd/even indicator, nature of address indicator, numbering plan indicator, +-- and address signals. + +-- Uses the LocationNumber format which is based on the Location Number format as defined +-- in ITU-T Recommendation Q.763 [45]. +-- For example, the ChargeNumber may be a third party number to which a call is billed for +-- the 3rd party billing service. In this case, the calling party may request operator assistance +-- to charge the call to, for example, their home number. + +-- For NA, this parameter uniquely identifies the chargeable number for a call sent into a North +-- American long distance carrier. It transports the ChargeNumber Parameter Field as defined in +-- ANSI T1.113-1995 [92]. This provides +-- - 1 octet for the nature of address indicator field, plus +-- - 1 octet for a numbering plan field, plus +-- - up to 5 octets for the address signal (up to 10 digits) + +-- The Charge Number in ANSI T1.113-1995 [92] normally contains a 10 digit national number within +-- the North American Numbering Plan (NANP); longer (e.g. international) charge numbers are not +-- supported in ANSI T1.113-1995 [92]. + +ChargingCharacteristics ::= CHOICE { + maxTransferredVolume [0] INTEGER (1..4294967295), + maxElapsedTime [1] INTEGER (1..86400) + } +-- maxTransferredVolume is measured in number of bytes +-- maxElapsedTime is measured in seconds + +ChargingResult ::= CHOICE { + transferredVolume [0] TransferredVolume, + elapsedTime [1] ElapsedTime + } + +ChargingRollOver ::= CHOICE { + transferredVolumeRollOver [0] TransferredVolumeRollOver, + elapsedTimeRollOver [1] ElapsedTimeRollOver + } +-- transferredVolumeRollOver shall be reported if ApplyChargingReportGPRS reports volume and +-- a roll-over has occurred in one or more volume counters. Otherwise, it shall be absent. +-- elapsedTimeRollOver shall be reported if ApplyChargingReportGPRS reports duration and +-- a roll-over has occurred in one or more duration counters. Otherwise, it shall be absent. + +CollectedDigits ::= SEQUENCE { + minimumNbOfDigits [0] INTEGER (1..30) DEFAULT 1, + maximumNbOfDigits [1] INTEGER (1..30), + endOfReplyDigit [2] OCTET STRING (SIZE (1..2)) OPTIONAL, + cancelDigit [3] OCTET STRING (SIZE (1..2)) OPTIONAL, + startDigit [4] OCTET STRING (SIZE (1..2)) OPTIONAL, + firstDigitTimeOut [5] INTEGER (1..127) OPTIONAL, + interDigitTimeOut [6] INTEGER (1..127) OPTIONAL, + errorTreatment [7] ErrorTreatment DEFAULT stdErrorAndInfo, + interruptableAnnInd [8] BOOLEAN DEFAULT TRUE, + voiceInformation [9] BOOLEAN DEFAULT FALSE, + voiceBack [10] BOOLEAN DEFAULT FALSE + } +-- The use of voiceBack and the support of voice recognition via voiceInformation +-- is network operator specific. +-- The endOfReplyDigit, cancelDigit, and startDigit parameters have been +-- designated as OCTET STRING, and are to be encoded as BCD, one digit per octet +-- only, contained in the four least significant bits of each OCTET. The following encoding shall +-- be applied for the non-decimal characters: +-- 1011 (*), 1100 (#). +-- The usage is service dependent. +-- firstDigitTimeOut and interDigitTimeOut are measured in seconds. + +CollectedInfo ::= CHOICE { + collectedDigits [0] CollectedDigits + } + +ConnectedNumberTreatmentInd ::= ENUMERATED { + noINImpact (0), + presentationRestricted (1), + presentCalledINNumber (2), + presentCallINNumberRestricted (3) +} +-- This parameter is used to suppress or to display the connected number. + +ControlType ::= ENUMERATED { + sCPOverloaded (0), + manuallyInitiated (1) + } + +CompoundCriteria {PARAMETERS-BOUND : bound} ::= SEQUENCE { + basicGapCriteria [0] BasicGapCriteria {bound}, + scfID [1] ScfID {bound} OPTIONAL + } + +CorrelationID {PARAMETERS-BOUND : bound} ::= Digits {bound} +-- used by gsmSCF for correlation with a previous operation. + +DateAndTime ::= OCTET STRING (SIZE(7)) +-- DateAndTime is BCD encoded. The year digit indicating millenium occupies bits +-- 0-3 of the first octet, and the year digit indicating century occupies bits +-- 4-7 of the first octet. +-- The year digit indicating decade occupies bits 0-3 of the second octet, +-- whilst the digit indicating the year within the decade occupies bits 4-7 of +-- the second octet. +-- The most significant month digit occupies bits 0-3 of the third octet, +-- and the least significant month digit occupies bits 4-7 of the third octet. +-- The most significant day digit occupies bits 0-3 of the fourth octet, +-- and the least significant day digit occupies bits 4-7 of the fourth octet. +-- The most significant hours digit occupies bits 0-3 of the fifth octet, +-- and the least significant digit occupies bits 4-7 of the fifth octet. +-- The most significant minutes digit occupies bits 0-3 of the sixth octet, +-- and the least significant digit occupies bits 4-7 of the sixth octet. +-- The most significant seconds digit occupies bits 0-3 of the seventh octet, +-- and the least seconds significant digit occupies bits 4-7 of the seventh octet. +-- For the encoding of digits in an octet, refer to the timeAndtimezone parameter. + +DestinationRoutingAddress {PARAMETERS-BOUND : bound} ::= SEQUENCE SIZE(1) OF + CalledPartyNumber {bound} +-- Indicates the Called Party Number. + +Digits {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minDigitsLength .. bound.&maxDigitsLength)) +-- Indicates the address signalling digits. +-- Refer to ETSI EN 300 356 1 [23] Generic Number & Generic Digits parameters for encoding. +-- The coding of the subfields 'NumberQualifier' in Generic Number and 'TypeOfDigits' in +-- Generic Digits are irrelevant to the CAP; +-- the ASN.1 tags are sufficient to identify the parameter. +-- The ISUP format does not allow to exclude these subfields, +-- therefore the value is network operator specific. +-- +-- The following parameters shall use Generic Number: +-- - AdditionalCallingPartyNumber for InitialDP +-- - AssistingSSPIPRoutingAddress for EstablishTemporaryConnection +-- - CorrelationID for AssistRequestInstructions +-- - CalledAddressValue for all occurrences, CallingAddressValue for all occurrences. +-- +-- The following parameters shall use Generic Digits: +-- - CorrelationID in EstablishTemporaryConnection +-- - number in VariablePart +-- - digitsResponse in ReceivedInformationArg +-- - midCallEvents in oMidCallSpecificInfo and tMidCallSpecificInfo +-- +-- In the digitsResponse and midCallevents, the digits may also include the '*', '#', +-- a, b, c and d digits by using the IA5 character encoding scheme. If the BCD even or +-- BCD odd encoding scheme is used, then the following encoding shall be applied for the +-- non-decimal characters: 1011 (*), 1100 (#). +-- +-- AssistingSSPIPRoutingAddress in EstablishTemporaryConnection and CorrelationID in +-- AssistRequestInstructions may contain a Hex B digit as address signal. Refer to +-- Annex A.6 for the usage of the Hex B digit. +-- +-- Note that when CorrelationID is transported in Generic Digits, then the digits shall +-- always be BCD encoded. + +DpSpecificCriteria {PARAMETERS-BOUND : bound}::= CHOICE { + applicationTimer [1] ApplicationTimer, + midCallControlInfo [2] MidCallControlInfo, + dpSpecificCriteriaAlt [3] DpSpecificCriteriaAlt {bound} + } +-- Exception handling: reception of DpSpecificCriteriaAlt shall be treated like +-- reception of no DpSpecificCriteria. +-- The gsmSCF may set a timer in the gsmSSF for the No_Answer event. +-- If the user does not answer the call within the allotted time, +-- then the gsmSSF reports the event to the gsmSCF. +-- The gsmSCF may define a criterion for the detection of DTMF digits during a call. +-- The gsmSCF may define other criteria in the dpSpecificCriteriaAlt alternative +-- in future releases. + +DpSpecificCriteriaAlt {PARAMETERS-BOUND : bound} ::= SEQUENCE { + ..., + changeOfPositionControlInfo [0] ChangeOfPositionControlInfo {bound}, + numberOfDigits [1] NumberOfDigits OPTIONAL, + interDigitTimeout [2] INTEGER (1..127) OPTIONAL + } +-- interDigitTimeout duration in seconds. + +DpSpecificInfoAlt {PARAMETERS-BOUND : bound} ::= SEQUENCE { + ..., + oServiceChangeSpecificInfo [0] SEQUENCE { + ext-basicServiceCode [0] Ext-BasicServiceCode OPTIONAL, + ..., + initiatorOfServiceChange [1] InitiatorOfServiceChange OPTIONAL, + natureOfServiceChange [2] NatureOfServiceChange OPTIONAL + + }, + tServiceChangeSpecificInfo [1] SEQUENCE { + ext-basicServiceCode [0] Ext-BasicServiceCode OPTIONAL, + ..., + initiatorOfServiceChange [1] InitiatorOfServiceChange OPTIONAL, + natureOfServiceChange [2] NatureOfServiceChange OPTIONAL + }, + + collectedInfoSpecificInfo [2] SEQUENCE { + calledPartyNumber [0] CalledPartyNumber OPTIONAL, + ... + } + } +-- This datatype is for extension in future releases. + +ElapsedTime ::= CHOICE { + timeGPRSIfNoTariffSwitch [0] INTEGER (0..86400), + timeGPRSIfTariffSwitch [1] SEQUENCE { + timeGPRSSinceLastTariffSwitch [0] INTEGER (0..86400), + timeGPRSTariffSwitchInterval [1] INTEGER (0..86400) OPTIONAL + } + } +-- timeGPRSIfNoTariffSwitch is measured in seconds +-- timeGPRSSinceLastTariffSwitch and timeGPRSTariffSwitchInterval are measured in seconds + +ElapsedTimeRollOver ::= CHOICE { + rO-TimeGPRSIfNoTariffSwitch [0] INTEGER (0..255), + rO-TimeGPRSIfTariffSwitch [1] SEQUENCE { + rO-TimeGPRSSinceLastTariffSwitch [0] INTEGER (0..255) OPTIONAL, + rO-TimeGPRSTariffSwitchInterval [1] INTEGER (0..255) OPTIONAL + } + } +-- rO-TimeGPRSIfNoTariffSwitch, rO-TimeGPRSSinceLastTariffSwitch and +-- rO-TimeGPRSTariffSwitchInterval +-- present counters indicating the number of parameter range rollovers. + +EndUserAddress {PARAMETERS-BOUND: bound} ::= SEQUENCE { + pDPTypeOrganization [0] OCTET STRING (SIZE(1)), + pDPTypeNumber [1] OCTET STRING (SIZE(1)), + pDPAddress [2] OCTET STRING (SIZE( + bound.&minPDPAddressLength .. bound.&maxPDPAddressLength)) OPTIONAL + } +-- Indicates the EndUserAddress, refer to 3GPP TS 29.060 [12] for the encoding. +-- The pDPTypeOrganization shall use the least significant 4 bits of the octet encoded. +-- The sender of this parameter shall set the most significant 4 bits of the octet to 1. +-- The receiver of this parameter shall ignore the most significant 4 bits of this octet. + +ErrorTreatment ::= ENUMERATED { + stdErrorAndInfo (0), + help (1), + repeatPrompt (2) + } +-- stdErrorAndInfomeans returning the 'ImproperCallerResponse' error in the event of an error +-- condition during collection of user info. + +EventSpecificInformationBCSM {PARAMETERS-BOUND : bound} ::= CHOICE { + routeSelectFailureSpecificInfo [2] SEQUENCE { + failureCause [0] Cause {bound} OPTIONAL, + ... + }, + oCalledPartyBusySpecificInfo [3] SEQUENCE { + busyCause [0] Cause {bound} OPTIONAL, + ... + }, + oNoAnswerSpecificInfo [4] SEQUENCE { + -- no specific info defined -- + ... + }, + oAnswerSpecificInfo [5] SEQUENCE { + destinationAddress [50] CalledPartyNumber {bound} OPTIONAL, + or-Call [51] NULL OPTIONAL, + forwardedCall [52] NULL OPTIONAL, + chargeIndicator [53] ChargeIndicator OPTIONAL, + ext-basicServiceCode [54] Ext-BasicServiceCode OPTIONAL, + ext-basicServiceCode2 [55] Ext-BasicServiceCode OPTIONAL, + ... + }, + oMidCallSpecificInfo [6] SEQUENCE { + midCallEvents [1] CHOICE { + dTMFDigitsCompleted [3] Digits {bound}, + dTMFDigitsTimeOut [4] Digits {bound} + } OPTIONAL, + ... + }, + oDisconnectSpecificInfo [7] SEQUENCE { + releaseCause [0] Cause {bound} OPTIONAL, + ... + }, + tBusySpecificInfo [8] SEQUENCE { + busyCause [0] Cause {bound} OPTIONAL, + callForwarded [50] NULL OPTIONAL, + routeNotPermitted [51] NULL OPTIONAL, + forwardingDestinationNumber [52] CalledPartyNumber {bound} OPTIONAL, + ... + }, + tNoAnswerSpecificInfo [9] SEQUENCE { + callForwarded [50] NULL OPTIONAL, + forwardingDestinationNumber [52] CalledPartyNumber {bound} OPTIONAL, + ... + }, + tAnswerSpecificInfo [10] SEQUENCE { + destinationAddress [50] CalledPartyNumber {bound} OPTIONAL, + or-Call [51] NULL OPTIONAL, + forwardedCall [52] NULL OPTIONAL, + chargeIndicator [53] ChargeIndicator OPTIONAL, + ext-basicServiceCode [54] Ext-BasicServiceCode OPTIONAL, + ext-basicServiceCode2 [55] Ext-BasicServiceCode OPTIONAL, + ... + }, + tMidCallSpecificInfo [11] SEQUENCE { + midCallEvents [1] CHOICE { + dTMFDigitsCompleted [3] Digits {bound}, + dTMFDigitsTimeOut [4] Digits {bound} + } OPTIONAL, + ... + }, + tDisconnectSpecificInfo [12] SEQUENCE { + releaseCause [0] Cause {bound} OPTIONAL, + ... + }, + oTermSeizedSpecificInfo [13] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ... + }, + callAcceptedSpecificInfo [20] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ... + }, + oAbandonSpecificInfo [21] SEQUENCE { + routeNotPermitted [50] NULL OPTIONAL, + ... + }, + oChangeOfPositionSpecificInfo [50] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ..., + metDPCriteriaList [51] MetDPCriteriaList {bound} OPTIONAL + }, + tChangeOfPositionSpecificInfo [51] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ..., + metDPCriteriaList [51] MetDPCriteriaList {bound} OPTIONAL + }, + dpSpecificInfoAlt [52] DpSpecificInfoAlt {bound} + } +-- Indicates the call related information specific to the event. + +EventSpecificInformationSMS ::= CHOICE { + o-smsFailureSpecificInfo [0] SEQUENCE { + failureCause [0] MO-SMSCause OPTIONAL, + ... + }, + o-smsSubmissionSpecificInfo [1] SEQUENCE { + -- no specific info defined-- + ... + }, + t-smsFailureSpecificInfo [2] SEQUENCE { + failureCause [0] MT-SMSCause OPTIONAL, + ... + }, + t-smsDeliverySpecificInfo [3] SEQUENCE { + -- no specific info defined-- + ... + } + } + +EventTypeBCSM ::= ENUMERATED { + collectedInfo (2), + analyzedInformation (3), + routeSelectFailure (4), + oCalledPartyBusy (5), + oNoAnswer (6), + oAnswer (7), + oMidCall (8), + oDisconnect (9), + oAbandon (10), + termAttemptAuthorized (12), + tBusy (13), + tNoAnswer (14), + tAnswer (15), + tMidCall (16), + tDisconnect (17), + tAbandon (18), + oTermSeized (19), + callAccepted (27), + oChangeOfPosition (50), + tChangeOfPosition (51), + ..., + oServiceChange (52), + tServiceChange (53) + } +-- Indicates the BCSM detection point event. +-- Values analyzedInformation and termAttemptAuthorized may be used +-- for TDPs only. +-- Exception handling: reception of an unrecognized value shall be treated +-- like reception of no detection point. + +EventTypeSMS ::= ENUMERATED { + sms-CollectedInfo (1), + o-smsFailure (2), + o-smsSubmission (3), + sms-DeliveryRequested (11), + t-smsFailure (12), + t-smsDelivery (13) + } +-- Values sms-CollectedInfo and sms-DeliveryRequested may be used for TDPs only. + +Extensions {PARAMETERS-BOUND : bound} ::= SEQUENCE SIZE (1..bound.&numOfExtensions) OF ExtensionField +ExtensionField ::= SEQUENCE { + type EXTENSION.&id ({SupportedExtensions}), + -- shall identify the value of an EXTENSION type + criticality CriticalityType DEFAULT ignore, + value [1] EXTENSION.&ExtensionType ({SupportedExtensions}{@type}), + ... + } +-- This parameter indicates an extension of an argument data type. +-- Its content is network operator specific + +FCIBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minFCIBillingChargingLength .. bound.&maxFCIBillingChargingLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of type -- + CAMEL-FCIBillingChargingCharacteristics {bound}}) +-- This parameter indicates the billing and/or charging characteristics. +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +FCIGPRSBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minFCIBillingChargingLength .. bound.&maxFCIBillingChargingLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of type - + CAMEL-FCIGPRSBillingChargingCharacteristics {bound}}) +-- This parameter indicates the GPRS billing and/or charging characteristics. +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +FCISMSBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minFCIBillingChargingLength .. bound.&maxFCIBillingChargingLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of type - + CAMEL-FCISMSBillingChargingCharacteristics {bound}}) +-- This parameter indicates the SMS billing and/or charging characteristics. +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +ForwardServiceInteractionInd ::= SEQUENCE { + conferenceTreatmentIndicator [1] OCTET STRING (SIZE(1)) OPTIONAL, + -- acceptConferenceRequest 'xxxx xx01'B + -- rejectConferenceRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect conference treatment + callDiversionTreatmentIndicator [2] OCTET STRING (SIZE(1)) OPTIONAL, + -- callDiversionAllowed 'xxxx xx01'B + -- callDiversionNotAllowed 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call diversion treatment + callingPartyRestrictionIndicator [4] OCTET STRING (SIZE(1)) OPTIONAL, + -- noINImpact 'xxxx xx01'B + -- presentationRestricted 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect calling party restriction treatment +... + } + +GapCriteria {PARAMETERS-BOUND : bound}::= CHOICE { + basicGapCriteria BasicGapCriteria {bound}, + compoundGapCriteria CompoundCriteria {bound} + } + +GapIndicators ::= SEQUENCE { + duration [0] Duration, + gapInterval [1] Interval, + ... + } +-- Indicates the call gapping characteristics. +-- No call gapping when gapInterval equals 0. + +GapOnService ::= SEQUENCE { + serviceKey [0] ServiceKey, + ... + } + +GapTreatment {PARAMETERS-BOUND : bound} ::= CHOICE { + informationToSend [0] InformationToSend {bound}, + releaseCause [1] Cause {bound} + } +-- The default value for Cause is the same as in ISUP. + +GenericNumber {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minGenericNumberLength .. bound.&maxGenericNumberLength)) +-- Indicates a generic number. Refer to ETSI EN 300 356 1 [23] Generic number for encoding. + +GenericNumbers {PARAMETERS-BOUND : bound} ::= SET SIZE(1..bound.&numOfGenericNumbers) OF GenericNumber {bound} + +GPRS-QoS ::= CHOICE { + short-QoS-format [0] QoS-Subscribed, + long-QoS-format [1] Ext-QoS-Subscribed + } +-- Short-QoS-format shall be sent for QoS in pre GSM release 99 format. +-- Long-QoS-format shall be sent for QoS in GSM release 99 (and beyond) format. +-- Which of the two QoS formats shall be sent is determined by which QoS +-- format is available in the SGSN at the time of sending. +-- Refer to 3GPP TS 29.002 [11] for encoding details of QoS-Subscribed and +-- Ext-QoS-Subscribed. + +GPRS-QoS-Extension ::= SEQUENCE { + supplement-to-long-QoS-format [0] Ext2-QoS-Subscribed, + ... , + additionalSupplement [1] Ext3-QoS-Subscribed OPTIONAL + } + +GPRSCause {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE + (bound.&minGPRSCauseLength .. bound.&maxGPRSCauseLength)) +-- Shall only include the cause value. + +-- 00000000 Unspecified +-- All other values shall be interpreted as 'Unspecified'. +-- +-- This parameter indicates the cause for CAP interface related information. +-- The GPRSCause mapping to/from GTP cause values specified in the 3GPP TS 29.060 [12] and +-- to/from 3GPP TS 24.008 [9] GMM cause and SM cause values are outside scope of this document. + +GPRSEvent ::= SEQUENCE { + gPRSEventType [0] GPRSEventType, + monitorMode [1] MonitorMode + } +-- Indicates the GPRS event information for monitoring. + +GPRSEventSpecificInformation {PARAMETERS-BOUND : bound} ::= CHOICE { + + attachChangeOfPositionSpecificInformation + [0] SEQUENCE { + locationInformationGPRS [0] LocationInformationGPRS OPTIONAL, + ... + }, + + pdp-ContextchangeOfPositionSpecificInformation + [1] SEQUENCE { + accessPointName [0] AccessPointName {bound} OPTIONAL, + chargingID [1] GPRSChargingID OPTIONAL, + locationInformationGPRS [2] LocationInformationGPRS OPTIONAL, + endUserAddress [3] EndUserAddress {bound} OPTIONAL, + qualityOfService [4] QualityOfService OPTIONAL, + timeAndTimeZone [5] TimeAndTimezone {bound} OPTIONAL, + ..., + gGSNAddress [6] GSN-Address OPTIONAL + }, + + detachSpecificInformation [2] SEQUENCE { + initiatingEntity [0] InitiatingEntity OPTIONAL, + ..., + routeingAreaUpdate [1] NULL OPTIONAL + }, + + disconnectSpecificInformation [3] SEQUENCE { + initiatingEntity [0] InitiatingEntity OPTIONAL, + ..., + routeingAreaUpdate [1] NULL OPTIONAL + }, + + pDPContextEstablishmentSpecificInformation + [4] SEQUENCE { + accessPointName [0] AccessPointName {bound} OPTIONAL, + endUserAddress [1] EndUserAddress {bound} OPTIONAL, + qualityOfService [2] QualityOfService OPTIONAL, + locationInformationGPRS [3] LocationInformationGPRS OPTIONAL, + timeAndTimeZone [4] TimeAndTimezone {bound} OPTIONAL, + pDPInitiationType [5] PDPInitiationType OPTIONAL, + ..., + secondaryPDP-context [6] NULL OPTIONAL + }, + + pDPContextEstablishmentAcknowledgementSpecificInformation + [5] SEQUENCE { + accessPointName [0] AccessPointName {bound} OPTIONAL, + chargingID [1] GPRSChargingID OPTIONAL, + endUserAddress [2] EndUserAddress {bound} OPTIONAL, + qualityOfService [3] QualityOfService OPTIONAL, + locationInformationGPRS [4] LocationInformationGPRS OPTIONAL, + timeAndTimeZone [5] TimeAndTimezone {bound} OPTIONAL, + ..., + gGSNAddress [6] GSN-Address OPTIONAL + } + } + +GPRSEventType ::= ENUMERATED { + attach (1), + attachChangeOfPosition (2), + detached (3), + pdp-ContextEstablishment (11), + pdp-ContextEstablishmentAcknowledgement (12), + disonnect (13), + pdp-ContextChangeOfPosition (14) + } + +InbandInfo {PARAMETERS-BOUND : bound} ::= SEQUENCE { + messageID [0] MessageID {bound}, + numberOfRepetitions [1] INTEGER (1..127) OPTIONAL, + duration [2] INTEGER (0..32767) OPTIONAL, + interval [3] INTEGER (0..32767) OPTIONAL, +... + } +-- Interval is the time in seconds between each repeated announcement. Duration is the total +-- amount of time in seconds, including repetitions and intervals. +-- The end of announcement is either the end of duration or numberOfRepetitions, +-- whatever comes first. +-- duration with value 0 indicates infinite duration + +InformationToSend {PARAMETERS-BOUND : bound} ::= CHOICE { + inbandInfo [0] InbandInfo {bound}, + tone [1] Tone + } + +InitiatingEntity ::= ENUMERATED { + mobileStation (0), + sgsn (1), + hlr (2), + ggsn (3) + } + +InitiatorOfServiceChange ::= ENUMERATED { + a-side (0), + b-side (1) + } + +InvokeID ::= INTEGER (-128..127) + +IPRoutingAddress {PARAMETERS-BOUND : bound} ::= CalledPartyNumber {bound} +-- Indicates the routeing address for the IP. + +IPSSPCapabilities {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minIPSSPCapabilitiesLength .. bound.&maxIPSSPCapabilitiesLength)) +-- Indicates the gsmSRF resources available. The parameter has two parts, a standard and a +-- bilateral part. The standard part indicates capabilities defined as optional in CAP +-- that shall be recognised (but not necessarily supported) by a gsmSCF. The bilateral +-- part contains further information that is not specified in this standard, but which is set +-- according to bilateral agreements between network operators and/or equipment vendors. +-- The last octet of the standard part is indicated by bit 7 being set to 0, otherwise Bit 7 of +-- a standard part octet is set to 1 indicating that the standard part continues in the following +-- octet. Coding is as follows: + +-- Octet 1 Standard Part for CAP +-- Bit Value Meaning +-- 0 0 IPRoutingAddress not supported +-- 1 IPRoutingAddress supported +-- 1 0 VoiceBack not supported +-- 1 VoiceBack supported +-- 2 0 VoiceInformation not supported, via speech recognition +-- 1 VoiceInformation supported, via speech recognition +-- 3 0 VoiceInformation not supported, via voice recognition +-- 1 VoiceInformation supported, via voice recognition +-- 4 0 Generation of voice announcements from Text not supported +-- 1 Generation of voice announcements from Text supported +-- 5 - Reserved +-- 6 - Reserved +-- 7 0 End of standard part +-- 1 This value is reserved in CAP +-- +-- Octets 2 to 4 Bilateral Part: Network operator/equipment vendor specific + +LegOrCallSegment {PARAMETERS-BOUND : bound} ::= CHOICE { + callSegmentID [0] CallSegmentID {bound}, + legID [1] LegID + } + +LegType ::= OCTET STRING (SIZE(1)) +leg1 LegType ::= '01'H +leg2 LegType ::= '02'H + +LocationInformationGPRS ::= SEQUENCE { + cellGlobalIdOrServiceAreaIdOrLAI [0] OCTET STRING (SIZE(5..7)) OPTIONAL, + routeingAreaIdentity [1] RAIdentity OPTIONAL, + geographicalInformation [2] GeographicalInformation OPTIONAL, + sgsn-Number [3] ISDN-AddressString OPTIONAL, + selectedLSAIdentity [4] LSAIdentity OPTIONAL, + extensionContainer [5] ExtensionContainer OPTIONAL, + ..., + sai-Present [6] NULL OPTIONAL, + userCSGInformation [7] UserCSGInformation OPTIONAL +} +-- cellGlobalIdOrServiceAreaIdOrLAI shall contain the value part of the +-- CellGlobalIdOrServiceAreaIdFixedLength type or the LAIFixedLength type (i.e. excluding tags +-- and lengths) as defined in 3GPP TS 29.002 [13]. +-- sai-Present indicates that the cellGlobalIdOrServiceAreaIdOrLAI parameter contains +-- a Service Area Identity. +-- UserCSGInformation contains the CSG ID, Access mode, and the CSG Membership Indication in the +-- case the Access mode is Hybrid Mode, as defined in 3GPP TS 23.060 [93]. + +-- WS define UserCSGInformation +UserCSGInformation ::= OCTET STRING + +LocationNumber {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE ( + bound.&minLocationNumberLength .. bound.&maxLocationNumberLength)) +-- Indicates the Location Number for the calling party. +-- Refer to ETSI EN 300 356 1 [23] for encoding. + +LowLayerCompatibility {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE ( + bound.&minLowLayerCompatibilityLength .. bound.&maxLowLayerCompatibilityLength)) +-- indicates the LowLayerCompatibility for the calling party. +-- Refer to 3GPP TS 24.008 [9] for encoding. +-- It shall be coded as in the value part defined in 3GPP TS 24.008. +-- i.e. the 3GPP TS 24.008 IEI and 3GPP TS 24.008 octet length indicator +-- shall not be included. + +MessageID {PARAMETERS-BOUND : bound} ::= CHOICE { + elementaryMessageID [0] Integer4, + text [1] SEQUENCE { + messageContent [0] IA5String (SIZE( + bound.&minMessageContentLength .. bound.&maxMessageContentLength)), + attributes [1] OCTET STRING (SIZE( + bound.&minAttributesLength .. bound.&maxAttributesLength)) OPTIONAL + }, + elementaryMessageIDs [29] SEQUENCE SIZE (1.. bound.&numOfMessageIDs) OF Integer4, + variableMessage [30] SEQUENCE { + elementaryMessageID [0] Integer4, + variableParts [1] SEQUENCE SIZE (1..5) OF VariablePart {bound} + } + } +-- Use of the text parameter is network operator/equipment vendor specific. + +MetDPCriteriaList {PARAMETERS-BOUND : bound} ::= SEQUENCE SIZE (1..bound.&numOfChangeOfPositionControlInfo) OF MetDPCriterion {bound} + +MetDPCriterion {PARAMETERS-BOUND : bound} ::= CHOICE { + enteringCellGlobalId [0] CellGlobalIdOrServiceAreaIdFixedLength, + leavingCellGlobalId [1] CellGlobalIdOrServiceAreaIdFixedLength, + enteringServiceAreaId [2] CellGlobalIdOrServiceAreaIdFixedLength, + leavingServiceAreaId [3] CellGlobalIdOrServiceAreaIdFixedLength, + enteringLocationAreaId [4] LAIFixedLength, + leavingLocationAreaId [5] LAIFixedLength, + inter-SystemHandOverToUMTS [6] NULL, + inter-SystemHandOverToGSM [7] NULL, + inter-PLMNHandOver [8] NULL, + inter-MSCHandOver [9] NULL, + metDPCriterionAlt [10] MetDPCriterionAlt {bound} +} +-- The enteringCellGlobalId and leavingCellGlobalId shall contain a Cell Global Identification. +-- The enteringServiceAreaId and leavingServiceAreaId shall contain a Service Area Identification. + +MetDPCriterionAlt {PARAMETERS-BOUND : bound} ::= SEQUENCE { + ... + } + +MidCallControlInfo ::= SEQUENCE { + minimumNumberOfDigits [0] INTEGER (1..30) DEFAULT 1, + maximumNumberOfDigits [1] INTEGER (1..30) DEFAULT 30, + endOfReplyDigit [2] OCTET STRING (SIZE (1..2)) OPTIONAL, + cancelDigit [3] OCTET STRING (SIZE (1..2)) OPTIONAL, + startDigit [4] OCTET STRING (SIZE (1..2)) OPTIONAL, + interDigitTimeout [6] INTEGER (1..127) DEFAULT 10, + ... + } +-- +-- - minimumNumberOfDigits specifies the minumum number of digits that shall be collected +-- - maximumNumberOfDigits specifies the maximum number of digits that shall be collected +-- - endOfReplyDigit specifies the digit string that denotes the end of the digits +-- to be collected. +-- - cancelDigit specifies the digit string that indicates that the input shall +-- be erased and digit collection shall start afresh. +-- - startDigit specifies the digit string that denotes the start of the digits +-- to be collected. +-- - interDigitTimeout specifies the maximum duration in seconds between successive +-- digits. +-- +-- endOfReplyDigit, cancelDigit and startDigit shall contain digits in the range 0..9, '*' and '#' +-- only. The collected digits string, reported to the gsmSCF, shall include the endOfReplyDigit and +-- the startDigit, if present. +-- +-- endOfReplyDigit, cancelDigit and startDigit shall be encoded as BCD digits. Each octet shall +-- contain one BCD digit, in the 4 least significant bits of each octet. +-- The following encoding shall be used for the over-decadic digits: 1011 (*), 1100 (#). + +MonitorMode ::= ENUMERATED { + interrupted (0), + notifyAndContinue (1), + transparent (2) + } +-- Indicates the event is relayed and/or processed by the SSP. +-- Transparent means that the gsmSSF or gprsSSF does not notify the gsmSCF of the event. +-- For the use of this parameter refer to the procedure descriptions in clause 11. +-- For the RequestNotificationCharging operation, 'interrupted' shall not be used in MonitorMode. + +MO-SMSCause ::= ENUMERATED { + systemFailure (0), + unexpectedDataValue (1), + facilityNotSupported (2), + sM-DeliveryFailure (3), + releaseFromRadioInterface (4) + } +-- MO SMS error values which are reported to gsmSCF. +-- Most of these values are received from the SMSC as a response to +-- MO-ForwardSM operation. + +MT-SMSCause ::= OCTET STRING (SIZE (1)) +-- This variable is sent to the gsmSCF for a Short Message delivery failure +-- notification. +-- If the delivery failure is due to RP-ERROR RPDU received from the MS, +-- then MT-SMSCause shall be set to the RP-Cause component in the RP-ERROR RPDU. +-- Refer to 3GPP TS 24.011 [10] for the encoding of RP-Cause values. +-- Otherwise, if the delivery failure is due to internal failure in the MSC or SGSN +-- or time-out from the MS, then MT-SMSCause shall be set to 'Protocol error, +-- unspecified', as defined in 3GPP TS 24.011 [10]. + +NAOliInfo ::= OCTET STRING (SIZE (1)) +-- NA Oli information takes the same value as defined in ANSI T1.113-1995 [92] +-- e.g. '3D'H - Decimal value 61 - Cellular Service (Type 1) +-- '3E'H - Decimal value 62 - Cellular Service (Type 2) +-- '3F'H - Decimal value 63 - Cellular Service (roaming) + +NatureOfServiceChange ::= ENUMERATED { + userInitiated (0), + networkInitiated (1) + } + +NumberOfDigits ::= INTEGER (1..255) +-- Indicates the number of digits to be collected. + +OCSIApplicable ::= NULL +-- Indicates that the Originating CAMEL Subscription Information, if present, shall be +-- applied on the outgoing call leg created with a Connect operation. For the use of this +-- parameter see 3GPP TS 23.078 [7]. + +OriginalCalledPartyID {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minOriginalCalledPartyIDLength .. bound.&maxOriginalCalledPartyIDLength)) +-- Indicates the original called number. Refer to ETSI EN 300 356 1 [23] Original Called Number +-- for encoding. + +PDPID ::= OCTET STRING (SIZE (1)) +-- PDP Identifier is a counter used to identify a specific PDP Context within a control +-- relationship between gprsSSF and gsmSCF. + +PDPInitiationType ::= ENUMERATED { + mSInitiated (0), + networkInitiated (1) + } + +QualityOfService ::= SEQUENCE { + requested-QoS [0] GPRS-QoS OPTIONAL, + subscribed-QoS [1] GPRS-QoS OPTIONAL, + negotiated-QoS [2] GPRS-QoS OPTIONAL, + ..., + requested-QoS-Extension [3] GPRS-QoS-Extension OPTIONAL, + subscribed-QoS-Extension [4] GPRS-QoS-Extension OPTIONAL, + negotiated-QoS-Extension [5] GPRS-QoS-Extension OPTIONAL + } + +ReceivingSideID ::= CHOICE { + receivingSideID [1] LegType + } +-- used to identify LegID in operations sent from gsmSSF to gsmSCF + +RedirectingPartyID {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE ( + bound.&minRedirectingPartyIDLength .. bound.&maxRedirectingPartyIDLength)) +-- Indicates redirecting number. +-- Refer to ETSI EN 300 356 1 [23] Redirecting number for encoding. + +RequestedInformationList {PARAMETERS-BOUND : bound} ::= SEQUENCE SIZE (1.. numOfInfoItems) OF RequestedInformation {bound} + +RequestedInformationTypeList ::= SEQUENCE SIZE (1.. numOfInfoItems) OF RequestedInformationType + +RequestedInformation {PARAMETERS-BOUND : bound} ::= SEQUENCE { + requestedInformationType [0] RequestedInformationType, + requestedInformationValue [1] RequestedInformationValue {bound}, +... + } + +RequestedInformationType ::= ENUMERATED { + callAttemptElapsedTime (0), + callStopTime (1), + callConnectedElapsedTime (2), + releaseCause (30) + } + +RequestedInformationValue {PARAMETERS-BOUND : bound} ::= CHOICE { + callAttemptElapsedTimeValue [0] INTEGER (0..255), + callStopTimeValue [1] DateAndTime, + callConnectedElapsedTimeValue [2] Integer4, + releaseCauseValue [30] Cause {bound} + } +-- The callAttemptElapsedTimeValue is specified in seconds. The unit for the +-- callConnectedElapsedTimeValue is 100 milliseconds + +RPCause ::= OCTET STRING (SIZE (1)) +-- RP cause according to 3GPP TS 24.011 [10] or 3GPP TS 29.002 [11]. +-- GsmSCF shall send this cause in the ReleaseSMS operation. +-- For a MO-SMS service, the MSC or SGSN shall send the RP Cause to the originating MS. +-- It shall be used to overwrite the RP-Cause element in the RP-ERROR RPDU. +-- For a MT-SMS service, the MSC or SGSN shall send the RP Cause to the sending SMS-GMSC. +-- It shall be used to overwrite the RP-Cause element in the RP-ERROR RPDU. + +ScfID {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minScfIDLength .. bound.&maxScfIDLength)) +-- defined by network operator. +-- Indicates the gsmSCF identity. + +SCIBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE ( + bound.&minSCIBillingChargingLength .. bound.&maxSCIBillingChargingLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of type -- + CAMEL-SCIBillingChargingCharacteristics}) +-- Indicates AOC information to be sent to a Mobile Station +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +SCIGPRSBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE ( + bound.&minSCIBillingChargingLength .. bound.&maxSCIBillingChargingLength)) + (CONSTRAINED BY {-- shall be the result of the BER-encoded value of type - + CAMEL-SCIGPRSBillingChargingCharacteristics}) +-- Indicates AOC information to be sent to a Mobile Station +-- The violation of the UserDefinedConstraint shall be handled as an ASN.1 syntax error. + +SendingSideID ::= CHOICE {sendingSideID [0] LegType} +-- used to identify LegID in operations sent from gsmSCF to gsmSSF + +ServiceInteractionIndicatorsTwo ::= SEQUENCE { + forwardServiceInteractionInd [0] ForwardServiceInteractionInd OPTIONAL, + -- applicable to operations InitialDP, Connect and ContinueWithArgument. + backwardServiceInteractionInd [1] BackwardServiceInteractionInd OPTIONAL, + -- applicable to operations Connect and ContinueWithArgument. + bothwayThroughConnectionInd [2] BothwayThroughConnectionInd OPTIONAL, + -- applicable to ConnectToResource and EstablishTemporaryConnection + connectedNumberTreatmentInd [4] ConnectedNumberTreatmentInd OPTIONAL, + -- applicable to Connect and ContinueWithArgument + nonCUGCall [13] NULL OPTIONAL, + -- applicable to Connect and ContinueWithArgument + -- indicates that no parameters for CUG shall be used for the call (i.e. the call shall + -- be a non-CUG call). + -- If not present, it indicates one of three things: + -- a) continue with modified CUG information (when one or more of either CUG Interlock Code + -- and Outgoing Access Indicator are present), or + -- b) continue with original CUG information (when neither CUG Interlock Code or Outgoing + -- Access Indicator are present), i.e. no IN impact. + -- c) continue with the original non-CUG call. + holdTreatmentIndicator [50] OCTET STRING (SIZE(1)) OPTIONAL, + -- applicable to InitialDP, Connect and ContinueWithArgument + -- acceptHoldRequest 'xxxx xx01'B + -- rejectHoldRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call hold treatment + cwTreatmentIndicator [51] OCTET STRING (SIZE(1)) OPTIONAL, + -- applicable to InitialDP, Connect and ContinueWithArgument + -- acceptCw 'xxxx xx01'B + -- rejectCw 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call waiting treatment + ectTreatmentIndicator [52] OCTET STRING (SIZE(1)) OPTIONAL, + -- applicable to InitialDP, Connect and ContinueWithArgument + -- acceptEctRequest 'xxxx xx01'B + -- rejectEctRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect explicit call transfer treatment + ... + } + +SGSNCapabilities ::= OCTET STRING (SIZE (1)) + +-- Indicates the SGSN capabilities. The coding of the parameter is as follows: +-- Bit Value Meaning +-- 0 0 AoC not supported by SGSN +-- 1 AoC supported by SGSN +-- 1 - This bit is reserved in CAP V.3 +-- 2 - This bit is reserved in CAP V.3 +-- 3 - This bit is reserved in CAP V.3 +-- 4 - This bit is reserved in CAP V.3 +-- 5 - This bit is reserved in CAP V.3 +-- 6 - This bit is reserved in CAP V.3 +-- 7 - This bit is reserved in CAP V.3 + +SMS-AddressString ::= AddressString (SIZE (1 .. maxSMS-AddressStringLength)) +-- This data type is used to transport CallingPartyNumber for MT-SMS. +-- If this data type is used for MO-SMS, then the maximum number of digits shall be 16. +-- An SMS-AddressString may contain an alphanumeric character string. In this +-- case, a nature of address indicator '101'B is used, in accordance with +-- 3GPP TS 23.040 [6]. The address is coded in accordance with the GSM 7 bit +-- default alphabet definition and the SMS packing rules as specified in +-- 3GPP TS 23.038 [15] in this case. + +maxSMS-AddressStringLength INTEGER ::= 11 + +SMSEvent ::= SEQUENCE { + eventTypeSMS [0] EventTypeSMS, + monitorMode [1] MonitorMode + } + +TariffSwitchInterval ::= INTEGER (1 .. 86400) +-- TariffSwitchInterval is measured in 1 second units + +TimeAndTimezone {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( + bound.&minTimeAndTimezoneLength .. bound.&maxTimeAndTimezoneLength)) +-- Indicates the time and timezone, relative to GMT. This parameter is BCD encoded. +-- The year digit indicating millenium occupies bits 0-3 of the first octet, and the year +-- digit indicating century occupies bits 4-7 of the first octet. +-- The year digit indicating decade occupies bits 0-3 of the second octet, whilst the digit +-- indicating the year within the decade occupies bits 4-7 of the second octet. +-- The most significant month digit occupies bits 0-3 of the third octet, and the least +-- significant month digit occupies bits 4-7 of the third octet. +-- The most significant day digit occupies bits 0-3 of the fourth octet, and the least +-- significant day digit occupies bits 4-7 of the fourth octet. +-- The most significant hours digit occupies bits 0-3 of the fifth octet, and the least +-- significant hours digit occupies bits 4-7 of the fifth octet. +-- The most significant minutes digit occupies bits 0-3 of the sixth octet, and the least +-- significant minutes digit occupies bits 4-7 of the sixth octet. +-- The most significant seconds digit occupies bits 0-3 of the seventh octet, and the least +-- significant seconds digit occupies bits 4-7 of the seventh octet. +-- +-- The timezone information occupies the eighth octet. For the encoding of Timezone refer to +-- 3GPP TS 23.040 [6]. +-- +-- The BCD digits are packed and encoded as follows: +-- +-- Bit 7 6 5 4 | 3 2 1 0 +-- 2nd digit | 1st digit Octet 1 +-- 3rd digit | 4th digit Octet 2 +-- .. .. +-- nth digit | n-1th digit Octet m +-- +-- 0000 digit 0 +-- 0001 digit 1 +-- 0010 digit 2 +-- 0011 digit 3 +-- 0100 digit 4 +-- 0101 digit 5 +-- 0110 digit 6 +-- 0111 digit 7 +-- 1000 digit 8 +-- 1001 digit 9 +-- 1010 spare +-- 1011 spare +-- 1100 spare +-- 1101 spare +-- 1110 spare +-- 1101 spare +-- +-- where the leftmost bit of the digit is either bit 7 or bit 3 of the octet. + +TimeIfNoTariffSwitch ::= INTEGER(0..864000) +-- TimeIfNoTariffSwitch is measured in 100 millisecond intervals + +TimeIfTariffSwitch ::= SEQUENCE { + timeSinceTariffSwitch [0] INTEGER(0..864000), + tariffSwitchInterval [1] INTEGER(1..864000) OPTIONAL + } +-- timeSinceTariffSwitch and tariffSwitchInterval are measured in 100 millisecond intervals + +TimeInformation ::= CHOICE { + timeIfNoTariffSwitch [0] TimeIfNoTariffSwitch, + timeIfTariffSwitch [1] TimeIfTariffSwitch + } +-- Indicates call duration information + +TimerID ::= ENUMERATED { + tssf (0) + } +-- Indicates the timer to be reset. + +TimerValue ::= Integer4 +-- Indicates the timer value (in seconds). + +Tone ::= SEQUENCE { + toneID [0] Integer4, + duration [1] Integer4 OPTIONAL, +... + } +-- The duration specifies the length of the tone in seconds, value 0 indicates infinite duration. + +TPDataCodingScheme ::= OCTET STRING (SIZE (1)) +-- TP Data Coding Scheme according to 3GPP TS 23.040 [6] + +TPProtocolIdentifier ::= OCTET STRING (SIZE (1)) +-- indicates the protocol used above the SM-Transfer Layer as specified in 3GPP TS 23.040 [6]. + +TPShortMessageSpecificInfo ::= OCTET STRING (SIZE (1)) +-- contains the 1st octect of the applicable TPDU or the SMS-COMMAND TPDU as specified in +-- 3GPP TS 23.040 [6]. + +TPValidityPeriod ::= OCTET STRING (SIZE (1..7)) +-- indicates the length of the validity period or the absolute time of the validity +-- period termination as specified in 3GPP TS 23.040 [6]. +-- the length of ValidityPeriod is either 1 octet or 7 octets + +TransferredVolume ::= CHOICE { + volumeIfNoTariffSwitch [0] INTEGER (0..4294967295), + volumeIfTariffSwitch [1] SEQUENCE { + volumeSinceLastTariffSwitch [0] INTEGER (0..4294967295), + volumeTariffSwitchInterval [1] INTEGER (0..4294967295) OPTIONAL + } + } +-- volumeIfNoTariffSwitch, volumeSinceLastTariffSwitch and volumeTariffSwitchInterval +-- are measured in bytes. + +TransferredVolumeRollOver ::= CHOICE { + rO-VolumeIfNoTariffSwitch [0] INTEGER (0..255), + rO-VolumeIfTariffSwitch [1] SEQUENCE { + rO-VolumeSinceLastTariffSwitch [0] INTEGER (0..255) OPTIONAL, + rO-VolumeTariffSwitchInterval [1] INTEGER (0..255) OPTIONAL + } + } +-- rO-VolumeIfNoTariffSwitch, rO-VolumeSinceLastTariffSwitch and rO-VolumeTariffSwitchInterval +-- present counters indicating the number of parameter range rollovers. + +UnavailableNetworkResource ::= ENUMERATED { + unavailableResources (0), + componentFailure (1), + basicCallProcessingException (2), + resourceStatusFailure (3), + endUserFailure (4) + } +-- Indicates the network resource that failed. + +VariablePart {PARAMETERS-BOUND : bound} ::= CHOICE { + integer [0] Integer4, + number [1] Digits {bound}, -- Generic digits + time [2] OCTET STRING (SIZE(2)), -- HH: MM, BCD coded + date [3] OCTET STRING (SIZE(4)), -- YYYYMMDD, BCD coded + price [4] OCTET STRING (SIZE(4)) + } +-- Indicates the variable part of the message. Time is BCD encoded. +-- The most significant hours digit occupies bits 0-3 of the first octet, and the least +-- significant digit occupies bits 4-7 of the first octet. The most significant minutes digit +-- occupies bits 0-3 of the second octet, and the least significant digit occupies bits 4-7 +-- of the second octet. +-- +-- Date is BCD encoded. The year digit indicating millenium occupies bits 0-3 of the first octet, +-- and the year digit indicating century occupies bits 4-7 of the first octet. The year digit +-- indicating decade occupies bits 0-3 of the second octet, whilst the digit indicating the year +-- within the decade occupies bits 4-7 of the second octet. +-- The most significant month digit occupies bits 0-3 of the third octet, and the least +-- significant month digit occupies bits 4-7 of the third octet. The most significant day digit +-- occupies bits 0-3 of the fourth octet, and the least significant day digit occupies bits 4-7 +-- of the fourth octet. +-- Price is BCD encoded. The digit indicating hundreds of thousands occupies bits 0-3 of the +-- first octet, and the digit indicating tens of thousands occupies bits 4-7 of the first octet. +-- The digit indicating thousands occupies bits 0-3 of the second octet, whilst the digit +-- indicating hundreds occupies bits 4-7 of the second octet. The digit indicating tens occupies +-- bits 0-3 of the third octet, and the digit indicating 0 to 9 occupies bits 4-7 of the third +-- octet. The tenths digit occupies bits 0-3 of the fourth octet, and the hundredths digit +-- occupies bits 4-7 of the fourth octet. +-- +-- For the encoding of digits in an octet, refer to the timeAndtimezone parameter + +-- The Definition of range of constants follows +numOfInfoItems INTEGER ::= 4 + +END diff --git a/epan/dissectors/asn1/camel/CAP-errorcodes.asn b/epan/dissectors/asn1/camel/CAP-errorcodes.asn new file mode 100644 index 00000000..8db9639d --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-errorcodes.asn @@ -0,0 +1,36 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5.4 Error codes +CAP-errorcodes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-errorcodes(57) version8(7)} + +DEFINITIONS ::= BEGIN + +IMPORTS + + ros-InformationObjects +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + Code +FROM Remote-Operations-Information-Objects ros-InformationObjects + +; + +errcode-canceled Code ::= local: 0 +errcode-cancelFailed Code ::= local: 1 +errcode-eTCFailed Code ::= local: 3 +errcode-improperCallerResponse Code ::= local: 4 +errcode-missingCustomerRecord Code ::= local: 6 +errcode-missingParameter Code ::= local: 7 +errcode-parameterOutOfRange Code ::= local: 8 +errcode-requestedInfoError Code ::= local: 10 +errcode-systemFailure Code ::= local: 11 +errcode-taskRefused Code ::= local: 12 +errcode-unavailableResource Code ::= local: 13 +errcode-unexpectedComponentSequence Code ::= local: 14 +errcode-unexpectedDataValue Code ::= local: 15 +errcode-unexpectedParameter Code ::= local: 16 +errcode-unknownLegID Code ::= local: 17 +errcode-unknownPDPID Code ::= local: 50 +errcode-unknownCSID Code ::= local: 51 + +END diff --git a/epan/dissectors/asn1/camel/CAP-errortypes.asn b/epan/dissectors/asn1/camel/CAP-errortypes.asn new file mode 100644 index 00000000..7f4a60d1 --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-errortypes.asn @@ -0,0 +1,157 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5.2 Error types + +CAP-errortypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-errortypes(51) version8(7)} + +-- This module contains the type definitions for the CAP Error Types. +-- Where a parameter of type CHOICE is tagged with a specific tag value, the tag is automatically +-- replaced with an EXPLICIT tag of the same value. + +DEFINITIONS IMPLICIT TAGS ::= BEGIN + +IMPORTS + + ros-InformationObjects, + datatypes, + errorcodes +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + ERROR +FROM Remote-Operations-Information-Objects ros-InformationObjects + + InvokeID, + UnavailableNetworkResource +FROM CAP-datatypes datatypes + + errcode-canceled, + errcode-cancelFailed, + errcode-eTCFailed, + errcode-improperCallerResponse, + errcode-missingCustomerRecord, + errcode-missingParameter, + errcode-parameterOutOfRange, + errcode-requestedInfoError, + errcode-systemFailure, + errcode-taskRefused, + errcode-unavailableResource, + errcode-unexpectedComponentSequence, + errcode-unexpectedDataValue, + errcode-unexpectedParameter, + errcode-unknownLegID, + errcode-unknownCSID, + errcode-unknownPDPID +FROM CAP-errorcodes errorcodes + +; + +-- TYPE DEFINITION FOR CAP ERROR TYPES FOLLOWS + +canceled ERROR ::= { + CODE errcode-canceled + } +-- The operation has been canceled. + +cancelFailed ERROR ::= { + PARAMETER SEQUENCE { + problem [0] ENUMERATED { + unknownOperation (0), + tooLate (1), + operationNotCancellable (2) + }, + operation [1] InvokeID, + ... + } + CODE errcode-cancelFailed + } +-- The operation failed to be canceled. + +eTCFailed ERROR ::= { + CODE errcode-eTCFailed + } +-- The establish temporary connection failed. + +improperCallerResponse ERROR ::= { + CODE errcode-improperCallerResponse + } +-- The caller response was not as expected. + +missingCustomerRecord ERROR ::= { + CODE errcode-missingCustomerRecord + } +-- The Service Logic Program could not be found in the gsmSCF. + +missingParameter ERROR ::= { + CODE errcode-missingParameter + } +-- An expected optional parameter was not received. + +parameterOutOfRange ERROR ::= { + CODE errcode-parameterOutOfRange + } +-- The parameter was not as expected (e.g. missing or out of range). + +requestedInfoError ERROR ::= { + PARAMETER ENUMERATED { + unknownRequestedInfo (1), + requestedInfoNotAvailable (2) + } + CODE errcode-requestedInfoError + } +-- The requested information cannot be found. + +systemFailure ERROR ::= { + PARAMETER UnavailableNetworkResource + CODE errcode-systemFailure + } +-- The operation could not be completed due to a system failure at the serving physical entity. + +taskRefused ERROR ::= { + PARAMETER ENUMERATED { + generic (0), + unobtainable (1), + congestion (2) + } + CODE errcode-taskRefused + } +-- An entity normally capable of the task requested cannot or chooses not to perform the task at +-- this time. This includes error situations like congestion and unobtainable address as used in +-- e.g. the connect operation.) + +unavailableResource ERROR ::= { + CODE errcode-unavailableResource + } +-- A requested resource is not available at the serving entity. + +unexpectedComponentSequence ERROR ::= { + CODE errcode-unexpectedComponentSequence + } +-- An incorrect sequence of Components was received (e.g. 'DisconnectForwardConnection' +-- followed by 'PlayAnnouncement'). + +unexpectedDataValue ERROR ::= { + CODE errcode-unexpectedDataValue + } +-- The data value was not as expected (e.g. route number expected but billing number received) + +unexpectedParameter ERROR ::= { + CODE errcode-unexpectedParameter + } +-- A parameter received was not expected. + +unknownLegID ERROR ::= { + CODE errcode-unknownLegID + } +-- Leg not known to the gsmSSF. + +unknownCSID ERROR ::= { + CODE errcode-unknownCSID + } +-- Call Segment not known to the gsmSSF. + +unknownPDPID ERROR ::= { + CODE errcode-unknownPDPID + } +-- PDPID not known by the receiving entity. + +END diff --git a/epan/dissectors/asn1/camel/CAP-gprsSSF-gsmSCF-ops-args.asn b/epan/dissectors/asn1/camel/CAP-gprsSSF-gsmSCF-ops-args.asn new file mode 100644 index 00000000..219c5dca --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-gprsSSF-gsmSCF-ops-args.asn @@ -0,0 +1,409 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 8 GPRS Control +-- 8.1 gsmSCF/gprsSSF operations and arguments + +CAP-gprsSSF-gsmSCF-ops-args {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-GPRS-ops-args(107) version8(7)} +-- Module CAP-gprsSSF-gsmSCF-ops-args is updated to version8(7) for Rel-6. The OPERATION +-- definitions in this module are not modified, compared to Rel-5. + +DEFINITIONS IMPLICIT TAGS ::= BEGIN + +-- This module contains the operations and operation arguments used for the +-- gprsSSF ? gsmSCF interface, for the control of GPRS. + +-- The table in subclause 2.1 lists the specifications that contain the modules +-- that are used by CAP. + +IMPORTS + + errortypes, + datatypes, + operationcodes, + classes, + ros-InformationObjects +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + OPERATION +FROM Remote-Operations-Information-Objects ros-InformationObjects + + ServiceKey +FROM CS1-DataTypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +modules(0) cs1-datatypes(2) version1(0)} + + MiscCallInfo +FROM CS2-datatypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +cs2(20) modules(0) in-cs2-datatypes (0) version1(0)} + + IMEI, + IMSI, + GSN-Address, -- WS moved to common datatypes in rel 9.0.0 + RAIdentity, -- WS moved to common datatypes in rel 10.4.0 + ISDN-AddressString +FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CommonDataTypes(18) version12(12)} + + GPRSChargingID, + GPRSMSClass +-- GSN-Address, WS moved to common datatypes in rel 9.0.0 +-- RAIdentity WS moved to common datatypes in rel 10.4.0 +FROM MAP-MS-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-MS-DataTypes(11) version12(12)} + + PARAMETERS-BOUND +FROM CAP-classes classes + + opcode-activityTestGPRS, + opcode-applyChargingGPRS, + opcode-applyChargingReportGPRS, + opcode-cancelGPRS, + opcode-connectGPRS, + opcode-continueGPRS, + opcode-entityReleasedGPRS, + opcode-eventReportGPRS, + opcode-furnishChargingInformationGPRS, + opcode-initialDPGPRS, + opcode-releaseGPRS, + opcode-requestReportGPRSEvent, + opcode-resetTimerGPRS, + opcode-sendChargingInformationGPRS +FROM CAP-operationcodes operationcodes +-- The CAP Operation identifiers for CAP V3 for GPRS in Rel-6 are the same as the CAP Operation +-- identifiers for CAP V3 for GPRS in Rel-5. + + AccessPointName {}, + GPRSCause {}, + ChargingCharacteristics, + ChargingResult, + ChargingRollOver, + EndUserAddress, + Extensions, + FCIGPRSBillingChargingCharacteristics, + GPRSEventSpecificInformation {}, + GPRSEvent, + GPRSEventType, + LocationInformationGPRS, + PDPID, + PDPInitiationType, + QualityOfService, + SCIGPRSBillingChargingCharacteristics {}, + SGSNCapabilities, + TimeAndTimezone {}, + TimerID, + TimerValue +FROM CAP-datatypes datatypes +-- For Rel-6, the CAP-datatypes module is updated to version8(7); Object Identifier 'datatypes' +-- is also updated to version8(7). As a result, the present module uses Rel-6 data type definitions. + + missingCustomerRecord, + missingParameter, + parameterOutOfRange, + systemFailure, + taskRefused, + unexpectedComponentSequence, + unexpectedDataValue, + unexpectedParameter, + unknownPDPID +FROM CAP-errortypes errortypes +-- For Rel-6, the CAP-errortypes module is updated to version8(7); Object Identifier +-- 'errortypes' is also updated to version8(7). As a result, the present module uses Rel-6 +-- error type definitions. + +; + +activityTestGPRS OPERATION ::= { + RETURN RESULT TRUE + CODE opcode-activityTestGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Tatg +-- This operation is used to check for the continued existence of a relationship between the gsmSCF +-- and gprsSSF. If the relationship is still in existence, then the gprsSSF will respond. If no +-- reply is received, then the gsmSCF will assume that the gprsSSF has failed in some way +-- and will take the appropriate action. + +applyChargingGPRS OPERATION ::= { + ARGUMENT ApplyChargingGPRSArg + RETURN RESULT FALSE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + unexpectedDataValue | + parameterOutOfRange | + systemFailure | + taskRefused | + unknownPDPID} + CODE opcode-applyChargingGPRS} +-- Direction gsmSCF -> gprsSSF, Timer Tacg +-- This operation is used for interacting from the gsmSCF with the gprsSSF CSE-controlled +-- GPRS session or PDP Context charging mechanism. + +ApplyChargingGPRSArg ::= SEQUENCE { + chargingCharacteristics [0] ChargingCharacteristics, + tariffSwitchInterval [1] INTEGER (1..86400) OPTIONAL, + pDPID [2] PDPID OPTIONAL, + ... + } +-- tariffSwitchInterval is measured in 1 second units. + +applyChargingReportGPRS OPERATION ::= { + ARGUMENT ApplyChargingReportGPRSArg + RETURN RESULT TRUE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + unexpectedDataValue | + parameterOutOfRange | + systemFailure | + taskRefused | + unknownPDPID} + CODE opcode-applyChargingReportGPRS} +-- Direction gprsSSF -> gsmSCF,Timer Tacrg +-- The ApplyChargingReportGPRS operation provides the feedback from the gprsSCF to the gsmSCF +-- CSE-controlled GPRS session charging mechanism. + +ApplyChargingReportGPRSArg ::= SEQUENCE { + chargingResult [0] ChargingResult, + qualityOfService [1] QualityOfService OPTIONAL, + active [2] BOOLEAN DEFAULT TRUE, + pDPID [3] PDPID OPTIONAL, + ..., + chargingRollOver [4] ChargingRollOver OPTIONAL + } + +cancelGPRS OPERATION ::= { + ARGUMENT CancelGPRSArg + RETURN RESULT FALSE + ERRORS {missingParameter | + taskRefused | + unknownPDPID} + CODE opcode-cancelGPRS} +-- Direction: gsmSCF ?? gprsSSF, Timer: Tcag +-- This generic operation cancels all previous requests, +-- i.e. all EDPs and reports can be cancelled by the gsmSCF. + +CancelGPRSArg ::= SEQUENCE { + pDPID [0] PDPID OPTIONAL, + ... + } + +connectGPRS {PARAMETERS-BOUND: bound} OPERATION::= { + ARGUMENT ConnectGPRSArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + unknownPDPID | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-connectGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Tcong +-- This operation is used to modify the Access Point Name used when establishing a PDP Context. + +ConnectGPRSArg {PARAMETERS-BOUND: bound}::= SEQUENCE { + accessPointName [0] AccessPointName {bound}, + pdpID [1] PDPID OPTIONAL, + ... + } + +continueGPRS OPERATION ::= { + ARGUMENT ContinueGPRSArg + RETURN RESULT FALSE + ERRORS {missingParameter | + unknownPDPID | + unexpectedDataValue} + CODE opcode-continueGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Tcueg +-- This operation is used to request the gprsSSF to proceed with processing at the DP at +-- which it previously suspended processing to await gsmSCF instructions (i.e., proceed to +-- the next point in processing in the Attach/Detach state model or PDP Context +-- state model) substituting new data from the gsmSCF. + +ContinueGPRSArg ::= SEQUENCE { + pDPID [0] PDPID OPTIONAL, + ... +} + +entityReleasedGPRS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT EntityReleasedGPRSArg {bound} + RETURN RESULT TRUE + ERRORS {missingParameter | + taskRefused | + unknownPDPID} + CODE opcode-entityReleasedGPRS} +-- Direction: gprsSSF -> gsmSCF, Timer: Terg +-- This operation is used when the GPRS Session is detached or a PDP Context is diconnected and +-- the associated event is not armed for reporting. +-- The usage of this operation is independent of the functional entity that initiates the Detach +-- or PDP Context Disconnection and is independent of the cause of the Detach or PDP Context +-- Disconnect. + +EntityReleasedGPRSArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + gPRSCause [0] GPRSCause {bound}, + pDPID [1] PDPID OPTIONAL, + ... + } + +eventReportGPRS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT EventReportGPRSArg {bound} + RETURN RESULT TRUE + ERRORS {unknownPDPID} + CODE opcode-eventReportGPRS} +-- Direction gprsSSF -> gsmSCF,Timer Tereg +-- This operation is used to notify the gsmSCF of a GPRS session or PDP context related +-- events (e.g. PDP context activation) previously requested by the gsmSCF in a +-- RequestReportGPRSEventoperation. + +EventReportGPRSArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + gPRSEventType [0] GPRSEventType, + miscGPRSInfo [1] MiscCallInfo DEFAULT {messageType request}, + gPRSEventSpecificInformation [2] GPRSEventSpecificInformation {bound} OPTIONAL, + pDPID [3] PDPID OPTIONAL, + ... + } + +furnishChargingInformationGPRS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT FurnishChargingInformationGPRSArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownPDPID} + CODE opcode-furnishChargingInformationGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Tfcig +-- This operation is used to request the gprsSSF to generate, register a logical record or to +-- include some information in the default logical GPRS record. +-- The registered logical record is intended for off line charging of the GPRS session +-- or PDP Context. + +FurnishChargingInformationGPRSArg {PARAMETERS-BOUND : bound} ::= + FCIGPRSBillingChargingCharacteristics{bound} + +initialDPGPRS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT InitialDPGPRSArg {bound} + RETURN RESULT FALSE + ERRORS {missingCustomerRecord | + missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-initialDPGPRS} +-- Direction gprsSSF -> gsmSCF,Timer Tidpg +-- This operation is used by the gprsSSF when a trigger is detected at a DP in the GPRS state +-- machines to request instructions from the gsmSCF + +InitialDPGPRSArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + serviceKey [0] ServiceKey, + gPRSEventType [1] GPRSEventType, + mSISDN [2] ISDN-AddressString, + iMSI [3] IMSI, + timeAndTimeZone [4] TimeAndTimezone {bound}, + gPRSMSClass [5] GPRSMSClass OPTIONAL, + endUserAddress [6] EndUserAddress {bound} OPTIONAL, + qualityOfService [7] QualityOfService OPTIONAL, + accessPointName [8] AccessPointName{bound} OPTIONAL, + routeingAreaIdentity [9] RAIdentity OPTIONAL, + chargingID [10] GPRSChargingID OPTIONAL, + sGSNCapabilities [11] SGSNCapabilities OPTIONAL, + locationInformationGPRS [12] LocationInformationGPRS OPTIONAL, + pDPInitiationType [13] PDPInitiationType OPTIONAL, + extensions [14] Extensions {bound} OPTIONAL, + ..., + gGSNAddress [15] GSN-Address OPTIONAL, + secondaryPDP-context [16] NULL OPTIONAL, + iMEI [17] IMEI OPTIONAL + } +-- The RouteingAreaIdentity parameter is not used. +-- The receiving entity shall ignore RouteingAreaIdentity if received. +-- The RouteingAreaIdentity is conveyed in the LocationInformationGPRS parameter. +-- The CSGInformation is conveyed in the LocationInformationGPRS parameter. The encoding of the +-- parameter is as defined in 3GPP TS 29.002 [11]. + +releaseGPRS {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ReleaseGPRSArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + taskRefused | + unknownPDPID} + CODE opcode-releaseGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Trg +-- This operation is used to tear down an existing GPRS session or PDP Context at any phase. + +ReleaseGPRSArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + gprsCause [0] GPRSCause {bound}, + pDPID [1] PDPID OPTIONAL, + ... + } + +requestReportGPRSEvent {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT RequestReportGPRSEventArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownPDPID} + CODE opcode-requestReportGPRSEvent} +-- Direction: gsmSCF -> gprsSSF, Timer: Trrqe +-- This operation is used to request the gprsSSF to monitor for an event (e.g., GPRS events +-- such as attach or PDP Context activiation), then send a notification back to the +-- gsmSCF when the event is detected. + +RequestReportGPRSEventArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + gPRSEvent [0] SEQUENCE SIZE (1..bound.&numOfGPRSEvents) OF GPRSEvent, + pDPID [1] PDPID OPTIONAL, + ... + } +-- Indicates the GPRS related events for notification. + +resetTimerGPRS OPERATION ::= { + ARGUMENT ResetTimerGPRSArg + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownPDPID} + CODE opcode-resetTimerGPRS} +-- Direction: gsmSCF ? gprsSSF, Timer: Trtg +-- This operation is used to request the gprsSSF to refresh an application timer in the gprsSSF. + +ResetTimerGPRSArg ::= SEQUENCE { + timerID [0] TimerID DEFAULT tssf, + timervalue [1] TimerValue, + ... + } + +sendChargingInformationGPRS {PARAMETERS-BOUND: bound} OPERATION ::= { + ARGUMENT SendChargingInformationGPRSArg { bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedDataValue | + unknownPDPID} + CODE opcode-sendChargingInformationGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Tscig +-- This operation is used to instruct the gprsSSF on the charging information which the +-- gprsSSF shall send to the Mobile Station by means of GSM access signalling. + +SendChargingInformationGPRSArg {PARAMETERS-BOUND: bound}::= SEQUENCE { + sCIGPRSBillingChargingCharacteristics [0] SCIGPRSBillingChargingCharacteristics {bound}, + ... + } + +END diff --git a/epan/dissectors/asn1/camel/CAP-gsmSCF-gsmSRF-ops-args.asn b/epan/dissectors/asn1/camel/CAP-gsmSCF-gsmSRF-ops-args.asn new file mode 100644 index 00000000..92840c19 --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-gsmSCF-gsmSRF-ops-args.asn @@ -0,0 +1,147 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 6.2 gsmSCF/gsmSRF interface +-- 6.2.1 gsmSCF/gsmSRF operations and arguments +CAP-gsmSCF-gsmSRF-ops-args {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-gsmSCF-gsmSRF-ops-args(103) version8(7)} + +DEFINITIONS IMPLICIT TAGS ::= BEGIN + +-- This module contains the operations and operation arguments used for the +-- gsmSRF - gsmSCF interface, for the control of circuit switched calls. + +-- The table in subclause 2.1 lists the specifications that contain the modules +-- that are used by CAP. + +IMPORTS + + OPERATION +FROM Remote-Operations-Information-Objects ros-InformationObjects + + opcode-playAnnouncement, + opcode-promptAndCollectUserInformation, + opcode-specializedResourceReport +FROM CAP-operationcodes operationcodes +-- The CAP Operation identifiers for CAP V4 in Rel-6 are the same as the CAP Operation +-- identifiers for CAP V4 in Rel-5. + + CallSegmentID {}, + CollectedInfo, + Digits {}, + Extensions {}, + InformationToSend {} +FROM CAP-datatypes datatypes +-- For Rel-6, the CAP-datatypes module is updated to version8(7); Object Identifier 'datatypes' +-- is also updated to version8(7). As a result, the present module uses Rel-6 data type definitions. + + canceled, + improperCallerResponse, + missingParameter, + parameterOutOfRange, + systemFailure, + taskRefused, + unavailableResource, + unexpectedComponentSequence, + unexpectedDataValue, + unexpectedParameter, + unknownCSID +FROM CAP-errortypes errortypes +-- For Rel-6, the CAP-errortypes module is updated to version8(7); Object Identifier +-- 'errortypes' is also updated to version8(7). As a result, the present module uses Rel-6 +-- error type definitions. + + PARAMETERS-BOUND +FROM CAP-classes classes + + ros-InformationObjects, + operationcodes, + datatypes, + errortypes, + classes +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + +; + +playAnnouncement {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT PlayAnnouncementArg {bound} + RETURN RESULT FALSE + ERRORS {canceled | + missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unavailableResource | + unknownCSID} + LINKED {specializedResourceReport} + CODE opcode-playAnnouncement} +-- Direction: gsmSCF -> gsmSRF, Timer: Tpa +-- This operation is to be used after Establish Temporary Connection (assist procedure +-- with a second gsmSSF) or a Connect to Resource (no assist) operation. It may be used +-- for inband interaction with a mobile station, or for interaction with an ISDN user. +-- In the former case, the gsmSRF is usually collocated with the gsmSSF for standard +-- tones (congestion tone...) or standard announcements. +-- In the latter case, the gsmSRF is always collocated with the gsmSSF in the switch. +-- Any error is returned to the gsmSCF. The timer associated with this operation must +-- be of a sufficient duration to allow its linked operation to be correctly correlated. + +PlayAnnouncementArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + informationToSend [0] InformationToSend {bound}, + disconnectFromIPForbidden [1] BOOLEAN DEFAULT TRUE, + requestAnnouncementCompleteNotification [2] BOOLEAN DEFAULT TRUE, + extensions [3] Extensions {bound} OPTIONAL, + callSegmentID [5] CallSegmentID {bound} OPTIONAL, + requestAnnouncementStartedNotification [51] BOOLEAN DEFAULT FALSE, + ... + } + +promptAndCollectUserInformation {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT PromptAndCollectUserInformationArg {bound} + RESULT ReceivedInformationArg {bound} + ERRORS {canceled | + improperCallerResponse | + missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unavailableResource | + unexpectedDataValue | + unexpectedParameter | + unknownCSID} + LINKED {specializedResourceReport} + CODE opcode-promptAndCollectUserInformation} +-- Direction: gsmSCF -> gsmSRF, Timer: Tpc +-- This operation is used to interact with a user to collect information. + +PromptAndCollectUserInformationArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + collectedInfo [0] CollectedInfo, + disconnectFromIPForbidden [1] BOOLEAN DEFAULT TRUE, + informationToSend [2] InformationToSend {bound} OPTIONAL, + extensions [3] Extensions {bound} OPTIONAL, + callSegmentID [4] CallSegmentID {bound} OPTIONAL, + requestAnnouncementStartedNotification [51] BOOLEAN DEFAULT FALSE, + ... + } + +ReceivedInformationArg {PARAMETERS-BOUND : bound}::= CHOICE { + digitsResponse [0] Digits {bound} + } + +specializedResourceReport OPERATION ::= { + ARGUMENT SpecializedResourceReportArg + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-specializedResourceReport} +-- Direction: gsmSRF -> gsmSCF, Timer: Tsrr +-- This operation is used as the response to a PlayAnnouncement operation when the announcement +-- completed report indication is set. + +SpecializedResourceReportArg ::= CHOICE { + allAnnouncementsComplete [50] NULL, + firstAnnouncementStarted [51] NULL + } + +END diff --git a/epan/dissectors/asn1/camel/CAP-gsmSSF-gsmSCF-ops-args.asn b/epan/dissectors/asn1/camel/CAP-gsmSSF-gsmSCF-ops-args.asn new file mode 100644 index 00000000..36f847ed --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-gsmSSF-gsmSCF-ops-args.asn @@ -0,0 +1,905 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 6 Circuit Switched Call Control +-- 6.1 gsmSSF/CCF - gsmSCF Interface +-- 6.1.1 Operations and arguments +CAP-gsmSSF-gsmSCF-ops-args {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-gsmSSF-gsmSCF-ops-args(101) version8(7)} + +DEFINITIONS IMPLICIT TAGS ::= BEGIN + +-- This module contains the operations and operation arguments used for the +-- gsmSSF - gsmSCF interface, for the control of circuit switched calls. + +-- The table in subclause 2.1 lists the specifications that contain the modules +-- that are used by CAP. + +IMPORTS + + errortypes, + datatypes, + operationcodes, + classes, + tc-Messages, + ros-InformationObjects +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + OPERATION +FROM Remote-Operations-Information-Objects ros-InformationObjects + + CallingPartysCategory, + HighLayerCompatibility, + LegID, + RedirectionInformation, + ServiceKey +FROM CS1-DataTypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +modules(0) cs1-datatypes(2) version1(0)} + + MiscCallInfo +FROM CS2-datatypes {itu-t(0) identified-organization(4) etsi(0) inDomain(1) in-network(1) +cs2(20) modules(0) in-cs2-datatypes (0) version1(0)} + + Ext-BasicServiceCode, + IMEI, + IMSI, + ISDN-AddressString +FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CommonDataTypes(18) version12(12)} + + CUG-Index, + CUG-Interlock, + CUG-Info, + LocationInformation, + MS-Classmark2, + SubscriberState, + SupportedCamelPhases, + OfferedCamel4Functionalities +FROM MAP-MS-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-MS-DataTypes(11) version12(12)} + + CallReferenceNumber, + SuppressionOfAnnouncement, + UU-Data +FROM MAP-CH-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CH-DataTypes(13) version12(12)} + + PARAMETERS-BOUND +FROM CAP-classes classes + + opcode-activityTest, + opcode-applyCharging, + opcode-applyChargingReport, + opcode-assistRequestInstructions, + opcode-callGap, + opcode-callInformationReport, + opcode-callInformationRequest, + opcode-cancel, + opcode-collectInformation, + opcode-connect, + opcode-connectToResource, + opcode-continue, + opcode-continueWithArgument, + opcode-disconnectForwardConnection, + opcode-dFCWithArgument, + opcode-disconnectLeg, + opcode-entityReleased, + opcode-establishTemporaryConnection, + opcode-eventReportBCSM, + opcode-furnishChargingInformation, + opcode-initialDP, + opcode-initiateCallAttempt, + opcode-moveLeg, + opcode-playTone, + opcode-releaseCall, + opcode-requestReportBCSMEvent, + opcode-resetTimer, + opcode-sendChargingInformation, + opcode-splitLeg +FROM CAP-operationcodes operationcodes +-- The CAP Operation identifiers for CAP V4 in Rel-6 are the same as the CAP Operation +-- identifiers for CAP V4 in Rel-5. + + AChBillingChargingCharacteristics {}, + AdditionalCallingPartyNumber {}, + AlertingPattern, + AChChargingAddress {}, + AssistingSSPIPRoutingAddress {}, + BCSMEvent {}, + BCSM-Failure, + BearerCapability {}, + Burst, + CalledPartyNumber {}, + CalledPartyBCDNumber {}, + CallingPartyNumber {}, + CallResult {}, + CallSegmentID {}, + CallSegmentToCancel {}, + CallSegmentFailure {}, + Carrier, + Cause {}, + CGEncountered, + ChargeNumber {}, + ControlType, + CorrelationID {}, + DestinationRoutingAddress {}, + EventSpecificInformationBCSM {}, + EventTypeBCSM, + Extensions {}, + FCIBillingChargingCharacteristics {}, + GapCriteria {}, + GapIndicators, + GapTreatment, + GenericNumbers {}, + InvokeID, + IPRoutingAddress {}, + IPSSPCapabilities {}, + leg1, + leg2, + LegOrCallSegment {}, + LocationNumber {}, + LowLayerCompatibility {}, + MonitorMode, + NAOliInfo, + OCSIApplicable, + OriginalCalledPartyID {}, + ReceivingSideID, + RedirectingPartyID {}, + RequestedInformationList {}, + RequestedInformationTypeList, + ScfID {}, + SCIBillingChargingCharacteristics {}, + SendingSideID, + ServiceInteractionIndicatorsTwo, + TimeAndTimezone {}, + TimerID, + TimerValue +FROM CAP-datatypes datatypes +-- For Rel-6, the CAP-datatypes module is updated to version8(7); Object Identifier 'datatypes' +-- is also updated to version8(7). As a result, the present module uses Rel-6 data type definitions. + + cancelFailed, + eTCFailed, + missingCustomerRecord, + missingParameter, + parameterOutOfRange, + requestedInfoError, + systemFailure, + taskRefused, + unexpectedComponentSequence, + unexpectedDataValue, + unexpectedParameter, + unknownLegID, + unknownCSID +FROM CAP-errortypes errortypes +-- For Rel-6, the CAP-errortypes module is updated to version8(7); Object Identifier +-- 'errortypes' is also updated to version8(7). As a result, the present module uses Rel-6 +-- error type definitions. + +; + +activityTest OPERATION ::= { + RETURN RESULT TRUE + CODE opcode-activityTest} +-- Direction: gsmSCF -> gsmSSF, Timer: Tat +-- This operation is used to check for the continued existence of a relationship +-- between the gsmSCF and gsmSSF, assist gsmSSF or gsmSRF. If the relationship is +-- still in existence, then the gsmSSF will respond. If no reply is received, +-- then the gsmSCF will assume that the gsmSSF, assist gsmSSF or gsmSRF has failed +-- in some way. + +applyCharging {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ApplyChargingArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + unexpectedDataValue | + parameterOutOfRange | + systemFailure | + taskRefused | + unknownLegID | + unknownCSID} + CODE opcode-applyCharging} +-- Direction: gsmSCF -> gsmSSF, Timer: Tac +-- This operation is used for interacting from the gsmSCF with the gsmSSF charging mechanisms. +-- The ApplyChargingReport operation provides the feedback from the gsmSSF to the gsmSCF. + +ApplyChargingArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + aChBillingChargingCharacteristics [0] AChBillingChargingCharacteristics {bound}, + partyToCharge [2] SendingSideID DEFAULT sendingSideID : leg1, + extensions [3] Extensions {bound} OPTIONAL, + aChChargingAddress [50] AChChargingAddress {bound} + DEFAULT legID:sendingSideID:leg1, + ..., + -- WS modification Frensh National standard addition + -- https://gitlab.com/wireshark/wireshark/-/issues/7656 + iTXcharging [64] BOOLEAN OPTIONAL + -- End WS + } + +-- The partyToCharge parameter indicates the party in the call to which the ApplyCharging operation +-- shall be applied. + +applyChargingReport {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ApplyChargingReportArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + unexpectedDataValue | + unknownCSID | + unknownLegID | + parameterOutOfRange | + systemFailure | + taskRefused} + CODE opcode-applyChargingReport} +-- Direction: gsmSSF -> gsmSCF, Timer: Tacr +-- This operation is used by the gsmSSF to report to the gsmSCF the occurrence of a +-- specific charging event as requested by the gsmSCF using the ApplyCharging operation. + +ApplyChargingReportArg {PARAMETERS-BOUND : bound} ::= CallResult {bound} + +assistRequestInstructions {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT AssistRequestInstructionsArg {bound} + RETURN RESULT FALSE + ERRORS {missingCustomerRecord | + missingParameter | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-assistRequestInstructions} +-- Direction: gsmSSF -> gsmSCF or gsmSRF -> gsmSCF, Timer: Tari +-- This operation is used when there is an assist procedure and may be +-- sent by the gsmSSF or gsmSRF to the gsmSCF. This operation is sent by the +-- assisting gsmSSF to gsmSCF, when the initiating gsmSSF has set up a connection to +-- the gsmSRF or to the assisting gsmSSF as a result of receiving an +-- EstablishTemporaryConnection from +-- the gsmSCF. +-- Refer to clause 11 for a description of the procedures associated with this operation. + +AssistRequestInstructionsArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + correlationID [0] CorrelationID {bound}, + iPSSPCapabilities [2] IPSSPCapabilities {bound}, + extensions [3] Extensions {bound} OPTIONAL, + ... + } +-- OPTIONAL denotes network operator specific use. The value of the correlationID may be the +-- Called Party Number supplied by the initiating gsmSSF. + +callGap {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT CallGapArg {bound} + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-callGap} +-- Direction: gsmSCF -> gsmSSF, Timer: Tcg +-- This operation is used to request the gsmSSF to reduce the rate at which specific service +-- requests are sent to the gsmSCF. + +CallGapArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + gapCriteria [0] GapCriteria {bound}, + gapIndicators [1] GapIndicators, + controlType [2] ControlType OPTIONAL, + gapTreatment [3] GapTreatment {bound} OPTIONAL, + extensions [4] Extensions {bound} OPTIONAL, + ... + } +-- OPTIONAL denotes network operator optional. If gapTreatment is not present, then the gsmSSF will +-- use a default treatment depending on network operator implementation. + +callInformationReport {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT CallInformationReportArg {bound} + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-callInformationReport} +-- Direction: gsmSSF -> gsmSCF, Timer: Tcirp +-- This operation is used to send specific call information for a single call party to the gsmSCF as +-- requested by the gsmSCF in a previous CallInformationRequest. + +CallInformationReportArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + requestedInformationList [0] RequestedInformationList {bound}, + extensions [2] Extensions {bound} OPTIONAL, + legID [3] ReceivingSideID DEFAULT receivingSideID:leg2, + ... + } + +callInformationRequest {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT CallInformationRequestArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + requestedInfoError | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID} + CODE opcode-callInformationRequest} +-- Direction: gsmSCF -> gsmSSF, Timer: Tcirq +-- This operation is used to request the gsmSSF to record specific information about a single +-- call party and report it to the gsmSCF (with a CallInformationReport operation). + +CallInformationRequestArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + requestedInformationTypeList [0] RequestedInformationTypeList, + extensions [2] Extensions {bound} OPTIONAL, + legID [3] SendingSideID DEFAULT sendingSideID:leg2, + ... + } +-- OPTIONAL denotes network operator optional. + +cancel {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT CancelArg {bound} + RETURN RESULT FALSE + ERRORS {cancelFailed | + missingParameter | + taskRefused | + unknownCSID} + CODE opcode-cancel} +-- Direction: gsmSCF -> gsmSSF, or gsmSCF -> gsmSRF, Timer: Tcan +-- This operation cancels the correlated previous operation or all previous requests. The following +-- operations can be canceled: PlayAnnouncement, PromptAndCollectUserInformation. + +CancelArg {PARAMETERS-BOUND : bound} ::= CHOICE { + invokeID [0] InvokeID, + allRequests [1] NULL, + callSegmentToCancel [2] CallSegmentToCancel {bound} + } +-- The InvokeID has the same value as that which was used for the operation to be cancelled. + +collectInformation {PARAMETERS-BOUND : bound} OPERATION::= { + ARGUMENT CollectInformationArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + SystemFailure | + TaskRefused | + UnexpectedComponentSequence | + UnexpectedDataValue | + UnexpectedParameter} + CODE opcode-collectInformation} +-- Direction: gsmSCF-> gsmSSF, Timer: Tci +-- This operation is used to request the gsmSSF to perform the call +-- processing actions to prompt a calling party for additional digits. + +CollectInformationArg {PARAMETERS-BOUND : bound} ::= SEQUENCE{ + extensions [0] Extensions {bound} OPTIONAL, + ... +} + +connect {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ConnectArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID} + CODE opcode-connect} +-- Direction: gsmSCF-> gsmSSF, Timer: Tcon +-- This operation is used to request the gsmSSF to perform the call processing actions +-- to route or forward a call to a specified destination. + +ConnectArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + destinationRoutingAddress [0] DestinationRoutingAddress {bound}, + alertingPattern [1] AlertingPattern OPTIONAL, + originalCalledPartyID [6] OriginalCalledPartyID {bound} OPTIONAL, + extensions [10] Extensions {bound} OPTIONAL, + carrier [11] Carrier {bound} OPTIONAL, + callingPartysCategory [28] CallingPartysCategory OPTIONAL, + redirectingPartyID [29] RedirectingPartyID {bound} OPTIONAL, + redirectionInformation [30] RedirectionInformation OPTIONAL, + genericNumbers [14] GenericNumbers {bound} OPTIONAL, + serviceInteractionIndicatorsTwo [15] ServiceInteractionIndicatorsTwo OPTIONAL, + chargeNumber [19] ChargeNumber {bound} OPTIONAL, + legToBeConnected [21] LegID OPTIONAL, + cug-Interlock [31] CUG-Interlock OPTIONAL, + cug-OutgoingAccess [32] NULL OPTIONAL, + suppressionOfAnnouncement [55] SuppressionOfAnnouncement OPTIONAL, + oCSIApplicable [56] OCSIApplicable OPTIONAL, + naOliInfo [57] NAOliInfo OPTIONAL, + bor-InterrogationRequested [58] NULL OPTIONAL, + ... , + suppress-N-CSI [59] NULL OPTIONAL + } +-- na-Info is included at the discretion of the gsmSCF operator. + +connectToResource {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ConnectToResourceArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownCSID} + CODE opcode-connectToResource} +-- Direction: gsmSCF -> gsmSSF, Timer: Tctr +-- This operation is used to connect a call segment from the gsmSSF to the +-- gsmSRF. + +ConnectToResourceArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + resourceAddress CHOICE { + ipRoutingAddress [0] IPRoutingAddress {bound}, + none [3] NULL + }, + extensions [4] Extensions {bound} OPTIONAL, + serviceInteractionIndicatorsTwo [7] ServiceInteractionIndicatorsTwo OPTIONAL, + callSegmentID [50] CallSegmentID {bound} OPTIONAL, + ... + } + +continue OPERATION ::= { + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-continue} +-- Direction: gsmSCF -> gsmSSF, Timer: Tcue +-- This operation is used to request the gsmSSF to proceed with call processing at the +-- DP at which it previously suspended call processing to await gsmSCF instructions +-- (i.e. proceed to the next point in call in the BCSM). The gsmSSF continues call +-- processing without substituting new data from gsmSCF. + +continueWithArgument {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ContinueWithArgumentArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID | + unknownCSID} + CODE opcode-continueWithArgument} +-- Direction: gsmSCF -> gsmSSF, Timer: Tcwa +-- This operation is used to request the gsmSSF to proceed with call processing at the +-- DP at which it previously suspended call processing to await gsmSCF instructions +-- (i.e. proceed to the next point in call in the BCSM). The gsmSSF continues call +-- processing with the modified call setup information as received from the gsmSCF. + +ContinueWithArgumentArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + alertingPattern [1] AlertingPattern OPTIONAL, + extensions [6] Extensions {bound} OPTIONAL, + serviceInteractionIndicatorsTwo [7] ServiceInteractionIndicatorsTwo OPTIONAL, + callingPartysCategory [12] CallingPartysCategory OPTIONAL, + genericNumbers [16] GenericNumbers {bound} OPTIONAL, + cug-Interlock [17] CUG-Interlock OPTIONAL, + cug-OutgoingAccess [18] NULL OPTIONAL, + chargeNumber [50] ChargeNumber {bound} OPTIONAL, + carrier [52] Carrier {bound} OPTIONAL, + suppressionOfAnnouncement [55] SuppressionOfAnnouncement OPTIONAL, + naOliInfo [56] NAOliInfo OPTIONAL, + bor-InterrogationRequested [57] NULL OPTIONAL, + suppress-O-CSI [58] NULL OPTIONAL, + continueWithArgumentArgExtension [59] ContinueWithArgumentArgExtension {bound} OPTIONAL, + ... + } + +ContinueWithArgumentArgExtension {PARAMETERS-BOUND : bound} ::= SEQUENCE { + suppress-D-CSI [0] NULL OPTIONAL, + suppress-N-CSI [1] NULL OPTIONAL, + suppressOutgoingCallBarring [2] NULL OPTIONAL, + legOrCallSegment [3] LegOrCallSegment {bound} OPTIONAL, + ... + } + +disconnectForwardConnection OPERATION ::= { + RETURN RESULT FALSE + ERRORS {systemFailure | + taskRefused | + unexpectedComponentSequence} + CODE opcode-disconnectForwardConnection} +-- Direction: gsmSCF -> gsmSSF, Timer: Tdfc +-- This operation is used to disconnect a forward temporary connection or a connection to a +-- resource. Refer to clause 11 for a description of the procedures associated with this operation. + +disconnectForwardConnectionWithArgument {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT DisconnectForwardConnectionWithArgumentArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownCSID} + CODE opcode-dFCWithArgument} +-- Direction gsmSCF -> gsmSSF, Timer Tdfcwa +-- This operation is used to disconnect a forward temporary connection or a connection to a +-- resource. Refer to clause 11 for a description of the procedures associated with this operation. + +DisconnectForwardConnectionWithArgumentArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + callSegmentID [1] CallSegmentID {bound} OPTIONAL, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +disconnectLeg {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT DisconnectLegArg {bound} + RETURN RESULT TRUE + ERRORS {missingParameter | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID} + CODE opcode-disconnectLeg} +-- Direction: gsmSCF -> gsmSSF, Timer Tdl +-- This operation is used by the gsmSCF to release a specific leg associated with the call and +-- retain any other legs not specified in the DisconnectLeg. Refer to clause 11 for a description +-- of the procedures associated with this operation. + +DisconnectLegArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + legToBeReleased [0] LegID, + releaseCause [1] Cause {bound} OPTIONAL, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +entityReleased {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT EntityReleasedArg {bound} + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-entityReleased} +-- Direction: gsmSSF -> gsmSCF, Timer: Ter +-- This operation is used by the gsmSSF to inform the gsmSCF of an error or exception + +EntityReleasedArg {PARAMETERS-BOUND : bound} ::= CHOICE { + callSegmentFailure [0] CallSegmentFailure {bound}, + bCSM-Failure [1] BCSM-Failure {bound} + } + +establishTemporaryConnection {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT EstablishTemporaryConnectionArg {bound} + RETURN RESULT FALSE + ERRORS {eTCFailed | + missingParameter | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownCSID} + CODE opcode-establishTemporaryConnection} +-- Direction: gsmSCF -> gsmSSF, Timer: Tetc +-- This operation is used to create a connection to a resource for a limited period +-- of time (e.g. to play an announcement, to collect user information); it implies +-- the use of the assist procedure. Refer to clause 11 for a description of the +-- procedures associated with this operation. + +EstablishTemporaryConnectionArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + assistingSSPIPRoutingAddress [0] AssistingSSPIPRoutingAddress {bound}, + correlationID [1] CorrelationID {bound} OPTIONAL, + scfID [3] ScfID {bound} OPTIONAL, + extensions [4] Extensions {bound} OPTIONAL, + carrier [5] Carrier {bound} OPTIONAL, + serviceInteractionIndicatorsTwo [6] ServiceInteractionIndicatorsTwo OPTIONAL, + callSegmentID [7] CallSegmentID {bound} OPTIONAL, + naOliInfo [50] NAOliInfo OPTIONAL, + chargeNumber [51] ChargeNumber {bound} OPTIONAL, + ..., + originalCalledPartyID [52] OriginalCalledPartyID {bound} OPTIONAL, + callingPartyNumber [53] CallingPartyNumber {bound} OPTIONAL + } + +eventReportBCSM {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT EventReportBCSMArg {bound} + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-eventReportBCSM} +-- Direction: gsmSSF -> gsmSCF, Timer: Terb +-- This operation is used to notify the gsmSCF of a call-related event (e.g. BCSM +-- events such as O_Busy or O_No_Answer) previously requested by the gsmSCF in a +-- RequestReportBCSMEvent operation. + +EventReportBCSMArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + eventTypeBCSM [0] EventTypeBCSM, + eventSpecificInformationBCSM [2] EventSpecificInformationBCSM {bound} OPTIONAL, + legID [3] ReceivingSideID OPTIONAL, + miscCallInfo [4] MiscCallInfo DEFAULT {messageType request}, + extensions [5] Extensions {bound} OPTIONAL, + ... + } + +furnishChargingInformation {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT FurnishChargingInformationArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID} + CODE opcode-furnishChargingInformation} +-- Direction: gsmSCF -> gsmSSF, Timer: Tfci +-- This operation is used to request the gsmSSF to generate, register a call record +-- or to include some information in the default call record. +-- The registered call record is intended for off line charging of the call. + +FurnishChargingInformationArg {PARAMETERS-BOUND : bound} ::= + FCIBillingChargingCharacteristics{bound} + +initialDP {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT InitialDPArg {bound} + RETURN RESULT FALSE + ERRORS {missingCustomerRecord | + missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter} + CODE opcode-initialDP} +-- Direction: gsmSSF -> gsmSCF, Timer: Tidp +-- This operation is used after a TDP to indicate request for service. + +InitialDPArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + serviceKey [0] ServiceKey , + calledPartyNumber [2] CalledPartyNumber {bound} OPTIONAL, + callingPartyNumber [3] CallingPartyNumber {bound} OPTIONAL, + callingPartysCategory [5] CallingPartysCategory OPTIONAL, + cGEncountered [7] CGEncountered OPTIONAL, + iPSSPCapabilities [8] IPSSPCapabilities {bound} OPTIONAL, + locationNumber [10] LocationNumber {bound} OPTIONAL, + originalCalledPartyID [12] OriginalCalledPartyID {bound} OPTIONAL, + extensions [15] Extensions {bound} OPTIONAL, + highLayerCompatibility [23] HighLayerCompatibility OPTIONAL, + additionalCallingPartyNumber [25] AdditionalCallingPartyNumber {bound} OPTIONAL, + bearerCapability [27] BearerCapability {bound} OPTIONAL, + eventTypeBCSM [28] EventTypeBCSM OPTIONAL, + redirectingPartyID [29] RedirectingPartyID {bound} OPTIONAL, + redirectionInformation [30] RedirectionInformation OPTIONAL, + cause [17] Cause {bound} OPTIONAL, + serviceInteractionIndicatorsTwo [32] ServiceInteractionIndicatorsTwo OPTIONAL, + carrier [37] Carrier {bound} OPTIONAL, + cug-Index [45] CUG-Index OPTIONAL, + cug-Interlock [46] CUG-Interlock OPTIONAL, + cug-OutgoingAccess [47] NULL OPTIONAL, + iMSI [50] IMSI OPTIONAL, + subscriberState [51] SubscriberState OPTIONAL, + locationInformation [52] LocationInformation OPTIONAL, + ext-basicServiceCode [53] Ext-BasicServiceCode OPTIONAL, + callReferenceNumber [54] CallReferenceNumber OPTIONAL, + mscAddress [55] ISDN-AddressString OPTIONAL, + calledPartyBCDNumber [56] CalledPartyBCDNumber {bound} OPTIONAL, + timeAndTimezone [57] TimeAndTimezone {bound} OPTIONAL, + callForwardingSS-Pending [58] NULL OPTIONAL, + initialDPArgExtension [59] InitialDPArgExtension {bound} OPTIONAL, + ... + } + +InitialDPArgExtension {PARAMETERS-BOUND : bound} ::= SEQUENCE { + gmscAddress [0] ISDN-AddressString OPTIONAL, + forwardingDestinationNumber [1] CalledPartyNumber {bound} OPTIONAL, + ms-Classmark2 [2] MS-Classmark2 OPTIONAL, + iMEI [3] IMEI OPTIONAL, + supportedCamelPhases [4] SupportedCamelPhases OPTIONAL, + offeredCamel4Functionalities [5] OfferedCamel4Functionalities OPTIONAL, + bearerCapability2 [6] BearerCapability {bound} OPTIONAL, + ext-basicServiceCode2 [7] Ext-BasicServiceCode OPTIONAL, + highLayerCompatibility2 [8] HighLayerCompatibility OPTIONAL, + lowLayerCompatibility [9] LowLayerCompatibility {bound} OPTIONAL, + lowLayerCompatibility2 [10] LowLayerCompatibility {bound} OPTIONAL, + ..., + enhancedDialledServicesAllowed [11] NULL OPTIONAL, + uu-Data [12] UU-Data OPTIONAL, + collectInformationAllowed [13] NULL OPTIONAL, + releaseCallArgExtensionAllowed [14] NULL OPTIONAL +} +-- If iPSSPCapabilities is not present then this denotes that a colocated gsmSRF is not +-- supported by the gsmSSF. If present, then the gsmSSF supports a colocated gsmSRF capable +-- of playing announcements via elementaryMessageIDs and variableMessages, the playing of +-- tones and the collection of DTMF digits. Other supported capabilities are explicitly +-- detailed in the IPSSPCapabilities parameter itself. +-- Carrier is included at the discretion of the gsmSSF operator. +-- The UserCSGInformation is conveyed in the LocationInformation. The encoding of the parameter is +-- as defined in 3GPP TS 29.002 [11]. + +initiateCallAttempt {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT InitiateCallAttemptArg {bound} + RESULT InitiateCallAttemptRes {bound} + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter + } + CODE opcode-initiateCallAttempt} +-- Direction: gsmSCF -> gsmSSF, Timer Tica +-- This operation is used to instruct the gsmSSF to create a new call to a call party using the +-- address information provided by the gsmSCF. + +InitiateCallAttemptArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + destinationRoutingAddress [0] DestinationRoutingAddress {bound}, + extensions [4] Extensions {bound} OPTIONAL, + legToBeCreated [5] LegID OPTIONAL, + newCallSegment [6] CallSegmentID {bound} OPTIONAL, + callingPartyNumber [30] CallingPartyNumber {bound} OPTIONAL, + callReferenceNumber [51] CallReferenceNumber OPTIONAL, + gsmSCFAddress [52] ISDN-AddressString OPTIONAL, + suppress-T-CSI [53] NULL OPTIONAL, + ... + } + +InitiateCallAttemptRes {PARAMETERS-BOUND : bound} ::= SEQUENCE { + supportedCamelPhases [0] SupportedCamelPhases OPTIONAL, + offeredCamel4Functionalities [1] OfferedCamel4Functionalities OPTIONAL, + extensions [2] Extensions {bound} OPTIONAL, + ..., + releaseCallArgExtensionAllowed [3] NULL OPTIONAL + } + +moveLeg {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT MoveLegArg {bound} + RETURN RESULT TRUE + ERRORS {missingParameter | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID} + CODE opcode-moveLeg} +-- Direction: gsmSCF -> gsmSSF, Timer: Tml +-- This operation is used by the gsmSCF to move a leg from one call segment to another call segment +-- within the same call segment association. + +MoveLegArg {PARAMETERS-BOUND : bound} ::= SEQUENCE{ + legIDToMove [0] LegID, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +playTone {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT PlayToneArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID | + unknownCSID} + CODE opcode-playTone} +-- Direction: gsmSCF -> gsmSSF, Timer: Tpt +-- This operation is used to play tones to either a leg or a call segment using +-- the MSC's tone generator. + +PlayToneArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + legOrCallSegment [0] LegOrCallSegment {bound}, + bursts [1] Burst, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +releaseCall {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ReleaseCallArg {bound} + RETURN RESULT FALSE + ALWAYS RESPONDS FALSE + CODE opcode-releaseCall} +-- Direction: gsmSCF ->?gsmSSF, Timer: Trc +-- This operation is used to tear down an existing call at any phase of the call for all parties +-- involved in the call. + +ReleaseCallArg {PARAMETERS-BOUND : bound} ::= CHOICE { + allCallSegments AllCallSegments, + allCallSegmentsWithExtension [2] AllCallSegmentsWithExtension + } + +AllCallSegments ::= Cause {bound} +-- A default value of decimal 31 (normal unspecified) shall be given. + +AllCallSegmentsWithExtension ::= SEQUENCE { + allCallSegments [0] AllCallSegments, + extensions [1] Extensions {bound} OPTIONAL + } + +requestReportBCSMEvent {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT RequestReportBCSMEventArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownLegID} + CODE opcode-requestReportBCSMEvent} +-- Direction: gsmSCF -> gsmSSF, Timer: Trrb +-- This operation is used to request the gsmSSF to monitor for a call-related event +-- (e.g. BCSM events such as O_Busy or O_No_Answer) and to send a notification +-- to the gsmSCF when the event is detected. +-- +-- NOTE: +-- Every EDP must be explicitly armed by the gsmSCF via a RequestReportBCSMEvent operation. +-- No implicit arming of EDPs at the gsmSSF after reception of any operation (different +-- from RequestReportBCSMEvent) from the gsmSCF is allowed. + +RequestReportBCSMEventArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + bcsmEvents [0] SEQUENCE SIZE(1..bound.&numOfBCSMEvents) OF + BCSMEvent {bound}, + extensions [2] Extensions {bound} OPTIONAL, + ... + } +-- Indicates the BCSM related events for notification. + +resetTimer {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT ResetTimerArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + parameterOutOfRange | + taskRefused | + unexpectedComponentSequence | + unexpectedDataValue | + unexpectedParameter | + unknownCSID} + CODE opcode-resetTimer} +-- Direction: gsmSCF -> gsmSSF, Timer: Trt +-- This operation is used to request the gsmSSF to refresh an application timer in the gsmSSF. + +ResetTimerArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + timerID [0] TimerID DEFAULT tssf, + timervalue [1] TimerValue, + extensions [2] Extensions {bound} OPTIONAL, + callSegmentID [3] CallSegmentID {bound} OPTIONAL, + ... + } + +sendChargingInformation {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT SendChargingInformationArg {bound} + RETURN RESULT FALSE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + parameterOutOfRange | + systemFailure | + taskRefused | + unexpectedDataValue | + unknownLegID} + CODE opcode-sendChargingInformation} +-- Direction: gsmSCF -> gsmSSF, Timer: Tsci +-- This operation is used to instruct the gsmSSF on the charging information to send by the gsmSSF. +-- The charging information can either be sent back by means of signalling or internal +-- if the gsmSSF is located in the local exchange. In the local exchange +-- this information may be used to update the charge meter or to create a standard call record. + +SendChargingInformationArg {PARAMETERS-BOUND : bound}::= SEQUENCE { + sCIBillingChargingCharacteristics [0] SCIBillingChargingCharacteristics {bound}, + partyToCharge [1] SendingSideID, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +splitLeg {PARAMETERS-BOUND : bound} OPERATION ::= { + ARGUMENT SplitLegArg {bound} + RETURN RESULT TRUE + ERRORS {missingParameter | + unexpectedComponentSequence | + unexpectedParameter | + unexpectedDataValue | + systemFailure | + taskRefused | + unknownLegID} + CODE opcode-splitLeg} +-- Direction: gsmSCF -> gsmSSF, Timer Tsl +-- This operation is used by the gsmSCF to separate a leg from its source call segment and +-- place it in a new call segment within the same call segment association. + +SplitLegArg {PARAMETERS-BOUND : bound} ::= SEQUENCE { + legToBeSplit [0] LegID, + newCallSegment [1] CallSegmentID {bound} OPTIONAL, + extensions [2] Extensions {bound} OPTIONAL, + ... + } + +END diff --git a/epan/dissectors/asn1/camel/CAP-object-identifiers.asn b/epan/dissectors/asn1/camel/CAP-object-identifiers.asn new file mode 100644 index 00000000..40a3bf9f --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-object-identifiers.asn @@ -0,0 +1,242 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5.6 Object IDentifiers (IDs) +CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + +DEFINITIONS ::= BEGIN + +-- This module assigns object identifiers for Modules, Packages, Contracts and ACs +-- used by CAP + +-- For Modules from TC, ROS, +tc-Messages OBJECT IDENTIFIER ::= + {itu-t recommendation q 773 modules(2) messages(1) version3(3)} + +tc-NotationExtensions OBJECT IDENTIFIER ::= + {itu-t recommendation q 775 modules(2) notation-extension (4) version1(1)} + +ros-InformationObjects OBJECT IDENTIFIER ::= + {joint-iso-itu-t remote-operations(4) informationObjects(5) version1(0)} + + +-- For CAP Modules +datatypes OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-datatypes(52) version8(7)} + +errortypes OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-errortypes(51) version8(7)} + +operationcodes OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-operationcodes(53) version8(7)} + +errorcodes OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-errorcodes(57) version8(7)} + +classes OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-classes(54) version8(7)} + + +gsmSSF-gsmSCF-Operations OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-gsmSSF-gsmSCF-ops-args(101) version8(7)} +-- The Object Identifier 'gsmSSF-gsmSCF-Operations' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Operation definitions related to call control. + +gsmSSF-gsmSCF-Protocol OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-gsmSSF-gsmSCF-pkgs-contracts-acs(102) version8(7)} +-- The Object Identifier 'gsmSSF-gsmSCF-Protocol' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Protocol definitions related to call control. + +gsmSCF-gsmSRF-Operations OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-gsmSCF-gsmSRF-ops-args(103) version8(7)} +-- The Object Identifier 'gsmSCF-gsmSRF-Operations' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Operation definitions related to gsmSRF control. + +gsmSCF-gsmSRF-Protocol OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-gsmSCF-gsmSRF-pkgs-contracts-acs(104) version8(7)} +-- The Object Identifier 'gsmSCF-gsmSRF-Protocol' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Protocol definitions related to gsmSRF control. + +sms-Operations OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-SMS-ops-args(105) version8(7)} +-- The Object Identifier 'sms-Operations' is updated to version8(7) in Rel-6, so other +-- modules can IMPORT Rel-6 Operation definitions related to SMS control. + +smsSSF-gsmSCF-Protocol OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-smsSSF-gsmSCF-pkgs-contracts-acs(106) version8(7)} +-- The Object Identifier 'smsSSF-gsmSCF-Protocol' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Protocol definitions related to SMS control. + +gprsSSF-gsmSCF-Operations OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-GPRS-ops-args(107) version8(7)} +-- The Object Identifier 'gprsSSF-gsmSCF-Operations' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Operation definitions related to GPRS control. + +gprsSSF-gsmSCF-Protocol OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) + cap-gprsSSF-gsmSCF-pkgs-contracts-acs(108) version8(7)} +-- The Object Identifier 'gprsSSF-gsmSCF-Protocol' is updated to version8(7) in Rel-6, so +-- other modules can IMPORT Rel-6 Protocol definitions related to GPRS control. + +id-CAP OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) + umts-network(1) cap4(22)} + +id-CAP3 OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) + umts-network(1) cap3(20)} + +id-CAPOE OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) + umts-network(1) cap4OE(23)} + +id-CAP3OE OBJECT IDENTIFIER ::= + {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) + umts-network(1) cap3OE(21)} + +id-ac OBJECT IDENTIFIER ::= {id-CAP ac(3)} +id-acE OBJECT IDENTIFIER ::= {id-CAPOE ac(3)} +id-ac3E OBJECT IDENTIFIER ::= {id-CAP3OE ac(3)} +id-as OBJECT IDENTIFIER ::= {id-CAP as(5)} +id-asE OBJECT IDENTIFIER ::= {id-CAPOE as(5)} +id-rosObject OBJECT IDENTIFIER ::= {id-CAP rosObject(25)} +id-contract OBJECT IDENTIFIER ::= {id-CAP contract(26)} +id-contract3 OBJECT IDENTIFIER ::= {id-CAP3 contract(26)} +id-contractE OBJECT IDENTIFIER ::= {id-CAPOE contract(26)} +id-package OBJECT IDENTIFIER ::= {id-CAP package(27)} +id-packageE OBJECT IDENTIFIER ::= {id-CAPOE package(27)} + +-- for ac, as, rosObject, contract and package, the values are identical to ITU-T Recommendation +-- Q.1218 [49] + + +-- ROS Objects + +id-rosObject-gsmSCF OBJECT IDENTIFIER ::= {id-rosObject 4} +id-rosObject-gsmSSF OBJECT IDENTIFIER ::= {id-rosObject 5} +id-rosObject-gsmSRF OBJECT IDENTIFIER ::= {id-rosObject 6} +id-rosObject-gprsSSF OBJECT IDENTIFIER ::= {id-rosObject 7} +id-rosObject-smsSSF-V3 OBJECT IDENTIFIER ::= {id-rosObject 8} +id-rosObject-smsSSF-V4 OBJECT IDENTIFIER ::= {id-rosObject 9} + + +-- Application Contexts + +-- gsmSSF/gsmSCF AC +id-ac-CAP-gsmSSF-scfGenericAC OBJECT IDENTIFIER ::= {id-acE 4} +id-ac-CAP-gsmSSF-scfAssistHandoffAC OBJECT IDENTIFIER ::= {id-acE 6} +id-ac-CAP-scf-gsmSSFGenericAC OBJECT IDENTIFIER ::= {id-acE 8} + +-- gsmSRF/gsmSCF AC +id-ac-gsmSRF-gsmSCF OBJECT IDENTIFIER ::= {id-ac 14} + +-- gprsSSF/gsmSCF AC +id-ac-CAP-gprsSSF-gsmSCF-AC OBJECT IDENTIFIER ::= {id-ac3E 50} +id-ac-CAP-gsmSCF-gprsSSF-AC OBJECT IDENTIFIER ::= {id-ac3E 51} + +-- gprsSSF/gsmSCF or gsmSSF/gsmSCF AC +id-ac-cap3-sms-AC OBJECT IDENTIFIER ::= {id-ac3E 61} +id-ac-cap4-sms-AC OBJECT IDENTIFIER ::= {id-acE 61} + + +-- Contracts + +-- gsmSSF/gsmSCF Contracts +id-CAPSsfToScfGeneric OBJECT IDENTIFIER ::= {id-contractE 3} +id-CAPAssistHandoffssfToScf OBJECT IDENTIFIER ::= {id-contractE 5} +id-CAPScfToSsfGeneric OBJECT IDENTIFIER ::= {id-contractE 6} + +-- gsmSRF/gsmSCF Contracts +id-contract-gsmSRF-gsmSCF OBJECT IDENTIFIER ::= {id-contract 13} + +-- gprsSSF/gsmSCF Contracts +id-capGprsSsfTogsmScf OBJECT IDENTIFIER ::= {id-contract 14} +id-capGsmScfToGprsSsf OBJECT IDENTIFIER ::= {id-contract 15} + +-- gprsSSF/gsmSCF or gsmSSF/gsmSCF Contracts +id-cap3SmsSsfTogsmScf OBJECT IDENTIFIER ::= {id-contract3 16} +id-cap4SmsSsfTogsmScf OBJECT IDENTIFIER ::= {id-contract 16} + + +-- Operation Packages + +-- gsmSSF/gsmSCF Operation Packages +id-package-scfActivation OBJECT IDENTIFIER ::= {id-package 11} +id-package-gsmSRF-scfActivationOfAssist OBJECT IDENTIFIER ::= {id-package 15} +id-package-assistConnectionEstablishment OBJECT IDENTIFIER ::= {id-package 16} +id-package-genericDisconnectResource OBJECT IDENTIFIER ::= {id-package 17} +id-package-nonAssistedConnectionEstablishment OBJECT IDENTIFIER ::= {id-package 18} +id-package-connect OBJECT IDENTIFIER ::= {id-package 19} +id-package-callHandling OBJECT IDENTIFIER ::= {id-packageE 20} +id-package-bcsmEventHandling OBJECT IDENTIFIER ::= {id-package 21} +id-package-ssfCallProcessing OBJECT IDENTIFIER ::= {id-packageE 24} +id-package-scfCallInitiation OBJECT IDENTIFIER ::= {id-package 25} +id-package-timer OBJECT IDENTIFIER ::= {id-package 26} +id-package-billing OBJECT IDENTIFIER ::= {id-package 27} +id-package-charging OBJECT IDENTIFIER ::= {id-package 28} +id-package-trafficManagement OBJECT IDENTIFIER ::= {id-package 29} +id-package-callReport OBJECT IDENTIFIER ::= {id-package 32} +id-package-signallingControl OBJECT IDENTIFIER ::= {id-package 33} +id-package-activityTest OBJECT IDENTIFIER ::= {id-package 34} +id-package-cancel OBJECT IDENTIFIER ::= {id-packageE 36} +id-package-cphResponse OBJECT IDENTIFIER ::= {id-package 37} +id-package-exceptionInform OBJECT IDENTIFIER ::= {id-package 38} +id-package-playTone OBJECT IDENTIFIER ::= {id-package 39} + +-- gsmSRF/gsmSCF Operation Packages +id-package-specializedResourceControl OBJECT IDENTIFIER ::= {id-package 42} +id-package-gsmSRF-scfCancel OBJECT IDENTIFIER ::= {id-package 43} + +-- gprsSSF/gsmSCF Operation Packages +id-package-gprsContinue OBJECT IDENTIFIER ::= {id-package 49} +id-package-gprsExceptionInformation OBJECT IDENTIFIER ::= {id-package 50} +id-package-gprsScfActivation OBJECT IDENTIFIER ::= {id-package 51} +id-package-gprsConnect OBJECT IDENTIFIER ::= {id-package 52} +id-package-gprsRelease OBJECT IDENTIFIER ::= {id-package 53} +id-package-gprsEventHandling OBJECT IDENTIFIER ::= {id-package 54} +id-package-gprsTimer OBJECT IDENTIFIER ::= {id-package 55} +id-package-gprsBilling OBJECT IDENTIFIER ::= {id-package 56} +id-package-gprsCharging OBJECT IDENTIFIER ::= {id-package 57} +id-package-gprsActivityTest OBJECT IDENTIFIER ::= {id-package 58} +id-package-gprsCancel OBJECT IDENTIFIER ::= {id-package 59} +id-package-gprsChargeAdvice OBJECT IDENTIFIER ::= {id-package 60} + +-- gprsSSF/gsmSCF or gsmSSF/gsmSCF Operation Packages +id-package-smsActivation OBJECT IDENTIFIER ::= {id-package 61} +id-package-smsConnect OBJECT IDENTIFIER ::= {id-package 62} +id-package-smsContinue OBJECT IDENTIFIER ::= {id-package 63} +id-package-smsRelease OBJECT IDENTIFIER ::= {id-package 64} +id-package-smsEventHandling OBJECT IDENTIFIER ::= {id-package 65} +id-package-smsBilling OBJECT IDENTIFIER ::= {id-package 66} +id-package-smsTimer OBJECT IDENTIFIER ::= {id-package 67} + + +-- Abstract Syntaxes + +-- gsmSSF/gsmSCF Abstract Syntaxes +id-as-gsmSSF-scfGenericAS OBJECT IDENTIFIER ::= {id-asE 4} +id-as-assistHandoff-gsmSSF-scfAS OBJECT IDENTIFIER ::= {id-asE 6} +id-as-scf-gsmSSFGenericAS OBJECT IDENTIFIER ::= {id-asE 7} + +-- gsmSRF/gsmSCF Abstract Syntaxes +id-as-basic-gsmSRF-gsmSCF OBJECT IDENTIFIER ::= {id-as 14} + +-- gprsSSF/gsmSCF Abstract Syntaxes +id-as-gprsSSF-gsmSCF-AS OBJECT IDENTIFIER ::= {id-as 50} +id-as-gsmSCF-gprsSSF-AS OBJECT IDENTIFIER ::= {id-as 51} + +-- gprsSSF/gsmSCF or gsmSSF/gsmSCF Abstract Syntaxes +id-as-smsSSF-gsmSCF-AS OBJECT IDENTIFIER ::= {id-as 61} + +END diff --git a/epan/dissectors/asn1/camel/CAP-operationcodes.asn b/epan/dissectors/asn1/camel/CAP-operationcodes.asn new file mode 100644 index 00000000..deecd260 --- /dev/null +++ b/epan/dissectors/asn1/camel/CAP-operationcodes.asn @@ -0,0 +1,119 @@ +-- 3GPP TS 29.078 11.0.0 (2011-09) +-- 5.3 Operation codes +CAP-operationcodes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-operationcodes(53) version8(7)} + +DEFINITIONS ::= BEGIN + +IMPORTS + + ros-InformationObjects +FROM CAP-object-identifiers {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +umts-network(1) modules(3) cap-object-identifiers(100) version8(7)} + + Code +FROM Remote-Operations-Information-Objects ros-InformationObjects + +; + +-- the operations are grouped by the identified operation packages. + +-- gsmSCF activation Package + opcode-initialDP Code ::= local: 0 +-- gsmSCF/gsmSRF activation of assist Package + opcode-assistRequestInstructions Code ::= local: 16 +-- Assist connection establishment Package + opcode-establishTemporaryConnection Code ::= local: 17 +-- Generic disconnect resource Package + opcode-disconnectForwardConnection Code ::= local: 18 + opcode-dFCWithArgument Code ::= local: 86 +-- Non-assisted connection establishment Package + + opcode-connectToResource Code ::= local: 19 +-- Connect Package (elementary gsmSSF function) + opcode-connect Code ::= local: 20 +-- Call handling Package (elementary gsmSSF function) + opcode-releaseCall Code ::= local: 22 +-- BCSM Event handling Package + opcode-requestReportBCSMEvent Code ::= local: 23 + opcode-eventReportBCSM Code ::= local: 24 +-- gsmSSF call processing Package + opcode-collectInformation Code ::= local: 27 + opcode-continue Code ::= local: 31 +-- gsmSCF call initiation Package + opcode-initiateCallAttempt Code ::= local: 32 +-- Timer Package + opcode-resetTimer Code ::= local: 33 +-- Billing Package + opcode-furnishChargingInformation Code ::= local: 34 +-- Charging Package + opcode-applyCharging Code ::= local: 35 + opcode-applyChargingReport Code ::= local: 36 +-- Traffic management Package + opcode-callGap Code ::= local: 41 +-- Call report Package + opcode-callInformationReport Code ::= local: 44 + opcode-callInformationRequest Code ::= local: 45 +-- Signalling control Package + opcode-sendChargingInformation Code ::= local: 46 +-- Specialized resource control Package + opcode-playAnnouncement Code ::= local: 47 + opcode-promptAndCollectUserInformation Code ::= local: 48 + opcode-specializedResourceReport Code ::= local: 49 +-- Cancel Package + opcode-cancel Code ::= local: 53 +-- Activity Test Package + opcode-activityTest Code ::= local: 55 +-- CPH Response Package + opcode-continueWithArgument Code ::= local: 88 + opcode-disconnectLeg Code ::= local: 90 + opcode-moveLeg Code ::= local: 93 + opcode-splitLeg Code ::= local: 95 +-- Exception Inform Package + opcode-entityReleased Code ::= local: 96 +-- Play Tone Package + opcode-playTone Code ::= local: 97 + +-- Sms Activation Package + opcode-initialDPSMS Code ::= local: 60 +-- Sms Billing Package + opcode-furnishChargingInformationSMS Code ::= local: 61 +-- Sms Connect Package + opcode-connectSMS Code ::= local: 62 +-- Sms Event Handling Package + opcode-requestReportSMSEvent Code ::= local: 63 + opcode-eventReportSMS Code ::= local: 64 +-- Sms Processing Package + opcode-continueSMS Code ::= local: 65 +-- Sms Release Package + opcode-releaseSMS Code ::= local: 66 +-- Sms Timer Package + opcode-resetTimerSMS Code ::= local: 67 + +-- Gprs Activity Test Package + opcode-activityTestGPRS Code ::= local: 70 +-- Gprs Charging Package + opcode-applyChargingGPRS Code ::= local: 71 + opcode-applyChargingReportGPRS Code ::= local: 72 +-- Gprs Cancel Package + opcode-cancelGPRS Code ::= local: 73 +-- Gprs Connect Package + opcode-connectGPRS Code ::= local: 74 +-- Gprs Processing Package + opcode-continueGPRS Code ::= local: 75 +-- Gprs Exception Information Package + opcode-entityReleasedGPRS Code ::= local: 76 +-- Gprs Billing Package + opcode-furnishChargingInformationGPRS Code ::= local: 77 +-- Gprs Scf Activation Package + opcode-initialDPGPRS Code ::= local: 78 +-- Gprs Release Package + opcode-releaseGPRS Code ::= local: 79 +-- Gprs Event Handling Package + opcode-eventReportGPRS Code ::= local: 80 + opcode-requestReportGPRSEvent Code ::= local: 81 +-- Gprs Timer Package + opcode-resetTimerGPRS Code ::= local: 82 +-- Gprs Charge Advice Package + opcode-sendChargingInformationGPRS Code ::= local: 83 + +END diff --git a/epan/dissectors/asn1/camel/CMakeLists.txt b/epan/dissectors/asn1/camel/CMakeLists.txt new file mode 100644 index 00000000..addfed17 --- /dev/null +++ b/epan/dissectors/asn1/camel/CMakeLists.txt @@ -0,0 +1,58 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +set( PROTOCOL_NAME camel ) + +set( PROTO_OPT ) + +set( EXT_ASN_FILE_LIST +) + +set( EXT_ASN_FILE_LIST_LATE + ../ros/Remote-Operations-Information-Objects.asn + ../ros/Remote-Operations-Generic-ROS-PDUs.asn +) + +set( ASN_FILE_LIST + CAP-object-identifiers.asn + CAP-classes.asn + CAP-datatypes.asn + CAP-errorcodes.asn + CAP-errortypes.asn + CAP-operationcodes.asn + CAP-GPRS-ReferenceNumber.asn + CAP-gsmSCF-gsmSRF-ops-args.asn + CAP-gsmSSF-gsmSCF-ops-args.asn + CAP-gprsSSF-gsmSCF-ops-args.asn + CAP-SMS-ops-args.asn + CAP-U-ABORT-Data.asn + CamelV2diff.asn +) + +set( EXTRA_DIST + ${ASN_FILE_LIST} + packet-${PROTOCOL_NAME}-template.c + packet-${PROTOCOL_NAME}-template.h + ${PROTOCOL_NAME}.asn + ${PROTOCOL_NAME}.cnf +) + +set( SRC_FILES + ${EXTRA_DIST} + ${EXT_ASN_FILE_LIST} +) + +set( A2W_FLAGS -b ) + +set( EXTRA_CNF + "${CMAKE_CURRENT_BINARY_DIR}/../inap/inap-exp.cnf" + "${CMAKE_CURRENT_BINARY_DIR}/../gsm_map/gsm_map-exp.cnf" +) + +ASN2WRS() diff --git a/epan/dissectors/asn1/camel/CamelV2diff.asn b/epan/dissectors/asn1/camel/CamelV2diff.asn new file mode 100644 index 00000000..6f2f11ce --- /dev/null +++ b/epan/dissectors/asn1/camel/CamelV2diff.asn @@ -0,0 +1,100 @@ +-- Hand crafted ASN1 file for the differences between latest spec and V2 +-- statments sufixed with V2 to be able to generate this with the latest ASN1 spec. +-- .cnf and -template is used to call the statmets here. + +CAP-DataTypesV2 {ccitt(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) modules(3)cap-datatypes(52) version2(1)} + +-- This module contains the type definitions for the CAP v.2 data types. + +DEFINITIONS IMPLICIT TAGS ::= +BEGIN + IMPORTS + + NAEA-CIC +FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CommonDataTypes(18) version12(12)} + +; + +-- From: +-- CAP-Operations {ccitt(0) identified-organization(4) etsi(0) mobileDomain(0) +-- gsm-Network(1) modules(3) cap-operations(50) version2(1)} +-- This module contains the type definitions for the CAP v.2 operations. +EstablishTemporaryConnectionArgV2 ::= SEQUENCE { + assistingSSPIPRoutingAddress [0] AssistingSSPIPRoutingAddress, + correlationID [1] CorrelationID OPTIONAL, + scfID [3] ScfID OPTIONAL, + extensions [4] SEQUENCE SIZE(1..numOfExtensions) OF + ExtensionField OPTIONAL, + serviceInteractionIndicatorsTwo [7] ServiceInteractionIndicatorsTwo OPTIONAL, + ..., + na-info [50] NA-Info OPTIONAL + } +-- na-info is included at the discretion of the +-- gsmSCF operator. + +-- Use of the text parameter is network operator/equipment vendor specific. +-- End CAP-Operations + +-- TYPE DEFINITIONS FOR CAP v.2 DATA TYPES FOLLOW + +InitialDPArgExtensionV2 ::= SEQUENCE { + naCarrierInformation [0] NACarrierInformation OPTIONAL, + gmscAddress [1] ISDN-AddressString OPTIONAL, + ... + + +} + +NACarrierInformation ::= SEQUENCE { + naCarrierId [0] NAEA-CIC OPTIONAL, + naCICSelectionType [1] NACarrierSelectionInfo OPTIONAL, + ...} + +NACarrierSelectionInfo ::= OCTET STRING (SIZE (1)) +-- NA carrier selection information octet carries the same values as ANSI +-- ISUP T1.113: '00'H - not indicated or not explicitly provided +-- '01'H - subscribed not dialed +-- '02'H - subscribed and dialed +-- '03'H - subscribed with dialing undetermined +-- '04'H - dialed CIC not subscribed + +NAChargeNumber ::= OCTET STRING (SIZE (2..7)) +-- This parameter uniquely identifies the chargeable number for a call sent into a North American +-- long distance carrier. It transports the ChargeNumber Parameter Field +-- as defined in ANSI ISUP T1.113. This provides +-- - 1 octet for the nature of address indicator field, plus +-- - 1 octet for a numbering plan field, plus +-- - up to 5 octets for the address signal (up to 10 digits) + +-- The Charge Number in ANSI T1.113 normally contains a 10 digit national number within the North +-- American Numbering Plan (NANP); longer (e.g. international) charge numbers are not supported in +-- T1.113 + +NA-Info ::= SEQUENCE { + naCarrierInformation [0] NACarrierInformation OPTIONAL, + naOliInfo [1] NAOliInfo OPTIONAL, + naChargeNumber [2] NAChargeNumber OPTIONAL, + ...} + + +CAMEL-AChBillingChargingCharacteristicsV2 ::= CHOICE { + timeDurationCharging [0] SEQUENCE { + maxCallPeriodDuration [0] INTEGER (1..864000), + releaseIfdurationExceeded [1] ReleaseIfDurationExceeded OPTIONAL, + tariffSwitchInterval [2] INTEGER (1..86400) OPTIONAL + } + } +-- tariffSwitchInterval is measured in 1 second units. +-- maxCallPeriodDuration is measured in100 millisecond units + +ReleaseIfDurationExceeded ::= SEQUENCE { + tone BOOLEAN DEFAULT FALSE, + ..., + extensions [10] SEQUENCE SIZE(1..numOfExtensions) OF + ExtensionField OPTIONAL + } + +SpecializedResourceReportArgV23 ::= NULL + +END diff --git a/epan/dissectors/asn1/camel/TCAPMessages.asn b/epan/dissectors/asn1/camel/TCAPMessages.asn new file mode 100644 index 00000000..1e0b5561 --- /dev/null +++ b/epan/dissectors/asn1/camel/TCAPMessages.asn @@ -0,0 +1,21 @@ +-- Generated by Asnp, the pretty-printer of France Telecom R&D (http://asn1.elibel.tm.fr/asnp/) +TCAPMessages {itu-t recommendation q 773 modules(2) messages(1) version3(3)} +DEFINITIONS IMPLICIT TAGS ::= +BEGIN +-- This is a dummy asn1 file to be replacet when everthing is in place... +-- EXPORTS everything +-- Transaction Portion fields. +IMPORTS + ROS{}, InvokeId + FROM Remote-Operations-Generic-ROS-PDUs {joint-iso-itu-t + remote-operations(4) generic-ROS-PDUs(6) version1(0)} + OPERATION + FROM Remote-Operations-Information-Objects {joint-iso-itu-t + remote-operations(4) informationObjects(5) version1(0)}; + + +TCInvokeIdSet ::= InvokeId(WITH COMPONENTS { + present (-128..127) + }) + +END -- TCAPMessages diff --git a/epan/dissectors/asn1/camel/camel.asn b/epan/dissectors/asn1/camel/camel.asn new file mode 100644 index 00000000..0c65a275 --- /dev/null +++ b/epan/dissectors/asn1/camel/camel.asn @@ -0,0 +1,3246 @@ +--*********************************************** +-- ASN.1+ version of CAMEL3 message set. +-- +-- Ref : CAMEL Application Part (CAP) specification +-- (3GPP TS 29.078 version 3.5.0 Release 1999) +-- ETSI TS 129 078 V3.5.0 (2000-09) +-- Updated to 3GPP TS 29.078 version 7.3.0 Release 7 (2006-06) +-- +--*********************************************** + +--********************************************* +-- Core-INAP-CS1-Operations DEFINITIONS +--********************************************* + +CAP-datatypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-datatypes(52) version5(4)} +DEFINITIONS IMPLICIT TAGS ::= +BEGIN + + + +-- exports everything + + + +IMPORTS + + CellGlobalIdOrServiceAreaIdFixedLength, + Ext-BasicServiceCode, + IMEI, + IMSI, + LAIFixedLength + +FROM MAP-CommonDataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CommonDataTypes(18) version9(9)} + + CUG-Index, + CUG-Interlock, + Ext-QoS-Subscribed, + Ext2-QoS-Subscribed, + GeographicalInformation, + GSN-Address, + LocationInformation, + LSAIdentity, + MS-Classmark2, + QoS-Subscribed, + RAIdentity, + GPRSChargingID +FROM MAP-MS-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-MS-DataTypes(11) version9(9)} + + UU-Data +FROM MAP-CH-DataTypes {itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) +gsm-Network(1) modules(3) map-CH-DataTypes(13) version9(9)} + +; +-- ================================ +-- MACRO OPERATION +-- ================================ + +-- ROS def's +-- Module Remote-Operations-Apdus (H.450.1:02/1998) +--Remote-Operations-Apdus {itu-t recommendation h 450 1 version1(0) +-- remote-operations-apdus(11)} DEFINITIONS AUTOMATIC TAGS ::= +--BEGIN + +Component ::= CHOICE { + invoke [1] IMPLICIT Invoke, + returnResultLast [2] IMPLICIT ReturnResult, + returnError [3] IMPLICIT ReturnError, + reject [4] IMPLICIT Reject +} + +Invoke ::= SEQUENCE { + invokeID InvokeIdType, + linkedID [0] IMPLICIT InvokeIdType OPTIONAL, + opCode OPERATION, + invokeparameter InvokeParameter OPTIONAL +} +InvokeParameter ::= ANY + + +-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER or the keyword ARGUMENT +-- in the type definition of a particular operation. + +ReturnResult ::= SEQUENCE { + invokeID InvokeIdType, + resultretres SEQUENCE { + opCode OPERATION, + returnparameter ReturnResultParameter OPTIONAL + } OPTIONAL +} + +ReturnResultParameter ::= ANY + +-- ANY is filled by the single ASN.1 data type following the keyword RESULT in the type definition +-- of a particular operation. + +ReturnError ::= SEQUENCE { + invokeID InvokeIdType, + errorCode ERROR, + parameter ReturnErrorParameter OPTIONAL } + +ReturnErrorParameter ::= ANY + +-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER in the type definition +-- of a particular error. + +Reject ::= SEQUENCE { + invokeIDRej CHOICE { + derivable InvokeIdType, + not-derivable NULL }, + problem CHOICE { + generalProblem [0] IMPLICIT GeneralProblem, + invokeProblem [1] IMPLICIT InvokeProblem, + returnResultProblem [2] IMPLICIT ReturnResultProblem, + returnErrorProblem [3] IMPLICIT ReturnErrorProblem } } + +InvokeIdType ::= INTEGER (-128..127) + + +OPERATION ::= CHOICE { + localValue OperationLocalvalue, + globalValue OBJECT IDENTIFIER } + + +CAMELOperationLocalvalue ::= INTEGER{ + initialDP (0), + assistRequestInstructions (16), + establishTemporaryConnection (17), + disconnectForwardConnection (18), + connectToResource (19), + connect (20), + releaseCall (22), + requestReportBCSMEvent (23), + eventReportBCSM (24), + collectInformation (27), + continue (31), + initiateCallAttempt (32), + resetTimer (33), + furnishChargingInformation (34), + applyCharging (35), + applyChargingReport (36), + callGap (41), + callInformationReport (44), + callInformationRequest (45), + sendChargingInformation (46), + playAnnouncement (47), + promptAndCollectUserInformation (48), + specializedResourceReport (49), + cancel (53), + activityTest (55), + continueWithArgument (56), + initialDPSMS (60), + furnishChargingInformationSMS (61), + connectSMS (62), + requestReportSMSEvent (63), + eventReportSMS (64), + continueSMS (65), + releaseSMS (66), + resetTimerSMS (67), + activityTestGPRS (70), + applyChargingGPRS (71), + applyChargingReportGPRS (72), + cancelGPRS (73), + connectGPRS (74), + continueGPRS (75), + entityReleasedGPRS (76), + furnishChargingInformationGPRS (77), + initialDPGPRS (78), + releaseGPRS (79), + eventReportGPRS (80), + requestReportGPRSEvent (81), + resetTimerGPRS (82), + sendChargingInformationGPRS (83), + dFCWithArgument (86), + continueWithArgument (88), + disconnectLeg (90), + moveLeg (93), + splitLeg (95), + entityReleased (96), + playTone (97) +} + +OperationLocalvalue ::= CAMELOperationLocalvalue + + +ERROR ::= CHOICE { + localErrorValue LocalErrorcode, + globalErrorValue OBJECT IDENTIFIER +} + +CAMELLocalErrorcode ::= INTEGER{ + canceled (0), + cancelFailed (1), + eTCFailed (3), + improperCallerResponse (4), + missingCustomerRecord (6), + missingParameter (7), + parameterOutOfRange (8), + requestedInfoError (10), + systemFailure (11), + taskRefused (12), + unavailableResource (13), + unexpectedComponentSequence (14), + unexpectedDataValue (15), + unexpectedParameter (16), + unknownLegID (17), + unknownPDPID (50), + unknownCSID (51) +} + +LocalErrorcode ::= CAMELLocalErrorcode + +-- PROBLEMS + +GeneralProblem ::= INTEGER { unrecognizedComponent (0), + mistypedComponent (1), + badlyStructuredComponent (2) } + +InvokeProblem ::= INTEGER { duplicateInvokeID (0), + unrecognizedOperation (1), + mistypedParameter (2), + resourceLimitation (3), + initiatingRelease (4), + unrecognizedLinkedID (5), + linkedResponseUnexpected (6), + unexpectedLinkedOperation (7) } + +ReturnResultProblem ::= INTEGER { unrecognizedInvokeID (0), + returnResultUnexpected (1), + mistypedParameter (2) } + +ReturnErrorProblem ::= INTEGER { unrecognizedInvokeID (0), + returnErrorUnexpected (1), + unrecognizedError (2), + unexpectedError (3), + mistypedParameter (4) } + + +--END + +-- +-- +-- + + + + +-- AccessPointName notes: not recursive, exported, +-- locally refd 5 times, import refd 0 times + +AccessPointName ::= OCTET STRING (SIZE (cAPSpecificBoundSetminAccessPointNameLength .. cAPSpecificBoundSetmaxAccessPointNameLength )) + +-- Indicates the AccessPointName, refer to 3GPP TS 24.008 [9] for the encoding. +-- It shall be coded as in the value part defined in 3GPP TS 24.008, +-- i.e. the 3GPP TS 24.008 IEI and 3GPP TS 24.008 octet length indicator +-- shall not be included. + +-- AChBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +AChBillingChargingCharacteristics ::= CHOICE +{ + actimeDurationCharging [0] SEQUENCE + { + maxCallPeriodDuration [0] INTEGER (1..864000), + releaseIfdurationExceeded [1] BOOLEAN DEFAULT FALSE, + tariffSwitchInterval [2] INTEGER (1..86400) OPTIONAL, + actone [3] BOOLEAN DEFAULT FALSE, + extensions [4] ExtensionsArray OPTIONAL + } +} + +AChChargingAddress ::= CHOICE { + legID [2] LegID, + srfConnection [50] CallSegmentID + } + +-- AdditionalCallingPartyNumber notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +AdditionalCallingPartyNumber ::= Digits + +-- AlertingPattern notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +AlertingPattern ::= OCTET STRING (SIZE(3)) +-- Indicates a specific pattern that is used to alert a subscriber +-- (e.g. distinctive ringing, tones, etc.). +-- The encoding of the last octet of this parameter is as defined in 3GPP TS 29.002 [11]. + + +-- This one Commented out by Javier Acuna (javier.acuna@sixbell.cl) +-- Because I added a new Errortypes section at the end. + +--CancelFailedPARAM ::= SEQUENCE +--{ + -- operation [1] InvokeID +--} + +-- AOCBeforeAnswer notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times + +AOCBeforeAnswer ::= SEQUENCE +{ + aOCInitial [0] CAI-Gsm0224, + aOCSubsequent [1] AOCSubsequent OPTIONAL +} + +-- AOCGprs notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +AOCGprs ::= SEQUENCE +{ + aOCInitial [0] CAI-Gsm0224, + aOCSubsequent [1] AOCSubsequent OPTIONAL +} + +-- AOCSubsequent notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +AOCSubsequent ::= SEQUENCE +{ + cAI-GSM0224 [0] CAI-Gsm0224, + tariffSwitchInterval [1] INTEGER (1..86400) OPTIONAL +} + +-- AppendFreeFormatData notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +AppendFreeFormatData ::= ENUMERATED +{ + overwrite (0), + append (1) +} + +-- ApplicationTimer notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ApplicationTimer ::= INTEGER (0..2047) + +-- AssistingSSPIPRoutingAddress notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +AssistingSSPIPRoutingAddress ::= Digits + +AudibleIndicator ::= CHOICE { + istone BOOLEAN, + burstList [1] BurstList + } + +-- BackwardServiceInteractionInd notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +BackwardServiceInteractionInd ::= SEQUENCE { + conferenceTreatmentIndicator [1] OCTET STRING (SIZE(1)) OPTIONAL, + -- acceptConferenceRequest 'xxxx xx01'B + -- rejectConferenceRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect conference treatement + callCompletionTreatmentIndicator [2] OCTET STRING (SIZE(1)) OPTIONAL, + -- acceptCallCompletionServiceRequest 'xxxx xx01'B, + -- rejectCallCompletionServiceRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call completion treatment + ... + } + +-- BasicGapCriteria notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +BasicGapCriteria ::= CHOICE +{ + calledAddressValue [0] Digits, + gapOnService [2] GapOnService, + calledAddressAndService [29] SEQUENCE + { + calledAddressValue [0] Digits, + serviceKey [1] ServiceKey, + ... + }, + callingAddressAndService [30] SEQUENCE + { + callingAddressValue [0] Digits, + serviceKey [1] ServiceKey, + ... + } +} +-- Both calledAddressValue and callingAddressValue can be +-- incomplete numbers, in the sense that a limited amount of digits can be given. +-- For the handling of numbers starting with the same digit string refer to the detailed +-- procedure of the CallGap operation + + +-- BCSMEvent notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +BCSMEvent ::= SEQUENCE +{ + eventTypeBCSM [0] EventTypeBCSM, + monitorMode [1] MonitorMode, + legID6 [2] LegID OPTIONAL, + dpSpecificCriteria [30] DpSpecificCriteria OPTIONAL, + automaticRearm [50] NULL OPTIONAL, + ... +} + +-- Indicates the BCSM Event information for monitoring. +BCSM-Failure ::= SEQUENCE { + legID [0] LegID OPTIONAL, + cause [2] Cause OPTIONAL, + ... + } + +-- BearerCapability notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +BearerCapability ::= CHOICE +{ + bearerCap [0] BearerCap +} + +BearerCap ::= OCTET STRING (SIZE (2..cAPSpecificBoundSetmaxBearerCapabilityLength )) + +-- Indicates the type of bearer capability connection to the user. For bearerCap, the ISUP User +-- Service Information, ETSI EN 300 356-1 [23] +-- encoding shall be used. + +Burst ::= SEQUENCE { + numberOfBursts [0] INTEGER (1..3) DEFAULT 1, + burstInterval [1] INTEGER (1..1200) DEFAULT 2, + numberOfTonesInBurst [2] INTEGER (1..3) DEFAULT 3, + toneDuration [3] INTEGER (1..20) DEFAULT 2, + toneInterval [4] INTEGER (1..20) DEFAULT 2, + ... + } +-- burstInterval, toneDurartion and toneInterval are measured in 100 millisecond units + +BurstList ::= SEQUENCE { + warningPeriod [0] INTEGER (1..1200) DEFAULT 30, + bursts [1] Burst, + ... + } +-- warningPeriod is measured in 1 second units. + +-- CAI-Gsm0224 notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +CAI-Gsm0224 ::= SEQUENCE +{ + e1 [0] INTEGER (0..8191) OPTIONAL, + e2 [1] INTEGER (0..8191) OPTIONAL, + e3 [2] INTEGER (0..8191) OPTIONAL, + e4 [3] INTEGER (0..8191) OPTIONAL, + e5 [4] INTEGER (0..8191) OPTIONAL, + e6 [5] INTEGER (0..8191) OPTIONAL, + e7 [6] INTEGER (0..8191) OPTIONAL +} +-- Indicates Charge Advice Information to the Mobile Station. For information regarding +-- parameter usage, refer to 3GPP TS 22.024 [2]. + +-- CalledPartyBCDNumber notes: not recursive, exported, +-- locally refd 4 times, import refd 0 times +-- See 3GPP TS 29.078 +-- and 3GPP TS 24.008, section 10.5.4.7 +CalledPartyBCDNumber ::= ISDN-AddressString +-- Indicates the Called Party Number, including service selection information. +-- Refer to 3GPP TS 24.008 [9] for encoding. +-- This data type carries only the 'type of number', 'numbering plan +-- identification' and 'number digit' fields defined in 3GPP TS 24.008 [9]; +-- it does not carry the 'called party BCD number IEI' or 'length of called +-- party BCD number contents'. +-- In the context of the DestinationSubscriberNumber field in ConnectSMSArg or +-- InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric +-- character string. In this case, type-of-number '101'B is used, in accordance +-- with 3GPP TS 23.040 [6]. The address is coded in accordance with the +-- GSM 7-bit default alphabet definition and the SMS packing rules +-- as specified in 3GPP TS 23.038 [15] in this case. + +-- CalledPartyNumber notes: not recursive, exported, +-- locally refd 6 times, import refd 0 times + +CalledPartyNumber ::= + + + OCTET STRING (SIZE (cAPSpecificBoundSetminCalledPartyNumberLength ..cAPSpecificBoundSetmaxCalledPartyNumberLength )) +-- Indicates the Called Party Number. Refer to ETS EN 300 356-1 [23] for encoding. + +-- A CalledPartyNumber may contain national-specific values of the Nature Of Address +-- indicator. The filling-in of the national-specific Nature Of Address indicator +-- values shall be done in accordance with the national ISUP of the gsmSSF country, e.g. +-- ANSI T1.113-1995 [92]. +-- In terms of ETS EN 300 356-1 [23], the Destination Address Field is not present if the +-- destination address length is set to zero. This is the case e.g. when the ANSI +-- ISUP Nature Of Address indicator indicates no number present, operator requested +-- (1110100) or no number present, cut-through call to carrier (1110101). +-- See also see 3GPP TS 23.078 [7]. + +-- CallingPartyNumber notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +CallingPartyNumber ::= + + + OCTET STRING (SIZE (cAPSpecificBoundSetminCallingPartyNumberLength..cAPSpecificBoundSetmaxCallingPartyNumberLength )) +-- Indicates the Calling Party Number. Refer to ETSI EN 300 356-1 [23] for encoding. + +-- CallResult notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +CallResult ::= CAMEL-CallResult + +--OCTET STRING (SIZE (cAPSpecificBoundSetminCallResultLength..cAPSpecificBoundSetmaxCallResultLength)) +-- shall be the result of the BER-encoded value of type +-- CAMEL-CallResult + +CallSegmentFailure ::= SEQUENCE { + callSegmentID [0] CallSegmentID OPTIONAL, + cause [2] Cause OPTIONAL, + ... + } + +CallSegmentID ::= INTEGER (1..cAPSpecificBoundsSetnumOfCSs) + +CallSegmentToCancel ::= SEQUENCE { + callInvokeID [0] InvokeID OPTIONAL, + callSegmentID [1] CallSegmentID OPTIONAL, + ... + } + +-- CAMEL-AChBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CAMEL-AChBillingChargingCharacteristics ::= CHOICE +{ + timeDurationCharging [0] SEQUENCE + { + maxCallPeriodDuration [0] INTEGER (1..864000), + releaseIfdurationExceeded [1] BOOLEAN DEFAULT FALSE, + tariffSwitchInterval [2] INTEGER (1..86400) OPTIONAL, + audibleIndicator [3] AudibleIndicator, + extensions [4] ExtensionsArray OPTIONAL, + ... + } +} + +-- CAMEL-CallResult notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +--CAMEL-CallResult ::= CHOICE +--{ +-- timeDurationChargingResult [0] SEQUENCE { +-- partyToCharge [0] ReceivingSideID, +-- timeInformation [1] TimeInformation, +-- legActive [2] BOOLEAN DEFAULT TRUE, +-- callLegReleasedAtTcpExpiry [3] NULL OPTIONAL, +-- extensions [4] ExtensionsArray OPTIONAL, +-- aChChargingAddress [5] AChChargingAddress, +-- ... +-- } +-- } + +CAMEL-CallResult ::= CHOICE +{ + timeDurationChargingResult [0] TimeDurationChargingResult, + void [99] NULL +} + +TimeDurationChargingResult ::= SEQUENCE { + partyToCharge [0] ReceivingSideID, + timeInformation [1] TimeInformation, + legActive [2] BOOLEAN OPTIONAL, + callLegReleasedAtTcpExpiry [3] NULL OPTIONAL, + extensions [4] ExtensionsArray OPTIONAL, + aChChargingAddress [5] AChChargingAddress OPTIONAL, + ... +} + + +-- CAMEL-FCIBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CAMEL-FCIBillingChargingCharacteristics ::= CHOICE +{ + fCIBCCCAMELsequence1 [0] SEQUENCE + { + freeFormatData [0] FreeFormatData, + partyToCharge4 [1] SendingSideID DEFAULT '01'H, + appendFreeFormatData [2] AppendFreeFormatData DEFAULT overwrite + } +} + + +-- CAMEL-FCIGPRSBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CAMEL-FCIGPRSBillingChargingCharacteristics ::= + +SEQUENCE +{ + fCIBCCCAMELsequence2 [0] SEQUENCE + { + freeFormatData [0] FreeFormatData, + pDPID [1] PDPId OPTIONAL, + appendFreeFormatData [2] AppendFreeFormatData DEFAULT overwrite + } +} + + +-- CCAMEL-FCISMSBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CAMEL-FCISMSBillingChargingCharacteristics ::= CHOICE +{ + fCIBCCCAMELsequence3 [0] SEQUENCE + { + freeFormatData [0] FreeFormatData, + appendFreeFormatData [1] AppendFreeFormatData DEFAULT overwrite + } +} + + +-- CAMEL-SCIBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +CAMEL-SCIBillingChargingCharacteristics ::= CHOICE +{ + aOCBeforeAnswer [0] AOCBeforeAnswer, + aOCAfterAnswer [1] AOCSubsequent, + aOC-extension [2] CAMEL-SCIBillingChargingCharacteristicsAlt +} + +CAMEL-SCIBillingChargingCharacteristicsAlt ::= SEQUENCE { + ... + } +-- This datatype is for extension in future releases. + +-- CAMEL-SCIGPRSBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +CamelSCIGPRSBillingChargingCharacteristics ::= + + SEQUENCE +{ + aOCGPRS [0] AOCGprs, + pDPID [1] PDPId OPTIONAL +} + +-- Carrier notes: not recursive, exported, +-- locally refd 5 times, import refd 0 times +Carrier ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminCarrierLength ..cAPSpecificBoundSetmaxCarrierLength )) +-- This parameter is used for North America (na) only. +-- It contains the carrier selection field (first octet) followed by Carrier ID +-- information (North America (na)). + +-- The Carrier selection is one octet and is encoded as: +-- 00000000 No indication +-- 00000001 Selected carrier identification code (CIC) pre subscribed and not +-- input by calling party +-- 00000010 Selected carrier identification code (CIC) pre subscribed and input by +-- calling party +-- 00000011 Selected carrier identification code (CIC) pre subscribed, no +-- indication of whether input by calling party (undetermined) +-- 00000100 Selected carrier identification code (CIC) not pre subscribed and +-- input by calling party +-- 00000101 +-- to Spare +-- 11111110 +-- 11111111 Reserved + +-- Refer to ANSI T1.113-1995 [92] for encoding of na carrier ID information (3 octets). + + + +-- CGEncountered notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CGEncountered ::= ENUMERATED +{ + noCGencountered (0), + manualCGencountered (1), + scpOverload (2) +} + +ChangeOfPositionControlInfo ::= SEQUENCE SIZE(1..cAPSpecificBoundsSetnumOfChangeOfPositionControlInf) OF ChangeOfLocation + +ChangeOfLocation ::= CHOICE { + cellGlobalId [0] CellGlobalIdOrServiceAreaIdFixedLength, + serviceAreaId [1] CellGlobalIdOrServiceAreaIdFixedLength, + locationAreaId [2] LAIFixedLength, + inter-SystemHandOver [3] NULL, + inter-PLMNHandOver [4] NULL, + inter-MSCHandOver [5] NULL, + changeOfLocationAlt [6] ChangeOfLocationAlt +} +-- The cellGlobalId shall contain a Cell Global Identification. +-- The serviceAreaId shall contain a Service Area Identification. + +ChangeOfLocationAlt ::= SEQUENCE { + ... + } + +ChargeIndicator ::= OCTET STRING (SIZE (1)) +-- As specified in ITU-T Recommendation Q.763 as follows: +-- no indication 'xxxx xx00'B +-- no charge 'xxxx xx01'B +-- charge 'xxxx xx10'B +-- spare 'xxxx xx11'B +-- Sending entity shall fill the upper six bits with '0's. +-- Receiving entity shall ignore the upper six bits. + + +-- ChargeNumber notes: not recursive, exported, +-- locally refd 4 times, import refd 0 times +ChargeNumber ::= LocationNumber + +-- ChargingCharacteristics notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ChargingCharacteristics ::= CHOICE +{ + maxTransferredVolume [0] INTEGER (1..4294967295), + maxElapsedTime [1] INTEGER (1..86400) +} + +-- ChargingResult notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ChargingResult ::= CHOICE +{ + transferredVolume [0] TransferredVolume, + elapsedTime [1] ElapsedTime +} + +ChargingRollOver ::= CHOICE { + transferredVolumeRollOver [0] TransferredVolumeRollOver, + elapsedTimeRollOver [1] ElapsedTimeRollOver +} + +-- CollectedDigits notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CollectedDigits ::= SEQUENCE +{ + minimumNbOfDigits [0] INTEGER (1..30) DEFAULT 1, + maximumNbOfDigits [1] INTEGER (1..30), + endOfReplyDigit [2] OCTET STRING (SIZE (1..2)) OPTIONAL, + cancelDigit [3] OCTET STRING (SIZE (1..2)) OPTIONAL, + startDigit [4] OCTET STRING (SIZE (1..2)) OPTIONAL, + firstDigitTimeOut [5] INTEGER (1..127) OPTIONAL, + interDigitTimeOut [6] INTEGER (1..127) OPTIONAL, + errorTreatment [7] ErrorTreatment DEFAULT stdErrorAndInfo, + interruptableAnnInd [8] BOOLEAN DEFAULT TRUE, + voiceInformation [9] BOOLEAN DEFAULT FALSE, + voiceBack [10] BOOLEAN DEFAULT FALSE +} +-- The use of voiceBack and the support of voice recognition via voiceInformation +-- is network operator specific. +-- The endOfReplyDigit, cancelDigit, and startDigit parameters have been +-- designated as OCTET STRING, and are to be encoded as BCD, one digit per octet +-- only, contained in the four least significant bits of each OCTET. The following encoding shall +-- be applied for the non-decimal characters: +-- 1011 (*), 1100 (#). +-- The usage is service dependent. +-- firstDigitTimeOut and interDigitTimeOut are measured in seconds. + +-- CollectedInfo notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CollectedInfo ::= CHOICE +{ + collectedDigits [0] CollectedDigits +} + + +-- ConnectedNumberTreatmentInd notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ConnectedNumberTreatmentInd ::= ENUMERATED +{ + noINImpact (0), + presentationRestricted (1), + presentCalledINNumber (2), + presentCallINNumberRestricted (3) +} + +-- ControlType notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ControlType ::= ENUMERATED +{ + sCPOverloaded (0), + manuallyInitiated (1) +} + +-- CompoundCriteria notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CompoundCriteria ::= SEQUENCE +{ + basicGapCriteria [0] BasicGapCriteria, + scfID [1] ScfID OPTIONAL +} + +-- CorrelationID notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +CorrelationID ::= Digits +-- used by gsmSCF for correlation with a previous operation. + +-- DateAndTime notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +DateAndTime ::= OCTET STRING (SIZE (7)) +-- DateAndTime is BCD encoded. The year digit indicating millenium occupies bits +-- 0-3 of the first octet, and the year digit indicating century occupies bits +-- 4-7 of the first octet. +-- The year digit indicating decade occupies bits 0-3 of the second octet, +-- whilst the digit indicating the year within the decade occupies bits 4-7 of +-- the second octet. +-- The most significant month digit occupies bits 0-3 of the third octet, +-- and the least significant month digit occupies bits 4-7 of the third octet. +-- The most significant day digit occupies bits 0-3 of the fourth octet, +-- and the least significant day digit occupies bits 4-7 of the fourth octet. +-- The most significant hours digit occupies bits 0-3 of the fifth octet, +-- and the least significant digit occupies bits 4-7 of the fifth octet. +-- The most significant minutes digit occupies bits 0-3 of the sixth octet, +-- and the least significant digit occupies bits 4-7 of the sixth octet. +-- The most significant seconds digit occupies bits 0-3 of the seventh octet, +-- and the least seconds significant digit occupies bits 4-7 of the seventh octet. +-- For the encoding of digits in an octet, refer to the timeAndtimezone parameter. + + +-- DestinationRoutingAddress notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +DestinationRoutingAddress ::= + +SEQUENCE SIZE (1) OF CalledPartyNumber + +-- Digits notes: not recursive, exported, +-- locally refd 9 times, import refd 0 times +Digits ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminDigitsLength ..cAPSpecificBoundSetmaxDigitsLength )) +-- Indicates the address signalling digits. +-- Refer to ETSI EN 300 356-1 [23] Generic Number & Generic Digits parameters for encoding. +-- The coding of the subfields 'NumberQualifier' in Generic Number and 'TypeOfDigits' in +-- Generic Digits are irrelevant to the CAP; +-- the ASN.1 tags are sufficient to identify the parameter. +-- The ISUP format does not allow to exclude these subfields, +-- therefore the value is network operator specific. +-- +-- The following parameters shall use Generic Number: +-- - AdditionalCallingPartyNumber for InitialDP +-- - AssistingSSPIPRoutingAddress for EstablishTemporaryConnection +-- - CorrelationID for AssistRequestInstructions +-- - CalledAddressValue for all occurrences, CallingAddressValue for all occurrences. +-- +-- The following parameters shall use Generic Digits: +-- - CorrelationID in EstablishTemporaryConnection +-- - number in VariablePart +-- - digitsResponse in ReceivedInformationArg +-- - midCallEvents in oMidCallSpecificInfo and tMidCallSpecificInfo +-- +-- In the digitsResponse and midCallevents, the digits may also include the '*', '#', +-- a, b, c and d digits by using the IA5 character encoding scheme. If the BCD even or +-- BCD odd encoding scheme is used, then the following encoding shall be applied for the +-- non-decimal characters: 1011 (*), 1100 (#). +-- +-- AssistingSSPIPRoutingAddress in EstablishTemporaryConnection and CorrelationID in +-- AssistRequestInstructions may contain a Hex B digit as address signal. Refer to +-- Annex A.6 for the usage of the Hex B digit. +-- +-- Note that when CorrelationID is transported in Generic Digits, then the digits shall +-- always be BCD encoded. + + +-- DpSpecificCriteria notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +DpSpecificCriteria ::= CHOICE +{ + applicationTimer [1] ApplicationTimer, + midCallControlInfo [2] MidCallControlInfo, + dpSpecificCriteriaAlt [3] DpSpecificCriteriaAlt +} + +DpSpecificCriteriaAlt ::= SEQUENCE { + ..., + changeOfPositionControlInfo [0] ChangeOfPositionControlInfo, + numberOfDigits [1] NumberOfDigits OPTIONAL, + interDigitTimeout [2] INTEGER (1..127) OPTIONAL + } +-- interDigitTimeout duration in seconds. + +DpSpecificInfoAlt ::= SEQUENCE { + ..., + oServiceChangeSpecificInfo [0] SEQUENCE { + ext-basicServiceCode [0] Ext-BasicServiceCode OPTIONAL, + ..., + initiatorOfServiceChange [1] InitiatorOfServiceChange OPTIONAL, + natureOfServiceChange [2] NatureOfServiceChange OPTIONAL + }, + tServiceChangeSpecificInfo [1] SEQUENCE { + ext-basicServiceCode [0] Ext-BasicServiceCode OPTIONAL, + ..., + initiatorOfServiceChange [1] InitiatorOfServiceChange OPTIONAL, + natureOfServiceChange [2] NatureOfServiceChange OPTIONAL + } + } +-- This datatype is for extension in future releases. + +-- ElapsedTime notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ElapsedTime ::= CHOICE +{ + timeGPRSIfNoTariffSwitch [0] INTEGER (0..86400), + timeGPRSIfTariffSwitch [1] SEQUENCE + { + timeGPRSSinceLastTariffSwitch [0] INTEGER (0..86400), + timeGPRSTariffSwitchInterval [1] INTEGER (0..86400) OPTIONAL + } +} + + +ElapsedTimeRollOver ::= CHOICE { + rOTimeGPRSIfNoTariffSwitch [0] INTEGER (0..255), + rOTimeGPRSIfTariffSwitch [1] SEQUENCE { + rOTimeGPRSSinceLastTariffSwitch [0] INTEGER (0..255) OPTIONAL, + rOTimeGPRSTariffSwitchInterval [1] INTEGER (0..255) OPTIONAL + } +} + +-- Indicates the EndUserAddress, refer to 3GPP TS 29.060 for the encoding. +-- The pDPTypeOrganization shall use the least significant 4 bits of the octet encoded. +-- The sender of this parameter shall set the most significant 4 bits of the octet to 1. +-- The receiver of this parameter shall ignore the most significant 4 bits of this octet. +-- Not used anymore, replaced by PDPType +-- EndUserAddress ::= SEQUENCE +-- { +-- pDPTypeOrganization [0] OCTET STRING (SIZE (1)), +-- pDPTypeNumber [1] OCTET STRING (SIZE (1)), +-- pDPAddress [2] OCTET STRING (SIZE (cAPSpecificBoundSetminPDPAddressLength..cAPSpecificBoundSetmaxPDPAddressLength)) OPTIONAL +-- } + +-- Indicates the EndUserAddress, refer to 3GPP TS 29.060 [12] for the encoding. +-- The pDPTypeOrganization shall use the least significant 4 bits of the octet encoded. +-- The sender of this parameter shall set the most significant 4 bits of the octet to 1. +-- The receiver of this parameter shall ignore the most significant 4 bits of this octet. + +-- ErrorTreatment notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ErrorTreatment ::= ENUMERATED +{ + stdErrorAndInfo (0), + help (1), + repeatPrompt (2) +} + +-- EventSpecificInformationBCSM notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +EventSpecificInformationBCSM ::= CHOICE +{ + routeSelectFailureSpecificInfo [2] SEQUENCE { + failureCause [0] Cause OPTIONAL, + ... + }, + oCalledPartyBusySpecificInfo [3] SEQUENCE { + busyCause [0] Cause OPTIONAL, + ... + }, + oNoAnswerSpecificInfo [4] SEQUENCE { + -- no specific info defined -- + ... + }, + oAnswerSpecificInfo [5] SEQUENCE { + destinationAddress [50] CalledPartyNumber OPTIONAL, + or-Call [51] NULL OPTIONAL, + forwardedCall [52] NULL OPTIONAL, + chargeIndicator [53] ChargeIndicator OPTIONAL, + ext-basicServiceCode [54] Ext-BasicServiceCode OPTIONAL, + ext-basicServiceCode2 [55] Ext-BasicServiceCode OPTIONAL, + ... + }, + oMidCallSpecificInfo [6] SEQUENCE { + omidCallEvents [1] CHOICE { + dTMFDigitsCompleted [3] Digits, + dTMFDigitsTimeOut [4] Digits + } OPTIONAL, + ... + }, + oDisconnectSpecificInfo [7] SEQUENCE { + releaseCause [0] Cause OPTIONAL, + ... + }, + tBusySpecificInfo [8] SEQUENCE { + busyCause [0] Cause OPTIONAL, + callForwarded [50] NULL OPTIONAL, + routeNotPermitted [51] NULL OPTIONAL, + forwardingDestinationNumber [52] CalledPartyNumber OPTIONAL, + ... + }, + tNoAnswerSpecificInfo [9] SEQUENCE { + callForwarded [50] NULL OPTIONAL, + forwardingDestinationNumber [52] CalledPartyNumber OPTIONAL, + ... + }, + tAnswerSpecificInfo [10] SEQUENCE { + destinationAddress [50] CalledPartyNumber OPTIONAL, + or-Call [51] NULL OPTIONAL, + forwardedCall [52] NULL OPTIONAL, + chargeIndicator [53] ChargeIndicator OPTIONAL, + ext-basicServiceCode [54] Ext-BasicServiceCode OPTIONAL, + ext-basicServiceCode2 [55] Ext-BasicServiceCode OPTIONAL, + ... + }, + tMidCallSpecificInfo [11] SEQUENCE { + tmidCallEvents [1] CHOICE { + dTMFDigitsCompleted [3] Digits, + dTMFDigitsTimeOut [4] Digits + } OPTIONAL, + ... + }, + tDisconnectSpecificInfo [12] SEQUENCE { + releaseCause [0] Cause OPTIONAL, + ... + }, + oTermSeizedSpecificInfo [13] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ... + }, + callAcceptedSpecificInfo [20] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ... + }, + oAbandonSpecificInfo [21] SEQUENCE { + routeNotPermitted [50] NULL OPTIONAL, + ... + }, + oChangeOfPositionSpecificInfo [50] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ..., + metDPCriteriaList [51] MetDPCriteriaList OPTIONAL + }, + tChangeOfPositionSpecificInfo [51] SEQUENCE { + locationInformation [50] LocationInformation OPTIONAL, + ..., + metDPCriteriaList [51] MetDPCriteriaList OPTIONAL + }, + dpSpecificInfoAlt [52] DpSpecificInfoAlt +} + +-- EventSpecificInformationSMS notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +EventSpecificInformationSMS ::= CHOICE +{ + o-smsFailureSpecificInfo [0] SEQUENCE + { + smsfailureCause [0] MO-SMSCause OPTIONAL + }, + o-smsSubmittedSpecificInfo [1] SEQUENCE + { + -- no specific info defined- + foo INTEGER(0) OPTIONAL + }, + t-smsFailureSpecificInfo [2] SEQUENCE { + failureMTSMSCause [0] MT-SMSCause OPTIONAL, + ... + }, + t-smsDeliverySpecificInfo [3] SEQUENCE { + -- no specific info defined- + ... + } +} + +-- EventTypeBCSM notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +EventTypeBCSM ::= ENUMERATED +{ + collectedInfo (2), + analyzedInformation (3), + routeSelectFailure (4), + oCalledPartyBusy (5), + oNoAnswer (6), + oAnswer (7), + oMidCall (8), + oDisconnect (9), + oAbandon (10), + termAttemptAuthorized (12), + tBusy (13), + tNoAnswer (14), + tAnswer (15), + tMidCall (16), + tDisconnect (17), + tAbandon (18), + oTermSeized (19), + callAccepted (27), + oChangeOfPosition (50), + tChangeOfPosition (51), + ..., + oServiceChange (52), + tServiceChange (53) +} +-- Indicates the BCSM detection point event. +-- Values collectedInfo, analyzedInformation and termAttemptAuthorized may be used +-- for TDPs only. +-- Exception handling: reception of an unrecognized value shall be treated +-- like reception of no detection point. + +-- EventTypeSMS notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +EventTypeSMS ::= ENUMERATED +{ + sms-CollectedInfo (1), + o-smsFailure (2), + o-smsSubmission (3), + sms-DeliveryRequested (11), + t-smsFailure (12), + t-smsDelivery (13) +} +-- Values sms-CollectedInfo and sms-DeliveryRequested may be used for TDPs only. +-- Replace by ExtensionsArray +--Extensions ::= SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfExtensions) OF ExtensionField +-- + +-- FCIBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +FCIBillingChargingCharacteristics ::= CAMEL-FCIBillingChargingCharacteristics + +-- FCIGPRSBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +FCIGPRSBillingChargingCharacteristics ::= CAMEL-FCIGPRSBillingChargingCharacteristics + +-- shall be the result of the BER-encoded value of type +-- CAMEL-FCIGPRSBillingChargingCharacteristics + +-- FCISMSBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times + +--FCISMSBillingChargingCharacteristics ::= OCTET STRING (SIZE (cAPSpecificBoundSetminFCIBillingChargingLength ..cAPSpecificBoundSetmaxFCIBillingChargingLength )) +-- (CONSTRAINED BY { shall be the result of the BER-encoded value of type +-- CAMEL-FCISMSBillingChargingCharacteristics {bound}}) + +FCISMSBillingChargingCharacteristics ::= CAMEL-FCISMSBillingChargingCharacteristics + +-- ForwardServiceInteractionInd notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ForwardServiceInteractionInd ::= SEQUENCE +{ + conferenceTreatmentIndicator [1] OCTET STRING (SIZE(1)) OPTIONAL, + -- acceptConferenceRequest 'xxxx xx01'B + -- rejectConferenceRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect conference treatment + callDiversionTreatmentIndicator [2] OCTET STRING (SIZE(1)) OPTIONAL, + -- callDiversionAllowed 'xxxx xx01'B + -- callDiversionNotAllowed 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call diversion treatment + callingPartyRestrictionIndicator [4] OCTET STRING (SIZE(1)) OPTIONAL, + -- noINImpact 'xxxx xx01'B + -- presentationRestricted 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect calling party restriction treatment +... +} + +-- GapCriteria notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +GapCriteria ::= CHOICE +{ + basicGapCriteria BasicGapCriteria, + compoundGapCriteria CompoundCriteria +} + + +-- GapIndicators notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +GapIndicators ::= SEQUENCE +{ + duration1 [0] Duration, + gapInterval [1] Interval, + ... +} + + + +-- GapOnService notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +GapOnService ::= SEQUENCE +{ + serviceKey [0] ServiceKey, + ... +} + + +-- GapTreatment notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +GapTreatment ::= CHOICE +{ + informationToSend [0] InformationToSend, + releaseCause [1] Cause +} + +-- GenericNumber notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +GenericNumber ::= + + + OCTET STRING (SIZE (cAPSpecificBoundSetminGenericNumberLength..cAPSpecificBoundSetmaxGenericNumberLength)) + +-- GenericNumbers notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +GenericNumbers ::= + +SET SIZE (1..cAPSpecificBoundSetnumOfGenericNumbers) OF GenericNumber + + +-- GPRS-QoS notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +GPRS-QoS ::= CHOICE +{ + short-QoS-format [0] QoS-Subscribed, + long-QoS-format [1] Ext-QoS-Subscribed +} + +GPRS-QoS-Extension ::= SEQUENCE { + supplement-to-long-QoS-format [0] Ext2-QoS-Subscribed, + ... + } + +-- GPRSCause notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +GPRSCause ::= + + OCTET STRING (SIZE (cAPSpecificBoundSetminGPRSCauseLength..cAPSpecificBoundSetmaxGPRSCauseLength)) +-- 00000000 Unspecified +-- All other values shall be interpreted as 'Unspecified'. +-- +-- This parameter indicates the cause for CAP interface related information. +-- The GPRSCause mapping to/from GTP cause values specified in the 3GPP TS 29.060 [12] and +-- to/from 3GPP TS 24.008 [9] GMM cause and SM cause values are outside scope of this document. + + +-- GPRSEvent notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +GPRSEvent ::= SEQUENCE +{ + gPRSEventType [0] GPRSEventType, + monitorMode [1] MonitorMode +} + +-- GPRSEventSpecificInformation notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +GPRSEventSpecificInformation ::= CHOICE +{ + attachChangeOfPositionSpecificInformation [0] SEQUENCE + { + locationInformationGPRS [0] LocationInformationGPRS OPTIONAL, + ... + }, + pdp-ContextchangeOfPositionSpecificInformation [1] SEQUENCE + { + accessPointName [0] AccessPointName OPTIONAL, + chargingID [1] GPRSChargingID OPTIONAL, + locationInformationGPRS [2] LocationInformationGPRS OPTIONAL, + pDPType [3] PDPType OPTIONAL, + qualityOfService [4] QualityOfService OPTIONAL, + timeAndTimeZone [5] TimeAndTimezone OPTIONAL, + ..., + gGSNAddress [6] GSN-Address OPTIONAL + }, + detachSpecificInformation [2] SEQUENCE + { + inititatingEntity [0] InitiatingEntity OPTIONAL, + ..., + routeingAreaUpdate [1] NULL OPTIONAL + }, + disconnectSpecificInformation [3] SEQUENCE + { + inititatingEntity [0] InitiatingEntity OPTIONAL, + ..., + routeingAreaUpdate [1] NULL OPTIONAL + }, + pDPContextEstablishmentSpecificInformation [4] SEQUENCE + { + accessPointName [0] AccessPointName OPTIONAL, + pDPType [1] PDPType OPTIONAL, + qualityOfService [2] QualityOfService OPTIONAL, + locationInformationGPRS [3] LocationInformationGPRS OPTIONAL, + timeAndTimeZone [4] TimeAndTimezone OPTIONAL, + pDPInitiationType [5] PDPInitiationType OPTIONAL, + ..., + secondaryPDPContext [6] NULL OPTIONAL + }, + pDPContextEstablishmentAcknowledgementSpecificInformation [5] SEQUENCE + { + accessPointName [0] AccessPointName OPTIONAL, + chargingID [1] GPRSChargingID OPTIONAL, + pDPType [2] PDPType OPTIONAL, + qualityOfService [3] QualityOfService OPTIONAL, + locationInformationGPRS [4] LocationInformationGPRS OPTIONAL, + timeAndTimeZone [5] TimeAndTimezone OPTIONAL, + ..., + gGSNAddress [6] GSN-Address OPTIONAL + } +} + +-- GPRSEventType notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +GPRSEventType ::= ENUMERATED +{ + attach (1), + attachChangeOfPosition (2), + detached (3), + pdp-ContextEstablishment (11), + pdp-ContextEstablishmentAcknowledgement (12), + disconnect (13), + pdp-ContextChangeOfPosition (14) +} + +-- GPRSMSClass notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +GPRSMSClass ::= SEQUENCE + { + mSNetworkCapability [0] MSNetworkCapability, + mSRadioAccessCapability [1] MSRadioAccessCapability OPTIONAL + } + +-- InbandInfo notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +InbandInfo ::= SEQUENCE +{ + messageID [0] MessageID, + numberOfRepetitions [1] INTEGER (1..127) OPTIONAL, + duration2 [2] INTEGER (0..32767) OPTIONAL, + interval [3] INTEGER (0..32767) OPTIONAL, + ... +} + + +-- InformationToSend notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +InformationToSend ::= CHOICE +{ + inbandInfo [0] InbandInfo, + tone [1] Tone +} + +-- InitiatingEntity notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +InitiatingEntity ::= ENUMERATED +{ + mobileStation (0), + sgsn (1), + hlr (2), + ggsn (3) +} + +InitiatorOfServiceChange ::= ENUMERATED +{ + a-side (0), + b-side (1) +} + +-- InvokeID notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +--InvokeID ::= TCInvokeIdSet +InvokeID ::= InvokeIdType + +-- IPRoutingAddress notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +IPRoutingAddress ::= CalledPartyNumber + +-- IPSSPCapabilities notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +IPSSPCapabilities ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminIPSSPCapabilitiesLength..cAPSpecificBoundSetmaxIPSSPCapabilitiesLength )) +-- Indicates the gsmSRF resources available. The parameter has two parts, a standard and a +-- bilateral part. The standard part indicates capabilities defined as optional in CAP +-- that shall be recognised (but not necessarily supported) by a gsmSCF. The bilateral +-- part contains further information that is not specified in this standard, but which is set +-- according to bilateral agreements between network operators and/or equipment vendors. +-- The last octet of the standard part is indicated by bit 7 being set to 0, otherwise Bit 7 of +-- a standard part octet is set to 1 indicating that the standard part continues in the following +-- octet. Coding is as follows: + +-- Octet 1 Standard Part for CAP +-- Bit Value Meaning +-- 0 0 IPRoutingAddress not supported +-- 1 IPRoutingAddress supported +-- 1 0 VoiceBack not supported +-- 1 VoiceBack supported +-- 2 0 VoiceInformation not supported, via speech recognition +-- 1 VoiceInformation supported, via speech recognition +-- 3 0 VoiceInformation not supported, via voice recognition +-- 1 VoiceInformation supported, via voice recognition +-- 4 0 Generation of voice announcements from Text not supported +-- 1 Generation of voice announcements from Text supported +-- 5 - Reserved +-- 6 - Reserved +-- 7 0 End of standard part +-- 1 This value is reserved in CAP +-- +-- Octets 2 to 4 Bilateral Part: Network operator/equipment vendor specific + +LegOrCallSegment ::= CHOICE { + callSegmentID [0] CallSegmentID, + legID [1] LegID + } + +-- LegType notes: not recursive, exported, +-- locally refd 6 times, import refd 0 times +LegType ::= OCTET STRING (SIZE(1)) + +-- LocationInformationGPRS notes: not recursive, exported, +-- locally refd 6 times, import refd 0 times +LocationInformationGPRS ::= SEQUENCE +{ + cellGlobalIdOrServiceAreaIdOrLAI [0] CellGlobalIdOrServiceAreaIdOrLAI OPTIONAL, + routeingAreaIdentity [1] RAIdentity OPTIONAL, + geographicalInformation [2] GeographicalInformation OPTIONAL, + sgsn-Number [3] ISDN-AddressString OPTIONAL, + selectedLSAIdentity [4] LSAIdentity OPTIONAL, + extensionContainer [5] ExtensionContainer OPTIONAL, + ..., + saiPresent [6] NULL OPTIONAL +} +-- cellGlobalIdOrServiceAreaIdOrLAI shall contain the value part of the +-- CellGlobalIdOrServiceAreaIdFixedLength type or the LAIFixedLength type (i.e. excluding tags +-- and lengths) as defined in 3GPP TS 29.002 [13]. +-- sai-Present indicates that the cellGlobalIdOrServiceAreaIdOrLAI parameter contains +-- a Service Area Identity. + +-- LocationNumber notes: not recursive, exported, +-- locally refd 4 times, import refd 0 times +LocationNumber ::= + + OCTET STRING (SIZE (cAPSpecificBoundSetminLocationNumberLength ..cAPSpecificBoundSetmaxLocationNumberLength )) +-- Indicates the Location Number for the calling party. +-- Refer to ETSI EN 300 356-1 [23] for encoding. + +LowLayerCompatibility ::= +OCTET STRING (SIZE (cAPSpecificBoundSetminLowLayerCompatibilityLength .. cAPSpecificBoundSetmaxLowLayerCompatibilityLength )) +-- indicates the LowLayerCompatibility for the calling party. +-- Refer to 3GPP TS 24.008 [9] for encoding. +-- It shall be coded as in the value part defined in 3GPP TS 24.008. +-- i.e. the 3GPP TS 24.008 IEI and 3GPP TS 24.008 octet length indicator +-- shall not be included. + +-- MessageID notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +MessageID ::= CHOICE +{ + elementaryMessageID [0] Integer4, + text [1] SEQUENCE + { + messageContent [0] + + IA5String (SIZE (cAPSpecificBoundSetminMessageContentLength..cAPSpecificBoundSetmaxMessageContentLength)), + attributes [1] + + OCTET STRING (SIZE (cAPSpecificBoundSetminAttributesLength..cAPSpecificBoundSetmaxAttributesLength)) OPTIONAL + }, + elementaryMessageIDs [29] + + SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfMessageIDs) OF Integer4, + variableMessage [30] SEQUENCE + { + elementaryMessageID [0] Integer4, + variableParts [1] VariablePartsArray + } +} +-- Use of the text parameter is network operator/equipment vendor specific. + +MetDPCriteriaList ::= SEQUENCE SIZE(1..cAPSpecificBoundsSetnumOfChangeOfPositionControlInf) OF MetDPCriterion + +MetDPCriterion ::= CHOICE { + enteringCellGlobalId [0] CellGlobalIdOrServiceAreaIdFixedLength, + leavingCellGlobalId [1] CellGlobalIdOrServiceAreaIdFixedLength, + enteringServiceAreaId [2] CellGlobalIdOrServiceAreaIdFixedLength, + leavingServiceAreaId [3] CellGlobalIdOrServiceAreaIdFixedLength, + enteringLocationAreaId [4] LAIFixedLength, + leavingLocationAreaId [5] LAIFixedLength, + inter-SystemHandOverToUMTS [6] NULL, + inter-SystemHandOverToGSM [7] NULL, + inter-PLMNHandOver [8] NULL, + inter-MSCHandOver [9] NULL, + metDPCriterionAlt [10] MetDPCriterionAlt +} +-- The enteringCellGlobalId and leavingCellGlobalId shall contain a Cell Global Identification. +-- The enteringServiceAreaId and leavingServiceAreaId shall contain a Service Area Identification. + +MetDPCriterionAlt ::= SEQUENCE { + ... + } + +MidCallControlInfo ::= SEQUENCE { + minimumNumberOfDigits [0] INTEGER (1..30) DEFAULT 1, + maximumNumberOfDigits [1] INTEGER (1..30) DEFAULT 30, + endOfReplyDigit [2] OCTET STRING (SIZE (1..2)) OPTIONAL, + cancelDigit [3] OCTET STRING (SIZE (1..2)) OPTIONAL, + startDigit [4] OCTET STRING (SIZE (1..2)) OPTIONAL, + interDigitTimeout [6] INTEGER (1..127) DEFAULT 10, + ... + } +-- +-- - minimumNumberOfDigits specifies the minumum number of digits that shall be collected +-- - maximumNumberOfDigits specifies the maximum number of digits that shall be collected +-- - endOfReplyDigit specifies the digit string that denotes the end of the digits +-- to be collected. +-- - cancelDigit specifies the digit string that indicates that the input shall +-- be erased and digit collection shall start afresh. +-- - startDigit specifies the digit string that denotes the start of the digits +-- to be collected. +-- - interDigitTimeout specifies the maximum duration in seconds between successive +-- digits. +-- +-- endOfReplyDigit, cancelDigit and startDigit shall contain digits in the range 0..9, '*' and '#' +-- only. The collected digits string, reported to the gsmSCF, shall include the endOfReplyDigit and +-- the startDigit, if present. +-- +-- endOfReplyDigit, cancelDigit and startDigit shall be encoded as BCD digits. Each octet shall +-- contain one BCD digit, in the 4 least significant bits of each octet. +-- The following encoding shall be used for the over-decadic digits: 1011 (*), 1100 (#). + + + + +-- MonitorMode notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +MonitorMode ::= ENUMERATED +{ + interrupted (0), + notifyAndContinue (1), + transparent (2) +} +-- Indicates the event is relayed and/or processed by the SSP. +-- Transparent means that the gsmSSF or gprsSSF does not notify the gsmSCF of the event. +-- For the use of this parameter refer to the procedure descriptions in clause 11. +-- For the RequestNotificationCharging operation, 'interrupted' shall not be used in MonitorMode. + +-- MO-SMSCause notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +MO-SMSCause ::= ENUMERATED { + systemFailure (0), + unexpectedDataValue (1), + facilityNotSupported (2), + sM-DeliveryFailure (3), + releaseFromRadioInterface (4) + } +MT-SMSCause ::= OCTET STRING (SIZE (1)) +-- This variable is sent to the gsmSCF for a Short Message delivery failure +-- notification. +-- If the delivery failure is due to RP-ERROR RPDU received from the MS, +-- then MT-SMSCause shall be set to the RP-Cause component in the RP-ERROR RPDU. +-- Refer to 3GPP TS 24.011 [10] for the encoding of RP-Cause values. +-- Otherwise, if the delivery failure is due to internal failure in the MSC or SGSN +-- or time-out from the MS, then MT-SMSCause shall be set to 'Protocol error, +-- unspecified', as defined in 3GPP TS 24.011 [10]. + + + + +-- MSNetworkCapability notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +MSNetworkCapability ::= + +OCTET STRING (SIZE (1..8)) +-- MS Network Capability describes the GPRS terminal capabilites related to the network, i.e. SMS +-- point to point service over packet data channels. For encoding refer to 3GPP TS 24.008 [12]. +-- It shall contain the value part defined in 3GPP TS 24.008 only. I.e. the 3GPP TS 24.008 IEI +-- and 3GPP TS 24.008 octet length indicator shall not be included. + + +-- MSRadioAccessCapability notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +MSRadioAccessCapability ::= + +OCTET STRING (SIZE (1..50)) +-- MS Radio Access Capability describes the terminal capabilites relevant for the radio network, +-- which may affect the way the network handles the mobile. +-- For encoding refer to 3GPP TS 24.008 [12]. +-- It shall contain the value part defined in 3GPP TS 24.008 only. I.e. the 3GPP TS 24.008 IEI +-- and 3GPP TS 24.008 octet length indicator shall not be included. + + +-- NAOliInfo notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +NAOliInfo ::= + +OCTET STRING (SIZE (1)) +-- NA Oli information takes the same value as defined in ANSI T1.113-1995 [92] +-- e.g. '3D'H - Decimal value 61 - Cellular Service (Type 1) +-- '3E'H - Decimal value 62 - Cellular Service (Type 2) +-- '3F'H - Decimal value 63 - Cellular Service (roaming) + +NatureOfServiceChange ::= ENUMERATED { + userInitiated (0), + networkInitiated (1) +} + +NumberOfDigits ::= INTEGER (1..255) +-- Indicates the number of digits to be collected. + + +-- OCSIApplicable notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +OCSIApplicable ::= NULL +-- Indicates that the Originating CAMEL Subscription Information, if present, shall be +-- applied on the outgoing call leg created with a Connect operation. For the use of this +-- parameter see 3GPP TS 23.078 [7]. + +-- OriginalCalledPartyID notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +OriginalCalledPartyID ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminOriginalCalledPartyIDLength ..cAPSpecificBoundSetmaxOriginalCalledPartyIDLength )) + + + +-- PDPId notes: not recursive, exported, +-- locally refd 11 times, import refd 0 times +PDPId ::= + +OCTET STRING (SIZE (1)) + +-- PDPInitiationType notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +PDPInitiationType ::= ENUMERATED +{ + mSInitiated (0), + networkInitiated (1) +} + +-- QualityOfService notes: not recursive, exported, +-- locally refd 5 times, import refd 0 times +QualityOfService ::= + SEQUENCE +{ + requested-QoS [0] GPRS-QoS OPTIONAL, + subscribed-QoS [1] GPRS-QoS OPTIONAL, + negotiated-QoS [2] GPRS-QoS OPTIONAL, + ..., + requested-QoS-Extension [3] GPRS-QoS-Extension OPTIONAL, + subscribed-QoS-Extension [4] GPRS-QoS-Extension OPTIONAL, + negotiated-QoS-Extension [5] GPRS-QoS-Extension OPTIONAL +} + +-- ReceivingSideID notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +ReceivingSideID ::= CHOICE +{ + receivingSideID [1] LegType +} + +-- RedirectingPartyID notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +RedirectingPartyID ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminRedirectingPartyIDLength ..cAPSpecificBoundSetmaxRedirectingPartyIDLength )) +-- Indicates redirecting number. +-- Refer to ETSI EN 300 356-1 [23] Redirecting number for encoding. + + +-- RequestedInformationList notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +RequestedInformationList ::= + +SEQUENCE SIZE (1..numOfInfoItems) OF RequestedInformation + +-- RequestedInformationTypeList notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +RequestedInformationTypeList ::= + +SEQUENCE SIZE (1..numOfInfoItems) OF RequestedInformationType + +-- RequestedInformation notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +RequestedInformation ::= SEQUENCE +{ + requestedInformationType [0] RequestedInformationType, + requestedInformationValue [1] RequestedInformationValue +} + +-- RequestedInformationType notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +RequestedInformationType ::= ENUMERATED +{ + callAttemptElapsedTime (0), + callStopTime (1), + callConnectedElapsedTime (2), + releaseCause (30) +} + +-- RequestedInformationValue notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +RequestedInformationValue ::= CHOICE +{ + callAttemptElapsedTimeValue [0] INTEGER (0..255), + callStopTimeValue [1] DateAndTime, + callConnectedElapsedTimeValue [2] Integer4, + releaseCauseValue [30] Cause +} + +-- RPCause notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +RPCause ::= + +OCTET STRING (SIZE (1)) +-- RP cause according to 3GPP TS 24.011 [10] or 3GPP TS 29.002 [11]. +-- GsmSCF shall send this cause in the ReleaseSMS operation. +-- For a MO-SMS service, the MSC or SGSN shall send the RP Cause to the originating MS. +-- It shall be used to overwrite the RP-Cause element in the RP-ERROR RPDU. +-- For a MT-SMS service, the MSC or SGSN shall send the RP Cause to the sending SMS-GMSC. +-- It shall be used to overwrite the RP-Cause element in the RP-ERROR RPDU. + +-- ScfID notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +ScfID ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminScfIDLength..cAPSpecificBoundSetmaxScfIDLength )) + +-- SCIBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +SCIBillingChargingCharacteristics ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminSCIBillingChargingLength ..cAPSpecificBoundSetmaxSCIBillingChargingLength )) + +-- SCIGPRSBillingChargingCharacteristics notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +SCIGPRSBillingChargingCharacteristics ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminSCIBillingChargingLength ..cAPSpecificBoundSetmaxSCIBillingChargingLength )) + +-- SendingSideID notes: not recursive, exported, +-- locally refd 4 times, import refd 0 times +SendingSideID ::= CHOICE +{ + sendingSideID [0] LegType +} + +-- ServiceInteractionIndicatorsTwo notes: not recursive, exported, +-- locally refd 5 times, import refd 0 times +ServiceInteractionIndicatorsTwo ::= SEQUENCE +{ + forwardServiceInteractionInd [0] ForwardServiceInteractionInd OPTIONAL, + backwardServiceInteractionInd [1] BackwardServiceInteractionInd OPTIONAL, + bothwayThroughConnectionInd [2] BothwayThroughConnectionInd OPTIONAL, + connectedNumberTreatmentInd [4] ConnectedNumberTreatmentInd OPTIONAL, + nonCUGCall [13] NULL OPTIONAL, + -- applicable to Connect and ContinueWithArgument + -- indicates that no parameters for CUG shall be used for the call (i.e. the call shall + -- be a non-CUG call). + -- If not present, it indicates one of three things: + -- a) continue with modified CUG information (when one or more of either CUG Interlock Code + -- and Outgoing Access Indicator are present), or + -- b) continue with original CUG information (when neither CUG Interlock Code or Outgoing + -- Access Indicator are present), i.e. no IN impact. + -- c) continue with the original non-CUG call. + holdTreatmentIndicator [50] OCTET STRING (SIZE (1)) OPTIONAL, + -- applicable to InitialDP, Connect and ContinueWithArgument + -- acceptHoldRequest 'xxxx xx01'B + -- rejectHoldRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call hold treatment + cwTreatmentIndicator [51] OCTET STRING (SIZE (1)) OPTIONAL, + -- applicable to InitialDP, Connect and ContinueWithArgument + -- acceptCw 'xxxx xx01'B + -- rejectCw 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect call waiting treatment + ectTreatmentIndicator [52] OCTET STRING (SIZE (1)) OPTIONAL, + -- applicable to InitialDP, Connect and ContinueWithArgument + -- acceptEctRequest 'xxxx xx01'B + -- rejectEctRequest 'xxxx xx10'B + -- if absent from Connect or ContinueWithArgument, + -- then CAMEL service does not affect explicit call transfer treatment + ... +} + +-- SGSNCapabilities notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +SGSNCapabilities ::= + + +OCTET STRING (SIZE (1)) +-- Indicates the SGSN capabilities. The coding of the parameter is as follows: +-- Bit Value Meaning +-- 0 0 AoC not supported by SGSN +-- 1 AoC supported by SGSN +-- 1 - This bit is reserved in CAP V.3 +-- 2 - This bit is reserved in CAP V.3 +-- 3 - This bit is reserved in CAP V.3 +-- 4 - This bit is reserved in CAP V.3 +-- 5 - This bit is reserved in CAP V.3 +-- 6 - This bit is reserved in CAP V.3 +-- 7 - This bit is reserved in CAP V.3 + +SMS-AddressString ::= AddressString +-- (SIZE (1 .. maxSMS-AddressStringLength)) +-- This data type is used to transport CallingPartyNumber for MT-SMS. +-- If this data type is used for MO-SMS, then the maximum number of digits shall be 16. +-- An SMS-AddressString may contain an alphanumeric character string. In this +-- case, a nature of address indicator '101'B is used, in accordance with +-- 3GPP TS 23.040 [6]. The address is coded in accordance with the GSM 7-bit +-- default alphabet definition and the SMS packing rules as specified in +-- 3GPP TS 23.038 [15] in this case. +-- maxSMS-AddressStringLength INTEGER ::= 11 + +SMSEvent ::= SEQUENCE +{ + eventTypeSMS [0] EventTypeSMS, + monitorMode [1] MonitorMode +} + +-- TimeAndTimezone notes: not recursive, exported, +-- locally refd 7 times, import refd 0 times +TimeAndTimezone ::= + OCTET STRING (SIZE (cAPSpecificBoundSetminTimeAndTimezoneLength..cAPSpecificBoundSetmaxTimeAndTimezoneLength)) +-- Indicates the time and timezone, relative to GMT. This parameter is BCD encoded. +-- The year digit indicating millenium occupies bits 0-3 of the first octet, and the year +-- digit indicating century occupies bits 4-7 of the first octet. +-- The year digit indicating decade occupies bits 0-3 of the second octet, whilst the digit +-- indicating the year within the decade occupies bits 4-7 of the second octet. +-- The most significant month digit occupies bits 0-3 of the third octet, and the least +-- significant month digit occupies bits 4-7 of the third octet. +-- The most significant day digit occupies bits 0-3 of the fourth octet, and the least +-- significant day digit occupies bits 4-7 of the fourth octet. +-- The most significant hours digit occupies bits 0-3 of the fifth octet, and the least +-- significant hours digit occupies bits 4-7 of the fifth octet. +-- The most significant minutes digit occupies bits 0-3 of the sixth octet, and the least +-- significant minutes digit occupies bits 4-7 of the sixth octet. +-- The most significant seconds digit occupies bits 0-3 of the seventh octet, and the least +-- significant seconds digit occupies bits 4-7 of the seventh octet. +-- +-- The timezone information occupies the eighth octet. For the encoding of Timezone refer to +-- 3GPP TS 23.040 [6]. +-- +-- The BCD digits are packed and encoded as follows: +-- +-- Bit 7 6 5 4 | 3 2 1 0 +-- 2nd digit | 1st digit Octet 1 +-- 3rd digit | 4th digit Octet 2 +-- .. .. +-- nth digit | n-1th digit Octet m +-- +-- 0000 digit 0 +-- 0001 digit 1 +-- 0010 digit 2 +-- 0011 digit 3 +-- 0100 digit 4 +-- 0101 digit 5 +-- 0110 digit 6 +-- 0111 digit 7 +-- 1000 digit 8 +-- 1001 digit 9 +-- 1010 spare +-- 1011 spare +-- 1100 spare +-- 1101 spare +-- 1110 spare +-- 1101 spare +-- +-- where the leftmost bit of the digit is either bit 7 or bit 3 of the octet. + +-- TimeIfNoTariffSwitch notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TimeIfNoTariffSwitch ::= INTEGER (0..864000) + +-- TimeIfTariffSwitch notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TimeIfTariffSwitch ::= SEQUENCE +{ + timeSinceTariffSwitch [0] INTEGER (0..864000), + tttariffSwitchInterval [1] INTEGER (1..864000) OPTIONAL +} + +-- TimeInformation notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TimeInformation ::= CHOICE +{ + timeIfNoTariffSwitch [0] TimeIfNoTariffSwitch, + timeIfTariffSwitch [1] TimeIfTariffSwitch +} + + +-- TimerID notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +TimerID ::= ENUMERATED +{ + tssf (0) +} + +-- TimerValue notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +TimerValue ::= Integer4 + + +-- Tone notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +Tone ::= SEQUENCE +{ + toneID [0] Integer4, + duration3 [1] Integer4 OPTIONAL +} + +-- TPDataCodingScheme notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TPDataCodingScheme ::= + +OCTET STRING (SIZE (1)) +-- TP Data Coding Scheme according to 3GPP TS 23.040 [6] + +-- TPProtocolIdentifier notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TPProtocolIdentifier ::= OCTET STRING (SIZE (1)) +-- indicates the protocol used above the SM-Transfer Layer as specified in 3GPP TS 23.040 [6]. + +TPShortMessageSpecificInfo ::= OCTET STRING (SIZE (1)) +-- contains the 1st octect of the applicable TPDU or the SMS-COMMAND TPDU as specified in +-- 3GPP TS 23.040 [6]. + + +-- TPValidityPeriod notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TPValidityPeriod ::= OCTET STRING (SIZE (1..7)) +-- indicates the length of the validity period or the absolute time of the validity +-- period termination as specified in 3GPP TS 23.040 [6]. +-- the length of ValidityPeriod is either 1 octet or 7 octets + +-- TransferredVolume notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +TransferredVolume ::= CHOICE +{ + volumeIfNoTariffSwitch [0] INTEGER (0..4294967295), + volumeIfTariffSwitch [1] SEQUENCE + { + volumeSinceLastTariffSwitch [0] INTEGER (0..4294967295), + volumeTariffSwitchInterval [1] INTEGER (0..4294967295) OPTIONAL + } +} +-- volumeIfNoTariffSwitch, volumeSinceLastTariffSwitch and volumeTariffSwitchInterval +-- are measured in bytes. + + +TransferredVolumeRollOver ::= CHOICE { + rOVolumeIfNoTariffSwitch [0] INTEGER (0.. 255), + rOVolumeIfTariffSwitch [1] SEQUENCE { + rOVolumeSinceLastTariffSwitch [0] INTEGER (0.. 255) OPTIONAL, + rOVolumeTariffSwitchInterval [1] INTEGER (0.. 255) OPTIONAL + } +} +-- rO-VolumeIfNoTariffSwitch, rO-VolumeSinceLastTariffSwitch and rO-VolumeTariffSwitchInterval +-- present counters indicating the number of parameter range rollovers. + +UnavailableNetworkResource ::= ENUMERATED { + unavailableResources (0), + componentFailure (1), + basicCallProcessingException (2), + resourceStatusFailure (3), + endUserFailure (4) +} +-- Indicates the network resource that failed. + +-- VariablePart notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +VariablePart ::= CHOICE +{ + integer [0] Integer4, + number [1] Digits, + time [2] + OCTET STRING (SIZE (2)), + date [3] + OCTET STRING (SIZE (4)), + price [4] + OCTET STRING (SIZE (4)) +} +-- Indicates the variable part of the message. Time is BCD encoded. +-- The most significant hours digit occupies bits 0-3 of the first octet, and the least +-- significant digit occupies bits 4-7 of the first octet. The most significant minutes digit +-- occupies bits 0-3 of the second octet, and the least significant digit occupies bits 4-7 +-- of the second octet. +-- +-- Date is BCD encoded. The year digit indicating millenium occupies bits 0-3 of the first octet, +-- and the year digit indicating century occupies bits 4-7 of the first octet. The year digit +-- indicating decade occupies bits 0-3 of the second octet, whilst the digit indicating the year +-- within the decade occupies bits 4-7 of the second octet. +-- The most significant month digit occupies bits 0-3 of the third octet, and the least +-- significant month digit occupies bits 4-7 of the third octet. The most significant day digit +-- occupies bits 0-3 of the fourth octet, and the least significant day digit occupies bits 4-7 +-- of the fourth octet. +-- Price is BCD encoded. The digit indicating hundreds of thousands occupies bits 0-3 of the +-- first octet, and the digit indicating tens of thousands occupies bits 4-7 of the first octet. +-- The digit indicating thousands occupies bits 0-3 of the second octet, whilst the digit +-- indicating hundreds occupies bits 4-7 of the second octet. The digit indicating tens occupies +-- bits 0-3 of the third octet, and the digit indicating 0 to 9 occupies bits 4-7 of the third +-- octet. The tenths digit occupies bits 0-3 of the fourth octet, and the hundredths digit +-- occupies bits 4-7 of the fourth octet. +-- +-- For the encoding of digits in an octet, refer to the timeAndtimezone parameter + +-- SpecializedResourceReportArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +-- SpecializedResourceReportArg ::= NULL +SpecializedResourceReportArg ::= CHOICE { + allAnnouncementsComplete [50] NULL, + firstAnnouncementStarted [51] NULL +} + +-- CUG-Interlock notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +-- imported from gsmmap +-- CUG-Interlock ::= OCTET STRING (SIZE (4)) + +-- CUG-Index notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +-- imported from gsmmap +-- CUG-Index ::= INTEGER (0..32767) + +-- CallReferenceNumber notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CallReferenceNumber ::= OCTET STRING (SIZE (1..8)) + +-- SuppressionOfAnnouncement notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +SuppressionOfAnnouncement ::= NULL + +-- NotReachableReason notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +NotReachableReason ::= ENUMERATED +{ + msPurged (0), + imsiDetached (1), + restrictedArea (2), + notRegistred (3) +} + +-- AddressString notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +AddressString ::= + + + OCTET STRING (SIZE(1..maxAddressLength)) + +-- LAIFixedLength notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +-- IMPORTED fom GSM MAP +-- LAIFixedLength ::= OCTET STRING (SIZE (5)) + -- Refers to Location Area Identification defined in TS GSM 03.03. + -- Octets ares encoded according to TS GSM 04.08. + -- The internal structure is defined as follows: + -- Mobile Country Code: 3 digits according to CCITT Rec E.212. + -- 1 digits filler (1111) + -- Mobile Network Code: 2 digits according to CCITT Rec E.212. + -- Location Area Code: 2 octets according to TS GSM 04.08. + + +-- ServiceKey notes: not recursive, exported, +-- locally refd 6 times, import refd 0 times +ServiceKey ::= INTEGER (0..2147483647) + + +-- Duration notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +Duration ::= INTEGER (-2..86400) + +-- Integer4 notes: not recursive, exported, +-- locally refd 8 times, import refd 0 times +Integer4 ::= INTEGER (0..2147483647) + +-- Interval notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +Interval ::= INTEGER (-1..60000) + +-- CallingPartysCategory notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +CallingPartysCategory ::= + +OCTET STRING (SIZE (1)) + +-- RedirectionInformation notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +RedirectionInformation ::= + + OCTET STRING (SIZE (2)) + +-- HighLayerCompatibility notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +HighLayerCompatibility ::= + +OCTET STRING (SIZE (highLayerCompatibilityLength)) + +-- BothwayThroughConnectionInd notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +BothwayThroughConnectionInd ::= ENUMERATED +{ + bothwayPathRequired (0), + bothwayPathNotRequired (1) +} + + +-- TCInvokeIdSet notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +-- TCInvokeIdSet ::= INTEGER (-128..127) + +-- ExtensionSetExtensionType notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +-- FIXME: add to decode this: ExtensionSetExtensionType ::= ANY + + +-- ExtensionSetextensionId notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ExtensionSetextensionId ::= OBJECT IDENTIFIER + + +-- Import from GSM MAP +-- GSN-Address ::= OCTET STRING (SIZE (5..17)) + + + +-- PDPType notes: not recursive, exported, +-- locally refd 5 times, import refd 0 times +-- Equivalent to EndUserAddress +PDPType ::= SEQUENCE +{ + pDPTypeOrganization [0] PDPTypeOrganization, + pDPTypeNumber [1] PDPTypeNumber, + pDPAddress [2] PDPAddress OPTIONAL +} + +PDPTypeOrganization ::= OCTET STRING (SIZE (1)) + +PDPTypeNumber ::= OCTET STRING (SIZE (1)) + +PDPAddress ::= OCTET STRING (SIZE (cAPSpecificBoundSetminPDPAddressLength..cAPSpecificBoundSetmaxPDPAddressLength)) + +-- Indicates the PDPType, refer to 3GPP TS 29.060 for the encoding. +-- The pDPTypeOrganization shall use the least significant 4 bits of the octet encoded. +-- The sender of this parameter shall set the most significant 4 bit of the octet to 0. +-- The receiver of this parameter shall ignore the most significant 4 bits of this octet. +-- TS 29.060 "The PDP Type Organisation and PDP Type Number are encoded as in the End User Address information element." + +-- Code notes: not recursive, exported, +-- locally refd 63 times, import refd 0 times +Code ::= CHOICE +{ + local INTEGER, + global OBJECT IDENTIFIER +} + +-- PCS-Extensions notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +PCS-Extensions ::= SEQUENCE +{ + foo INTEGER (0) OPTIONAL +} + + + +-- MiscCallInfo notes: not recursive, exported, +-- locally refd 3 times, import refd 0 times +MiscCallInfo ::= SEQUENCE +{ + messageType [0] ENUMERATED + { + request (0), + notification (1) + } +} + +-- SupportedExtensionsExtensionType notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +SupportedExtensionsExtensionType ::= CHOICE +{ + firstExtensionExtensionType NULL --, + -- secondExtensionExtensionType NULL +} + +-- PrivateExtension notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +PrivateExtension ::= SEQUENCE +{ + extId ExtensionSetextensionId + -- FIXME: add to decode this: extType ExtensionSetExtensionType OPTIONAL +} + + +FreeFormatData ::= + +OCTET STRING (SIZE (cAPSpecificBoundSetminSCIBillingChargingLength..cAPSpecificBoundSetmaxSCIBillingChargingLength )) + + +-- The endOfReplyDigit, cancelDigit, and startDigit parameters have been +-- designated as OCTET STRING, and are to be encoded as BCD, one digit per octet +-- only, contained in the four least significant bits of each OCTET. The following encoding shall +-- be applied for the non-decimal characters: +-- 1011 (*), 1100 (#). + + + +-- ApplyChargingReportArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CallresultoctetPDU ::= OCTET STRING (SIZE (cAPSpecificBoundSetminCallResultLength..cAPSpecificBoundSetmaxCallResultLength)) + +--ApplyChargingReportArg ::= SEQUENCE { +-- callresultOctet CallresultoctetPDU +-- } +-- ( +-- CONTAINING CamelCallResult +-- ENCODED BY enc-BER +-- ) + +-- CallResult type +ApplyChargingReportArg ::= SEQUENCE { + callresultOctet CAMEL-CallResult + } + +-- CancelArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CancelArg ::= + +CHOICE +{ + callInvokeID [0] InvokeID, + allRequests [1] NULL, + callSegmentToCancel [2] CallSegmentToCancel + +} + +CollectInformationArg ::= SEQUENCE { + extensions [0] ExtensionsArray OPTIONAL, + ... + } + +-- FurnishChargingInformationArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +FurnishChargingInformationArg ::= CAMEL-FCIBillingChargingCharacteristics + +-- FCIBillingChargingCharacteristics type. + +-- ReleaseCallArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +-- ReleaseCallArg ::= OCTET STRING (SIZE (minCauseLength..32)) +ReleaseCallArg ::= Q850Cause + +Q850Cause ::=OCTET STRING (SIZE (cAPSpecificBoundSetminCauseLength..cAPSpecificBoundSetminCauseLength)) + +-- Cause notes: not recursive, exported, +-- locally refd 10 times, import refd 0 times +Cause ::= OCTET STRING (SIZE (cAPSpecificBoundSetminCauseLength..cAPSpecificBoundSetmaxCauseLength)) + +-- +-- ReceivedInformationArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ReceivedInformationArg ::= + +CHOICE +{ + digitsResponse [0] Digits +} + +-- FurnishChargingInformationSMSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +FurnishChargingInformationSMSArg ::= + + +OCTET STRING (SIZE (5..225)) +-- FCISMSBillingChargingCharacteristics type. + + +-- ConnectGPRSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ConnectGPRSArg ::= + + SEQUENCE +{ + accessPointName [0] AccessPointName, + pdpID [1] PDPId OPTIONAL, + ... +} + + + +-- EntityReleasedGPRSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +EntityReleasedGPRSArg ::= + + SEQUENCE +{ + gPRSCause [0] GPRSCause, + pDPID [1] PDPId OPTIONAL, + ... +} + +-- ReleaseGPRSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ReleaseGPRSArg ::= + + SEQUENCE +{ + gprsCause [0] GPRSCause, + pDPID [1] PDPId OPTIONAL, + ... +} + +-- RequestReportGPRSEventArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +RequestReportGPRSEventArg ::= + + SEQUENCE +{ + gPRSEvent [0] GPRSEventArray, + pDPID [1] PDPId OPTIONAL, + ... +} + +GPRSEventArray ::= + SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfGPRSEvents) OF GPRSEvent + +-- SendChargingInformationGPRSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +SendChargingInformationGPRSArg ::= + + SEQUENCE +{ + sCIGPRSBillingChargingCharacteristics [0] SCIGPRSBillingChargingCharacteristics, + ... +} + + + +-- SubscriberState notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +SubscriberState ::= +CHOICE +{ + assumedIdle [0] NULL, + camelBusy [1] NULL, + netDetNotReachable NotReachableReason, + notProvidedFromVLR [2] NULL +} + +-- PrivateExtensionList notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +PrivateExtensionList ::= + +SEQUENCE SIZE (1..maxNumOfPrivateExtensions) OF PrivateExtension + +-- ISDN-AddressString notes: not recursive, exported, +-- locally refd 9 times, import refd 0 times +ISDN-AddressString ::= OCTET STRING (SIZE(1..maxISDN-AddressLength)) + + +-- LegID notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +LegID ::= CHOICE +{ + sendingSideID [0] LegType, + receivingSideID [1] LegType +} + + +VariablePartsArray ::= SEQUENCE SIZE (1..5) OF VariablePart + + +-- InitialDPArgExtension notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +-- Updated from ETSI TS 129 078 V6.4.0 (2004-3GPP TS 29.078 version 6.4.0 Release 6 1 12) +InitialDPArgExtension ::= SEQUENCE { + gmscAddress [0] ISDN-AddressString OPTIONAL, + forwardingDestinationNumber [1] CalledPartyNumber OPTIONAL, + ms-Classmark2 [2] MS-Classmark2 OPTIONAL, + iMEI [3] IMEI OPTIONAL, + supportedCamelPhases [4] SupportedCamelPhases OPTIONAL, + offeredCamel4Functionalities [5] OfferedCamel4Functionalities OPTIONAL, + bearerCapability2 [6] BearerCapability OPTIONAL, + ext-basicServiceCode2 [7] Ext-BasicServiceCode OPTIONAL, + highLayerCompatibility2 [8] HighLayerCompatibility OPTIONAL, + lowLayerCompatibility [9] LowLayerCompatibility OPTIONAL, + lowLayerCompatibility2 [10] LowLayerCompatibility OPTIONAL, + ..., + enhancedDialledServicesAllowed [11] NULL OPTIONAL, + uu-Data [12] UU-Data OPTIONAL, + collectInformationAllowed [13] NULL OPTIONAL +} + + +InitiateCallAttemptArg ::= SEQUENCE { + destinationRoutingAddress [0] DestinationRoutingAddress, + extensions [4] ExtensionsArray OPTIONAL, + legToBeCreated [5] LegID OPTIONAL, + newCallSegment [6] CallSegmentID OPTIONAL, + callingPartyNumber [30] CallingPartyNumber OPTIONAL, + callReferenceNumber [51] CallReferenceNumber OPTIONAL, + gsmSCFAddress [52] ISDN-AddressString OPTIONAL, + suppress-T-CSI [53] NULL OPTIONAL, + ... + } + +InitiateCallAttemptRes ::= SEQUENCE { + supportedCamelPhases [0] SupportedCamelPhases OPTIONAL, + offeredCamel4Functionalities [1] OfferedCamel4Functionalities OPTIONAL, + extensions [2] ExtensionsArray OPTIONAL, + ... + } + +MoveLegArg ::= SEQUENCE{ + legIDToMove [0] LegID, + extensions [2] ExtensionsArray OPTIONAL, + ... + } + +PlayToneArg ::= SEQUENCE { + legOrCallSegment [0] LegOrCallSegment, + bursts [1] Burst, + extensions [2] ExtensionsArray OPTIONAL, + ... + } + +CellGlobalIdOrServiceAreaIdOrLAI ::= OCTET STRING (SIZE (5..7)) + +-- The 3GPP TS 29.078 standard, about cellGlobalIdOrServiceAreaIdOrLAI: +-- "CellGlobalIdOrServiceAreaIdOrLAI and LSAIdentity are coded in accordance with +-- 3GPP TS 29.002 [13]. +-- sai-Present indicates that the cellGlobalIdOrServiceAreaIdOrLAI parameter contains +-- a Service Area Identity." + +-- GPP TS 29.078 version 6.4.0 Release 6 has it as: +-- CellGlobalIdOrServiceAreaIdFixedLength type or the LAIFixedLength type (i.e. excluding tags +-- and lengths) as defined in 3GPP TS 29.002 [13]. +-- sai-Present indicates that the cellGlobalIdOrServiceAreaIdOrLAI parameter contains +-- a Service Area Identity. + +-- 3GPP TS 29.002 [13] gives the folowing coding for CellGlobalIdOrServiceAreaIdOrLAI: +-- CellGlobalIdOrServiceAreaIdOrLAI ::= CHOICE { +-- cellGlobalIdOrServiceAreaIdFixedLength [0] CellGlobalIdOrServiceAreaIdFixedLength, +-- laiFixedLength [1] LAIFixedLength +-- } +-- +-- CellGlobalIdOrServiceAreaIdFixedLength ::= +-- implement size < 8 -- +-- OCTET STRING (SIZE (7)) +-- This coding would disrupt the backward compatibillity, so the cellGlobalIdOrServiceAreaIdOrLAI +-- parameter is set as an OCTET STRING, as it was in previous implementations. + +-- Local imports +SupportedCamelPhases ::= BIT STRING { + phase1 (0 ), + phase2 (1 ), + phase3 (2 ), + phase4 (3 )} + + +OfferedCamel4Functionalities ::= BIT STRING { + initiateCallAttempt (0), + splitLeg (1), + moveLeg (2), + disconnectLeg (3), + entityReleased (4), + dfc-WithArgument (5), + playTone (6), + dtmf-MidCall (7), + chargingIndicator (8), + alertingDP (9), + locationAtAlerting (10), + changeOfPositionDP (11), + or-Interactions (12), + warningToneEnhancements (13), + cf-Enhancements (14), + subscribedEnhancedDialledServices (15), + servingNetworkEnhancedDialledServices (16), + criteriaForChangeOfPositionDP (17), + serviceChangeDP (18) +} (SIZE (15..64)) +-- A node supporting Camel phase 4 shall mark in the BIT STRING all CAMEL4 +-- functionalities it offers. +-- Other values than listed above shall be discarded. + + +-- EventReportGPRSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +EventReportGPRSArg ::= + + SEQUENCE +{ + gPRSEventType [0] GPRSEventType, + miscGPRSInfo [1] MiscCallInfo OPTIONAL, + gPRSEventSpecificInformation [2] GPRSEventSpecificInformation OPTIONAL, + pDPID [3] PDPId OPTIONAL, + ... +} + +-- SupportedExtensionsid notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +SupportedExtensionsid ::= Code +-- Creation d'un nouveau type : NomObjetClasse-NomChampsClasse -- + + +-- ExtensionField notes: not recursive, exported, +-- locally refd 24 times, import refd 0 times +ExtensionField ::= SEQUENCE +{ + type SupportedExtensionsid, + criticality CriticalityType DEFAULT ignore, + value [1] SupportedExtensionsExtensionType, + ... +} + + + +-- ApplyChargingArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ApplyChargingArg ::= SEQUENCE +{ + aChBillingChargingCharacteristics [0] AChBillingChargingCharacteristics, + partyToCharge1 [2] SendingSideID DEFAULT '01'H, + extensions [3] ExtensionsArray OPTIONAL, + aChChargingAddress [50] AChChargingAddress, + ... +} + +ExtensionsArray ::= SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfExtensions) OF ExtensionField + + +-- AssistRequestInstructionsArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +AssistRequestInstructionsArg ::= + + SEQUENCE +{ + correlationID [0] CorrelationID, + iPSSPCapabilities [2] IPSSPCapabilities, + extensions [3] ExtensionsArray OPTIONAL, + ... +} + + + +-- CallInformationRequestArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CallInformationRequestArg ::= + + SEQUENCE +{ + requestedInformationTypeList [0] RequestedInformationTypeList, + extensions [2] ExtensionsArray OPTIONAL, + legID3 [3] SendingSideID OPTIONAL, + ... +} + + + +-- ConnectArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ConnectArg ::= + + SEQUENCE +{ + destinationRoutingAddress [0] DestinationRoutingAddress, + alertingPattern [1] AlertingPattern OPTIONAL, + originalCalledPartyID [6] OriginalCalledPartyID OPTIONAL, + extensions [10] ExtensionsArray OPTIONAL, + carrier [11] Carrier OPTIONAL, + callingPartysCategory [28] CallingPartysCategory OPTIONAL, + redirectingPartyID [29] RedirectingPartyID OPTIONAL, + redirectionInformation [30] RedirectionInformation OPTIONAL, + genericNumbers [14] GenericNumbers OPTIONAL, + serviceInteractionIndicatorsTwo [15] ServiceInteractionIndicatorsTwo OPTIONAL, + chargeNumber [19] ChargeNumber OPTIONAL, + legToBeConnected [21] LegID OPTIONAL, + cug-Interlock [31] CUG-Interlock OPTIONAL, + cug-OutgoingAccess [32] NULL OPTIONAL, + suppressionOfAnnouncement [55] SuppressionOfAnnouncement OPTIONAL, + oCSIApplicable [56] OCSIApplicable OPTIONAL, + naOliInfo [57] NAOliInfo OPTIONAL, + bor-InterrogationRequested [58] NULL OPTIONAL, + ..., + suppress-N-CSI [59] NULL OPTIONAL +} + +-- ConnectToResourceArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ConnectToResourceArg ::= + + SEQUENCE +{ + resourceAddress CHOICE + { + ipRoutingAddress [0] IPRoutingAddress, + none [3] NULL + }, + extensions [4] ExtensionsArray OPTIONAL, + serviceInteractionIndicatorsTwo [7] ServiceInteractionIndicatorsTwo OPTIONAL, + callSegmentID [50] CallSegmentID OPTIONAL, + ... +} + + + +-- ContinueWithArgumentArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ContinueWithArgumentArg ::= + + SEQUENCE +{ + alertingPattern [1] AlertingPattern OPTIONAL, + extensions [6] ExtensionsArray OPTIONAL, + serviceInteractionIndicatorsTwo [7] ServiceInteractionIndicatorsTwo OPTIONAL, + callingPartysCategory [12] CallingPartysCategory OPTIONAL, + genericNumbers [16] GenericNumbers OPTIONAL, + cug-Interlock [17] CUG-Interlock OPTIONAL, + cug-OutgoingAccess [18] NULL OPTIONAL, + chargeNumber [50] ChargeNumber OPTIONAL, + carrier [52] Carrier OPTIONAL, + suppressionOfAnnouncement [55] SuppressionOfAnnouncement OPTIONAL, + naOliInfo [56] NAOliInfo OPTIONAL, + bor-InterrogationRequested [57] NULL OPTIONAL, + suppress-O-CSI [58] NULL OPTIONAL, + continueWithArgumentArgExtension [59] ContinueWithArgumentArgExtension OPTIONAL, + ... +} + +ContinueWithArgumentArgExtension ::= SEQUENCE { + suppress-D-CSI [0] NULL OPTIONAL, + suppress-N-CSI [1] NULL OPTIONAL, + suppressOutgoingCallBarring [2] NULL OPTIONAL, + legOrCallSegment [3] LegOrCallSegment OPTIONAL, + ... + } + +DisconnectLegArg ::= SEQUENCE { + legToBeReleased [0] LegID, + releaseCause [1] Cause OPTIONAL, + extensions [2] ExtensionsArray OPTIONAL, + ... + } +EntityReleasedArg ::= CHOICE { + callSegmentFailure [0] CallSegmentFailure, + bCSM-Failure [1] BCSM-Failure + } + +DisconnectForwardConnectionWithArgumentArg ::= SEQUENCE { + callSegmentID [1] CallSegmentID OPTIONAL, + extensions [2] ExtensionsArray OPTIONAL, + ... + } + +-- EstablishTemporaryConnectionArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +EstablishTemporaryConnectionArg ::= + + SEQUENCE +{ + assistingSSPIPRoutingAddress [0] AssistingSSPIPRoutingAddress, + correlationID [1] CorrelationID OPTIONAL, + scfID [3] ScfID OPTIONAL, + extensions [4] ExtensionsArray OPTIONAL, + carrier [5] Carrier OPTIONAL, + serviceInteractionIndicatorsTwo [6] ServiceInteractionIndicatorsTwo OPTIONAL, + callSegmentID [7] CallSegmentID OPTIONAL, + naOliInfo [50] NAOliInfo OPTIONAL, + chargeNumber [51] ChargeNumber OPTIONAL, + ..., + originalCalledPartyID [52] OriginalCalledPartyID OPTIONAL, + callingPartyNumber [53] CallingPartyNumber OPTIONAL +} + + +-- EventReportBCSMArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +EventReportBCSMArg ::= + + SEQUENCE +{ + eventTypeBCSM [0] EventTypeBCSM, + eventSpecificInformationBCSM [2] EventSpecificInformationBCSM OPTIONAL, + legID4 [3] ReceivingSideID OPTIONAL, + miscCallInfo [4] MiscCallInfo OPTIONAL, + extensions [5] ExtensionsArray OPTIONAL, + ... +} + + + +-- ResetTimerArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ResetTimerArg ::= + + SEQUENCE +{ + timerID [0] TimerID DEFAULT tssf, + timervalue [1] TimerValue, + extensions [2] ExtensionsArray OPTIONAL, + callSegmentID [3] CallSegmentID OPTIONAL, + ... +} + + + +-- SendChargingInformationArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +SendChargingInformationArg ::= + + SEQUENCE +{ + sCIBillingChargingCharacteristics [0] SCIBillingChargingCharacteristics, + partyToCharge2 [1] SendingSideID, + extensions [2] ExtensionsArray OPTIONAL, + ... +} + +SplitLegArg ::= SEQUENCE { + legToBeSplit [0] LegID, + newCallSegment [1] CallSegmentID OPTIONAL, + extensions [2] ExtensionsArray OPTIONAL, + ... + } + +CAPGPRSReferenceNumber ::= SEQUENCE { + destinationReference [0] EXPLICIT Integer4 OPTIONAL, + originationReference [1] EXPLICIT Integer4 OPTIONAL + } + +-- EventReportSMSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +EventReportSMSArg ::= + + SEQUENCE +{ + eventTypeSMS [0] EventTypeSMS, + eventSpecificInformationSMS [1] EventSpecificInformationSMS OPTIONAL, + miscCallInfo [2] MiscCallInfo OPTIONAL, + extensions [10] ExtensionsArray OPTIONAL, + ... +} + + + +-- ResetTimerSMSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ResetTimerSMSArg ::= + + SEQUENCE +{ + timerID [0] TimerID DEFAULT tssf, + timervalue [1] TimerValue, + extensions [2] ExtensionsArray OPTIONAL, + ... +} + + + + +-- RequestReportBCSMEventArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +RequestReportBCSMEventArg ::= + + SEQUENCE +{ + bcsmEvents [0] BCSMEventArray, + extensions [2] ExtensionsArray OPTIONAL, + ... +} + +BCSMEventArray ::= + SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfBCSMEvents) OF BCSMEvent + + + +-- ConnectSMSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +ConnectSMSArg ::= + + SEQUENCE +{ + callingPartysNumber [0] SMS-AddressString OPTIONAL, + destinationSubscriberNumber [1] CalledPartyBCDNumber OPTIONAL, + sMSCAddress [2] ISDN-AddressString OPTIONAL, + extensions [10] ExtensionsArray OPTIONAL, + ... +} + + +-- CallInformationReportArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CallInformationReportArg ::= + + SEQUENCE +{ + requestedInformationList [0] RequestedInformationList, + extensions [2] ExtensionsArray OPTIONAL, + legID5 [3] ReceivingSideID OPTIONAL, + ... +} + + + +-- PlayAnnouncementArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +PlayAnnouncementArg ::= + + SEQUENCE +{ + informationToSend [0] InformationToSend, + disconnectFromIPForbidden [1] BOOLEAN DEFAULT TRUE, + requestAnnouncementComplete [2] BOOLEAN DEFAULT TRUE, + extensions [3] ExtensionsArray OPTIONAL, + callSegmentID [5] CallSegmentID OPTIONAL, + requestAnnouncementStartedNotification [51] BOOLEAN DEFAULT FALSE, + ... +} + + + +-- PromptAndCollectUserInformationArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +PromptAndCollectUserInformationArg ::= + + SEQUENCE +{ + collectedInfo [0] CollectedInfo, + disconnectFromIPForbidden [1] BOOLEAN DEFAULT TRUE, + informationToSend [2] InformationToSend OPTIONAL, + extensions [3] ExtensionsArray OPTIONAL, + callSegmentID [5] CallSegmentID OPTIONAL, + requestAnnouncementStartedNotification [51] BOOLEAN DEFAULT FALSE, + ... +} + +--furnishChargingInformationGPRS {PARAMETERS-BOUND : bound} OPERATION ::= { +-- ARGUMENT FurnishChargingInformationGPRSArg {bound} +-- RETURN RESULT FALSE +-- ERRORS {missingParameter | +-- taskRefused | +-- unexpectedComponentSequence | +-- unexpectedDataValue | +-- unexpectedParameter | +-- unknownPDPID} +-- CODE opcode-furnishChargingInformationGPRS} +-- Direction: gsmSCF -> gprsSSF, Timer: Tfcig +-- This operation is used to request the gprsSSF to generate, register a logical record or to +-- include some information in the default logical GPRS record. +-- The registered logical record is intended for off line charging of the GPRS session +-- or PDP Context. + +-- FurnishChargingInformationGPRSArg {PARAMETERS-BOUND : bound} ::= +-- FCIGPRSBillingChargingCharacteristics{bound} + +FurnishChargingInformationGPRSArg ::= FCIGPRSBillingChargingCharacteristics + + +-- InitialDPGPRSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +InitialDPGPRSArg ::= + + SEQUENCE +{ + serviceKey [0] ServiceKey, + gPRSEventType [1] GPRSEventType, + mSISDN [2] ISDN-AddressString, + iMSI [3] IMSI, + timeAndTimeZone [4] TimeAndTimezone, + gPRSMSClass [5] GPRSMSClass OPTIONAL, + pDPType [6] PDPType OPTIONAL, + qualityOfService [7] QualityOfService OPTIONAL, + accessPointName [8] AccessPointName OPTIONAL, + routeingAreaIdentity [9] RAIdentity OPTIONAL, + chargingID [10] GPRSChargingID OPTIONAL, + sGSNCapabilities [11] SGSNCapabilities OPTIONAL, + locationInformationGPRS [12] LocationInformationGPRS OPTIONAL, + pDPInitiationType [13] PDPInitiationType OPTIONAL, + extensions [14] ExtensionsArray OPTIONAL, + ..., + gGSNAddress [15] GSN-Address OPTIONAL, + secondaryPDPContext [16] NULL OPTIONAL, + iMEI [17] IMEI OPTIONAL +} + + + +-- CallGapArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +CallGapArg ::= + + SEQUENCE +{ + gapCriteria [0] GapCriteria, + gapIndicators [1] GapIndicators, + controlType [2] ControlType OPTIONAL, + gapTreatment [3] GapTreatment OPTIONAL, + extensions [4] ExtensionsArray OPTIONAL, + ... +} + + + +-- InitialDPArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +InitialDPArg ::= + + SEQUENCE +{ + serviceKey [0] ServiceKey, + calledPartyNumber [2] CalledPartyNumber OPTIONAL, + callingPartyNumber [3] CallingPartyNumber OPTIONAL, + callingPartysCategory [5] CallingPartysCategory OPTIONAL, + cGEncountered [7] CGEncountered OPTIONAL, + iPSSPCapabilities [8] IPSSPCapabilities OPTIONAL, + locationNumber [10] LocationNumber OPTIONAL, + originalCalledPartyID [12] OriginalCalledPartyID OPTIONAL, + extensions [15] ExtensionsArray OPTIONAL, + highLayerCompatibility [23] HighLayerCompatibility OPTIONAL, + additionalCallingPartyNumber [25] AdditionalCallingPartyNumber OPTIONAL, + bearerCapability [27] BearerCapability OPTIONAL, + eventTypeBCSM [28] EventTypeBCSM OPTIONAL, + redirectingPartyID [29] RedirectingPartyID OPTIONAL, + redirectionInformation [30] RedirectionInformation OPTIONAL, + cause [17] Cause OPTIONAL, + serviceInteractionIndicatorsTwo [32] ServiceInteractionIndicatorsTwo OPTIONAL, + carrier [37] Carrier OPTIONAL, + cug-Index [45] CUG-Index OPTIONAL, + cug-Interlock [46] CUG-Interlock OPTIONAL, + cug-OutgoingAccess [47] NULL OPTIONAL, + iMSI [50] IMSI OPTIONAL, + subscriberState [51] SubscriberState OPTIONAL, + locationInformation [52] LocationInformation OPTIONAL, + ext-basicServiceCode [53] Ext-BasicServiceCode OPTIONAL, + callReferenceNumber [54] CallReferenceNumber OPTIONAL, + mscAddress [55] ISDN-AddressString OPTIONAL, + calledPartyBCDNumber [56] CalledPartyBCDNumber OPTIONAL, + timeAndTimezone [57] TimeAndTimezone OPTIONAL, + gsm-ForwardingPending [58] NULL OPTIONAL, + initialDPArgExtension [59] InitialDPArgExtension OPTIONAL, + ... +} + + + +-- InitialDPSMSArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +InitialDPSMSArg ::= + + SEQUENCE +{ + serviceKey [0] ServiceKey, + destinationSubscriberNumber [1] CalledPartyBCDNumber OPTIONAL, + callingPartyNumberas [2] SMS-AddressString OPTIONAL, + eventTypeSMS [3] EventTypeSMS OPTIONAL, + iMSI [4] IMSI OPTIONAL, + locationInformationMSC [5] LocationInformation OPTIONAL, + locationInformationGPRS [6] LocationInformationGPRS OPTIONAL, + sMSCAddress [7] ISDN-AddressString OPTIONAL, + timeAndTimezone [8] TimeAndTimezone OPTIONAL, + tPShortMessageSpecificInfo [9] TPShortMessageSpecificInfo OPTIONAL, + tPProtocolIdentifier [10] TPProtocolIdentifier OPTIONAL, + tPDataCodingScheme [11] TPDataCodingScheme OPTIONAL, + tPValidityPeriod [12] TPValidityPeriod OPTIONAL, + extensions [13] ExtensionsArray OPTIONAL, + ..., + smsReferenceNumber [14] CallReferenceNumber OPTIONAL, + mscAddress [15] ISDN-AddressString OPTIONAL, + sgsnNumber [16] ISDN-AddressString OPTIONAL, + ms-Classmark2 [17] MS-Classmark2 OPTIONAL, + gPRSMSClass [18] GPRSMSClass OPTIONAL, + iMEI [19] IMEI OPTIONAL, + calledPartyNumberSMS [20] ISDN-AddressString OPTIONAL +} + +-- ReleaseSMSArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +ReleaseSMSArg ::= RPCause + +-- RequestReportSMSEventArg notes: not recursive, exported, +-- locally refd 1 times, import refd 0 times +RequestReportSMSEventArg ::= + + SEQUENCE +{ + sMSEvents [0] SMSEventArray, + extensions [10] ExtensionsArray OPTIONAL, + ... +} + +SMSEventArray ::= + SEQUENCE SIZE (1..cAPSpecificBoundSetnumOfSMSEvents) OF SMSEvent + + +-- ExtensionContainer notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +ExtensionContainer ::= SEQUENCE +{ + privateExtensionList [0] PrivateExtensionList OPTIONAL, + pcs-Extensions [1] PCS-Extensions OPTIONAL +} + + + +-- ApplyChargingGPRSArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +ApplyChargingGPRSArg ::= SEQUENCE +{ + chargingCharacteristics [0] ChargingCharacteristics, + tariffSwitchInterval [1] INTEGER (1..86400) OPTIONAL, + pDPID [2] PDPId OPTIONAL, + ... +} + +-- CriticalityType notes: not recursive, exported, +-- locally refd 2 times, import refd 0 times +CriticalityType ::= ENUMERATED +{ + ignore (0), + abort (1) +} + +-- ApplyChargingReportGPRSArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +ApplyChargingReportGPRSArg ::= + + SEQUENCE +{ + chargingResult [0] ChargingResult, + qualityOfService [1] QualityOfService OPTIONAL, + active [2] BOOLEAN DEFAULT TRUE, + pDPID [3] PDPId OPTIONAL, + ..., + chargingRollOver [4] ChargingRollOver OPTIONAL +} + +-- CancelGPRSArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +CancelGPRSArg ::= + + SEQUENCE +{ + pDPID [0] PDPId OPTIONAL, + ... +} + +-- ContinueGPRSArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +ContinueGPRSArg ::= + + SEQUENCE +{ + pDPID [0] PDPId OPTIONAL, + ... +} + +-- ResetTimerGPRSArg notes: not recursive, exported, +-- locally refd 0 times, import refd 0 times +ResetTimerGPRSArg ::= + + SEQUENCE +{ + timerID [0] TimerID DEFAULT tssf, + timervalue [1] TimerValue, + ... +} + +-- ############################# +-- Definition of range constants +-- ############################# + +leg1 LegType ::= '01'H +leg2 LegType ::= '02'H + +numOfInfoItems INTEGER ::= 4 + +opcode-initialDP Code ::= 0 +opcode-assistRequestInstructions Code ::= 16 +opcode-establishTemporaryConnection Code ::= 17 +opcode-disconnectForwardConnection Code ::= 18 +opcode-dFCWithArgument Code ::= 86 +opcode-connectToResource Code ::= 19 +opcode-connect Code ::= 20 +opcode-releaseCall Code ::= 22 +opcode-requestReportBCSMEvent Code ::= 23 +opcode-eventReportBCSM Code ::= 24 +opcode-collectInformation Code ::= 27 +opcode-continue Code ::= 31 +opcode-initiateCallAttempt Code ::= 32 +-- opcode-continueWithArgument Code ::= 56 (should be 88) +opcode-resetTimer Code ::= 33 +opcode-furnishChargingInformation Code ::= 34 +opcode-applyCharging Code ::= 35 +opcode-applyChargingReport Code ::= 36 +opcode-callGap Code ::= 41 +opcode-callInformationReport Code ::= 44 +opcode-callInformationRequest Code ::= 45 +opcode-sendChargingInformation Code ::= 46 +opcode-playAnnouncement Code ::= 47 +opcode-promptAndCollectUserInformation Code ::= 48 +opcode-specializedResourceReport Code ::= 49 +opcode-cancel Code ::= 53 +opcode-activityTest Code ::= 55 +opcode-initialDPSMS Code ::= 60 +opcode-furnishChargingInformationSMS Code ::= 61 +opcode-connectSMS Code ::= 62 +opcode-requestReportSMSEvent Code ::= 63 +opcode-eventReportSMS Code ::= 64 +opcode-continueSMS Code ::= 65 +opcode-releaseSMS Code ::= 66 +opcode-resetTimerSMS Code ::= 67 +opcode-activityTestGPRS Code ::= 70 +opcode-applyChargingGPRS Code ::= 71 +opcode-applyChargingReportGPRS Code ::= 72 +opcode-cancelGPRS Code ::= 73 +opcode-connectGPRS Code ::= 74 +opcode-continueGPRS Code ::= 75 +opcode-entityReleasedGPRS Code ::= 76 +opcode-furnishChargingInformationGPRS Code ::= 77 +opcode-initialDPGPRS Code ::= 78 +opcode-releaseGPRS Code ::= 79 +opcode-eventReportGPRS Code ::= 80 +opcode-requestReportGPRSEvent Code ::= 81 +opcode-resetTimerGPRS Code ::= 82 +opcode-sendChargingInformationGPRS Code ::= 83 +opcode-continueWithArgument Code ::= 88 +opcode-disconnectLeg Code ::= 90 +opcode-moveLeg Code ::= 93 +opcode-splitLeg Code ::= 95 +opcode-entityReleased Code ::= 96 +opcode-playTone Code ::= 97 + +errcode-canceled Code ::= 0 +errcode-cancelFailed Code ::= 1 +errcode-eTCFailed Code ::= 3 +errcode-improperCallerResponse Code ::= 4 +errcode-missingCustomerRecord Code ::= 6 +errcode-missingParameter Code ::= 7 +errcode-parameterOutOfRange Code ::= 8 +errcode-requestedInfoError Code ::= 10 +errcode-systemFailure Code ::= 11 +errcode-taskRefused Code ::= 12 +errcode-unavailableResource Code ::= 13 +errcode-unexpectedComponentSequence Code ::= 14 +errcode-unexpectedDataValue Code ::= 15 +errcode-unexpectedParameter Code ::= 16 +errcode-unknownLegID Code ::= 17 +errcode-unknownPDPId Code ::= 50 +errcode-unknownCSId Code ::= 51 + +--cAPSpecificBoundSetnumOfExtensions INTEGER ::= 10 +maxNumOfPrivateExtensions INTEGER ::= 10 + +--cAPSpecificBoundSetminCalledPartyBCDNumberLength INTEGER ::= 1 +--cAPSpecificBoundSetmaxCalledPartyBCDNumberLength INTEGER ::= 41 +maxISDN-AddressLength INTEGER ::= 9 +-- for AddressString +maxAddressLength INTEGER ::= 20 + +highLayerCompatibilityLength INTEGER ::= 2 + +cAPSpecificBoundSetminAccessPointNameLength INTEGER ::= 1 +cAPSpecificBoundSetmaxAccessPointNameLength INTEGER ::= 100 +cAPSpecificBoundSetminAChBillingChargingLength INTEGER ::= 5 +cAPSpecificBoundSetmaxAChBillingChargingLength INTEGER ::= 177 +cAPSpecificBoundSetminAttributesLength INTEGER ::= 2 +cAPSpecificBoundSetmaxAttributesLength INTEGER ::= 10 +cAPSpecificBoundSetmaxBearerCapabilityLength INTEGER ::= 11 +cAPSpecificBoundSetminCalledPartyBCDNumberLength INTEGER ::= 1 +cAPSpecificBoundSetmaxCalledPartyBCDNumberLength INTEGER ::= 41 +cAPSpecificBoundSetminCalledPartyNumberLength INTEGER ::= 2 +cAPSpecificBoundSetmaxCalledPartyNumberLength INTEGER ::= 18 +cAPSpecificBoundSetminCallingPartyNumberLength INTEGER ::= 2 +cAPSpecificBoundSetmaxCallingPartyNumberLength INTEGER ::= 10 +cAPSpecificBoundSetminCallResultLength INTEGER ::= 12 +cAPSpecificBoundSetmaxCallResultLength INTEGER ::= 193 +cAPSpecificBoundSetminCarrierLength INTEGER ::= 4 +cAPSpecificBoundSetmaxCarrierLength INTEGER ::= 4 +cAPSpecificBoundSetminCauseLength INTEGER ::= 2 +cAPSpecificBoundSetmaxCauseLength INTEGER ::= 32 +cAPSpecificBoundSetminDigitsLength INTEGER ::= 2 +cAPSpecificBoundSetmaxDigitsLength INTEGER ::= 16 +cAPSpecificBoundSetminFCIBillingChargingDataLength INTEGER ::= 1 +cAPSpecificBoundSetmaxFCIBillingChargingDataLength INTEGER ::= 160 +cAPSpecificBoundSetminFCIBillingChargingLength INTEGER ::= 5 +cAPSpecificBoundSetmaxFCIBillingChargingLength INTEGER ::= 225 +cAPSpecificBoundSetminGenericNumberLength INTEGER ::= 3 +cAPSpecificBoundSetmaxGenericNumberLength INTEGER ::= 11 +cAPSpecificBoundSetminGPRSCauseLength INTEGER ::= 1 +cAPSpecificBoundSetmaxGPRSCauseLength INTEGER ::= 1 +cAPSpecificBoundSetminIPSSPCapabilitiesLength INTEGER ::= 1 +cAPSpecificBoundSetmaxIPSSPCapabilitiesLength INTEGER ::= 4 +cAPSpecificBoundSetminLocationNumberLength INTEGER ::= 2 +cAPSpecificBoundSetmaxLocationNumberLength INTEGER ::= 10 +cAPSpecificBoundSetminLowLayerCompatibilityLength INTEGER ::= 1 +cAPSpecificBoundSetmaxLowLayerCompatibilityLength INTEGER ::= 16 +cAPSpecificBoundSetminMessageContentLength INTEGER ::= 1 +cAPSpecificBoundSetmaxMessageContentLength INTEGER ::= 127 +cAPSpecificBoundSetminOriginalCalledPartyIDLength INTEGER ::= 2 +cAPSpecificBoundSetmaxOriginalCalledPartyIDLength INTEGER ::= 10 +cAPSpecificBoundSetminPDPAddressLength INTEGER ::= 1 +cAPSpecificBoundSetmaxPDPAddressLength INTEGER ::= 63 +cAPSpecificBoundSetminRedirectingPartyIDLength INTEGER ::= 2 +cAPSpecificBoundSetmaxRedirectingPartyIDLength INTEGER ::= 10 +cAPSpecificBoundSetminScfIDLength INTEGER ::= 2 +cAPSpecificBoundSetmaxScfIDLength INTEGER ::= 10 +cAPSpecificBoundSetminSCIBillingChargingLength INTEGER ::= 4 +cAPSpecificBoundSetmaxSCIBillingChargingLength INTEGER ::= 225 +cAPSpecificBoundSetminTimeAndTimezoneLength INTEGER ::= 8 +cAPSpecificBoundSetmaxTimeAndTimezoneLength INTEGER ::= 8 +cAPSpecificBoundSetnumOfBCSMEvents INTEGER ::= 30 +cAPSpecificBoundsSetnumOfChangeOfPositionControlInfo INTEGER ::= 10 +cAPSpecificBoundsSetnumOfCSs INTEGER ::= 127 +cAPSpecificBoundSetnumOfSMSEvents INTEGER ::= 10 +cAPSpecificBoundSetnumOfGPRSEvents INTEGER ::= 10 +cAPSpecificBoundSetnumOfExtensions INTEGER ::= 10 +cAPSpecificBoundSetnumOfGenericNumbers INTEGER ::= 5 +cAPSpecificBoundSetnumOfMessageIDs INTEGER ::= 16 + + +END + + +-- ############################# +-- CAP ErrorTypes +-- ############################# + + +CAP-errortypes --{ccitt(0) identified-organization(4) etsi(0) mobileDomain(0) umts-network(1) modules(3) cap-errortypes(51) version3(2)} +-- This module contains the type definitions for the CAP Error Types. +-- Where a parameter of type CHOICE is tagged with a specific tag value, the tag is automatically +-- replaced with an EXPLICIT tag of the same value. + +DEFINITIONS IMPLICIT TAGS ::= BEGIN + + + +-- TYPE DEFINITION FOR CAP ERROR TYPES FOLLOWS + + +--cancelFailed ERROR +-- PARAMETER +CancelFailedPARAM ::= SEQUENCE +{ + cancelproblem [0] ENUMERATED + { + unknownOperation (0), + tooLate (1), + operationNotCancellable (2) + }, + operation [1] InvokeID + +} +-- The operation failed to be canceled. + + +--requestedInfoError ERROR ::= { +-- PARAMETER +RequestedInfoErrorPARAM ::= ENUMERATED +{ + unknownRequestedInfo (1), + requestedInfoNotAvailable (2) +} +-- The requested information cannot be found. + +SystemFailurePARAM ::= UnavailableNetworkResource +-- The operation could not be completed due to a system failure at the serving physical entity. + +--taskRefused ERROR ::= { +-- PARAMETER +TaskRefusedPARAM ::= ENUMERATED +{ + generic (0), + unobtainable (1), + congestion (2) +} +-- An entity normally capable of the task requested cannot or chooses not to perform the task at +-- this time. This includes error situations like congestion and unobtainable address as used in +-- e.g. the connect operation.) + +END + diff --git a/epan/dissectors/asn1/camel/camel.cnf b/epan/dissectors/asn1/camel/camel.cnf new file mode 100644 index 00000000..40fa1959 --- /dev/null +++ b/epan/dissectors/asn1/camel/camel.cnf @@ -0,0 +1,831 @@ +# camel.cnf +# camel conformation file +# Anders Broman 2007 + +#.IMPORT ../gsm_map/gsm_map-exp.cnf +#.IMPORT ../inap/inap-exp.cnf + +#.MODULE +CS1-DataTypes inap +CS2-datatypes inap + +#.ASSIGNED_OBJECT_IDENTIFIER classes +#.ASSIGNED_OBJECT_IDENTIFIER ros-InformationObjects +#.ASSIGNED_OBJECT_IDENTIFIER tc-Messages +#.ASSIGNED_OBJECT_IDENTIFIER tc-NotationExtensions +#.ASSIGNED_OBJECT_IDENTIFIER gprsSSF-gsmSCF-Operations +#.ASSIGNED_OBJECT_IDENTIFIER gsmSCF-gsmSRF-Operations +#.ASSIGNED_OBJECT_IDENTIFIER gsmSSF-gsmSCF-Operations +#.ASSIGNED_OBJECT_IDENTIFIER sms-Operations +#.ASSIGNED_OBJECT_IDENTIFIER gsmSSF-gsmSCF-Protocol +#.ASSIGNED_OBJECT_IDENTIFIER gsmSCF-gsmSRF-Protocol +#.ASSIGNED_OBJECT_IDENTIFIER operationcodes +#.ASSIGNED_OBJECT_IDENTIFIER datatypes +#.ASSIGNED_OBJECT_IDENTIFIER errortypes + +#.OMIT_ASSIGNMENT Remote-Operations-Information-Objects +Bind +Unbind +#.END +#.OMIT_ASSIGNMENT +# Removed as they are giving 'defined but not used' warnings currently. +RejectProblem +TariffSwitchInterval +Priority +#.END + +#.PDU +ERROR.&ParameterType +OPERATION.&ArgumentType +OPERATION.&ResultType +#.END + + +#.REGISTER +CAP-GPRS-ReferenceNumber B "0.4.0.0.1.1.5.2" "id-CAP-GPRS-ReferenceNumber" +CAP-U-ABORT-REASON B "0.4.0.0.1.1.2.2" "id-CAP-U-ABORT-Reason" + +#.NO_EMIT ONLY_VALS +CAMEL-AChBillingChargingCharacteristicsV2 +ROS + +#.TYPE_RENAME +ReturnResult/result/result ResultArgument + +#.FIELD_RENAME +Invoke/linkedId/present linkedIdPresent +Reject/problem/invoke invokeProblem +Reject/problem/returnError returnErrorProblem +ReturnResult/result/result resultArgument +Reject/problem/returnResult problemReturnResult + +PAR-cancelFailed/problem par-cancelFailedProblem +CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1 fci-fCIBCCCAMELsequence1 +CAMEL-FCIGPRSBillingChargingCharacteristics/fCIBCCCAMELsequence1 fciGPRS-fCIBCCCAMELsequence1 +CAMEL-FCISMSBillingChargingCharacteristics/fCIBCCCAMELsequence1 fciSMS-fCIBCCCAMELsequence1 +EventSpecificInformationBCSM/oMidCallSpecificInfo/midCallEvents omidCallEvents +EventSpecificInformationBCSM/tMidCallSpecificInfo/midCallEvents tmidCallEvents +AudibleIndicator/tone audibleIndicatorTone +GapIndicators/duration gapIndicatorsDuration +InbandInfo/duration inbandInfoDuration +Tone/duration toneDuration +Burst/toneDuration burstToneDuration + +EventSpecificInformationSMS/o-smsFailureSpecificInfo/failureCause mo-smsfailureCause +EventSpecificInformationBCSM/routeSelectFailureSpecificInfo/failureCause routeSelectfailureCause +EventSpecificInformationSMS/t-smsFailureSpecificInfo/failureCause t-smsfailureCause + +CAMEL-FCIBillingChargingCharacteristics/fCIBCCCAMELsequence1/partyToCharge fCIBCCCAMELsequence1partyToCharge +CAMEL-CallResult/timeDurationChargingResult/partyToCharge timeDurationChargingResultpartyToCharge + +AOCSubsequent/tariffSwitchInterval aocSubsequent-tariffSwitchInterval +CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/tariffSwitchInterval timeDurationCharging-tariffSwitchInterval +ApplyChargingGPRSArg/tariffSwitchInterval applyChargingGPRS-tariffSwitchInterval +TimeIfTariffSwitch/tariffSwitchInterval timeIfTariffSwitch-tariffSwitchInterval + +# This table creates the value_sting to name Camel operation codes and errors +# in file packet-camel-table.c which is included in the template file +# +#.TABLE_HDR +/* CAMEL OPERATIONS */ +const value_string camel_opr_code_strings[] = { +#.TABLE_BODY OPERATION + { %(&operationCode)s, "%(_ident)s" }, +#.TABLE_FTR + { 0, NULL } +}; +#.END + +#.TABLE_HDR +/* CAMEL ERRORS */ +static const value_string camel_err_code_string_vals[] = { +#.TABLE_BODY ERROR + { %(&errorCode)s, "%(_ident)s" }, +#.TABLE_FTR + { 0, NULL } +}; +#.END + +# This table creates the switch() to branch on Camel operation codes and errors +# in file packet-camel-table2.c which is included in the template file +# +#.TABLE2_HDR +static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) { + + switch(opcode){ +#.TABLE2_BODY OPERATION.&ArgumentType + case %(&operationCode)s: /* %(_ident)s */ + offset= %(_argument_pdu)s(tvb, actx->pinfo , tree , NULL); + break; +#.TABLE2_FTR + default: + proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_invokeData, + tvb, offset, -1, "Unknown invokeData %d", opcode); + /* todo call the asn.1 dissector */ + break; + } + return offset; +} +#.END +#.TABLE2_HDR +static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) { + + switch(opcode){ +#.TABLE2_BODY OPERATION.&ResultType + case %(&operationCode)s: /* %(_ident)s */ + offset= %(_result_pdu)s(tvb, actx->pinfo , tree , NULL); + break; +#.TABLE2_FTR + default: + proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnResultData, + tvb, offset, -1, "Unknown returnResultData %d",opcode); + } + return offset; +} +#.END +#.TABLE2_HDR +static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) { + + switch(errorCode) { +#.TABLE2_BODY ERROR.&ParameterType + case %(&errorCode)s: /* %(_ident)s */ + %(_parameter_pdu)s(tvb, actx->pinfo , tree , NULL); + break; +#.TABLE2_FTR + default: + proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnErrorData, + tvb, offset, -1, "Unknown returnErrorData %d",errorCode); + } + return offset; +} +#.END +# ROS stuff here XXX change when TCAP is redone. + +#.FN_BODY Code/local VAL_PTR = &opcode + + if (is_ExtensionField){ + hf_index = hf_camel_extension_code_local; + }else if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){ + hf_index = hf_camel_error_code_local; + } + %(DEFAULT_BODY)s + if (is_ExtensionField == FALSE){ + if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){ + errorCode = opcode; + col_append_str(actx->pinfo->cinfo, COL_INFO, + val_to_str(errorCode, camel_err_code_string_vals, "Unknown CAMEL error (%%u)")); + col_append_str(actx->pinfo->cinfo, COL_INFO, " "); + col_set_fence(actx->pinfo->cinfo, COL_INFO); + }else{ + col_append_str(actx->pinfo->cinfo, COL_INFO, + val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%%u)")); + col_append_str(actx->pinfo->cinfo, COL_INFO, " "); + col_set_fence(actx->pinfo->cinfo, COL_INFO); + } + gp_camelsrt_info->opcode=opcode; + } +#.FN_HDR Invoke + camel_opcode_type=CAMEL_OPCODE_INVOKE; + +#.FN_HDR ReturnResult + camel_opcode_type=CAMEL_OPCODE_RETURN_RESULT; + +#.FN_HDR ReturnError + camel_opcode_type=CAMEL_OPCODE_RETURN_ERROR; + +#.FN_HDR Reject + camel_opcode_type=CAMEL_OPCODE_REJECT; + + +#.FN_BODY Invoke/argument + offset = dissect_invokeData(tree, tvb, offset, actx); + +#.FN_BODY ReturnResult/result/result + offset = dissect_returnResultData(tree, tvb, offset, actx); + +#.FN_BODY ReturnError/parameter + offset = dissect_returnErrorData(tree, tvb, offset, actx); + +# END ROS + +#.FN_BODY InitialDPArgExtension + +if((camel_ver == 2)||(camel_ver == 1)){ + return dissect_camel_InitialDPArgExtensionV2(implicit_tag, tvb, offset, actx, tree, hf_index); +} + +%(DEFAULT_BODY)s + +#.FN_HDR ExtensionField + camel_obj_id = NULL; + is_ExtensionField =TRUE; + +#.FN_PARS Code/global FN_VARIANT = _str VAL_PTR = &camel_obj_id + +#.FN_BODY ExtensionField/value + /*XXX handle local form here */ + if(camel_obj_id){ + offset=call_ber_oid_callback(camel_obj_id, tvb, offset, actx->pinfo, tree, NULL); + } + is_ExtensionField = FALSE; + +#---------------------------------------------------------------------------------------- +#.FN_BODY CallingPartyNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +subtree = proto_item_add_subtree(actx->created_item, ett_camel_callingpartynumber); +dissect_isup_calling_party_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY CalledPartyNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber); + dissect_isup_called_party_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY LocationNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +subtree = proto_item_add_subtree(actx->created_item, ett_camel_locationnumber); +dissect_isup_location_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY GenericNumber VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + +dissect_isup_generic_number_parameter(parameter_tvb, actx->pinfo, tree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY Cause VAL_PTR = ¶meter_tvb + +tvbuff_t *parameter_tvb; +guint8 Cause_value; +proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_cause); + + dissect_q931_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_camel_cause_indicator, &Cause_value, isup_parameter_type_value); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY RPCause VAL_PTR = ¶meter_tvb + +tvbuff_t *parameter_tvb; +guint8 Cause_value; +proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_RPcause); + + dissect_RP_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_camel_RP_Cause, &Cause_value); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY DateAndTime + + +/* +* date_option = 1 european dd:mm:yyyy +* date_option = 2 american mm:dd:yyyy +*/ + +/* +* Output should be HH:MM:SS;dd/mm/yyyy +* if european is selected, and HH:MM:SS;mm/dd/yyyy +* otherwise. +*/ + + guint8 digit_pair; + guint8 i = 0, curr_offset; + char camel_time[CAMEL_DATE_AND_TIME_LEN]; + char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/ + + /* 2 digits per octet, 7 octets total + 5 delimiters */ + + for (curr_offset = 0; curr_offset < 7 ; curr_offset++) + /*Loop to extract date*/ + { + digit_pair = tvb_get_guint8(tvb, curr_offset); + + proto_tree_add_uint(tree, + hf_digit, + tvb, + curr_offset, + 1, + digit_pair & 0x0F); + + proto_tree_add_uint(tree, + hf_digit, + tvb, + curr_offset, + 1, + digit_pair >>4); + + + c[i] = camel_number_to_char( digit_pair & 0x0F); + i++; + c[i] = camel_number_to_char( digit_pair >>4); + i++; + } + + /* Pretty print date */ + /* XXX - Should we use sprintf here instead of assembling the string by + * hand? */ + + camel_time[0] = c[8]; + camel_time[1] = c[9]; + camel_time[2] = ':'; + camel_time[3] = c[10]; + camel_time[4] = c[11]; + camel_time[5] = ':'; + camel_time[6] = c[12]; + camel_time[7] = c[13]; + camel_time[8] = ';'; + if ( EUROPEAN_DATE == date_format) /*european*/ + { + camel_time[9] = c[6]; /*day*/ + camel_time[10] = c[7]; + camel_time[11] = '/'; + camel_time[12] = c[4]; /*month*/ + camel_time[13] = c[5]; + } + else /*american*/ + { + camel_time[9] = c[4]; /*month*/ + camel_time[10] = c[5]; + camel_time[11] = '/'; + camel_time[12] = c[6]; /*day*/ + camel_time[13] = c[7]; + } + camel_time[14] = '/'; + camel_time[15] = c[0]; + camel_time[16] = c[1]; + camel_time[17] = c[2]; + camel_time[18] = c[3]; + + camel_time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0'; + +/*start = 0, length = 7*/ + + proto_tree_add_string(tree, + hf_index, + tvb, + 0, + 7, + camel_time); + + return 7; /* 7 octets eaten*/ +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY BearerCapability/bearerCap VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + + dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), tree); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY OriginalCalledPartyID VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_originalcalledpartyid); + dissect_isup_original_called_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_PARS RedirectingPartyID + + VAL_PTR = ¶meter_tvb + +#.FN_BODY RedirectingPartyID + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_redirectingpartyid); + dissect_isup_redirecting_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_PARS AccessPointName + VAL_PTR = ¶meter_tvb + +#.FN_BODY AccessPointName + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_AccessPointName); + de_sm_apn(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY EndUserAddress/pDPTypeOrganization VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + PDPTypeOrganization = (tvb_get_guint8(parameter_tvb,0) &0x0f); +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY EndUserAddress/pDPTypeNumber VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + PDPTypeNumber = tvb_get_guint8(parameter_tvb,0); + subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber); + switch (PDPTypeOrganization){ + case 0: /* ETSI */ + proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_etsi, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + break; + case 1: /* IETF */ + proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_ietf, parameter_tvb, 0, 1, ENC_BIG_ENDIAN); + break; + default: + break; + } +#.END + + +#.FN_BODY EndUserAddress/pDPAddress VAL_PTR = ¶meter_tvb + + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber); + switch (PDPTypeOrganization){ + case 0: /* ETSI */ + break; + case 1: /* IETF */ + switch(PDPTypeNumber){ + case 0x21: /* IPv4 */ + proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv4, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_BIG_ENDIAN); + break; + case 0x57: /* IPv6 */ + proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv6, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_NA); + break; + default: + break; + } + default: + break; + + } +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY LocationInformationGPRS/cellGlobalIdOrServiceAreaIdOrLAI + proto_tree *subtree; + int start_offset; + + start_offset = offset; +%(DEFAULT_BODY)s + + subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber); + + if (tvb_reported_length_remaining(tvb,start_offset) == 7){ + dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_cellGlobalIdOrServiceAreaIdFixedLength); + }else{ + dissect_gsm_map_LAIFixedLength(TRUE, tvb, start_offset, actx, subtree, hf_camel_locationAreaId); + } +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY AChBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_AChBillingChargingCharacteristics); + if((camel_ver == 2)||(camel_ver == 1)){ + return dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics); + } + dissect_camel_CAMEL_AChBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics); + +#.FN_BODY FCIBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIBillingChargingCharacteristics); + dissect_camel_CAMEL_FCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIBillingChargingCharacteristics); + +#.FN_BODY FCIGPRSBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics); + dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics); + +#.FN_BODY FCISMSBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics); + dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCISMSBillingChargingCharacteristics); + +#.FN_BODY SCIBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIBillingChargingCharacteristics); + dissect_camel_CAMEL_SCIBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIBillingChargingCharacteristics); + +#.FN_BODY SCIGPRSBillingChargingCharacteristics VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics); + dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics); + +#.FN_BODY CallResult VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_CallResult); + dissect_camel_CAMEL_CallResult(FALSE, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_CallResult); + +# V3 and V4 incompatibillity bug #1719 +#.FN_BODY CAMEL-AChBillingChargingCharacteristics/timeDurationCharging/audibleIndicator + if (tvb_reported_length_remaining(tvb,offset) < 2) + offset = dissect_camel_BOOLEAN(TRUE, tvb, offset, actx , tree, hf_camel_audibleIndicatorTone); + else +%(DEFAULT_BODY)s + +#.FN_BODY CalledPartyBCDNumber VAL_PTR = ¶meter_tvb +/* See 3GPP TS 29.078 + * and 3GPP TS 24.008, section 10.5.4.7 + * Indicates the Called Party Number, including service selection information. + * Refer to 3GPP TS 24.008 [9] for encoding. + * This data type carries only the 'type of number', 'numbering plan + * identification' and 'number digit' fields defined in 3GPP TS 24.008 [9]; + * it does not carry the 'called party BCD number IEI' or 'length of called + * party BCD number contents'. + * In the context of the DestinationSubscriberNumber field in ConnectSMSArg or + * InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric + * character string. In this case, type-of-number '101'B is used, in accordance + * with 3GPP TS 23.040 [6]. The address is coded in accordance with the + * GSM 7-bit default alphabet definition and the SMS packing rules + * as specified in 3GPP TS 23.038 [15] in this case. + */ + tvbuff_t *parameter_tvb; + proto_tree *subtree; + +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber); + de_cld_party_bcd_num(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0); + +#.END + +#.FN_BODY Digits VAL_PTR = ¶meter_tvb +/* +* Digits {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE( +* bound.&minDigitsLength .. bound.&maxDigitsLength)) +*-- Indicates the address signalling digits. +*-- Refer to ETSI EN 300 356 1 [23] Generic Number & Generic Digits parameters for encoding. +*-- The coding of the subfields 'NumberQualifier' in Generic Number and 'TypeOfDigits' in +*-- Generic Digits are irrelevant to the CAP; +*-- the ASN.1 tags are sufficient to identify the parameter. +*-- The ISUP format does not allow to exclude these subfields, +*-- therefore the value is network operator specific. +*-- +*-- The following parameters shall use Generic Number: +*-- - AdditionalCallingPartyNumber for InitialDP +*-- - AssistingSSPIPRoutingAddress for EstablishTemporaryConnection +*-- - CorrelationID for AssistRequestInstructions +*-- - CalledAddressValue for all occurrences, CallingAddressValue for all occurrences. +*-- +*-- The following parameters shall use Generic Digits: +*-- - CorrelationID in EstablishTemporaryConnection +*-- - number in VariablePart +*-- - digitsResponse in ReceivedInformationArg +*-- - midCallEvents in oMidCallSpecificInfo and tMidCallSpecificInfo +*-- +*-- In the digitsResponse and midCallevents, the digits may also include the '*', '#', +*-- a, b, c and d digits by using the IA5 character encoding scheme. If the BCD even or +*-- BCD odd encoding scheme is used, then the following encoding shall be applied for the +*-- non-decimal characters: 1011 (*), 1100 (#). +*-- +*-- AssistingSSPIPRoutingAddress in EstablishTemporaryConnection and CorrelationID in +*-- AssistRequestInstructions may contain a Hex B digit as address signal. Refer to +*-- Annex A.6 for the usage of the Hex B digit. +*-- +*-- Note that when CorrelationID is transported in Generic Digits, then the digits shall +*-- always be BCD encoded. +*/ + tvbuff_t *parameter_tvb; + proto_tree *subtree; + gint ett = -1; + bool digits = FALSE; + + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (!parameter_tvb) + return offset; + + if (hf_index == hf_camel_calledAddressValue) { + ett = ett_camel_calledAddressValue; + } else if (hf_index == hf_camel_callingAddressValue) { + ett = ett_camel_callingAddressValue; + } else if (hf_index == hf_camel_additionalCallingPartyNumber) { + ett = ett_camel_additionalcallingpartynumber; + } else if (hf_index == hf_camel_assistingSSPIPRoutingAddress) { + ett = ett_camel_assistingSSPIPRoutingAddress; + } else if (hf_index == hf_camel_correlationID) { + ett = ett_camel_correlationID; + digits = (opcode == opcode_establishTemporaryConnection) ? TRUE : FALSE; + } else if (hf_index == hf_camel_dTMFDigitsCompleted) { + ett = ett_camel_dTMFDigitsCompleted; + digits = TRUE; + } else if (hf_index == hf_camel_dTMFDigitsTimeOut) { + ett = ett_camel_dTMFDigitsTimeOut; + digits = TRUE; + } else if (hf_index == hf_camel_number) { + ett = ett_camel_number; + digits = TRUE; + } else if (hf_index == hf_camel_digitsResponse) { + ett = ett_camel_digitsResponse; + digits = TRUE; + } + + subtree = proto_item_add_subtree(actx->created_item, ett); + if (digits) { + dissect_isup_generic_digits_parameter(parameter_tvb, subtree, NULL); + } else { + dissect_isup_generic_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL); + } + +# I don't know how to "access" the EstablishTemporaryConnectionArg-PDU which would have been cleaner. +#.FN_BODY EstablishTemporaryConnectionArg + + if(camel_ver==2){ + return dissect_camel_EstablishTemporaryConnectionArgV2(implicit_tag, tvb, offset, actx, tree, hf_index); + } +%(DEFAULT_BODY)s + +#.FN_BODY SpecializedResourceReportArg + if (camel_ver < 4) { + return dissect_camel_SpecializedResourceReportArgV23(implicit_tag, tvb, offset, actx, tree, hf_camel_allAnnouncementsComplete); + } +%(DEFAULT_BODY)s + +#.FN_BODY TimeAndTimezone VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + proto_tree *subtree; + proto_item *item; + gchar *digit_str; + guint length; + gchar year[5]; + gchar month[3]; + gchar day[3]; + gchar hour[3]; + gchar minute[3]; + gchar second[3]; + + guint8 oct; + int8_t tz; +%(DEFAULT_BODY)s + + if (!parameter_tvb) + return offset; + length = tvb_reported_length(parameter_tvb); + if (length < 8 /*cAPSpecificBoundSetminTimeAndTimezoneLength*/){ + expert_add_info(actx->pinfo, actx->created_item, &ei_camel_par_wrong_length); + return offset; + } + subtree = proto_item_add_subtree(actx->created_item, ett_camel_timeandtimezone); + item = proto_tree_add_item_ret_display_string(subtree, hf_camel_timeandtimezone_time, parameter_tvb, 0, 7, ENC_BCD_DIGITS_0_9, actx->pinfo->pool, &digit_str); + +/* +The Time Zone indicates the difference, expressed in quarters of an hour, between the local time and GMT. In the first of the two semi octets, +the first bit (bit 3 of the seventh octet of the TP Service Centre Time Stamp field) represents the algebraic sign of this difference (0: positive, 1: negative). +*/ + oct = tvb_get_guint8(parameter_tvb,7); + + /* packet-gsm_sms.c time dis_field_scts_aux() */ + tz = (oct >> 4) + (oct & 0x07) * 10; + tz = (oct & 0x08) ? -tz : tz; + + proto_tree_add_int_format_value(subtree, hf_camel_timeandtimezone_tz, parameter_tvb, 7, 1, tz, "GMT %%+d hours %%d minutes", tz / 4, tz %% 4 * 15); + + /* ENC_BCD_DIGITS_0_9 truncates if the nibble is 0xf. */ + if (strlen(digit_str) < 14 || strchr(digit_str, '?')) { + expert_add_info(actx->pinfo, item, &ei_camel_bcd_not_digit); + return offset; + } + + (void) g_strlcpy(year, digit_str, 5); + (void) g_strlcpy(month, digit_str+4, 3); + (void) g_strlcpy(day, digit_str+6, 3); + (void) g_strlcpy(hour, digit_str+8, 3); + (void) g_strlcpy(minute, digit_str+10, 3); + (void) g_strlcpy(second, digit_str+12, 3); + + proto_item_append_text(item, " (%%s-%%s-%%s %%s:%%s:%%s)",year,month,day,hour,minute,second); + +#.TYPE_ATTR +PDPTypeOrganization TYPE = FT_UINT8 DISPLAY = BASE_DEC BITMASK = 0x0f STRINGS = VALS(gsm_map_PDP_Type_Organisation_vals) +DateAndTime TYPE = FT_STRING DISPLAY = BASE_NONE +Code/local TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_opr_code_strings) +ServiceInteractionIndicatorsTwo/holdTreatmentIndicator TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_holdTreatmentIndicator_values) +ServiceInteractionIndicatorsTwo/cwTreatmentIndicator TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_cwTreatmentIndicator_values) +ServiceInteractionIndicatorsTwo/ectTreatmentIndicator TYPE = FT_INT32 DISPLAY = BASE_DEC STRINGS = VALS(camel_ectTreatmentIndicator_values) +#.FIELD_ATTR +EventSpecificInformationSMS/o-smsFailureSpecificInfo/failureCause ABBREV=mo-smsfailureCause +EventSpecificInformationBCSM/routeSelectFailureSpecificInfo/failureCause ABBREV=routeSelectfailureCause +EventSpecificInformationSMS/t-smsFailureSpecificInfo/failureCause ABBREV=t-smsfailureCause +Tone/duration ABBREV=toneDuration +GapIndicators/duration ABBREV=gapIndicatorsDuration +InbandInfo/duration ABBREV=inbandInfoDuration + +#.END diff --git a/epan/dissectors/asn1/camel/packet-camel-template.c b/epan/dissectors/asn1/camel/packet-camel-template.c new file mode 100644 index 00000000..cf36f5c2 --- /dev/null +++ b/epan/dissectors/asn1/camel/packet-camel-template.c @@ -0,0 +1,1603 @@ +/* packet-camel-template.c + * Routines for Camel + * Copyright 2004, Tim Endean <endeant@hotmail.com> + * Copyright 2005, Olivier Jacques <olivier.jacques@hp.com> + * Copyright 2005, Javier Acuna <javier.acuna@sixbell.com> + * Updated to ETSI TS 129 078 V6.4.0 (2004-3GPP TS 29.078 version 6.4.0 Release 6 1 12) + * Copyright 2005-2010, Anders Broman <anders.broman@ericsson.com> + * Updated to 3GPP TS 29.078 version 7.3.0 Release 7 (2006-06) + * Built from the gsm-map dissector Copyright 2004, Anders Broman <anders.broman@ericsson.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * References: ETSI 300 374 + */ +/* + * Indentation logic: this file is indented with 2 spaces indentation. + * there are no tabs. + */ +#include "config.h" + +#include <stdlib.h> + +#include <epan/packet.h> +#include <epan/prefs.h> +#include <epan/oids.h> +#include <epan/tap.h> +#include <epan/srt_table.h> +#include <epan/stat_tap_ui.h> +#include <epan/asn1.h> +#include <epan/expert.h> +#include <wsutil/strtoi.h> + +#include "packet-ber.h" +#include "packet-camel.h" +#include "packet-q931.h" +#include "packet-e164.h" +#include "packet-isup.h" +#include "packet-gsm_map.h" +#include "packet-gsm_a_common.h" +#include "packet-inap.h" +#include "packet-tcap.h" + +#define PNAME "Camel" +#define PSNAME "CAMEL" +#define PFNAME "camel" + +/* Initialize the protocol and registered fields */ +static int proto_camel = -1; +int date_format = 1; /*assume european date format */ +int camel_tap = -1; +/* Global variables */ +static guint32 opcode=0; +static guint32 errorCode=0; +static guint32 camel_ver = 0; + +/* When several Camel components are received in a single TCAP message, + we have to use several buffers for the stored parameters + because else this data are erased during TAP dissector call */ +#define MAX_CAMEL_INSTANCE 10 +static int camelsrt_global_current=0; +static struct camelsrt_info_t camelsrt_global_info[MAX_CAMEL_INSTANCE]; + +/* ROSE context */ +static rose_ctx_t camel_rose_ctx; + +static int hf_digit = -1; +static int hf_camel_extension_code_local = -1; +static int hf_camel_error_code_local = -1; +static int hf_camel_cause_indicator = -1; +static int hf_camel_PDPTypeNumber_etsi = -1; +static int hf_camel_PDPTypeNumber_ietf = -1; +static int hf_camel_PDPAddress_IPv4 = -1; +static int hf_camel_PDPAddress_IPv6 = -1; +static int hf_camel_cellGlobalIdOrServiceAreaIdFixedLength = -1; +static int hf_camel_RP_Cause = -1; +static int hf_camel_CAMEL_AChBillingChargingCharacteristics = -1; +static int hf_camel_CAMEL_FCIBillingChargingCharacteristics = -1; +static int hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics = -1; +static int hf_camel_CAMEL_FCISMSBillingChargingCharacteristics = -1; +static int hf_camel_CAMEL_SCIBillingChargingCharacteristics = -1; +static int hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics = -1; +static int hf_camel_CAMEL_CallResult = -1; + +/* Used by persistent data */ +static int hf_camelsrt_SessionId=-1; +//static int hf_camelsrt_RequestNumber=-1; +static int hf_camelsrt_Duplicate=-1; +static int hf_camelsrt_RequestFrame=-1; +static int hf_camelsrt_ResponseFrame=-1; +//static int hf_camelsrt_DeltaTime=-1; +//static int hf_camelsrt_SessionTime=-1; +static int hf_camelsrt_DeltaTime31=-1; +static int hf_camelsrt_DeltaTime75=-1; +static int hf_camelsrt_DeltaTime65=-1; +static int hf_camelsrt_DeltaTime22=-1; +static int hf_camelsrt_DeltaTime35=-1; +static int hf_camelsrt_DeltaTime80=-1; +static int hf_camel_timeandtimezone_time = -1; +static int hf_camel_timeandtimezone_tz = -1; + +#include "packet-camel-hf.c" + +static struct camelsrt_info_t * gp_camelsrt_info; + +/* Forward declarations */ +static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx); +static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx); +static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx); +static int dissect_camel_CAMEL_AChBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); +static int dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); +static int dissect_camel_CAMEL_CallResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); +static int dissect_camel_EstablishTemporaryConnectionArgV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); +static int dissect_camel_SpecializedResourceReportArgV23(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); + +/* XXX - can we get rid of these and always do the SRT work? */ +static gboolean gcamel_PersistentSRT=FALSE; +static gboolean gcamel_DisplaySRT=FALSE; +gboolean gcamel_StatSRT=FALSE; + +/* Initialize the subtree pointers */ +static gint ett_camel = -1; +static gint ett_camelisup_parameter = -1; +static gint ett_camel_AccessPointName = -1; +static gint ett_camel_pdptypenumber = -1; +static gint ett_camel_cause = -1; +static gint ett_camel_RPcause = -1; +static gint ett_camel_stat = -1; +static gint ett_camel_calledpartybcdnumber = -1; +static gint ett_camel_callingpartynumber = -1; +static gint ett_camel_originalcalledpartyid = -1; +static gint ett_camel_redirectingpartyid = -1; +static gint ett_camel_locationnumber = -1; +static gint ett_camel_additionalcallingpartynumber = -1; +static gint ett_camel_calledAddressValue = -1; +static gint ett_camel_callingAddressValue = -1; +static gint ett_camel_assistingSSPIPRoutingAddress = -1; +static gint ett_camel_correlationID = -1; +static gint ett_camel_dTMFDigitsCompleted = -1; +static gint ett_camel_dTMFDigitsTimeOut = -1; +static gint ett_camel_number = -1; +static gint ett_camel_digitsResponse = -1; +static gint ett_camel_timeandtimezone = -1; + +#include "packet-camel-ett.c" + +static expert_field ei_camel_unknown_invokeData = EI_INIT; +static expert_field ei_camel_unknown_returnResultData = EI_INIT; +static expert_field ei_camel_unknown_returnErrorData = EI_INIT; +static expert_field ei_camel_par_wrong_length = EI_INIT; +static expert_field ei_camel_bcd_not_digit = EI_INIT; + +/* Preference settings default */ +#define MAX_SSN 254 +static range_t *global_ssn_range; +static dissector_handle_t camel_handle; +static dissector_handle_t camel_v1_handle; +static dissector_handle_t camel_v2_handle; +static dissector_handle_t camel_v3_handle; +static dissector_handle_t camel_v4_handle; + +/* Global variables */ + +static guint8 PDPTypeOrganization; +static guint8 PDPTypeNumber; +const char *camel_obj_id = NULL; +gboolean is_ExtensionField =FALSE; + +/* Global hash tables*/ +static wmem_map_t *srt_calls = NULL; +static guint32 camelsrt_global_SessionId=1; + +static int camel_opcode_type; +#define CAMEL_OPCODE_INVOKE 1 +#define CAMEL_OPCODE_RETURN_RESULT 2 +#define CAMEL_OPCODE_RETURN_ERROR 3 +#define CAMEL_OPCODE_REJECT 4 + +static const value_string camel_Component_vals[] = { + { 1, "invoke" }, + { 2, "returnResultLast" }, + { 3, "returnError" }, + { 4, "reject" }, + { 0, NULL } +}; + +const value_string camelSRTtype_naming[]= { + { CAMELSRT_SESSION, "TCAP_Session" }, + { CAMELSRT_VOICE_INITIALDP, "InitialDP/Continue" }, + { CAMELSRT_VOICE_ACR1, "Slice1_ACR/ACH" }, + { CAMELSRT_VOICE_ACR2, "Slice2_ACR/ACH" }, + { CAMELSRT_VOICE_ACR3, "Slice3_ACR/ACH" }, + { CAMELSRT_VOICE_DISC, "EvtRepBSCM/Release" }, + { CAMELSRT_SMS_INITIALDP, "InitialDP/ContinueSMS" }, + { CAMELSRT_GPRS_INITIALDP, "InitialDP/ContinueGPRS" }, + { CAMELSRT_GPRS_REPORT, "EvtRepGPRS/ContinueGPRS" }, + { 0,NULL} +}; + +#define EUROPEAN_DATE 1 +#define AMERICAN_DATE 2 +#define CAMEL_DATE_AND_TIME_LEN 20 /* 2*5 + 4 + 5 + 1 (HH:MM:SS;mm/dd/yyyy) */ + +static const enum_val_t date_options[] = { + { "european", "DD/MM/YYYY", EUROPEAN_DATE }, + { "american", "MM/DD/YYYY", AMERICAN_DATE }, + { NULL, NULL, 0 } +}; + +static const value_string digit_value[] = { + { 0, "0"}, + { 1, "1"}, + { 2, "2"}, + { 3, "3"}, + { 4, "4"}, + { 5, "5"}, + { 6, "6"}, + { 7, "7"}, + { 8, "8"}, + { 9, "9"}, + { 10, "spare"}, + { 11, "spare"}, + { 12, "spare"}, + { 13, "spare"}, + { 0, NULL} + +}; + + +#if 0 +static const value_string camel_nature_of_addr_indicator_values[] = { + { 0x00, "unknown" }, + { 0x01, "International Number" }, + { 0x02, "National Significant Number" }, + { 0x03, "Network Specific Number" }, + { 0x04, "Subscriber Number" }, + { 0x05, "Reserved" }, + { 0x06, "Abbreviated Number" }, + { 0x07, "Reserved for extension" }, + { 0, NULL } +}; +static const value_string camel_number_plan_values[] = { + { 0x00, "unknown" }, + { 0x01, "ISDN/Telephony Numbering (Rec ITU-T E.164)" }, + { 0x02, "spare" }, + { 0x03, "Data Numbering (ITU-T Rec. X.121)" }, + { 0x04, "Telex Numbering (ITU-T Rec. F.69)" }, + { 0x05, "spare" }, + { 0x06, "Land Mobile Numbering (ITU-T Rec. E.212)" }, + { 0x07, "spare" }, + { 0x08, "National Numbering" }, + { 0x09, "Private Numbering" }, + { 0x0f, "Reserved for extension" }, + { 0, NULL } +}; +#endif + +/* End includes from old" packet-camel.c */ + +static const value_string camel_RP_Cause_values[] = { + { 1, "Unassigned (unallocated) number" }, + { 8, "Operator determined barring" }, + { 10, "Call barred" }, + { 11, "Reserved" }, + { 21, "Short message transfer rejected" }, + { 27, "Destination out of order" }, + { 28, "Unidentified subscriber" }, + { 29, "Facility Rejected" }, + { 30, "Unknown subscriber" }, + { 38, "Network out of order" }, + { 41, "Temporary failure" }, + { 42, "Congestion" }, + { 47, "Resources unavailable, unspecified" }, + { 50, "Requested facility not subscribed" }, + { 69, "Requested facility not implemented" }, + { 81, "Invalid short message transfer reference value" }, + { 95, "Semantically incorrect message" }, + { 96, "Invalid mandatory information" }, + { 97, " Message Type non-existent or not implemented" }, + { 98, "Message not compatible with short message protocol state" }, + { 99, "Information element non existent or not implemented" }, + { 111, "Protocol error, unspecified" }, + { 127, "Interworking, unspecified" }, + { 22,"Memory capacity exceeded" }, + { 0, NULL } +}; + +static const value_string camel_holdTreatmentIndicator_values[] = { + { 0x01, "acceptHoldRequest" }, + { 0x02, "rejectHoldRequest" }, + { 0, NULL } +}; +static const value_string camel_cwTreatmentIndicator_values[] = { + { 0x01, "acceptCw" }, + { 0x02, "rejectCw" }, + { 0, NULL } +}; +static const value_string camel_ectTreatmentIndicator_values[] = { + { 0x01, "acceptEctRequest" }, + { 0x02, "rejectEctRequest" }, + { 0, NULL } +}; + +#include "packet-camel-val.h" + +#include "packet-camel-table.c" + +/* + * DEBUG fonctions + */ + +#undef DEBUG_CAMELSRT +/* #define DEBUG_CAMELSRT */ + +#ifdef DEBUG_CAMELSRT +#include <stdio.h> +#include <stdarg.h> +static guint debug_level = 99; + +static void dbg(guint level, char *fmt, ...) { + va_list ap; + + if (level > debug_level) return; + va_start(ap,fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); +} +#endif + +static void +camelstat_init(struct register_srt* srt _U_, GArray* srt_array) +{ + srt_stat_table *camel_srt_table; + gchar* tmp_str; + guint32 i; + + camel_srt_table = init_srt_table("CAMEL Commands", NULL, srt_array, NB_CAMELSRT_CATEGORY, NULL, NULL, NULL); + for (i = 0; i < NB_CAMELSRT_CATEGORY; i++) + { + tmp_str = val_to_str_wmem(NULL,i,camelSRTtype_naming,"Unknown (%d)"); + init_srt_table_row(camel_srt_table, i, tmp_str); + wmem_free(NULL, tmp_str); + } +} + +static tap_packet_status +camelstat_packet(void *pcamel, packet_info *pinfo, epan_dissect_t *edt _U_, const void *psi, tap_flags_t flags _U_) +{ + guint idx = 0; + srt_stat_table *camel_srt_table; + const struct camelsrt_info_t * pi=(const struct camelsrt_info_t *)psi; + srt_data_t *data = (srt_data_t *)pcamel; + int i; + + for (i=1; i<NB_CAMELSRT_CATEGORY; i++) { + if ( pi->bool_msginfo[i] && + pi->msginfo[i].is_delta_time + && pi->msginfo[i].request_available + && !pi->msginfo[i].is_duplicate ) + { + camel_srt_table = g_array_index(data->srt_array, srt_stat_table*, idx); + add_srt_table_data(camel_srt_table, i, &pi->msginfo[i].req_time, pinfo); + } + } /* category */ + return TAP_PACKET_REDRAW; +} + + +static char camel_number_to_char(int number) +{ + if (number < 10) + return (char) (number + 48 ); /* this is ASCII specific */ + else + return (char) (number + 55 ); +} + +/* + * 24.011 8.2.5.4 + */ +static guint8 +dissect_RP_cause_ie(tvbuff_t *tvb, guint32 offset, _U_ guint len, + proto_tree *tree, int hf_cause_value, guint8 *cause_value) +{ + guint8 oct; + guint32 curr_offset; + + curr_offset = offset; + oct = tvb_get_guint8(tvb, curr_offset); + + *cause_value = oct & 0x7f; + + proto_tree_add_uint(tree, hf_cause_value, tvb, curr_offset, 1, oct); + curr_offset++; + + if ((oct & 0x80)) { + oct = tvb_get_guint8(tvb, curr_offset); + proto_tree_add_uint_format(tree, hf_cause_value, + tvb, curr_offset, 1, oct, + "Diagnostic : %u", oct); + curr_offset++; + } + return(curr_offset - offset); +} + +static int dissect_camel_InitialDPArgExtensionV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); + +#include "packet-camel-fn.c" + +#include "packet-camel-table2.c" + +/* + * Functions needed for Hash-Table + */ + +/* compare 2 keys */ +static gint +camelsrt_call_equal(gconstpointer k1, gconstpointer k2) +{ + const struct camelsrt_call_info_key_t *key1 = (const struct camelsrt_call_info_key_t *) k1; + const struct camelsrt_call_info_key_t *key2 = (const struct camelsrt_call_info_key_t *) k2; + + return (key1->SessionIdKey == key2->SessionIdKey) ; +} + +/* calculate a hash key */ +static guint +camelsrt_call_hash(gconstpointer k) +{ + const struct camelsrt_call_info_key_t *key = (const struct camelsrt_call_info_key_t *) k; + return key->SessionIdKey; +} + +/* + * Find the dialog by Key and Time + */ +static struct camelsrt_call_t * +find_camelsrt_call(struct camelsrt_call_info_key_t *p_camelsrt_call_key) +{ + struct camelsrt_call_t *p_camelsrt_call = NULL; + p_camelsrt_call = (struct camelsrt_call_t *)wmem_map_lookup(srt_calls, p_camelsrt_call_key); + +#ifdef DEBUG_CAMELSRT + if(p_camelsrt_call) { + dbg(10,"D%d ", p_camelsrt_call->session_id); + } else { + dbg(23,"Not in hash "); + } +#endif + + return p_camelsrt_call; +} + +/* + * Initialize the data per call for the Service Response Time Statistics + * Data are linked to a Camel operation in a TCAP transaction + */ +static void +raz_camelsrt_call (struct camelsrt_call_t *p_camelsrt_call) +{ + memset(p_camelsrt_call,0,sizeof(struct camelsrt_call_t)); +} + +/* + * New record to create, to identify a new transaction + */ +static struct camelsrt_call_t * +new_camelsrt_call(struct camelsrt_call_info_key_t *p_camelsrt_call_key) +{ + struct camelsrt_call_info_key_t *p_new_camelsrt_call_key; + struct camelsrt_call_t *p_new_camelsrt_call = NULL; + + /* Register the transaction in the hash table + with the tcap transaction Id as main Key + Once created, this entry will be updated later */ + + p_new_camelsrt_call_key = wmem_new(wmem_file_scope(), struct camelsrt_call_info_key_t); + p_new_camelsrt_call_key->SessionIdKey = p_camelsrt_call_key->SessionIdKey; + p_new_camelsrt_call = wmem_new(wmem_file_scope(), struct camelsrt_call_t); + raz_camelsrt_call(p_new_camelsrt_call); + p_new_camelsrt_call->session_id = camelsrt_global_SessionId++; +#ifdef DEBUG_CAMELSRT + dbg(10,"D%d ", p_new_camelsrt_call->session_id); +#endif + /* store it */ + wmem_map_insert(srt_calls, p_new_camelsrt_call_key, p_new_camelsrt_call); + return p_new_camelsrt_call; +} + +/* + * Routine called when the TAP is initialized. + * so hash table are (re)created + */ +static void +camelsrt_init_routine(void) +{ + /* Reset the session counter */ + camelsrt_global_SessionId=1; + + /* The Display of SRT is enable + * 1) For wireshark only if Persistent Stat is enable + * 2) For Tshark, if the SRT CLI tap is registered + */ + gcamel_DisplaySRT=gcamel_PersistentSRT || gcamel_StatSRT; +} + + +/* + * Update a record with the data of the Request + */ +static void +update_camelsrt_call(struct camelsrt_call_t *p_camelsrt_call, packet_info *pinfo, + guint msg_category) +{ + p_camelsrt_call->category[msg_category].req_num = pinfo->num; + p_camelsrt_call->category[msg_category].rsp_num = 0; + p_camelsrt_call->category[msg_category].responded = FALSE; + p_camelsrt_call->category[msg_category].req_time = pinfo->abs_ts; +} + +/* + * Update the Camel session info, and close the session. + * Then remove the associated context, if we do not have persistentSRT enable + */ +static void +camelsrt_close_call_matching(packet_info *pinfo, + struct camelsrt_info_t *p_camelsrt_info) +{ + struct camelsrt_call_t *p_camelsrt_call; + struct camelsrt_call_info_key_t camelsrt_call_key; + nstime_t delta; + + p_camelsrt_info->bool_msginfo[CAMELSRT_SESSION]=TRUE; +#ifdef DEBUG_CAMELSRT + dbg(10,"\n Session end #%u\n", pinfo->num); +#endif + /* look only for matching request, if matching conversation is available. */ + camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id; + +#ifdef DEBUG_CAMELSRT + dbg(11,"Search key %lu ",camelsrt_call_key.SessionIdKey); +#endif + p_camelsrt_call = find_camelsrt_call(&camelsrt_call_key); + if(p_camelsrt_call) { +#ifdef DEBUG_CAMELSRT + dbg(12,"Found "); +#endif + /* Calculate Service Response Time */ + nstime_delta(&delta, &pinfo->abs_ts, &p_camelsrt_call->category[CAMELSRT_SESSION].req_time); + p_camelsrt_call->category[CAMELSRT_SESSION].responded = TRUE; + p_camelsrt_info->msginfo[CAMELSRT_SESSION].request_available = TRUE; + p_camelsrt_info->msginfo[CAMELSRT_SESSION].is_delta_time = TRUE; + p_camelsrt_info->msginfo[CAMELSRT_SESSION].delta_time = delta; /* give it to tap */ + p_camelsrt_info->msginfo[CAMELSRT_SESSION].req_time = p_camelsrt_call->category[CAMELSRT_SESSION].req_time; + + if ( !gcamel_PersistentSRT ) { + wmem_map_remove(srt_calls, &camelsrt_call_key); +#ifdef DEBUG_CAMELSRT + dbg(20,"remove hash "); +#endif + } else { +#ifdef DEBUG_CAMELSRT + dbg(20,"keep hash "); +#endif + } + } /* call reference found */ +} + +/* + * Callback function for the TCAP dissector + * This callback function is used to inform the camel layer, that the session + * has been Closed or Aborted by a TCAP message without Camel component + * So, we can close the context for camel session, and update the stats. + */ +static void +camelsrt_tcap_matching(tvbuff_t *tvb _U_, packet_info *pinfo, + proto_tree *tree _U_, + struct tcaphash_context_t *p_tcap_context) +{ + struct camelsrt_info_t *p_camelsrt_info; + +#ifdef DEBUG_CAMELSRT + dbg(11,"Camel_CallBack "); +#endif + p_camelsrt_info=camelsrt_razinfo(); + + p_camelsrt_info->tcap_context=p_tcap_context; + if (p_tcap_context) { +#ifdef DEBUG_CAMELSRT + dbg(11,"Close TCAP "); +#endif + p_camelsrt_info->tcap_session_id = p_tcap_context->session_id; + camelsrt_close_call_matching(pinfo, p_camelsrt_info); + tap_queue_packet(camel_tap, pinfo, p_camelsrt_info); + } +} + +/* + * Create the record identifiying the Camel session + * As the Tcap session id given by the TCAP dissector is uniq, it will be + * used as main key. + */ +static void +camelsrt_begin_call_matching(packet_info *pinfo, + struct camelsrt_info_t *p_camelsrt_info) +{ + struct camelsrt_call_t *p_camelsrt_call; + struct camelsrt_call_info_key_t camelsrt_call_key; + + p_camelsrt_info->bool_msginfo[CAMELSRT_SESSION]=TRUE; + + /* prepare the key data */ + camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id; + + /* look up the request */ +#ifdef DEBUG_CAMELSRT + dbg(10,"\n Session begin #%u\n", pinfo->num); + dbg(11,"Search key %lu ",camelsrt_call_key.SessionIdKey); +#endif + p_camelsrt_call = (struct camelsrt_call_t *)wmem_map_lookup(srt_calls, &camelsrt_call_key); + if (p_camelsrt_call) { + /* We have seen this request before -> do nothing */ +#ifdef DEBUG_CAMELSRT + dbg(22,"Already seen "); +#endif + } else { /* p_camelsrt_call has not been found */ +#ifdef DEBUG_CAMELSRT + dbg(10,"New key %lu ",camelsrt_call_key.SessionIdKey); +#endif + p_camelsrt_call = new_camelsrt_call(&camelsrt_call_key); + p_camelsrt_call->tcap_context=(struct tcaphash_context_t *)p_camelsrt_info->tcap_context; + update_camelsrt_call(p_camelsrt_call, pinfo,CAMELSRT_SESSION); + +#ifdef DEBUG_CAMELSRT + dbg(11,"Update Callback "); +#endif + p_camelsrt_call->tcap_context->callback=camelsrt_tcap_matching; + } +} + +/* + * Register the request, and try to find the response + * + */ +static void +camelsrt_request_call_matching(tvbuff_t *tvb, packet_info *pinfo, + proto_tree *tree, + struct camelsrt_info_t *p_camelsrt_info, + guint srt_type ) +{ + struct camelsrt_call_t *p_camelsrt_call; + struct camelsrt_call_info_key_t camelsrt_call_key; + proto_item *ti, *hidden_item; + +#ifdef DEBUG_CAMELSRT + dbg(10,"\n %s #%u\n", val_to_str_const(srt_type, camelSRTtype_naming, "Unk"),pinfo->num); +#endif + + /* look only for matching request, if matching conversation is available. */ + camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id; + +#ifdef DEBUG_CAMELSRT + dbg(11,"Search key %lu ", camelsrt_call_key.SessionIdKey); +#endif + p_camelsrt_call = find_camelsrt_call(&camelsrt_call_key); + if(p_camelsrt_call) { +#ifdef DEBUG_CAMELSRT + dbg(12,"Found "); +#endif + if (gcamel_DisplaySRT) + proto_tree_add_uint(tree, hf_camelsrt_SessionId, tvb, 0,0, p_camelsrt_call->session_id); + + + /* Hmm.. As there are several slices ApplyChargingReport/ApplyCharging + * we will prepare the measurement for 3 slices with 3 categories */ + if (srt_type==CAMELSRT_VOICE_ACR1) { + if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num == 0) { + srt_type=CAMELSRT_VOICE_ACR1; + } else if ( (p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num == 0) + && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num != 0) + && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num < pinfo->num) ) { + srt_type=CAMELSRT_VOICE_ACR2; + } else if ( (p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num == 0) + && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num != 0) + && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num < pinfo->num) ) { + srt_type=CAMELSRT_VOICE_ACR3; + } else if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num != 0 + && p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num > pinfo->num) { + srt_type=CAMELSRT_VOICE_ACR1; + } else if ( p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num != 0 + && p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num > pinfo->num) { + srt_type=CAMELSRT_VOICE_ACR2; + } else if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num != 0 + && p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].rsp_num > pinfo->num) { + srt_type=CAMELSRT_VOICE_ACR3; + } +#ifdef DEBUG_CAMELSRT + dbg(70,"Request ACR %u ",srt_type); + dbg(70,"ACR1 %u %u",p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num, p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num); + dbg(70,"ACR2 %u %u",p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num, p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num); + dbg(70,"ACR3 %u %u",p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num, p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].rsp_num); +#endif + } /* not ACR */ + p_camelsrt_info->bool_msginfo[srt_type]=TRUE; + + + if (p_camelsrt_call->category[srt_type].req_num == 0) { + /* We have not yet seen a request to that call, so this must be the first request + remember its frame number. */ +#ifdef DEBUG_CAMELSRT + dbg(5,"Set reqlink #%u ", pinfo->num); +#endif + update_camelsrt_call(p_camelsrt_call, pinfo, srt_type); + } else { + /* We have seen a request to this call - but was it *this* request? */ + if (p_camelsrt_call->category[srt_type].req_num != pinfo->num) { + + if (srt_type!=CAMELSRT_VOICE_DISC) { + /* No, so it's a duplicate request. Mark it as such. */ +#ifdef DEBUG_CAMELSRT + dbg(21,"Display_duplicate with req %d ", p_camelsrt_call->category[srt_type].req_num); +#endif + p_camelsrt_info->msginfo[srt_type].is_duplicate = TRUE; + if (gcamel_DisplaySRT){ + hidden_item = proto_tree_add_uint(tree, hf_camelsrt_Duplicate, tvb, 0,0, 77); + proto_item_set_hidden(hidden_item); + } + + } else { + /* Ignore duplicate frame */ + if (pinfo->num > p_camelsrt_call->category[srt_type].req_num) { + p_camelsrt_call->category[srt_type].req_num = pinfo->num; +#ifdef DEBUG_CAMELSRT + dbg(5,"DISC Set reqlink #%u ", pinfo->num); +#endif + update_camelsrt_call(p_camelsrt_call, pinfo, srt_type); + } /* greater frame */ + } /* DISC */ + } /* req_num already seen */ + } /* req_num != 0 */ + + /* add link to response frame, if available */ + if ( gcamel_DisplaySRT && + (p_camelsrt_call->category[srt_type].rsp_num != 0) && + (p_camelsrt_call->category[srt_type].req_num != 0) && + (p_camelsrt_call->category[srt_type].req_num == pinfo->num) ) { +#ifdef DEBUG_CAMELSRT + dbg(20,"Display_framersplink %d ",p_camelsrt_call->category[srt_type].rsp_num); +#endif + ti = proto_tree_add_uint_format(tree, hf_camelsrt_RequestFrame, tvb, 0, 0, + p_camelsrt_call->category[srt_type].rsp_num, + "Linked response %s in frame %u", + val_to_str_const(srt_type, camelSRTtype_naming, "Unk"), + p_camelsrt_call->category[srt_type].rsp_num); + proto_item_set_generated(ti); + } /* frame valid */ + } /* call reference */ +} + +/* + * Display the delta time between two messages in a field corresponding + * to the category (hf_camelsrt_DeltaTimexx). + */ +static void +camelsrt_display_DeltaTime(proto_tree *tree, tvbuff_t *tvb, nstime_t *value_ptr, + guint category) +{ + proto_item *ti; + + if ( gcamel_DisplaySRT ) { + switch(category) { + case CAMELSRT_VOICE_INITIALDP: + ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime31, tvb, 0, 0, value_ptr); + proto_item_set_generated(ti); + break; + + case CAMELSRT_VOICE_ACR1: + case CAMELSRT_VOICE_ACR2: + case CAMELSRT_VOICE_ACR3: + ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime22, tvb, 0, 0, value_ptr); + proto_item_set_generated(ti); + break; + + case CAMELSRT_VOICE_DISC: + ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime35, tvb, 0, 0, value_ptr); + proto_item_set_generated(ti); + break; + + case CAMELSRT_GPRS_INITIALDP: + ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime75, tvb, 0, 0, value_ptr); + proto_item_set_generated(ti); + break; + + case CAMELSRT_GPRS_REPORT: + ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime80, tvb, 0, 0, value_ptr); + proto_item_set_generated(ti); + break; + + case CAMELSRT_SMS_INITIALDP: + ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime65, tvb, 0, 0, value_ptr); + proto_item_set_generated(ti); + break; + + default: + break; + } + } +} + +/* + * Check if the received message is a response to a previous request + * registered is the camel session context. + */ +static void +camelsrt_report_call_matching(tvbuff_t *tvb, packet_info *pinfo, + proto_tree *tree, + struct camelsrt_info_t *p_camelsrt_info, + guint srt_type) +{ + struct camelsrt_call_t *p_camelsrt_call; + struct camelsrt_call_info_key_t camelsrt_call_key; + nstime_t delta; + proto_item *ti, *hidden_item; + +#ifdef DEBUG_CAMELSRT + dbg(10,"\n %s #%u\n", val_to_str_const(srt_type, camelSRTtype_naming, "Unk"),pinfo->num); +#endif + camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id; + /* look only for matching request, if matching conversation is available. */ + +#ifdef DEBUG_CAMELSRT + dbg(11,"Search key %lu ",camelsrt_call_key.SessionIdKey); +#endif + p_camelsrt_call = find_camelsrt_call(&camelsrt_call_key); + if(p_camelsrt_call) { +#ifdef DEBUG_CAMELSRT + dbg(12,"Found, req=%d ",p_camelsrt_call->category[srt_type].req_num); +#endif + if ( gcamel_DisplaySRT ) + proto_tree_add_uint(tree, hf_camelsrt_SessionId, tvb, 0,0, p_camelsrt_call->session_id); + + if (srt_type==CAMELSRT_VOICE_ACR1) { + if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num != 0 + && p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num < pinfo->num) { + srt_type=CAMELSRT_VOICE_ACR1; + } else if ( p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num != 0 + && p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num < pinfo->num) { + srt_type=CAMELSRT_VOICE_ACR2; + } else if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num != 0 + && p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num < pinfo->num) { + srt_type=CAMELSRT_VOICE_ACR1; + } +#ifdef DEBUG_CAMELSRT + dbg(70,"Report ACR %u ",srt_type); +#endif + } /* not ACR */ + p_camelsrt_info->bool_msginfo[srt_type]=TRUE; + + if (p_camelsrt_call->category[srt_type].rsp_num == 0) { + if ( (p_camelsrt_call->category[srt_type].req_num != 0) + && (pinfo->num > p_camelsrt_call->category[srt_type].req_num) ){ + /* We have not yet seen a response to that call, so this must be the first response; + remember its frame number only if response comes after request */ +#ifdef DEBUG_CAMELSRT + dbg(14,"Set reslink #%d req %u ",pinfo->num, p_camelsrt_call->category[srt_type].req_num); +#endif + p_camelsrt_call->category[srt_type].rsp_num = pinfo->num; + + } else { +#ifdef DEBUG_CAMELSRT + dbg(2,"badreslink #%u req %u ",pinfo->num, p_camelsrt_call->category[srt_type].req_num); +#endif + } /* req_num != 0 */ + } else { /* rsp_num != 0 */ + /* We have seen a response to this call - but was it *this* response? */ + if (p_camelsrt_call->category[srt_type].rsp_num != pinfo->num) { + /* No, so it's a duplicate response. Mark it as such. */ +#ifdef DEBUG_CAMELSRT + dbg(21,"Display_duplicate rsp=%d ", p_camelsrt_call->category[srt_type].rsp_num); +#endif + p_camelsrt_info->msginfo[srt_type].is_duplicate = TRUE; + if ( gcamel_DisplaySRT ){ + hidden_item = proto_tree_add_uint(tree, hf_camelsrt_Duplicate, tvb, 0,0, 77); + proto_item_set_hidden(hidden_item); + } + } + } /* rsp_num != 0 */ + + if ( (p_camelsrt_call->category[srt_type].req_num != 0) && + (p_camelsrt_call->category[srt_type].rsp_num != 0) && + (p_camelsrt_call->category[srt_type].rsp_num == pinfo->num) ) { + + p_camelsrt_call->category[srt_type].responded = TRUE; + p_camelsrt_info->msginfo[srt_type].request_available = TRUE; +#ifdef DEBUG_CAMELSRT + dbg(20,"Display_frameReqlink %d ",p_camelsrt_call->category[srt_type].req_num); +#endif + /* Indicate the frame to which this is a reply. */ + if ( gcamel_DisplaySRT ) { + ti = proto_tree_add_uint_format(tree, hf_camelsrt_ResponseFrame, tvb, 0, 0, + p_camelsrt_call->category[srt_type].req_num, + "Linked request %s in frame %u", + val_to_str_const(srt_type, camelSRTtype_naming, "Unk"), + p_camelsrt_call->category[srt_type].req_num); + proto_item_set_generated(ti); + } + /* Calculate Service Response Time */ + nstime_delta(&delta, &pinfo->abs_ts, &p_camelsrt_call->category[srt_type].req_time); + + p_camelsrt_info->msginfo[srt_type].is_delta_time = TRUE; + p_camelsrt_info->msginfo[srt_type].delta_time = delta; /* give it to tap */ + p_camelsrt_info->msginfo[srt_type].req_time = p_camelsrt_call->category[srt_type].req_time; + + /* display Service Response Time and make it filterable */ + camelsrt_display_DeltaTime(tree, tvb, &delta, srt_type); + + } /*req_num != 0 && not duplicate */ + } /* call reference found */ +} + +/* + * Service Response Time analyze, called just after the camel dissector + * According to the camel operation, we + * - open/close a context for the camel session + * - look for a request, or look for the corresponding response + */ +void +camelsrt_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, + struct camelsrt_info_t *p_camelsrt_info) +{ + +#ifdef DEBUG_CAMELSRT + dbg(10,"tcap_session #%d ", p_camelsrt_info->tcap_session_id); +#endif + + switch (p_camelsrt_info->opcode) { + + case 0: /*InitialDP*/ + camelsrt_begin_call_matching(pinfo, p_camelsrt_info); + camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_VOICE_INITIALDP); + break; + case 60: /*InitialDPSMS*/ + camelsrt_begin_call_matching(pinfo, p_camelsrt_info); + camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_SMS_INITIALDP); + break; + case 78: /*InitialDPGPRS*/ + camelsrt_begin_call_matching(pinfo, p_camelsrt_info); + camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_GPRS_INITIALDP); + break; + + case 23: /*RequestReportBCSMEvent*/ + break; + + case 63: /*RequestReportSMSEvent*/ + break; + + case 81: /*RequestReportGPRSEvent*/ + break; + + case 24: /*EventReportBCSMEvent*/ + camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_VOICE_DISC ); + break; + + case 64: /*EventReportSMS*/ + /* Session has been explicity closed without TC_END */ + camelsrt_close_call_matching(pinfo, p_camelsrt_info); + tcapsrt_close((struct tcaphash_context_t *)p_camelsrt_info->tcap_context, pinfo); + break; + + case 80: /*EventReportGPRS*/ + camelsrt_begin_call_matching(pinfo, p_camelsrt_info); + camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_GPRS_REPORT); + break; + + case 35: /*ApplyCharging*/ + camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_VOICE_ACR1 ); + break; + + case 71: /*ApplyChargingGPRS*/ + break; + + case 36: /*ApplyChargingReport*/ + camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_VOICE_ACR1 ); + break; + + case 72: /*ApplyChargingReportGPRS*/ + break; + + case 31: /*Continue*/ + camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_VOICE_INITIALDP); + break; + case 65: /*ContinueSMS*/ + camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_SMS_INITIALDP); + break; + case 75: /*ContinueGPRS*/ + camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_GPRS_INITIALDP); + camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_GPRS_REPORT); + break; + + case 22: /*ReleaseCall*/ + camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info, + CAMELSRT_VOICE_DISC); + /* Session has been closed by Network */ + camelsrt_close_call_matching(pinfo, p_camelsrt_info); + break; + + case 66: /*ReleaseSMS*/ + /* Session has been closed by Network */ + camelsrt_close_call_matching(pinfo, p_camelsrt_info); + tcapsrt_close((struct tcaphash_context_t *)p_camelsrt_info->tcap_context,pinfo); + break; + + case 79: /*ReleaseGPRS*/ + /* Session has been closed by Network */ + camelsrt_close_call_matching(pinfo, p_camelsrt_info); + break; + } /* switch opcode */ +} + +/* + * Initialize the Message Info used by the main dissector + * Data are linked to a TCAP transaction + */ +struct camelsrt_info_t * +camelsrt_razinfo(void) +{ + struct camelsrt_info_t *p_camelsrt_info ; + + /* Global buffer for packet extraction */ + camelsrt_global_current++; + if(camelsrt_global_current==MAX_CAMEL_INSTANCE){ + camelsrt_global_current=0; + } + + p_camelsrt_info=&camelsrt_global_info[camelsrt_global_current]; + memset(p_camelsrt_info,0,sizeof(struct camelsrt_info_t)); + + p_camelsrt_info->opcode=255; + + return p_camelsrt_info; +} + + +static guint8 camel_pdu_type = 0; +static guint8 camel_pdu_size = 0; + + +static int +dissect_camel_camelPDU(bool implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_,proto_tree *tree, + int hf_index, struct tcap_private_t * p_private_tcap) { + + opcode = 0; + if (p_private_tcap != NULL){ + gp_camelsrt_info->tcap_context=p_private_tcap->context; + if (p_private_tcap->context) + gp_camelsrt_info->tcap_session_id = ( (struct tcaphash_context_t *) (p_private_tcap->context))->session_id; + } + + camel_pdu_type = tvb_get_guint8(tvb, offset)&0x0f; + /* Get the length and add 2 */ + camel_pdu_size = tvb_get_guint8(tvb, offset+1)+2; + + /* Populate the info column with PDU type*/ + col_add_str(actx->pinfo->cinfo, COL_INFO, val_to_str(camel_pdu_type, camel_Component_vals, "Unknown Camel (%u)")); + col_append_str(actx->pinfo->cinfo, COL_INFO, " "); + + is_ExtensionField =FALSE; + offset = dissect_camel_ROS(TRUE, tvb, offset, actx, tree, hf_index); + + return offset; +} + +static int +dissect_camel_all(int version, const char* col_protocol, const char* suffix, + tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data) +{ + proto_item *item; + proto_tree *tree = NULL, *stat_tree = NULL; + struct tcap_private_t * p_private_tcap = (struct tcap_private_t*)data; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + + col_set_str(pinfo->cinfo, COL_PROTOCOL, col_protocol); + + camel_ver = version; + + /* create display subtree for the protocol */ + if(parent_tree){ + item = proto_tree_add_item(parent_tree, proto_camel, tvb, 0, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_camel); + proto_item_append_text(item, "%s", suffix); + } + /* camelsrt reset counter, and initialise global pointer + to store service response time related data */ + gp_camelsrt_info=camelsrt_razinfo(); + + dissect_camel_camelPDU(FALSE, tvb, 0, &asn1_ctx , tree, -1, p_private_tcap); + + /* If a Tcap context is associated to this transaction */ + if (gp_camelsrt_info->tcap_context ) { + if (gcamel_DisplaySRT && tree) { + stat_tree = proto_tree_add_subtree(tree, tvb, 0, 0, ett_camel_stat, NULL, "Stat"); + } + camelsrt_call_matching(tvb, pinfo, stat_tree, gp_camelsrt_info); + tap_queue_packet(camel_tap, pinfo, gp_camelsrt_info); + } + + return tvb_captured_length(tvb); +} + +static int +dissect_camel_v1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data) +{ + return dissect_camel_all(1, "Camel-v1", "-V1", tvb, pinfo, parent_tree, data); +} + +static int +dissect_camel_v2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data) +{ + return dissect_camel_all(2, "Camel-v2", "-V2", tvb, pinfo, parent_tree, data); +} + +static int +dissect_camel_v3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data) +{ + return dissect_camel_all(3, "Camel-v3", "-V3", tvb, pinfo, parent_tree, data); +} + +static int +dissect_camel_v4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data) +{ + return dissect_camel_all(4, "Camel-v4", "-V4", tvb, pinfo, parent_tree, data); +} + +static int +dissect_camel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data) +{ + return dissect_camel_all(4, "Camel", "", tvb, pinfo, parent_tree, data); +} + +/* TAP STAT INFO */ +typedef enum +{ + MESSAGE_TYPE_COLUMN = 0, + COUNT_COLUMN +} camel_stat_columns; + +static stat_tap_table_item camel_stat_fields[] = {{TABLE_ITEM_STRING, TAP_ALIGN_LEFT, "Message Type or Reason", "%-25s"}, {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "Count", "%d"}}; + +static void camel_stat_init(stat_tap_table_ui* new_stat) +{ + const char *table_name = "CAMEL Message Counters"; + int num_fields = sizeof(camel_stat_fields)/sizeof(stat_tap_table_item); + stat_tap_table *table; + int i; + stat_tap_table_item_type items[sizeof(camel_stat_fields)/sizeof(stat_tap_table_item)]; + + table = stat_tap_find_table(new_stat, table_name); + if (table) { + if (new_stat->stat_tap_reset_table_cb) { + new_stat->stat_tap_reset_table_cb(table); + } + return; + } + + table = stat_tap_init_table(table_name, num_fields, 0, NULL); + stat_tap_add_table(new_stat, table); + + memset(items, 0x0, sizeof(items)); + items[MESSAGE_TYPE_COLUMN].type = TABLE_ITEM_STRING; + items[COUNT_COLUMN].type = TABLE_ITEM_UINT; + items[COUNT_COLUMN].value.uint_value = 0; + + /* Add a row for each value type */ + for (i = 0; i < camel_MAX_NUM_OPR_CODES; i++) + { + const char *ocs = try_val_to_str(i, camel_opr_code_strings); + char *col_str; + if (ocs) { + col_str = ws_strdup_printf("Request %s", ocs); + } else { + col_str = ws_strdup_printf("Unknown op code %d", i); + } + + items[MESSAGE_TYPE_COLUMN].value.string_value = col_str; + stat_tap_init_table_row(table, i, num_fields, items); + } +} + +static tap_packet_status +camel_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *csi_ptr, tap_flags_t flags _U_) +{ + stat_data_t* stat_data = (stat_data_t*)tapdata; + const struct camelsrt_info_t *csi = (const struct camelsrt_info_t *) csi_ptr; + stat_tap_table* table; + stat_tap_table_item_type* msg_data; + + table = g_array_index(stat_data->stat_tap_data->tables, stat_tap_table*, 0); + if (csi->opcode >= table->num_elements) + return TAP_PACKET_DONT_REDRAW; + msg_data = stat_tap_get_field_data(table, csi->opcode, COUNT_COLUMN); + msg_data->value.uint_value++; + stat_tap_set_field_data(table, csi->opcode, COUNT_COLUMN, msg_data); + + return TAP_PACKET_REDRAW; +} + +static void +camel_stat_reset(stat_tap_table* table) +{ + guint element; + stat_tap_table_item_type* item_data; + + for (element = 0; element < table->num_elements; element++) + { + item_data = stat_tap_get_field_data(table, element, COUNT_COLUMN); + item_data->value.uint_value = 0; + stat_tap_set_field_data(table, element, COUNT_COLUMN, item_data); + } +} + +static void +camel_stat_free_table_item(stat_tap_table* table _U_, guint row _U_, guint column, stat_tap_table_item_type* field_data) +{ + if (column != MESSAGE_TYPE_COLUMN) return; + g_free((char*)field_data->value.string_value); +} + +/*--- proto_reg_handoff_camel ---------------------------------------*/ +static void range_delete_callback(guint32 ssn, gpointer ptr _U_) +{ + if (ssn) { + delete_itu_tcap_subdissector(ssn, camel_handle); + } +} + +static void range_add_callback(guint32 ssn, gpointer ptr _U_) +{ + if (ssn) { + add_itu_tcap_subdissector(ssn, camel_handle); + } +} + +void proto_reg_handoff_camel(void) { + static gboolean camel_prefs_initialized = FALSE; + static range_t *ssn_range; + + if (!camel_prefs_initialized) { + + camel_prefs_initialized = TRUE; + + register_ber_oid_dissector_handle("0.4.0.0.1.0.50.0",camel_v1_handle, proto_camel, "CAP-v1-gsmSSF-to-gsmSCF-AC" ); + register_ber_oid_dissector_handle("0.4.0.0.1.0.50.1",camel_v2_handle, proto_camel, "CAP-v2-gsmSSF-to-gsmSCF-AC" ); + register_ber_oid_dissector_handle("0.4.0.0.1.0.51.1",camel_v2_handle, proto_camel, "CAP-v2-assist-gsmSSF-to-gsmSCF-AC" ); + register_ber_oid_dissector_handle("0.4.0.0.1.0.52.1",camel_v2_handle, proto_camel, "CAP-v2-gsmSRF-to-gsmSCF-AC" ); + + /* CAMEL Phase 3 Application Context Names */ + register_ber_oid_dissector_handle("0.4.0.0.1.21.3.4", camel_v3_handle, proto_camel, "capssf-scfGenericAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.21.3.6", camel_v3_handle, proto_camel, "capssf-scfAssistHandoffAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.20.3.14", camel_v3_handle, proto_camel, "gsmSRF-gsmSCF-ac"); + register_ber_oid_dissector_handle("0.4.0.0.1.21.3.50", camel_v3_handle, proto_camel, "cap3-gprssf-scfAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.21.3.51", camel_v3_handle, proto_camel, "cap3-gsmscf-gprsssfAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.21.3.61", camel_v3_handle, proto_camel, "cap3-sms-AC"); + + /* CAMEL Phase 4 Application Context Names */ + register_ber_oid_dissector_handle("0.4.0.0.1.23.3.4", camel_v4_handle, proto_camel, "capssf-scfGenericAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.23.3.6", camel_v4_handle, proto_camel, "capssf-scfAssistHandoffAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.23.3.8", camel_v4_handle, proto_camel, "capscf-ssfGenericAC"); + register_ber_oid_dissector_handle("0.4.0.0.1.22.3.14", camel_v4_handle, proto_camel, "gsmSRF-gsmSCF-ac"); + register_ber_oid_dissector_handle("0.4.0.0.1.23.3.61", camel_v4_handle, proto_camel, "cap4-sms-AC"); + + +#include "packet-camel-dis-tab.c" + } else { + range_foreach(ssn_range, range_delete_callback, NULL); + wmem_free(wmem_epan_scope(), ssn_range); + } + + ssn_range = range_copy(wmem_epan_scope(), global_ssn_range); + + range_foreach(ssn_range, range_add_callback, NULL); + +} + +void proto_register_camel(void) { + module_t *camel_module; + /* List of fields */ + static hf_register_info hf[] = { + { &hf_camel_extension_code_local, + { "local", "camel.extension_code_local", + FT_INT32, BASE_DEC, NULL, 0, + "Extension local code", HFILL }}, + { &hf_camel_error_code_local, + { "local", "camel.error_code_local", + FT_INT32, BASE_DEC, VALS(camel_err_code_string_vals), 0, + "ERROR code", HFILL }}, + { &hf_camel_cause_indicator, /* Currently not enabled */ + { "Cause indicator", "camel.cause_indicator", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q850_cause_code_vals_ext, 0x7f, + NULL, HFILL }}, + { &hf_digit, + { "Digit Value", "camel.digit_value", + FT_UINT8, BASE_DEC, VALS(digit_value), 0, NULL, HFILL }}, + { &hf_camel_PDPTypeNumber_etsi, + { "ETSI defined PDP Type Value", "camel.PDPTypeNumber_etsi", + FT_UINT8, BASE_HEX, VALS(gsm_map_etsi_defined_pdp_vals), 0, + NULL, HFILL }}, + { &hf_camel_PDPTypeNumber_ietf, + { "IETF defined PDP Type Value", "camel.PDPTypeNumber_ietf", + FT_UINT8, BASE_HEX, VALS(gsm_map_ietf_defined_pdp_vals), 0, + NULL, HFILL }}, + { &hf_camel_PDPAddress_IPv4, + { "PDPAddress IPv4", "camel.PDPAddress_IPv4", + FT_IPv4, BASE_NONE, NULL, 0, + "IPAddress IPv4", HFILL }}, + { &hf_camel_PDPAddress_IPv6, + { "PDPAddress IPv6", "camel.PDPAddress_IPv6", + FT_IPv6, BASE_NONE, NULL, 0, + "IPAddress IPv6", HFILL }}, + { &hf_camel_cellGlobalIdOrServiceAreaIdFixedLength, + { "CellGlobalIdOrServiceAreaIdFixedLength", "camel.CellGlobalIdOrServiceAreaIdFixedLength", + FT_BYTES, BASE_NONE, NULL, 0, + "LocationInformationGPRS/CellGlobalIdOrServiceAreaIdOrLAI", HFILL }}, + { &hf_camel_RP_Cause, + { "RP Cause", "camel.RP_Cause", + FT_UINT8, BASE_DEC, VALS(camel_RP_Cause_values), 0x7F, + "RP Cause Value", HFILL }}, + + { &hf_camel_CAMEL_AChBillingChargingCharacteristics, + { "CAMEL-AChBillingChargingCharacteristics", "camel.CAMEL_AChBillingChargingCharacteristics", + FT_UINT32, BASE_DEC, VALS(camel_CAMEL_AChBillingChargingCharacteristics_vals), 0, + NULL, HFILL }}, + + { &hf_camel_CAMEL_FCIBillingChargingCharacteristics, + { "CAMEL-FCIBillingChargingCharacteristics", "camel.CAMEL_FCIBillingChargingCharacteristics", + FT_UINT32, BASE_DEC, VALS(camel_CAMEL_FCIBillingChargingCharacteristics_vals), 0, + NULL, HFILL }}, + + { &hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics, + { "CAMEL-FCIGPRSBillingChargingCharacteristics", "camel.CAMEL_FCIGPRSBillingChargingCharacteristics", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + + { &hf_camel_CAMEL_FCISMSBillingChargingCharacteristics, + { "CAMEL-FCISMSBillingChargingCharacteristics", "camel.CAMEL_FCISMSBillingChargingCharacteristics", + FT_UINT32, BASE_DEC, VALS(camel_CAMEL_FCISMSBillingChargingCharacteristics_vals), 0, + NULL, HFILL }}, + + { &hf_camel_CAMEL_SCIBillingChargingCharacteristics, + { "CAMEL-SCIBillingChargingCharacteristics", "camel.CAMEL_SCIBillingChargingCharacteristics", + FT_UINT32, BASE_DEC, VALS(camel_CAMEL_SCIBillingChargingCharacteristics_vals), 0, + NULL, HFILL }}, + + { &hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics, + { "CAMEL-SCIGPRSBillingChargingCharacteristics", "camel.CAMEL_SCIGPRSBillingChargingCharacteristics", + FT_UINT32, BASE_DEC, NULL, 0, + "CAMEL-FSCIGPRSBillingChargingCharacteristics", HFILL }}, + + { &hf_camel_CAMEL_CallResult, + { "CAMEL-CAMEL_CallResult", "camel.CAMEL_CallResult", + FT_UINT32, BASE_DEC, VALS(camel_CAMEL_CallResult_vals), 0, + "CAMEL-CallResult", HFILL }}, + + /* Camel Service Response Time */ + { &hf_camelsrt_SessionId, + { "Session Id", + "camel.srt.session_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + //{ &hf_camelsrt_RequestNumber, + // { "Request Number", + // "camel.srt.request_number", + // FT_UINT64, BASE_DEC, NULL, 0x0, + // NULL, HFILL } + //}, + { &hf_camelsrt_Duplicate, + { "Request Duplicate", + "camel.srt.duplicate", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_camelsrt_RequestFrame, + { "Requested Frame", + "camel.srt.reqframe", + FT_FRAMENUM, BASE_NONE, NULL, 0x0, + "SRT Request Frame", HFILL } + }, + { &hf_camelsrt_ResponseFrame, + { "Response Frame", + "camel.srt.rspframe", + FT_FRAMENUM, BASE_NONE, NULL, 0x0, + "SRT Response Frame", HFILL } + }, + //{ &hf_camelsrt_DeltaTime, + // { "Service Response Time", + // "camel.srt.deltatime", + // FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + // "DeltaTime between Request and Response", HFILL } + //}, + //{ &hf_camelsrt_SessionTime, + // { "Session duration", + // "camel.srt.sessiontime", + // FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + // "Duration of the TCAP session", HFILL } + //}, + { &hf_camelsrt_DeltaTime31, + { "Service Response Time", + "camel.srt.deltatime31", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "DeltaTime between InitialDP and Continue", HFILL } + }, + { &hf_camelsrt_DeltaTime65, + { "Service Response Time", + "camel.srt.deltatime65", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "DeltaTime between InitialDPSMS and ContinueSMS", HFILL } + }, + { &hf_camelsrt_DeltaTime75, + { "Service Response Time", + "camel.srt.deltatime75", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "DeltaTime between InitialDPGPRS and ContinueGPRS", HFILL } + }, + { &hf_camelsrt_DeltaTime35, + { "Service Response Time", + "camel.srt.deltatime35", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "DeltaTime between ApplyChargingReport and ApplyCharging", HFILL } + }, + { &hf_camelsrt_DeltaTime22, + { "Service Response Time", + "camel.srt.deltatime22", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "DeltaTime between EventReport(Disconnect) and Release Call", HFILL } + }, + { &hf_camelsrt_DeltaTime80, + { "Service Response Time", + "camel.srt.deltatime80", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "DeltaTime between EventReportGPRS and ContinueGPRS", HFILL } + }, + { &hf_camel_timeandtimezone_time, + { "Time", + "camel.timeandtimezone.time", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_camel_timeandtimezone_tz, + { "Time Zone", + "camel.timeandtimezone.timezone", + FT_INT8, BASE_DEC, NULL, 0x0, + "Difference, expressed in quarters of an hour, between local time and GMT", HFILL } + }, +#ifdef REMOVED +#endif +#include "packet-camel-hfarr.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_camel, + &ett_camelisup_parameter, + &ett_camel_AccessPointName, + &ett_camel_pdptypenumber, + &ett_camel_cause, + &ett_camel_RPcause, + &ett_camel_stat, + &ett_camel_calledpartybcdnumber, + &ett_camel_callingpartynumber, + &ett_camel_originalcalledpartyid, + &ett_camel_redirectingpartyid, + &ett_camel_locationnumber, + &ett_camel_additionalcallingpartynumber, + &ett_camel_calledAddressValue, + &ett_camel_callingAddressValue, + &ett_camel_assistingSSPIPRoutingAddress, + &ett_camel_correlationID, + &ett_camel_dTMFDigitsCompleted, + &ett_camel_dTMFDigitsTimeOut, + &ett_camel_number, + &ett_camel_digitsResponse, + &ett_camel_timeandtimezone, + +#include "packet-camel-ettarr.c" + }; + + static ei_register_info ei[] = { + { &ei_camel_unknown_invokeData, { "camel.unknown.invokeData", PI_MALFORMED, PI_WARN, "Unknown invokeData", EXPFILL }}, + { &ei_camel_unknown_returnResultData, { "camel.unknown.returnResultData", PI_MALFORMED, PI_WARN, "Unknown returnResultData", EXPFILL }}, + { &ei_camel_unknown_returnErrorData, { "camel.unknown.returnErrorData", PI_MALFORMED, PI_WARN, "Unknown returnResultData", EXPFILL }}, + { &ei_camel_par_wrong_length, { "camel.par_wrong_length", PI_PROTOCOL, PI_ERROR, "Wrong length of parameter", EXPFILL }}, + { &ei_camel_bcd_not_digit, { "camel.bcd_not_digit", PI_MALFORMED, PI_WARN, "BCD number contains a value that is not a digit", EXPFILL }}, + }; + + expert_module_t* expert_camel; + + static tap_param camel_stat_params[] = { + { PARAM_FILTER, "filter", "Filter", NULL, TRUE } + }; + + static stat_tap_table_ui camel_stat_table = { + REGISTER_STAT_GROUP_TELEPHONY_GSM, + "CAMEL Messages and Response Status", + PSNAME, + "camel,counter", + camel_stat_init, + camel_stat_packet, + camel_stat_reset, + camel_stat_free_table_item, + NULL, + sizeof(camel_stat_fields)/sizeof(stat_tap_table_item), camel_stat_fields, + sizeof(camel_stat_params)/sizeof(tap_param), camel_stat_params, + NULL, + 0 + }; + + /* Register protocol */ + proto_camel = proto_register_protocol(PNAME, PSNAME, PFNAME); + + camel_handle = register_dissector("camel", dissect_camel, proto_camel); + camel_v1_handle = register_dissector("camel-v1", dissect_camel_v1, proto_camel); + camel_v2_handle = register_dissector("camel-v2", dissect_camel_v2, proto_camel); + camel_v3_handle = register_dissector("camel-v3", dissect_camel_v3, proto_camel); + camel_v4_handle = register_dissector("camel-v4", dissect_camel_v4, proto_camel); + + proto_register_field_array(proto_camel, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + expert_camel = expert_register_protocol(proto_camel); + expert_register_field_array(expert_camel, ei, array_length(ei)); + + rose_ctx_init(&camel_rose_ctx); + + /* Register dissector tables */ + camel_rose_ctx.arg_local_dissector_table = register_dissector_table("camel.ros.local.arg", + "CAMEL Operation Argument (local opcode)", proto_camel, + FT_UINT32, BASE_HEX); + camel_rose_ctx.res_local_dissector_table = register_dissector_table("camel.ros.local.res", + "CAMEL Operation Result (local opcode)", proto_camel, + FT_UINT32, BASE_HEX); + camel_rose_ctx.err_local_dissector_table = register_dissector_table("camel.ros.local.err", + "CAMEL Error (local opcode)", proto_camel, + FT_UINT32, BASE_HEX); + + /* Register our configuration options, particularly our SSNs */ + /* Set default SSNs */ + range_convert_str(wmem_epan_scope(), &global_ssn_range, "146", MAX_SSN); + + camel_module = prefs_register_protocol(proto_camel, proto_reg_handoff_camel); + + prefs_register_enum_preference(camel_module, "date.format", "Date Format", + "The date format: (DD/MM) or (MM/DD)", + &date_format, date_options, FALSE); + + + prefs_register_range_preference(camel_module, "tcap.ssn", + "TCAP SSNs", + "TCAP Subsystem numbers used for Camel", + &global_ssn_range, MAX_SSN); + + prefs_register_obsolete_preference(camel_module, "srt"); + + prefs_register_bool_preference(camel_module, "persistentsrt", + "Persistent stats for SRT", + "Statistics for Response Time", + &gcamel_PersistentSRT); + + /* Routine for statistic */ + register_init_routine(&camelsrt_init_routine); + + /* create new hash-table for SRT */ + srt_calls = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), camelsrt_call_hash, camelsrt_call_equal); + + camel_tap=register_tap(PSNAME); + + register_srt_table(proto_camel, PSNAME, 1, camelstat_packet, camelstat_init, NULL); + register_stat_tap_table_ui(&camel_stat_table); +} + +/* + * Editor modelines + * + * Local Variables: + * c-basic-offset: 2 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=2 tabstop=8 expandtab: + * :indentSize=2:tabSize=8:noTabs=true: + */ diff --git a/epan/dissectors/asn1/camel/packet-camel-template.h b/epan/dissectors/asn1/camel/packet-camel-template.h new file mode 100644 index 00000000..4db9e099 --- /dev/null +++ b/epan/dissectors/asn1/camel/packet-camel-template.h @@ -0,0 +1,127 @@ +/* packet-camel-template.h + * Routines for Camel + * Copyright 2004, Tim Endean <endeant@hotmail.com> + * Copyright 2005, Olivier Jacques <olivier.jacques@hp.com> + * Built from the gsm-map dissector Copyright 2004, Anders Broman <anders.broman@ericsson.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * References: ETSI 300 374 + */ +/* + * Indentation logic: this file is indented with 2 spaces indentation. + * there are no tabs. + */ + + +#ifndef PACKET_CAMEL_H +#define PACKET_CAMEL_H + +#include "ws_symbol_export.h" + +void proto_reg_handoff_camel(void); +void proto_register_camel(void); + +/* Defines for the camel taps */ +#define camel_MAX_NUM_OPR_CODES 256 + +WS_DLL_PUBLIC const value_string camel_opr_code_strings[]; +/* #include "packet-camel-exp.h"*/ + +/** @file +*/ +#define NB_CAMELSRT_CATEGORY 9+1 /**< Number of type of message */ +/* for example TC_BEGIN with InitalDP, and TC_CONT with RequestReportBCSMEvent + is a category, we want to measure the delay between the two messages */ + +#define CAMELSRT_SESSION 1 + +#define CAMELSRT_VOICE_INITIALDP 2 +#define CAMELSRT_VOICE_ACR1 3 +#define CAMELSRT_VOICE_ACR2 4 +#define CAMELSRT_VOICE_ACR3 5 +#define CAMELSRT_VOICE_DISC 6 + +#define CAMELSRT_GPRS_INITIALDP 7 +#define CAMELSRT_GPRS_REPORT 8 + +#define CAMELSRT_SMS_INITIALDP 9 + +WS_DLL_PUBLIC const value_string camelSRTtype_naming[]; + +/** If we have a request message and its response, + (eg: ApplyCharging, ApplyChargingReport) + the frames numbers are stored in this structure */ + +struct camelsrt_category_t { + guint32 req_num; /**< frame number request seen */ + guint32 rsp_num; /**< frame number response seen */ + nstime_t req_time; /**< arrival time of request */ + gboolean responded; /**< true, if request has been responded */ +}; + +/** List of stored parameters for a Camel dialogue + All this parameters are linked to the hash table key below (use of Tid) + In case of same Tid reused, the Camel parameters are chained. + The right dialogue will be identified with the arrival time of the InitialDP */ + +struct camelsrt_call_t { + guint32 session_id; /**< Identify the session, with an internal number */ + struct tcaphash_context_t * tcap_context; + struct camelsrt_category_t category[NB_CAMELSRT_CATEGORY]; +}; + + +/** The Key for the hash table is the TCAP origine transaction identifier + of the TC_BEGIN containing the InitialDP */ + +struct camelsrt_call_info_key_t { + guint32 SessionIdKey; +}; + +/** Info for a couple of messages (or category) + The request must be available, not duplicated, + and once the corresponding response received, + we can deduce the Delta Time between Request/response */ + +struct camelsrt_msginfo_t { + gboolean request_available; + gboolean is_duplicate; + gboolean is_delta_time; + nstime_t req_time; + nstime_t delta_time; +}; + +/** List of infos to store for the analyse */ + +struct camelsrt_info_t { + guint32 tcap_session_id; + void * tcap_context; + guint8 opcode; /**< operation code of message received */ + guint8 bool_msginfo[NB_CAMELSRT_CATEGORY]; /**< category for the received message */ + struct camelsrt_msginfo_t msginfo[NB_CAMELSRT_CATEGORY]; +}; + +/** + * Initialize the Message Info used by the main dissector + * Data are linked to a TCAP transaction + */ +struct camelsrt_info_t * camelsrt_razinfo(void); + +/** + * Service Response Time analyze, called just after the camel dissector + * According to the camel operation, we + * - open/close a context for the camel session + * - look for a request, or look for the corresponding response + */ +void camelsrt_call_matching(tvbuff_t *tvb, + packet_info * pinfo _U_, + proto_tree *tree, + struct camelsrt_info_t * p_camel_info); + +WS_DLL_PUBLIC gboolean gcamel_StatSRT; + +#endif /* PACKET_camel_H */ |