-- $Id: SS-DataTypes.asn 32509 2010-04-19 05:58:01Z etxrab $
-- 3GPP TS 24.080 V9.1.0 (2010-03)
-- 4.4.2	ASN.1 data types
SS-DataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
   ss-DataTypes (2) version10 (10)}

DEFINITIONS

IMPLICIT TAGS ::=

BEGIN

-- exports all data types defined in this module

IMPORTS

SS-Code
FROM MAP-SS-Code {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
   map-SS-Code (15) version10 (10)}

-- imports MAP-SS-DataTypes
SS-Status, USSD-DataCodingScheme, USSD-String, CCBS-Feature
-- USSD-DataCodingScheme, USSD-String were introduced because of CNAP.
FROM MAP-SS-DataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
   map-SS-DataTypes (14) version10 (10)}

--- GSN-Address, WS fix, fault in spec this is now in CommonDataTypes
CUG-Index,
NotificationToMSUser
FROM MAP-MS-DataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
   map-MS-DataTypes (11) version10 (10)}

maxSignalInfoLength,
ISDN-AddressString,
ISDN-SubaddressString,
AlertingPattern,
LCSClientExternalID,
AddressString,
LCSServiceTypeID,
GSN-Address, -- WS fix
AgeOfLocationInformation
FROM MAP-CommonDataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
   map-CommonDataTypes (18) version10 (10)}

LocationType,
DeferredLocationEventType,
LCSClientName,
LCS-QoS,
Horizontal-Accuracy,
ResponseTime,
Ext-GeographicalInformation, 
VelocityEstimate,
SupportedGADShapes,
Add-GeographicalInformation,
LCSRequestorID,
LCS-ReferenceNumber,
LCSCodeword,
AreaEventInfo,
ReportingPLMNList,
PeriodicLDRInfo,
SequenceNumber

FROM MAP-LCS-DataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0)
   gsm-Network (1) modules (3) map-LCS-DataTypes (25) version10 (10)}

;

-- data types definition

SS-UserData ::= IA5String (SIZE (1.. maxSignalInfoLength))

NotifySS-Arg ::= SEQUENCE{
	ss-Code						[1]		SS-Code OPTIONAL,
	ss-Status					[4]		SS-Status OPTIONAL,
	ss-Notification				[5]		SS-Notification OPTIONAL,
	callIsWaiting-Indicator		[14]	NULL OPTIONAL,
	callOnHold-Indicator		[15]	CallOnHold-Indicator OPTIONAL,
	mpty-Indicator				[16]	NULL OPTIONAL,
	cug-Index					[17]	CUG-Index OPTIONAL,
	clirSuppressionRejected		[18]	NULL OPTIONAL,
	... ,
	ect-Indicator				[19]	ECT-Indicator OPTIONAL,
	nameIndicator				[20]	NameIndicator OPTIONAL,
	ccbs-Feature				[21]	CCBS-Feature OPTIONAL,
	alertingPattern				[22]	AlertingPattern OPTIONAL,
	multicall-Indicator			[23]	Multicall-Indicator OPTIONAL}

--  The nameIndicator is defined because of CNAP.

Multicall-Indicator	::= ENUMERATED {
		nbr-SNexceeded (0),
		nbr-Userexceeded (1)}

ForwardChargeAdviceArg ::= SEQUENCE{
	ss-Code						[0]		SS-Code,
	chargingInformation			[1]		ChargingInformation,
	...}

SS-Notification ::= OCTET STRING (SIZE (1))

--	  Bit 8 7 6 5 4	00000 (Unused)

--	Bit 3	Call is forwarded indication to A-subscriber
--		(calling subscriber)
--	0	No information content
--	1	Outgoing call has been forwarded to C

--	Bit 2	Call is forwarded indication to B-subscriber
--		(forwarding subscriber)
--	0	No information content
--	1	Incoming call has been forwarded to C

--	Bit 1	Call is forwarded indication to C-subscriber
--		(forwarded-to subscriber)
--	0	No information content
--	1	Incoming call is a forwarded call

ChargingInformation ::= SEQUENCE{
	e1	[1] E1 OPTIONAL,
	e2	[2] E2 OPTIONAL,
	e3	[3] E3 OPTIONAL,
	e4	[4] E4 OPTIONAL,
	e5	[5] E5 OPTIONAL,
	e6	[6] E6 OPTIONAL,
	e7	[7] E7 OPTIONAL,
	...}

