/*
///////////////////////////////////////////////////////////////////////////////
//
// 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_Explicit_Call_Transfer_Operations_and_Errors.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 138-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-Closed-User-Group-Service-Operations {itu-t identified-organization etsi (0) 138 operations-and-errors (1)}

DEFINITIONS ::=

BEGIN

EXPORTS 
  cUGCall,
  invalidOrUnregisteredCUGIndex,
  requestedBasicServiceViolatesCUGConstraints,
  outgoingCallsBarredWithinCUG,
  incomingCallsBarredWithinCUG,
  userNotMemberOfCUG,
  inconsistencyInDesignatedFacilityAndSubscriberClass;
  
IMPORTS 
    OPERATION,
    ERROR
  FROM Remote-Operations-Information-Objects
  {joint-iso-itu-t remote-operations (4) notation (0)}

    notSubscribed,
    basicServiceNotProvided
  FROM Revised-General-Errors
  {itu-t identified-organization etsi (0) 196 general-errors (2)};    
    
  cUGCall OPERATION ::=
  {
    -- in Facility Information element. Invoked from calling user to
    -- originating network side. Also from destination network side to
    -- called user
    ARGUMENT SEQUENCE {
      oARequested  OARequested  DEFAULT  FALSE,
      cUGIndex     CUGIndex     OPTIONAL }
      
    ERRORS {
      invalidOrUnregisteredCUGIndex |
      requestedBasicServiceViolatesCUGConstraints |
      outgoingCallsBarredWithinCUG |
      incomingCallsBarredWithinCUG |
      userNotMemberOfCUG |
      basicServiceNotProvided |
      inconsistencyInDesignatedFacilityAndSubscriberClass |
      notSubscribed }
    
    CODE  local:2      
           
  }
  
  OARequested ::= [1] IMPLICIT BOOLEAN
 
  CUGIndex    ::= [2] IMPLICIT INTEGER (0..32767)
  
  invalidOrUnregisteredCUGIndex                        ERROR ::= {CODE local:16}
  requestedBasicServiceViolatesCUGConstraints          ERROR ::= {CODE local:17}
  outgoingCallsBarredWithinCUG                         ERROR ::= {CODE local:18}
  incomingCallsBarredWithinCUG                         ERROR ::= {CODE local:19}
  userNotMemberOfCUG                                   ERROR ::= {CODE local:20}  
  inconsistencyInDesignatedFacilityAndSubscriberClass  ERROR ::= {CODE local:21}    
  
END
