-- RUA-PDU-Descriptions.asn
--
-- 3GPP TS 25.468 V9.1.0 (2010-03)
-- http://www.3gpp.org/ftp/Specs/html-info/25468.htm
--
-- 9.3.2	Elementary Procedure definitions
--

-- **************************************************************
--
-- Elementary Procedure definitions
--
-- **************************************************************

RUA-PDU-Descriptions  { 
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
umts-Access (20) modules (3) rua(5) version1 (1) rUA-PDU-Descriptions (0)}

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************

IMPORTS
	Criticality,
	ProcedureCode
FROM RUA-CommonDataTypes
	Connect,
	DirectTransfer,
	Disconnect,
	ConnectionlessTransfer,		
	ErrorIndication,
	PrivateMessage


FROM RUA-PDU-Contents
	id-Connect,
	id-DirectTransfer,
	id-Disconnect,
	id-ConnectionlessTransfer,
	id-ErrorIndication,
	id-privateMessage
FROM RUA-Constants;

-- **************************************************************
--
-- Interface Elementary Procedure Class
--
-- **************************************************************

RUA-ELEMENTARY-PROCEDURE ::= CLASS {
	&InitiatingMessage			,
	&SuccessfulOutcome			OPTIONAL,
	&UnsuccessfulOutcome		OPTIONAL,
	&procedureCode				ProcedureCode 	UNIQUE,
	&criticality				Criticality 	DEFAULT ignore
}

WITH SYNTAX {
	INITIATING MESSAGE			&InitiatingMessage
	[SUCCESSFUL OUTCOME			&SuccessfulOutcome]
	[UNSUCCESSFUL OUTCOME		&UnsuccessfulOutcome]
	PROCEDURE CODE				&procedureCode
	[CRITICALITY				&criticality]
}

-- **************************************************************
--
-- Interface PDU definitions
--
-- **************************************************************

RUA-PDU ::= CHOICE {
	initiatingMessage		InitiatingMessage,
	successfulOutcome		SuccessfulOutcome,
	unsuccessfulOutcome		UnsuccessfulOutcome,
	...
}


InitiatingMessage ::= SEQUENCE {
	procedureCode	RUA-ELEMENTARY-PROCEDURE.&procedureCode		({RUA-ELEMENTARY-PROCEDURES}),
	criticality		RUA-ELEMENTARY-PROCEDURE.&criticality		({RUA-ELEMENTARY-PROCEDURES}{@procedureCode}),
	value			RUA-ELEMENTARY-PROCEDURE.&InitiatingMessage	({RUA-ELEMENTARY-PROCEDURES}{@procedureCode})
}

SuccessfulOutcome ::= SEQUENCE {
	procedureCode	RUA-ELEMENTARY-PROCEDURE.&procedureCode		({RUA-ELEMENTARY-PROCEDURES}),
	criticality		RUA-ELEMENTARY-PROCEDURE.&criticality		({RUA-ELEMENTARY-PROCEDURES}{@procedureCode}),
	value			RUA-ELEMENTARY-PROCEDURE.&SuccessfulOutcome	({RUA-ELEMENTARY-PROCEDURES}{@procedureCode})
}

UnsuccessfulOutcome ::= SEQUENCE {
	procedureCode	RUA-ELEMENTARY-PROCEDURE.&procedureCode			({RUA-ELEMENTARY-PROCEDURES}),
	criticality		RUA-ELEMENTARY-PROCEDURE.&criticality			({RUA-ELEMENTARY-PROCEDURES}{@procedureCode}),
	value			RUA-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome	({RUA-ELEMENTARY-PROCEDURES}{@procedureCode})
}

-- **************************************************************
--
-- Interface Elementary Procedure List
--
-- **************************************************************

RUA-ELEMENTARY-PROCEDURES RUA-ELEMENTARY-PROCEDURE ::= {
	RUA-ELEMENTARY-PROCEDURES-CLASS-1	|
	RUA-ELEMENTARY-PROCEDURES-CLASS-2	,
	...
}

RUA-ELEMENTARY-PROCEDURES-CLASS-1 RUA-ELEMENTARY-PROCEDURE ::= {
	...
}


RUA-ELEMENTARY-PROCEDURES-CLASS-2 RUA-ELEMENTARY-PROCEDURE ::= {
	connectionRequest |
	directTransfer |
	disconnectRequest |
	connectionlessTransfer |	
	errorIndication |
	privateMessage,
	...
}

-- **************************************************************
--
-- Interface Elementary Procedures
--
-- **************************************************************


connectionRequest RUA-ELEMENTARY-PROCEDURE ::= {
	INITIATING MESSAGE		Connect
	PROCEDURE CODE			id-Connect
	CRITICALITY				ignore
}

directTransfer RUA-ELEMENTARY-PROCEDURE ::= {
	INITIATING MESSAGE		DirectTransfer
	PROCEDURE CODE			id-DirectTransfer
	CRITICALITY				ignore
}

disconnectRequest RUA-ELEMENTARY-PROCEDURE ::= {
	INITIATING MESSAGE		Disconnect
	PROCEDURE CODE			id-Disconnect
	CRITICALITY				ignore
}
connectionlessTransfer RUA-ELEMENTARY-PROCEDURE ::= {
	INITIATING MESSAGE		ConnectionlessTransfer
	PROCEDURE CODE			id-ConnectionlessTransfer
	CRITICALITY				ignore
}

errorIndication RUA-ELEMENTARY-PROCEDURE ::= {
	INITIATING MESSAGE		ErrorIndication
	PROCEDURE CODE			id-ErrorIndication
	CRITICALITY				ignore
}

privateMessage RUA-ELEMENTARY-PROCEDURE ::= {
	INITIATING MESSAGE		PrivateMessage
	PROCEDURE CODE			id-privateMessage
	CRITICALITY				ignore
}


END


