GCC-PROTOCOL DEFINITIONS AUTOMATIC TAGS ::=
BEGIN

-- Export all symbols

-- ==========================================================================
-- Part 1:  Elements of which messages are composed
-- ==========================================================================

ChannelID		::= INTEGER (1..65535)
StaticChannelID		::= INTEGER (1..1000)		-- Those assigned by specifications
DynamicChannelID	::= INTEGER (1001..65535)	-- Those created and deleted by MCS
UserID			::= DynamicChannelID

TokenID			::= INTEGER (1..65535)
StaticTokenID		::= INTEGER (1..16383)		-- Those assigned by specifications
DynamicTokenID		::= INTEGER (16384..65535)	-- Those assigned by the registry

Time			::= INTEGER (-2147483647..2147483647)  -- Time in seconds
Handle			::= INTEGER (0..4294967295)	-- 32-bit value

H221NonStandardIdentifier ::= OCTET STRING (SIZE (4..255))
							-- First four octets shall be country code and
							-- Manufacturer code, assigned as specified in
							-- H.221 Annex A for NS-cap and NS-comm

Key ::= CHOICE			-- Identifier of a standard or non-standard object
{
	object			OBJECT IDENTIFIER,
	h221NonStandard		H221NonStandardIdentifier
}

NonStandardParameter ::= SEQUENCE
{
	key		Key,
	data		OCTET STRING
}

TextString ::= BMPString (SIZE (0..255))			-- Basic Multilingual Plane of ISO/IEC 10646-1 (Unicode)

simpleTextFirstCharacter UniversalString ::= {0, 0, 0, 0}

simpleTextLastCharacter UniversalString ::= {0, 0, 0, 255}

SimpleTextString ::= BMPString (SIZE (0..255)) (FROM (simpleTextFirstCharacter..simpleTextLastCharacter))

SimpleNumericString ::= NumericString (SIZE (1..255)) (FROM ("0123456789"))

DialingString ::= NumericString (SIZE (1..16)) (FROM ("0123456789"))

SubAddressString ::= NumericString (SIZE (1..40)) (FROM ("0123456789"))

ExtraDialingString ::= TextString (SIZE (1..255)) (FROM ("0123456789#*,"))

UserData ::= SET OF SEQUENCE
{
	key		Key,
	value		OCTET STRING OPTIONAL
}

Password ::= SEQUENCE
{
	numeric		SimpleNumericString,
	text		SimpleTextString OPTIONAL,
	...
}

PasswordSelector ::= CHOICE
{
	numeric		SimpleNumericString,
	text		SimpleTextString,
	...
}

ChallengeResponseItem ::= CHOICE
{
	passwordString		PasswordSelector,
	responseData		UserData,
	...
}

ChallengeResponseAlgorithm ::= CHOICE
{
	passwordInTheClear	NULL,
	nonStandardAlgorithm	NonStandardParameter,
	...
}

ChallengeItem ::= SEQUENCE
{
	responseAlgorithm	ChallengeResponseAlgorithm,
	challengeData		UserData,
	...
}

ChallengeRequest ::= SEQUENCE
{
	challengeTag		INTEGER,
	challengeSet		SET OF ChallengeItem,  -- Set of algorithms offered for response
	...
}

ChallengeResponse ::= SEQUENCE
{
	challengeTag		INTEGER,
	responseAlgorithm	ChallengeResponseAlgorithm,
							-- Specific algorithm selected from the set of
							-- items presented in the ChallengeRequest
	responseItem		ChallengeResponseItem,
	...
}

PasswordChallengeRequestResponse ::= CHOICE
{
	passwordInTheClear		PasswordSelector,
        challengeRequestResponse	SEQUENCE
	{
		challengeRequest	ChallengeRequest OPTIONAL,
		challengeResponse	ChallengeResponse OPTIONAL,
		...
	},
	...
}

ConferenceName ::= SEQUENCE
{
	numeric		SimpleNumericString,
	text		SimpleTextString OPTIONAL,
	...
}

ConferenceNameSelector ::= CHOICE
{
	numeric		SimpleNumericString,
	text		SimpleTextString,
	...
}