E1 ::= INTEGER (0..max10TimesUnitsPerTime)
max10TimesUnitsPerTime INTEGER ::= 8191

E2 ::= INTEGER (0..max10TimesTimeInterval)
max10TimesTimeInterval INTEGER ::= 8191

E3 ::= INTEGER (0..max100TimesScalingFactor)
max100TimesScalingFactor INTEGER ::= 8191

E4 ::= INTEGER (0..max10TimesIncrement)
max10TimesIncrement INTEGER ::= 8191

E5 ::= INTEGER (0..max10TimesIncrementPerDataInterval)
max10TimesIncrementPerDataInterval INTEGER ::= 8191

E6 ::= INTEGER (0..maxNumberOfSegmentsPerDataInterval)
maxNumberOfSegmentsPerDataInterval INTEGER ::= 8191

E7 ::= INTEGER (0..max10TimesInitialTime)
max10TimesInitialTime INTEGER ::= 8191

CallOnHold-Indicator	::= ENUMERATED {
			callRetrieved (0),
			callOnHold (1)}

ForwardCUG-InfoArg ::= SEQUENCE {
	cug-Index			[0]	CUG-Index OPTIONAL,
	suppressPrefCUG		[1]	NULL OPTIONAL,
	suppressOA			[2]	NULL OPTIONAL,
	...}

ECT-Indicator	::= SEQUENCE {
	ect-CallState		[0]	ECT-CallState,
	rdn	[1]	RDN OPTIONAL,
	...}

ECT-CallState	::= ENUMERATED {
		alerting (0),
		active (1)}

	NameIndicator ::= SEQUENCE {
		callingName		[0] Name OPTIONAL,
		...}

	Name ::= CHOICE {
		namePresentationAllowed		[0] NameSet,
		presentationRestricted		[1] NULL,
		nameUnavailable				[2] NULL,
		namePresentationRestricted	[3] NameSet}

	NameSet ::= SEQUENCE {
		dataCodingScheme 		[0] USSD-DataCodingScheme,
		lengthInCharacters 		[1] INTEGER,
		nameString				[2] USSD-String,
		...}

-- NameIndicator, Name and NameSet are defined because of CNAP.
-- The USSD-DataCodingScheme shall indicate use of the default alphabet through the
-- following encoding:
--    bit  7   6   5   4   3   2   1   0
--       | 0   0   0   0 | 1   1   1   1|

RDN	::= CHOICE {
	presentationAllowedAddress				[0]	RemotePartyNumber,
	presentationRestricted					[1]	NULL,
	numberNotAvailableDueToInterworking		[2]	NULL,
	presentationRestrictedAddress			[3]	RemotePartyNumber}

RemotePartyNumber	::= SEQUENCE {
	partyNumber				[0]	ISDN-AddressString,
	partyNumberSubaddress	[1]	ISDN-SubaddressString OPTIONAL,
	...}

AccessRegisterCCEntryArg	::= SEQUENCE {
	...}

CallDeflectionArg	::= SEQUENCE {
	deflectedToNumber		[0]	AddressString,
	deflectedToSubaddress	[1]	ISDN-SubaddressString OPTIONAL,
	...}

UserUserServiceArg ::= SEQUENCE {
	uUS-Service		[0]	UUS-Service,
	uUS-Required	[1]	BOOLEAN,
	... }

UUS-Service ::= ENUMERATED {
	uUS1 (1),
	uUS2 (2),
	uUS3 (3),
	... }

-- exception handling:
-- In case of UUS-Service with any other value, indicated as "UUS required",
-- but not understood by the MS, the call will be cleared.

LocationNotificationArg	::= SEQUENCE {
	notificationType	[0]	NotificationToMSUser,
	locationType		[1]	LocationType,
	lcsClientExternalID	[2] LCSClientExternalID		OPTIONAL,
	lcsClientName		[3]	LCSClientName			OPTIONAL,
	... ,
	lcsRequestorID		[4] LCSRequestorID			OPTIONAL,
	lcsCodeword			[5]	LCSCodeword				OPTIONAL,
	lcsServiceTypeID	[6]	LCSServiceTypeID		OPTIONAL }

