/*
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2016 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_Three_Party_Operations.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 188-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-Three-Party-Operations {itu-t identified-organization etsi (0) 188 operations-and-types (1)}

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

EXPORTS
  begin3PTY,
  end3PTY;
  
IMPORTS
    OPERATION
  FROM Remote-Operations-Information-Objects
  {joint-iso-itu-t remote-operations (4) notation (0)}

 
    notSubscribed,
    notAvailable,
    invalidCallState,
    resourceUnavailable,
    supplementaryServiceInteractionNotAllowed
  FROM Revised-General-Errors
  {itu-t identified-organization etsi (0) 196 general-errors (2)};
  
  begin3PTY OPERATION ::=
    {
      ERRORS {
        notSubscribed |
        notAvailable |
        invalidCallState |
        resourceUnavailable |
        supplementaryServiceInteractionNotAllowed }
        -- ETS 300 188, aug 1993 does not provide procedures for the generation
        -- of the error 'notAvailable'
        
      CODE local:4          
    }
    
 
  end3PTY OPERATION ::=
    {
      ERRORS {
        invalidCallState }
        
      CODE local:5  
    }


 
END 