ConferenceNameModifier ::= SimpleNumericString

Privilege	 ::= ENUMERATED
{
	terminate	(0),
	ejectUser	(1),
	add		(2),
	lockUnlock	(3),
	transfer	(4),
	...
}

TerminationMethod ::= ENUMERATED
{
	automatic	(0),
	manual		(1),
	...
}

ConferencePriorityScheme ::= CHOICE
{
	nonStandardScheme	NonStandardParameter,
	...
}

ConferencePriority ::= SEQUENCE
{
	priority	INTEGER (0..65535),
	scheme		ConferencePriorityScheme,
	...
}

NetworkAddress	::=	SEQUENCE (SIZE (1..64)) OF CHOICE  -- Listed in order of use
{
	aggregatedChannel	SEQUENCE
	{
		transferModes	SEQUENCE	-- One or more
		{
			speech		BOOLEAN,
			voice-band	BOOLEAN,
			digital-56k	BOOLEAN,
			digital-64k	BOOLEAN,
			digital-128k	BOOLEAN,
			digital-192k	BOOLEAN,
			digital-256k	BOOLEAN,
			digital-320k	BOOLEAN,
			digital-384k	BOOLEAN,
			digital-512k	BOOLEAN,
			digital-768k	BOOLEAN,
			digital-1152k	BOOLEAN,
			digital-1472k	BOOLEAN,
			digital-1536k	BOOLEAN,
			digital-1920k	BOOLEAN,
			packet-mode	BOOLEAN,
			frame-mode	BOOLEAN,
			atm		BOOLEAN,
			...
		},

		internationalNumber	DialingString,
		subAddress		SubAddressString OPTIONAL,
		extraDialing		ExtraDialingString OPTIONAL,

		highLayerCompatibility	SEQUENCE
		{
			telephony3kHz	BOOLEAN,
			telephony7kHz	BOOLEAN,
			videotelephony	BOOLEAN,
			videoconference	BOOLEAN,
			audiographic	BOOLEAN,
			audiovisual	BOOLEAN,
			multimedia	BOOLEAN,
			...
		} OPTIONAL,
		...
	},

	transportConnection	SEQUENCE
	{
		nsapAddress		OCTET STRING (SIZE (1..20)),
		transportSelector	OCTET STRING OPTIONAL
	},

	nonStandard		NonStandardParameter,
	...
}

NodeType ::= ENUMERATED
{
	terminal		(0),
	multiportTerminal	(1),
	mcu			(2),
	...
}

NodeProperties ::= SEQUENCE
{
	managementDevice	BOOLEAN,	-- Is the node a device such as a reservation system
	peripheralDevice	BOOLEAN,	-- Is the node a peripheral to a primary node
	...
}

AsymmetryIndicator ::= CHOICE
{
	callingNode	NULL,
	calledNode	NULL,
	unknown		INTEGER (0..4294967295)	-- Uniformly distributed 32-bit random number
}

AlternativeNodeID ::= CHOICE
{
	h243NodeID	OCTET STRING (SIZE (2)),
	...
}

ConferenceDescriptor 	::= SEQUENCE
{
	conferenceName			ConferenceName,
	conferenceNameModifier		ConferenceNameModifier OPTIONAL,
	conferenceDescription		TextString OPTIONAL,
	lockedConference		BOOLEAN,
	passwordInTheClearRequired	BOOLEAN,
	networkAddress			NetworkAddress OPTIONAL,
	...,
	defaultConferenceFlag		BOOLEAN
}

NodeRecord ::= SEQUENCE
{
	superiorNode		UserID OPTIONAL,	-- Not present only for the Top GCC Provider
	nodeType		NodeType,
	nodeProperties		NodeProperties,
	nodeName		TextString OPTIONAL,
	participantsList	SEQUENCE OF TextString OPTIONAL,
	siteInformation		TextString OPTIONAL,
	networkAddress		NetworkAddress OPTIONAL,
	alternativeNodeID	AlternativeNodeID OPTIONAL,
	userData		UserData OPTIONAL,
	...
}

