--/////////////////////////////////////////////////////////////////////////////
--                                                                           //
-- Copyright Test Competence Center (TCC) ETH 2016                           //
--                                                                           //
-- The copyright to the computer  program(s) herein  is the property of TCC. //
-- The program(s) may be used and/or copied only with the written permission //
-- of TCC or in accordance with  the terms and conditions  stipulated in the //
-- agreement/contract under which the program(s) has been supplied.          //
--                                                                           //
--/////////////////////////////////////////////////////////////////////////////
--
--  File:               SS_Protocol.asn
--  Rev:                R1B
--  Prodnr:             CNL 113 832
--  Contact:            http://ttcn.ericsson.se
--  Reference:          3GPP TS 24.080 v13.0.0
 
 
SS-Protocol {
   itu-t identified-organization (4) etsi (0) mobileDomain (0)
   gsm-Access (2) modules (3) ss-Protocol (3) version12 (12)}

DEFINITIONS ::=

BEGIN

IMPORTS

OPERATION
FROM Remote-Operations-Information-Objects {
joint-iso-itu-t remote-operations(4) informationObjects(5) version1(0)}

-- imports operations

-- imports operation from MAP-MobileServiceOperations
forwardCheckSS-Indication
FROM MAP-MobileServiceOperations {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
   map-MobileServiceOperations (5) version12 (12)}

-- imports operations from MAP-SupplementaryServiceOperations
registerSS, eraseSS, activateSS, deactivateSS, interrogateSS, registerPassword, getPassword,
processUnstructuredSS-Request, unstructuredSS-Request, unstructuredSS-Notify, eraseCC-Entry
FROM MAP-SupplementaryServiceOperations {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3)
   map-SupplementaryServiceOperations (8) version12 (12)}

-- imports operations from SS-Operations
processUnstructuredSS-Data, notifySS, forwardChargeAdvice, buildMPTY, holdMPTY, retrieveMPTY,
splitMPTY, explicitCT, forwardCUG-Info, accessRegisterCCEntry, callDeflection, userUserService,
lcs-LocationNotification, lcs-MOLR, lcs-AreaEventRequest, lcs-AreaEventReport, lcs-AreaEventCancellation, lcs-PeriodicLocationRequest, lcs-LocationUpdate, lcs-PeriodicLocationCancellation
FROM SS-Operations {
   itu-t identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3)
   ss-Operations (0) version12 (12)} 

;

Supported-SS-Operations OPERATION ::= {forwardCheckSS-Indication | registerSS | eraseSS | 
	activateSS | deactivateSS | interrogateSS | registerPassword | getPassword | 
	processUnstructuredSS-Request | unstructuredSS-Request | unstructuredSS-Notify | eraseCC-Entry | 
	processUnstructuredSS-Data | notifySS | forwardChargeAdvice | buildMPTY | holdMPTY | 
	retrieveMPTY | splitMPTY | explicitCT | forwardCUG-Info | accessRegisterCCEntry | 
	callDeflection | userUserService | lcs-LocationNotification | lcs-MOLR | lcs-AreaEventRequest |	lcs-AreaEventReport | lcs-AreaEventCancellation | lcs-PeriodicLocationRequest | lcs-LocationUpdate | lcs-PeriodicLocationCancellation }



END
