-- $Id: tcap.asn 26192 2008-09-14 14:42:39Z etxrab $
TCAPMessages {itu-t recommendation q 773 modules(2) messages(1) version3(3)}

DEFINITIONS  ::=

BEGIN

--EXPORTS		     OPERATION, ERROR, Component, InvokeId Type;
-- WS stuff
ExternalPDU ::= [APPLICATION 8] IMPLICIT SEQUENCE
					{
					oid OBJECT IDENTIFIER,
					dialog [0] IMPLICIT Dialog1
					}


Dialog1 ::= OCTET STRING
-- End WS
-- Transaction Portion fields

TCMessage ::= CHOICE {
				unidirectional				[APPLICATION 1]		IMPLICIT Unidirectional,
				begin						[APPLICATION 2]		IMPLICIT Begin,
				end							[APPLICATION 4]		IMPLICIT End,
				continue					[APPLICATION 5]		IMPLICIT Continue,
				abort						[APPLICATION 7]		IMPLICIT Abort
}

Unidirectional ::=	SEQUENCE{
	dialoguePortion	DialoguePortion OPTIONAL,
	components		ComponentPortion
	}

Begin ::= SEQUENCE{
	otid			OrigTransactionID,
	dialoguePortion	DialoguePortion OPTIONAL,
	components		ComponentPortion OPTIONAL
	}

End ::=	SEQUENCE{
	dtid			DestTransactionID,
	dialoguePortion	DialoguePortion OPTIONAL,
	components		ComponentPortion OPTIONAL
	}


Continue ::= SEQUENCE {
	otid			OrigTransactionID,
	dtid			DestTransactionID,
	dialoguePortion	DialoguePortion OPTIONAL,
    components		ComponentPortion OPTIONAL
	}

Abort ::= SEQUENCE{
	dtid			DestTransactionID,
	reason			Reason OPTIONAL
	}

Reason ::= CHOICE{
	p-abortCause		P-AbortCause,
	u-abortCause		DialoguePortion
	}

-- NOTE - When the Abort Message is generated by the Transaction sublayer, a p-Abort Cause may be
-- present. The u-abortCause may be generated by the component sublayer in which case it is an ABRT
-- APDU, or by the TC-User in which case it could be either an ABRT APDU or data in some user-defined
-- abstract syntax.

DialoguePortion ::= [APPLICATION 11] EXPLICIT EXTERNAL

-- WS adaptation
--DialoguePortion ::= [APPLICATION  11] IMPLICIT DialogueOC
--DialogueOC ::= OCTET STRING

-- The dialogue portion carries the dialogue control PDUs as value of the external data type.
-- The direct reference should be set to { ccitt recommendation q 773 as (1) dialogue-as (1) version (1) }
-- if structured dialogue is used and to { ccitt recommendation q 773 as (1) unidialogue-as (2) version (1) }
-- if unstructured dialogue is used or any user defined abstract syntax name when only user information
-- is carried (e.g. when user information is sent in a 1988 Abort message).

OrigTransactionID ::= [APPLICATION 8] IMPLICIT OCTET STRING (SIZE (1..4) )

DestTransactionID ::=[APPLICATION 9] IMPLICIT OCTET STRING (SIZE (1..4) )

P-AbortCause ::= [APPLICATION 10] IMPLICIT INTEGER {
	unrecognizedMessageType (0),
	unrecognizedTransactionID (1),
	badlyFormattedTransactionPortion (2),
	incorrectTransactionPortion (3),
	resourceLimitation (4)}(0..127)

-- COMPONENT PORTION. The last field in the transaction portion of the TCAP message is the Component Portion.
-- The Component Portion may be absent.

ComponentPortion ::= [APPLICATION 12]	IMPLICIT SEQUENCE SIZE (1..MAX) OF Component

-- Component Portion fields
-- Recommendation X.880 defines four Application Protocol Data Units (APDUs) for invoking
-- operations, returning results or error, and for the rejection of invalid PDUs.
-- TCAP adds returnResultNotLast to allow for the segmentation of a result.

Component ::=	CHOICE {
	invoke					[1] IMPLICIT Invoke,
	returnResultLast		[2] IMPLICIT ReturnResult,
	returnError				[3] IMPLICIT ReturnError,
	reject					[4] IMPLICIT Reject,
	returnResultNotLast		[7] IMPLICIT ReturnResult
	}

-- The Components are sequences of data elements.

Invoke ::=		SEQUENCE {
				invokeID				InvokeIdType,
				linkedID				[0] IMPLICIT InvokeIdType OPTIONAL,
				opCode			OPERATION,
				parameter	 Parameter OPTIONAL }