SessionKey ::= SEQUENCE
{
	applicationProtocolKey	Key,
	sessionID		ChannelID OPTIONAL
}

ChannelType ::= ENUMERATED
{
	static			(0),
	dynamicMulticast	(1),
	dynamicPrivate		(2),
	dynamicUserId		(3)
}

ApplicationRecord ::= SEQUENCE
{
	applicationActive		BOOLEAN,		-- Active/Inactive flag
	conductingOperationCapable	BOOLEAN,		-- Maximum one per node per session
	startupChannel			ChannelType OPTIONAL,
	applicationUserID		UserID OPTIONAL,	-- User ID assigned to the Application Protocol Entity
	nonCollapsingCapabilities	SET OF SEQUENCE
	{
		capabilityID		CapabilityID,
		applicationData		OCTET STRING OPTIONAL
	} OPTIONAL,
	...
}

CapabilityID ::= CHOICE
{
	standard	INTEGER (0..65535),	-- Assigned by Application Protocol specifications
	nonStandard	Key
}

CapabilityClass ::= CHOICE
{
	logical		NULL,
	unsignedMin	INTEGER (0..MAX),	-- Capability value
	unsignedMax	INTEGER (0..MAX),	-- Capability value
	...
}

EntityID ::= INTEGER (0..65535)

ApplicationInvokeSpecifier ::= SEQUENCE
{
  	sessionKey		SessionKey,
	expectedCapabilitySet	SET OF SEQUENCE
	{
		capabilityID		CapabilityID,
		capabilityClass		CapabilityClass,
		...
	} OPTIONAL,
	startupChannel		ChannelType OPTIONAL,
	mandatoryFlag		BOOLEAN,		-- TRUE indicates required Application Protocol Entity
	...
}

RegistryKey ::= SEQUENCE
{
	sessionKey	SessionKey,
	resourceID	OCTET STRING (SIZE (0..64))
}

RegistryItem	 ::= CHOICE
{
	channelID	DynamicChannelID,
	tokenID		DynamicTokenID,
	parameter	OCTET STRING (SIZE (0..64)),
	vacant		NULL,
	...
}

RegistryEntryOwner ::= CHOICE
{
	owned	SEQUENCE
	{
		nodeID		UserID,		-- Node ID of the owning node
		entityID	EntityID	-- Entity ID of the owning
	},					-- Appliction Protocol Entity
	notOwned	NULL			-- There is no current owner
}

RegistryModificationRights ::= ENUMERATED
{
	owner		(0),
	session		(1),
	public		(2)
}

-- ==========================================================================
-- Part 2:  PDU Messages
-- ==========================================================================

UserIDIndication ::= SEQUENCE
{
	tag	INTEGER,
	...
}

ConferenceCreateRequest ::= SEQUENCE
{						-- MCS-Connect-Provider request user data
	conferenceName		ConferenceName,
	convenerPassword	Password OPTIONAL,
	password		Password OPTIONAL,
	lockedConference	BOOLEAN,
	listedConference	BOOLEAN,
	conductibleConference	BOOLEAN,
	terminationMethod	TerminationMethod,
	conductorPrivileges	SET OF Privilege OPTIONAL,
	conductedPrivileges	SET OF Privilege OPTIONAL,
	nonConductedPrivileges  SET OF Privilege OPTIONAL,
	conferenceDescription	TextString OPTIONAL,
	callerIdentifier	TextString OPTIONAL,
	userData		UserData OPTIONAL,
	...,
	conferencePriority	ConferencePriority OPTIONAL
}

ConferenceCreateResponse ::= SEQUENCE
{						-- MCS-Connect-Provider response user data
	nodeID		UserID,			-- Node ID of the sending node
	tag		INTEGER,
	result		ENUMERATED
	{
		success				(0),
		userRejected			(1),
		resourcesNotAvailable		(2),
		rejectedForSymmetryBreaking	(3),
		lockedConferenceNotSupported	(4),
		...
	},
	userData	UserData OPTIONAL,
	...
}

