/*
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2018 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:          Revised_UUS_Operations.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 286-1 
//                 Integrated Services Digital Network (ISDN);
//                 Generic functional protocol for the support
//                 of supplementary services;
//  Rev:          R3C
//  Prodnr:       CNL 113 435
//  Updated:      2012.04.19.
//  Contact:      http://ttcn.ericsson.se
*/

Revised-UUS-Operations {itu-t identified-organization etsi (0) 286 operations-and-errors (1)} 

DEFINITIONS ::=

BEGIN

 
  EXPORTS
      userUserService,
      rejectedByTheUser,
      rejectedByTheNetwork,
      Service,
      Preferred;

  IMPORTS
      OPERATION,
      ERROR
    FROM Remote-Operations-Information-Objects
    {joint-iso-itu-t remote-operations (4) notation (0)};   
    
    
  userUserService OPERATION ::=
    {
      ARGUMENT SEQUENCE {
          service   [1] IMPLICIT Service,
          preferred [2] IMPLICIT Preferred }

      ERRORS {
        rejectedByTheUser |
        rejectedByTheNetwork }   
        
      CODE local:1       
    }

 
  Service ::=
      INTEGER {
        service1 (1),
        service2 (2),
        service3 (3) } (1..3)

 
  Preferred ::= BOOLEAN
                -- True  = preferred request
                -- False = required request


 
  rejectedByTheNetwork ERROR ::= {CODE local:1}
  rejectedByTheUser    ERROR ::= {CODE local:2}


 
END