-- The notificationType may only be set to notifyLocationAllowed, 
-- notifyAndVerify-LocationAllowedIfNoResponse, 
-- or notifyAndVerify-LocationNotAllowedIfNoResponse.
-- The locationEstimateType field of the locationType may only be set to 
-- currentLocation, currentOrLastKnownLocation, 
-- notificationVerificationOnly, or activateDeferredLocation.
-- The deferredLocationEventType field of the locationType may only be set to 
-- enteringIntoArea, and/or leavingFromArea, and/or beingInsideArea, 
-- and/or periodicLDR.
-- For LCS location notification of MT-LR for current location, the 
-- locationEstimateType field of the locationType shall be set to currentLocation.
-- For LCS location notification of MT-LR for current or last known location, the 
-- locationEstimateType field of the locationType shall be set to currentOrLastKnownLocation.
-- For the LCS location notification for the LDR of MS available event, 
-- the locationEstimateType field of the locationType shall be set to currentLocation.
-- For LCS location notification for the LDR of change of area event, 
-- the locationEstimateType field of the locationType shall be set to
-- activateDeferredLocation, and the deferredLocationEventType shall be 
-- set to enteringIntoArea, and/or leavingFromArea, and/or beingInsideArea.
-- For the post positioning LCS location notification, the locationEstimateType 
-- field of the locationType shall be set to notificationVerificationOnly.
-- For LCS location notification for the LDR of periodic location event, 
-- the locationEstimateType field of the locationType shall be set to
-- activateDeferredLocation, and the 
-- deferredLocationEventType shall be set to periodicLDR.

-- exception handling:
-- At reception of an unrecognised notificationType value the receiver shall reject the 
-- operation with a return error cause of unexpected data value.
-- At reception of an unrecognised locationType value the receiver shall reject the
-- operation with a return error cause of unexpected data value. 
-- At reception of an unallowed notificationType value the receiver shall either ignore the
-- received operation or reject the operation with a return error cause of unexpected 
-- data value.
-- At reception of an unallowed locationType value the receiver shall either ignore the
-- received operation or reject the operation with a return error cause of unexpected 
-- data value.



LocationNotificationRes	::= SEQUENCE {
	verificationResponse		[0]	VerificationResponse OPTIONAL,
	...}

VerificationResponse::= ENUMERATED {
	permissionDenied	(0),
	permissionGranted	(1),
	... }

-- exception handling:
-- an unrecognized value shall be treated the same as value 0 (permissionDenied)

LCS-MOLRArg	::= SEQUENCE {
	molr-Type			[0]	MOLR-Type,
	locationMethod		[1]	LocationMethod			OPTIONAL,
	lcs-QoS				[2]	LCS-QoS					OPTIONAL,
	lcsClientExternalID	[3] LCSClientExternalID		OPTIONAL,
	mlc-Number			[4]	ISDN-AddressString		OPTIONAL,
	gpsAssistanceData	[5]	GPSAssistanceData		OPTIONAL,
	...,
	supportedGADShapes	[6]	SupportedGADShapes		OPTIONAL,
	lcsServiceTypeID	[7]	LCSServiceTypeID		OPTIONAL,
	ageOfLocationInfo	[8]	AgeOfLocationInformation	OPTIONAL,
	locationType		[9]	LocationType			OPTIONAL,
	pseudonymIndicator	[10]	NULL					OPTIONAL,
	h-gmlc-address 		[11] GSN-Address			OPTIONAL,
	locationEstimate	[12] Ext-GeographicalInformation		OPTIONAL,
	velocityEstimate	[13] VelocityEstimate		OPTIONAL,
	referenceNumber 	[14] LCS-ReferenceNumber 	OPTIONAL,
	periodicLDRInfo		[15] PeriodicLDRInfo		OPTIONAL,
	locationUpdateRequest	[16]	NULL				OPTIONAL,
	sequenceNumber 		[17] SequenceNumber 		OPTIONAL,
	terminationCause 	[18] TerminationCause 		OPTIONAL,
	mo-lrShortCircuit	[19]	NULL				OPTIONAL,
	ganssAssistanceData	[20] GANSSAssistanceData	OPTIONAL,
	multiplePositioningProtocolPDUs	[21] MultiplePositioningProtocolPDUs	OPTIONAL }