ConferenceQueryRequest 	::= SEQUENCE
{						-- MCS-Connect-Provider request user data
	nodeType		NodeType,
	asymmetryIndicator	AsymmetryIndicator OPTIONAL,
	userData		UserData OPTIONAL,
	...
}

ConferenceQueryResponse ::= SEQUENCE
{						-- MCS-Connect-Provider response user data
	nodeType			NodeType,
	asymmetryIndicator		AsymmetryIndicator OPTIONAL,
	conferenceList			SET OF ConferenceDescriptor,
	result				ENUMERATED
	{
		success		(0),
		userRejected	(1),
		...
	},
	userData			UserData OPTIONAL,
	...,
	waitForInvitationFlag		BOOLEAN OPTIONAL,
	noUnlistedConferenceFlag	BOOLEAN OPTIONAL
}

ConferenceJoinRequest ::= SEQUENCE
{						-- MCS-Connect-Provider request user data as well as
						-- MCS-Send-Data on Node ID Channel of Top GCC sent
						-- by the receiver of the MCS-Connect-Provider
	conferenceName		ConferenceNameSelector OPTIONAL,
						-- Required when part of MCS-Connect-Provider
	conferenceNameModifier	ConferenceNameModifier OPTIONAL,
	tag			INTEGER OPTIONAL,	-- Filled in when sent on Node ID Channel of Top GCC
	password		PasswordChallengeRequestResponse OPTIONAL,
	convenerPassword	PasswordSelector OPTIONAL,
	callerIdentifier	TextString OPTIONAL,
	userData		UserData OPTIONAL,
	...
}

ConferenceJoinResponse 	::= SEQUENCE
{						-- MCS-Connect-Provider response user data as well as
						-- MCS-Send-Data on Node ID Channel of
						-- the receiver of the MCS-Connect-Provider
	nodeID				UserID OPTIONAL,  -- Node ID of directly connected node only
	topNodeID			UserID, 			-- Node ID of Top GCC Provider
	tag				INTEGER,
	conferenceNameAlias		ConferenceNameSelector OPTIONAL,
	passwordInTheClearRequired	BOOLEAN,
	lockedConference		BOOLEAN,
	listedConference		BOOLEAN,
	conductibleConference		BOOLEAN,
	terminationMethod		TerminationMethod,
	conductorPrivileges		SET OF Privilege OPTIONAL,  -- No privilege shall be listed more than once
	conductedPrivileges		SET OF Privilege OPTIONAL,  -- No privilege shall be listed more than once
	nonConductedPrivileges  	SET OF Privilege OPTIONAL,  -- No privilege shall be listed more than once
	conferenceDescription		TextString OPTIONAL,
	password			PasswordChallengeRequestResponse OPTIONAL,
	result				ENUMERATED
	{
		success				(0),
		userRejected			(1),
		invalidConference		(2),
		invalidPassword			(3),
		invalidConvenerPassword		(4),
		challengeResponseRequired	(5),
		invalidChallengeResponse	(6),
		...
	},
	userData			UserData OPTIONAL,
	...
}

ConferenceInviteRequest 	::= SEQUENCE
{						-- MCS-Connect-Provider request user data
	conferenceName			ConferenceName,
	nodeID				UserID,			-- Node ID of the sending node
	topNodeID			UserID,			-- Node ID of Top GCC Provider
	tag				INTEGER,
	passwordInTheClearRequired	BOOLEAN,
	lockedConference		BOOLEAN,
	listedConference		BOOLEAN,
	conductibleConference		BOOLEAN,
	terminationMethod		TerminationMethod,
	conductorPrivileges		SET OF Privilege OPTIONAL,  -- No privilege shall be listed more than once
	conductedPrivileges		SET OF Privilege OPTIONAL,  -- No privilege shall be listed more than once
	nonConductedPrivileges		SET OF Privilege OPTIONAL,  -- No privilege shall be listed more than once
	conferenceDescription		TextString OPTIONAL,
	callerIdentifier		TextString OPTIONAL,
	userData			UserData OPTIONAL,
	...,
	conferencePriority		ConferencePriority OPTIONAL
}

