summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/camel
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/asn1/camel
parentInitial commit. (diff)
downloadwireshark-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')
-rw-r--r--epan/dissectors/asn1/camel/CAP-GPRS-ReferenceNumber.asn32
-rw-r--r--epan/dissectors/asn1/camel/CAP-SMS-ops-args.asn269
-rw-r--r--epan/dissectors/asn1/camel/CAP-U-ABORT-Data.asn48
-rw-r--r--epan/dissectors/asn1/camel/CAP-classes.asn306
-rw-r--r--epan/dissectors/asn1/camel/CAP-datatypes.asn1527
-rw-r--r--epan/dissectors/asn1/camel/CAP-errorcodes.asn36
-rw-r--r--epan/dissectors/asn1/camel/CAP-errortypes.asn157
-rw-r--r--epan/dissectors/asn1/camel/CAP-gprsSSF-gsmSCF-ops-args.asn409
-rw-r--r--epan/dissectors/asn1/camel/CAP-gsmSCF-gsmSRF-ops-args.asn147
-rw-r--r--epan/dissectors/asn1/camel/CAP-gsmSSF-gsmSCF-ops-args.asn905
-rw-r--r--epan/dissectors/asn1/camel/CAP-object-identifiers.asn242
-rw-r--r--epan/dissectors/asn1/camel/CAP-operationcodes.asn119
-rw-r--r--epan/dissectors/asn1/camel/CMakeLists.txt58
-rw-r--r--epan/dissectors/asn1/camel/CamelV2diff.asn100
-rw-r--r--epan/dissectors/asn1/camel/TCAPMessages.asn21
-rw-r--r--epan/dissectors/asn1/camel/camel.asn3246
-rw-r--r--epan/dissectors/asn1/camel/camel.cnf831
-rw-r--r--epan/dissectors/asn1/camel/packet-camel-template.c1603
-rw-r--r--epan/dissectors/asn1/camel/packet-camel-template.h127
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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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 = &parameter_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,
+ &parameter_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 = &parameter_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 */