-- The parameter locationMethod shall be included if and only if the molr-Type is set to value 
-- deCipheringKeys or assistanceData.
-- The parameter gpsAssistanceData shall be included if and only if the molr-Type is set to value 
-- assistanceData and locationMethod is set to value assistedGPS or assistedGPSandGANSS.
-- The parameter ganssAssistanceData shall be included if and only if the molr-Type is set to value 
-- assistanceData and locationMethod is set to value assistedGANSS or assistedGPSandGANSS.
-- supportedGADShapes shall not be included for deferred MO-LR initiation or deferred MO-LR or MT-LR
-- responses 
-- multiplePositioningProtocolPDUs may only be included for E-UTRAN access.
-- locationMethod shall not be included for E-UTRAN access.
-- gpsAssistanceData shall not be included for E-UTRAN access.
-- h-gmlc-address shall not be included for E-UTRAN access.
-- locationEstimate shall not be included for E-UTRAN access.
-- velocityEstimate shall not be included for E-UTRAN access.
-- referenceNumber shall not be included for E-UTRAN access.
-- periodicLDRInfo shall not be included for E-UTRAN access.
-- locationUpdateRequest shall not be included for E-UTRAN access.
-- sequenceNumber shall not be included for E-UTRAN access.
-- terminationCause shall not be included for E-UTRAN access.
-- mo-lrShortCircuit shall not be included for E-UTRAN access.
-- ganssAssistanceData shall not be included for E-UTRAN access.



MOLR-Type::= ENUMERATED {
	locationEstimate			(0),
	assistanceData				(1),
	deCipheringKeys				(2),
	... ,
	deferredMo-lrTTTPInitiation	(3),
	deferredMo-lrSelfLocationInitiation (4),
	deferredMt-lrOrmo-lrTTTPLocationEstimate (5),
	deferredMt-lrOrmo-lrCancellation (6)}
-- exception handling:
-- an unrecognized value shall be rejected by the receiver with a return error cause of
-- unexpected data value. 
-- For E-UTRAN access, only locationEstimate or assistanceData shall be included


LocationMethod::= ENUMERATED {
	msBasedEOTD			(0),
	msAssistedEOTD		(1),
	assistedGPS			(2),
	...,
	msBasedOTDOA		(3),
	assistedGANSS		(4),
	assistedGPSandGANSS (5)
	}
-- exception handling:
-- When this parameter is received with value msBasedEOTD or msAssistedEOTD and the MS 
-- is camped on an UMTS Service Area then the receiver shall reject it 
-- with a return error cause of unexpected data value.
-- When this parameter is received with value msBasedOTDOA and the MS 
-- is camped on a GSM Cell then the receiver shall reject it with a return error cause of
-- unexpected data value.
-- an unrecognized value shall be rejected by the receiver with a return error cause of
-- unexpected data value.

GPSAssistanceData::= OCTET STRING (SIZE (1..38))
-- Octets 1 to 38 are coded in the same way as the octets 3 to 7+2n of Requested GPS Data IE
-- in 3GPP TS 49.031 [14].

GANSSAssistanceData::= OCTET STRING (SIZE (1..40))
-- Octets 1 to 40 are coded in the same way as the octets 3 to 9+2n of Requested GANSS Data IE
-- in 3GPP TS 49.031 [14] .

TerminationCause ::= ENUMERATED {
	subscriberTermination  (0),
	uETermination     (1),
	...} 

MultiplePositioningProtocolPDUs ::= SEQUENCE (SIZE (1..maxNumLPPMsg)) OF PositioningProtocolPDU

PositioningProtocolPDU ::= OCTET STRING
-- PositioningProtocolPDU contains a LPP message defined in 3GPP TS 36.355 [17].

maxNumLPPMsg INTEGER ::= 3



LCS-MOLRRes::= SEQUENCE {
	locationEstimate		[0]	Ext-GeographicalInformation		OPTIONAL,
	decipheringKeys			[1] DecipheringKeys					OPTIONAL,
	...,
	add-LocationEstimate	[2]	Add-GeographicalInformation 		OPTIONAL,
	velocityEstimate		[3] VelocityEstimate		OPTIONAL,
	referenceNumber 		[4] LCS-ReferenceNumber 	OPTIONAL,
	h-gmlc-address			[5]	GSN-Address				OPTIONAL,
	mo-lrShortCircuit		[6]	NULL					OPTIONAL,
	reportingPLMNList		[7]	ReportingPLMNList		OPTIONAL
	 }