ConferenceInviteResponse ::= SEQUENCE
{						-- MCS-Connect-Provider response user data
	result		ENUMERATED
	{
		success		(0),
		userRejected	(1),
		...
	},
	userData	UserData OPTIONAL,
	...
}

ConferenceAddRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC or
						-- Node ID Channel of Adding MCU if specified
	networkAddress		NetworkAddress,
	requestingNode		UserID,
	tag			INTEGER,
	addingMCU		UserID OPTIONAL,
	userData		UserData OPTIONAL,
	...
}

ConferenceAddResponse 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester

	tag		INTEGER,
	result		ENUMERATED
	{
		success			(0),
		invalidRequester	(1),
		invalidNetworkType	(2),
		invalidNetworkAddress	(3),
		addedNodeBusy		(4),
		networkBusy		(5),
		noPortsAvailable	(6),
		connectionUnsuccessful	(7),
		...
	},
	userData	UserData OPTIONAL,
	...
}

ConferenceLockRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	-- No parameters
	...
}

ConferenceLockResponse 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	result		ENUMERATED
	{
		success			(0),
		invalidRequester	(1),
		alreadyLocked		(2),
		...
	},
	...
}

ConferenceLockIndication 	::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
						-- or MCS-Send-Data on Node ID Channel
	-- No parameters
	...
}

ConferenceUnlockRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	-- No parameters
	...
}

ConferenceUnlockResponse ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	result	ENUMERATED
	{
		success			(0),
		invalidRequester	(1),
		alreadyUnlocked		(2),
		...
	},
	...
}

ConferenceUnlockIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
						-- or MCS-Send-Data on Node ID Channel
	-- No parameters
	...
}

ConferenceTerminateRequest 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	reason	ENUMERATED
	{
		userInitiated			(0),
		timedConferenceTermination	(1),
		...
	},
	...
}

ConferenceTerminateResponse ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	result	ENUMERATED
	{
		success			(0),
		invalidRequester	(1),
		...
	},
	...
}

ConferenceTerminateIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	reason	ENUMERATED
	{
		userInitiated			(0),
		timedConferenceTermination	(1),
		...
	},
	...
}

ConferenceEjectUserRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	nodeToEject	UserID,			-- Node ID of the node to eject
	reason		ENUMERATED
	{
		userInitiated	(0),
		...
	},
	...
}

ConferenceEjectUserResponse 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	nodeToEject	UserID,			-- Node ID of the node to eject
	result		ENUMERATED
	{
		success			(0),
		invalidRequester	(1),
		invalidNode		(2),
		...
	},
	...
}

ConferenceEjectUserIndication 	::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	nodeToEject	UserID,			-- Node ID of the node to eject
	reason		ENUMERATED
	{
		userInitiated		(0),
		higherNodeDisconnected	(1),
		higherNodeEjected	(2),
		...
	},
	...
}

ConferenceTransferRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	conferenceName		ConferenceNameSelector,	-- Name of conference to transfer to
	conferenceNameModifier	ConferenceNameModifier OPTIONAL,
	networkAddress		NetworkAddress OPTIONAL,
	transferringNodes	SET (SIZE (1..65536)) OF UserID OPTIONAL,
	password		PasswordSelector OPTIONAL,
	...
}

ConferenceTransferResponse	 ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	conferenceName		ConferenceNameSelector,	-- Name of conference to transfer to
	conferenceNameModifier	ConferenceNameModifier OPTIONAL,
	transferringNodes	SET (SIZE (1..65536)) OF UserID OPTIONAL,
	result			ENUMERATED
	{
		success			(0),
		invalidRequester	(1),
		...
	},
	...
}

ConferenceTransferIndication 	::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	conferenceName		ConferenceNameSelector,	-- Name of conference to transfer to
	conferenceNameModifier	ConferenceNameModifier OPTIONAL,
	networkAddress		NetworkAddress OPTIONAL,
	transferringNodes	SET (SIZE (1..65536)) OF UserID OPTIONAL,
						-- List of Node IDs,
						-- not present if destined for all nodes
	password		PasswordSelector OPTIONAL,
	...
}