Parameter ::= ANY

-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER or the keyword ARGUMENT
-- in the type definition of a particular operation.

ReturnResult ::=	SEQUENCE {
	invokeID				InvokeIdType,
	resultretres			SEQUENCE {
		opCode			OPERATION,
		parameter		Parameter OPTIONAL
		} OPTIONAL
	}

-- ANY is filled by the single ASN.1 data type following the keyword RESULT in the type definition
-- of a particular operation.

ReturnError ::=	SEQUENCE {
				invokeID				InvokeIdType,
				errorCode				ErrorCode,
				parameter				Parameter  OPTIONAL }

-- ANY is filled by the single ASN.1 data type following the keyword PARAMETER in the type definition
-- of a particular error.

Reject ::=		SEQUENCE {
				invokeIDRej CHOICE {
					derivable			InvokeIdType,
					not-derivable		NULL },
				problem CHOICE {
					generalProblem		[0] IMPLICIT GeneralProblem,
					invokeProblem		[1] IMPLICIT InvokeProblem,
					returnResultProblem	[2] IMPLICIT ReturnResultProblem,
					returnErrorProblem	[3] IMPLICIT ReturnErrorProblem } }

InvokeIdType ::=	INTEGER (-128..127)


OPERATION	::=	CHOICE {
							localValue INTEGER,
							globalValue OBJECT IDENTIFIER }

ERROR	::=	CHOICE {
			localValue INTEGER,
			globalValue OBJECT IDENTIFIER }

-- OPERATIONS

-- Operations are specified with the OPERATION MACRO.
-- When an operation is specified, the valid parameter set, results, and errors for that operation are indicated.
-- Default values and optional parameters are permitted.

--OPERATION MACRO		::=

--BEGIN
--	TYPE NOTATION		::=	Parameter Result Errors LinkedOperations
--	VALUE NOTATION	::=	value (VALUE CHOICE {
--							localValue INTEGER,
--							globalValue OBJECT IDENTIFIER } )
--	Parameter			::=	ArgKeyword NamedType | empty
--	ArgKeyword			::=	"ARGUMENT" | "PARAMETER"
--	Result				::=	"RESULT" ResultType | empty
--	Errors			::=	"ERRORS" "{"ErrorNames"}" | empty
--	LinkedOperations		::=	"LINKED" "{"LinkedOperationNames"}" | empty
--	ResultType			::=	NamedType | empty
--	ErrorNames			::=	ErrorList | empty
--	ErrorList			::=	Error | ErrorList "," Error
--	Error				::=	value (ERROR)
							-- shall reference an error value
						--| type	 shall reference an error type
							-- if no error value is specified

--	LinkedOperationNames	::=	OperationList | empty
--	OperationList		::=	Operation | OperationList "," Operation
--	Operation			::=	value (OPERATION)
							-- shall reference an operation value
--						| type	 shall reference an operation type if
							-- no operation value is specified
--	NamedType			::=	identifier type | type
--END

-- ERRORS

-- Errors are specified with the ERROR MACRO.
-- When an error is specified, the valid parameters for that error are indicated.
-- Default values and optional parameters are permitted.

--ERROR MACRO			::=
--
--BEGIN
--	TYPE NOTATION		::=	Parameter
--	VALUE NOTATION	::=	value (VALUE CHOICE {
--							localValue INTEGER,
--							globalValue OBJECT IDENTIFIER } )
--	Parameter	::=	"PARAMETER" NamedType | empty
--	NamedType	::=	identifier type | type
--END

-- PROBLEMS

GeneralProblem		::=	INTEGER {		unrecognizedComponent (0),
								mistypedComponent (1),
								badlyStructuredComponent (2) }

InvokeProblem		::=	INTEGER {		duplicateInvokeID (0),
								unrecognizedOperation (1),
								mistypedParameter (2),
								resourceLimitation (3),
								initiatingRelease (4),
								unrecognizedLinkedID (5),
								linkedResponseUnexpected (6),
								unexpectedLinkedOperation (7) }

ReturnResultProblem	::=	INTEGER {		unrecognizedInvokeID (0),
								returnResultUnexpected (1),
								mistypedParameter (2) }

ReturnErrorProblem	::=	INTEGER {		unrecognizedInvokeID (0),
								returnErrorUnexpected (1),
								unrecognizedError (2),
								unexpectedError (3),
								mistypedParameter (4) }


ErrorCode ::= CHOICE
			{
				nationaler 		[PRIVATE 19] IMPLICIT INTEGER (-32768..32767),
				privateer 		[PRIVATE 20] IMPLICIT INTEGER
			}

END -- end of the TCAP Package Module