-- Parameters locationEstimate or add-LocationEstimate (one but not both) 
-- shall be included if and only if the 
-- molr-Type in LocationRequestArg was set to value locationEstimate.
-- Parameter add-LocationEstimate shall not be included if the supportedGADShapes 
-- parameter was not received in the LCS-MOLRArg.
-- The locationEstimate and the add-locationEstimate parameters shall not be sent if
-- the supportedGADShapes parameter has been received in LCS-MOLRArg
-- and the shape encoded in locationEstimate or add-LocationEstimate is not marked
-- as supported in supportedGADShapes. In such a case LCS-MOLRArg
-- shall be rejected with error FacilityNotSupported with additional indication
-- shapeOfLocationEstimateNotSupported.
-- Parameter decipheringKeys shall be included if and only if the molr-Type
-- in LocationRequestArg was set to value deCipheringKeys.
-- Parameter velocityEstimate may only be included if the lcs-QoS in LCS-MOLRarg includes
-- velocityRequest
-- decipheringKeys shall not be included for E-UTRAN access.
-- referenceNumber shall not be included for E-UTRAN access.
-- h-gmlc-address shall not be included for E-UTRAN access.
-- mo-lrShortCircuit shall not be included for E-UTRAN access.
-- reportingPLMNList shall not be included for E-UTRAN access.



DecipheringKeys::= OCTET STRING (SIZE (15))
-- Octets in DecipheringKeys are coded in the same way as the octets 3 to 17 of Deciphering Key IE
-- in 3GPP TS 49.031 [14]. I.e. these octets contain Current Deciphering Key, Next Deciphering Key and 
-- Ciphering Key Flag.
LCS-AreaEventRequestArg	::= SEQUENCE {
	referenceNumber				[0]	LCS-ReferenceNumber,
	h-gmlc-address				[1]	GSN-Address,
	deferredLocationEventType	[3] DeferredLocationEventType,
	areaEventInfo				[4]	AreaEventInfo,
	... }

-- the msAvailableValue in the DeferredLocationEventType is not applicable for this procedure 

LCS-AreaEventReportArg	::= SEQUENCE {
	referenceNumber				[0]	LCS-ReferenceNumber,
	h-gmlc-address				[1]	GSN-Address,
	... }

LCS-AreaEventCancellationArg	::= SEQUENCE {
	referenceNumber				[0]	LCS-ReferenceNumber,
	h-gmlc-address				[1]	GSN-Address,
	... }


LCS-PeriodicLocationRequestArg	::= SEQUENCE {
	referenceNumber		[0] LCS-ReferenceNumber,
	periodicLDRInfo		[1]	PeriodicLDRInfo,
	lcsClientExternalID	[2] LCSClientExternalID,
	qoS					[3] LCS-QoS					OPTIONAL,
	h-gmlc-address		[4]	GSN-Address				OPTIONAL,
	mo-lrShortCircuit	[5]	NULL					OPTIONAL,
	reportingPLMNList	[6]	ReportingPLMNList		OPTIONAL,
	... }


LCS-PeriodicLocationRequestRes	::= SEQUENCE {
	mo-lrShortCircuit	[0]	NULL					OPTIONAL,
	... }


LCS-LocationUpdateArg	::= SEQUENCE {
	referenceNumber		[0] LCS-ReferenceNumber		OPTIONAL,
	add-LocationEstimate[1] Add-GeographicalInformation 		OPTIONAL,
	velocityEstimate	[2] VelocityEstimate		OPTIONAL,
	sequenceNumber		[3]	SequenceNumber			OPTIONAL,
	... }
-- add-LocationEstimate shall be included if and only if a location estimate was successfully
-- transferred towards an External LCS Client or was successfully obtained for UE self location
-- velocityEstimate may only be included if add-LocationEstimate is included

LCS-LocationUpdateRes	::= SEQUENCE {
	terminationCause 	[0] TerminationCause 		OPTIONAL,
	... }

LCS-PeriodicLocationCancellationArg	::= SEQUENCE {
	referenceNumber		[0] LCS-ReferenceNumber,
	h-gmlc-address		[1]	GSN-Address				OPTIONAL,
	... }


END