RosterUpdateIndication ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel or
						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	fullRefresh		BOOLEAN,	-- Conference Roster and all 
						-- ApplicationProtocol Sessions refreshed
	nodeInformation		SEQUENCE
	{
		nodeRecordList	CHOICE
		{
			noChange	NULL,
			refresh		SET (SIZE (1..65536)) OF SEQUENCE
						-- One for each node in the conference;
						-- no node shall be listed more than once
			{
				nodeID		UserID,		-- Node ID of the node
				nodeRecord	NodeRecord
			},
			update		SET (SIZE (1..65536)) OF SEQUENCE
						-- One for each node changing its node record;
						-- no node shall be listed more than once
			{
				nodeID		UserID,		-- Node ID of the node
				nodeUpdate	CHOICE
				{
					addRecord	NodeRecord,
					replaceRecord	NodeRecord,	
					removeRecord	NULL,
					...
				}
			},
			...
		},
		rosterInstanceNumber	INTEGER (0..65535),
		nodesAdded		BOOLEAN,		-- Nodes have been added since last instance
		nodesRemoved		BOOLEAN,		-- Nodes have been removed since last instance
		...
	} ,
	applicationInformation	SET (SIZE (0..65535)) OF SEQUENCE
						-- One for each Application Protocol Session;
						-- all Application Protocol Sessions if full refresh;
						-- no Application Protocol Session shall be
						-- listed more than once
	{
		sessionKey		SessionKey,
		applicationRecordList	CHOICE
		{
			noChange	NULL,
			refresh		SET (SIZE (0..65535)) OF SEQUENCE
						-- One for each node with the
						-- Application Protocol Session enrolled;
						-- no node shall be listed more than once
			{
				nodeID			UserID,		-- Node ID of node
				entityID		EntityID,	-- ID for this Application Protocol Entity at this node
				applicationRecord	ApplicationRecord
			},
			update		SET (SIZE (1..65536)) OF SEQUENCE
						-- One for each node modifying its Application Record;
						-- no node shall be listed more than once
			{
				nodeID			UserID,		-- Node ID of node
				entityID		EntityID,	-- ID for this Application Protocol Entity at this node
				applicationUpdate	CHOICE
				{
					addRecord	ApplicationRecord,
					replaceRecord	ApplicationRecord,
					removeRecord	NULL,
					...
				}
			},
			...
		},
		applicationCapabilitiesList	CHOICE
		{
			noChange	NULL,
			refresh		SET OF SEQUENCE
			{
				capabilityID		CapabilityID,
				capabilityClass		CapabilityClass,
				numberOfEntities	INTEGER (1..65536),
						-- Number of Application Protocol Entities
						--  which issued the capability
				...											
			},
			...
		},
		rosterInstanceNumber	INTEGER (0..65535),
		peerEntitiesAdded	BOOLEAN,		-- Peer Entities have been added since last instance
		peerEntitiesRemoved	BOOLEAN,		-- Peer Entities have been removed since last instance
		...
	},
	...
}

ApplicationInvokeIndication ::= SEQUENCE
{						-- MCS-Send-Data or MCS-Uniform-Send-Data
						-- on GCC-Broadcast-Channel or Node ID Channel
	applicationProtocolEntiyList	SET (SIZE (1..65536)) OF ApplicationInvokeSpecifier,
	destinationNodes		SET (SIZE (1..65536)) OF UserID OPTIONAL,	
						-- List of Node IDs,
						-- not presesnt if destined for all nodes
	...
}

RegistryRegisterChannelRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID	EntityID,
	key		RegistryKey,
	channelID	DynamicChannelID,
	...
}

RegistryAssignTokenRequest 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID	EntityID,
	key		RegistryKey,
	...
}

RegistrySetParameterRequest 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID		EntityID,
	key			RegistryKey,
	parameter		OCTET STRING (SIZE (0..64)),
        modificationRights	RegistryModificationRights OPTIONAL,
	...
}

RegistryRetrieveEntryRequest 	::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID	EntityID,
	key		RegistryKey,
	...
}

RegistryDeleteEntryRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID	EntityID,
	key		RegistryKey,
	...
}

RegistryMonitorEntryRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID	EntityID,
	key		RegistryKey,
	...
}

RegistryMonitorEntryIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	key			RegistryKey,
	item			RegistryItem,	-- Contents: channel, token, parameter, or empty
        owner			RegistryEntryOwner,
	modificationRights	RegistryModificationRights OPTIONAL,
	...
}

RegistryAllocateHandleRequest ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of Top GCC
	entityID	EntityID,
	numberOfHandles	INTEGER (1..1024),
	...
}

RegistryAllocateHandleResponse ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	entityID	EntityID,
	numberOfHandles	INTEGER (1..1024),
	firstHandle	Handle,
	result		ENUMERATED
	{
		successful		(0),
		noHandlesAvailable	(1),
		...
	},
	...
}

RegistryResponse ::= SEQUENCE
{						-- MCS-Send-Data on Node ID Channel of requester
	entityID		EntityID,	-- Entity ID of the requesting Application Protocol Entity
	primitiveType		ENUMERATED
	{
		registerChannel		(0),
		assignToken		(1),
		setParameter		(2),
		retrieveEntry		(3),
		deleteEntry		(4),
		monitorEntry		(5),
		...
	},
	key			RegistryKey,		-- Database index
	item			RegistryItem,		-- Contents: channel, token, parameter, or vacant
        owner			RegistryEntryOwner,
	modificationRights	RegistryModificationRights OPTIONAL,
	result			ENUMERATED
	{
		successful		(0),
		belongsToOther		(1),
		tooManyEntries		(2),
		inconsistentType	(3),
		entryNotFound		(4),
		entryAlreadyExists	(5),
		invalidRequester	(6),
		...
	},
	...
}

ConductorAssignIndication ::= SEQUENCE
{												-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	conductingNode	UserID,
	...
}

ConductorReleaseIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	-- No parameters
	...
}

ConductorPermissionAskIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	grantFlag	BOOLEAN,	-- TRUE to request permission grant, FALSE to release
	...
}

ConductorPermissionGrantIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	permissionList	SEQUENCE (SIZE (0..65535)) OF UserID,
						-- Node ID of nodes granted permission
	waitingList	SEQUENCE (SIZE (1..65536)) OF UserID OPTIONAL,
						-- Node ID of nodes waiting form permission
	...
}

ConferenceTimeRemainingIndication 	::= SEQUENCE
{						-- MCS-Send-Data on GCC-Broadcast-Channel
	timeRemaining	Time,
	nodeID		UserID OPTIONAL,
	...
}

ConferenceTimeInquireIndication ::= SEQUENCE
{						-- MCS-Send-Data on GCC-Convener-Channel
	nodeSpecificTimeFlag	BOOLEAN,	-- FALSE for conference-wide, TRUE for node-specific
	...
}

ConferenceTimeExtendIndication ::= SEQUENCE
{						-- MCS-Send-Data on GCC-Convener-Channel
	timeToExtend		Time,
	nodeSpecificTimeFlag	BOOLEAN,	-- FALSE for conference-wide, TRUE for node-specific
	...
}

ConferenceAssistanceIndication ::= SEQUENCE
{						-- MCS-Uniform-Send-Data on GCC-Broadcast-Channel
	userData	UserData OPTIONAL,
	...
}

TextMessageIndication ::= SEQUENCE
{						-- MCS-Send-Data or MCS-Uniform-Send-Data
	message		TextString,		-- on GCC-Broadcast-Channel or Node ID Channel
	...
}

FunctionNotSupportedResponse ::= SEQUENCE
{
	request		RequestPDU
}

NonStandardPDU ::= SEQUENCE
{
	data		NonStandardParameter,
	...
}


-- ==========================================================================
-- Part 3:  Messages sent as MCS-Connect-Provider user data
-- ==========================================================================

ConnectData ::= SEQUENCE
{
	t124Identifier		Key,		-- This shall be set to the value {itu recommendation t 124 version(0) 1}
	connectPDU		OCTET STRING
}

