/*
///////////////////////////////////////////////////////////////////////////////
//
// 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_Status_Request_Procedure.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 196-1 V1.3.2 (2001-06)
//                 Integrated Services Digital Network (ISDN);
//                 Generic functional protocol for the support
//                 of supplementary services;
//  Rev:          R3C
//  Prodnr:       CNL 113 435
//  Updated:      2006.01.10.
//  Contact:      http://ttcn.ericsson.se
*/

Revised-Status-Request-Procedure {itu-t identified-organization etsi(0) 196 revised-status-request-procedure(17)}

DEFINITIONS EXPLICIT TAGS::=

BEGIN

EXPORTS	statusRequest;

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

		Q931InformationElement
					FROM Revised-Embedded-Q931-Types
						{itu-t identified-organization etsi(0) 196 
										revised-embedded-q931-types(15)};

statusRequest  OPERATION ::=
			{
			ARGUMENT SEQUENCE {
						compatibilityMode CompatibilityMode,
						q931InformationElement Q931InformationElement}
							-- The BC, HLC (optional) and LLC (optional) information
							-- elements shall be embedded in q931InfoElement
			RESULT StatusResult
			CODE global: {itu-t identified-organization etsi(0) 196
							status-request-procedure(9) statusRequest-operation(1)}
			}

StatusResult ::= ENUMERATED {
						compatibleAndFree (0),
						compatibleAndBusy (1),
						incompatible (2)}

CompatibilityMode ::= ENUMERATED {
						allBasicServices (0),
						oneOrMoreBasicServices (1)}



END  -- of Revised-Status-Request-Procedure