ConnectGCCPDU 	::= CHOICE
{
	conferenceCreateRequest		ConferenceCreateRequest,
	conferenceCreateResponse	ConferenceCreateResponse,
	conferenceQueryRequest		ConferenceQueryRequest,
	conferenceQueryResponse		ConferenceQueryResponse,
	conferenceJoinRequest		ConferenceJoinRequest,
	conferenceJoinResponse		ConferenceJoinResponse,
	conferenceInviteRequest		ConferenceInviteRequest,
	conferenceInviteResponse	ConferenceInviteResponse,
	...
}


-- ==========================================================================
-- Part 4:  Messages sent using MCS-Send-Data or MCS-Uniform-Send-Data
-- ==========================================================================

GCCPDU ::= CHOICE
{
	request				RequestPDU,
	response			ResponsePDU,
	indication			IndicationPDU
}

RequestPDU ::= CHOICE
{
	conferenceJoinRequest			ConferenceJoinRequest,
	conferenceAddRequest			ConferenceAddRequest,
	conferenceLockRequest			ConferenceLockRequest,
	conferenceUnlockRequest			ConferenceUnlockRequest,
	conferenceTerminateRequest		ConferenceTerminateRequest,
	conferenceEjectUserRequest		ConferenceEjectUserRequest,
	conferenceTransferRequest		ConferenceTransferRequest,
	registryRegisterChannelRequest		RegistryRegisterChannelRequest,
	registryAssignTokenRequest		RegistryAssignTokenRequest,
	registrySetParameterRequest		RegistrySetParameterRequest,
	registryRetrieveEntryRequest		RegistryRetrieveEntryRequest,
	registryDeleteEntryRequest		RegistryDeleteEntryRequest,
	registryMonitorEntryRequest		RegistryMonitorEntryRequest,
	registryAllocateHandleRequest		RegistryAllocateHandleRequest,
	nonStandardRequest			NonStandardPDU,
	...
}

ResponsePDU ::= CHOICE
{
	conferenceJoinResponse			ConferenceJoinResponse,
	conferenceAddResponse			ConferenceAddResponse,
	conferenceLockResponse			ConferenceLockResponse,
	conferenceUnlockResponse		ConferenceUnlockResponse,
	conferenceTerminateResponse		ConferenceTerminateResponse,
	conferenceEjectUserResponse		ConferenceEjectUserResponse,
	conferenceTransferResponse		ConferenceTransferResponse,
	registryResponse			RegistryResponse,
	registryAllocateHandleResponse		RegistryAllocateHandleResponse,
	functionNotSupportedResponse		FunctionNotSupportedResponse,
	nonStandardResponse			NonStandardPDU,
	...
}

IndicationPDU ::= CHOICE
{
	userIDIndication			UserIDIndication,
	conferenceLockIndication		ConferenceLockIndication,
	conferenceUnlockIndication		ConferenceUnlockIndication,
	conferenceTerminateIndication		ConferenceTerminateIndication,
	conferenceEjectUserIndication		ConferenceEjectUserIndication,
	conferenceTransferIndication		ConferenceTransferIndication,
	rosterUpdateIndication			RosterUpdateIndication,
	applicationInvokeIndication		ApplicationInvokeIndication,
	registryMonitorEntryIndication		RegistryMonitorEntryIndication,
	conductorAssignIndication		ConductorAssignIndication,
	conductorReleaseIndication		ConductorReleaseIndication,
	conductorPermissionAskIndication	ConductorPermissionAskIndication,
	conductorPermissionGrantIndication	ConductorPermissionGrantIndication,
	conferenceTimeRemainingIndication	ConferenceTimeRemainingIndication,
	conferenceTimeInquireIndication		ConferenceTimeInquireIndication,
	conferenceTimeExtendIndication		ConferenceTimeExtendIndication,
	conferenceAssistanceIndication		ConferenceAssistanceIndication,
	textMessageIndication			TextMessageIndication,
	nonStandardIndication			NonStandardPDU,
	...
}


END
