-- Module MCS-PROTOCOL-3 (T.125:02/1998)
-- See also ITU-T T.125 (02/1998)
-- See also the index of all ASN.1 assignments needed in this document

MCS-PROTOCOL-3 DEFINITIONS AUTOMATIC TAGS ::=
BEGIN

-- Part 1:  Fundamental MCS types
H221NonStandardIdentifier ::= OCTET STRING(SIZE (4..255))

-- First four octets shall be country 
-- code and Manufacturer code, assigned
-- as specified in Annex A/H.221 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
}

ChannelId ::= INTEGER(0..65535) -- range is 16 bits
                     

StaticChannelId ::= ChannelId(1..1000) -- those known permanently
                             

DynamicChannelId ::= ChannelId(1001..65535) -- those created and deleted
                              

UserId ::= DynamicChannelId -- created by Attach-User

-- deleted by Detach-User
PrivateChannelId ::=
  DynamicChannelId -- created by Channel-Convene

-- deleted by Channel-Disband
AssignedChannelId ::=
  DynamicChannelId -- created by Channel-Join zero

-- deleted by last Channel-Leave
TokenId ::= INTEGER(1..65535) -- all are known permanently
                   

TokenStatus ::= CHOICE {
  notInUse        NULL,
  selfGrabbed     NULL,
  otherGrabbed    NULL,
  selfInhibited   NULL,
  otherInhibited  NULL,
  selfRecipient   NULL,
  selfGiving      NULL,
  otherGiving     NULL,
  ...
}

DataPriority ::= CHOICE {
  top     NULL,
  high    NULL,
  medium  NULL,
  low     NULL,
  ...
}

Segmentation ::= BIT STRING {begin(0), end(1)}(SIZE (2))

-- Part 2:  Extended parameter
ExtendedParameters ::= SEQUENCE {
  unreliableDataSupported  BOOLEAN,
  domainReferenceID        INTEGER(0..65535),
  nonStandard              SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ExtendedParameterPropose ::= SEQUENCE {
  targetExtendedParameters   ExtendedParameters,
  minimumExtendedParameters  ExtendedParameters,
  maximumExtendedParameters  ExtendedParameters,
  nonStandard                SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ExtendedParameterAccept ::= SEQUENCE {
  extendedParameters  ExtendedParameters,
  nonStandard         SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 3:  Merge domain
PlumbDomainIndication ::= SEQUENCE {
  heightLimit  INTEGER(0..MAX),
  -- a restriction on the MCSPDU receiver
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ErectDomainRequest ::= SEQUENCE {
  subHeight    INTEGER(0..MAX),
  -- height in domain of the MCSPDU transmitter
  subInterval  INTEGER(0..MAX),
  -- its throughput enforcement interval in milliseconds
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelAttributes ::= CHOICE {
  static
    SEQUENCE {channelId    StaticChannelId,
              -- joined is implicitly TRUE
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  userId
    SEQUENCE {joined       BOOLEAN,
              -- TRUE if user is joined to its user id
              userId       UserId,
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  private
    SEQUENCE {joined       BOOLEAN,
              -- TRUE if channel id is joined below
              channelId    PrivateChannelId,
              manager      UserId,
              admitted     SET OF UserId,
              -- may span multiple MergeChannelsRequest
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  assigned
    SEQUENCE {channelId    AssignedChannelId,
              -- joined is implicitly TRUE
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  ...
}

MergeChannelsRequest ::= SEQUENCE {
  mergeChannels    SET OF ChannelAttributes,
  purgeChannelIds  SET OF ChannelId,
  nonStandard      SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

MergeChannelsConfirm ::= SEQUENCE {
  mergeChannels    SET OF ChannelAttributes,
  purgeChannelIds  SET OF ChannelId,
  nonStandard      SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

PurgeChannelsIndication ::= SEQUENCE {
  detachChannelIds  SET OF ChannelId,
  -- purge user id channels
  purgeChannelIds   SET OF ChannelId,
  -- purge other channels
  nonStandard       SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenAttributes ::= CHOICE {
  grabbed
    SEQUENCE {tokenId      TokenId,
              grabber      UserId,
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  inhibited
    SEQUENCE {tokenId      TokenId,
              inhibitors   SET OF UserId,
              -- may span multiple MergeTokensRequest
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  giving
    SEQUENCE {tokenId      TokenId,
              grabber      UserId,
              recipient    UserId,
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  ungivable
    SEQUENCE {tokenId      TokenId,
              grabber      UserId,
              -- recipient has since detached
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  given
    SEQUENCE {tokenId      TokenId,
              recipient    UserId,
              -- grabber released or detached
              nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
              ...},
  ...
}

MergeTokensRequest ::= SEQUENCE {
  mergeTokens    SET OF TokenAttributes,
  purgeTokenIds  SET OF TokenId,
  nonStandard    SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

MergeTokensConfirm ::= SEQUENCE {
  mergeTokens    SET OF TokenAttributes,
  purgeTokenIds  SET OF TokenId,
  nonStandard    SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

PurgeTokensIndication ::= SEQUENCE {
  purgeTokenIds  SET OF TokenId,
  nonStandard    SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 4:  Disconnect provider
DisconnectProviderUltimatum ::= SEQUENCE {
  reason       Reason,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

RejectMCSPDUUltimatum ::= SEQUENCE {
  diagnostic     Diagnostic,
  initialOctets  OCTET STRING,
  nonStandard    SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 5:  Attach/Detach user
AttachUserRequest ::= SEQUENCE {
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

AttachUserConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId OPTIONAL,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

DetachUserRequest ::= SEQUENCE {
  reason       Reason,
  userIds      SET OF UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

DetachUserIndication ::= SEQUENCE {
  reason       Reason,
  userIds      SET OF UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 6:  Channel management
ChannelJoinRequest ::= SEQUENCE {
  initiator    UserId,
  channelId    ChannelId, -- may be zero
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelJoinConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId,
  requested    ChannelId, -- may be zero
  channelId    ChannelId OPTIONAL,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelLeaveRequest ::= SEQUENCE {
  channelIds   SET OF ChannelId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelConveneRequest ::= SEQUENCE {
  initiator    UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelConveneConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId,
  channelId    PrivateChannelId OPTIONAL,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelDisbandRequest ::= SEQUENCE {
  initiator    UserId,
  channelId    PrivateChannelId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelDisbandIndication ::= SEQUENCE {
  channelId    PrivateChannelId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelAdmitRequest ::= SEQUENCE {
  initiator    UserId,
  channelId    PrivateChannelId,
  userIds      SET OF UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelAdmitIndication ::= SEQUENCE {
  initiator    UserId,
  channelId    PrivateChannelId,
  userIds      SET OF UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelExpelRequest ::= SEQUENCE {
  initiator    UserId,
  channelId    PrivateChannelId,
  userIds      SET OF UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

ChannelExpelIndication ::= SEQUENCE {
  channelId    PrivateChannelId,
  userIds      SET OF UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 7:  Data transfer
SendDataRequest ::= SEQUENCE {
  initiator          UserId,
  channelId          ChannelId,
  reliability        BOOLEAN,
  domainReferenceID  INTEGER(0..65535) OPTIONAL,
  dataPriority       DataPriority,
  segmentation       Segmentation,
  userData           OCTET STRING,
  totalDataSize      INTEGER OPTIONAL,
  nonStandard        SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

SendDataIndication ::= SEQUENCE {
  initiator          UserId,
  channelId          ChannelId,
  reliability        BOOLEAN,
  domainReferenceID  INTEGER(0..65535) OPTIONAL,
  dataPriority       DataPriority,
  segmentation       Segmentation,
  userData           OCTET STRING,
  totalDataSize      INTEGER OPTIONAL,
  nonStandard        SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

UniformSendDataRequest ::= SEQUENCE {
  initiator          UserId,
  channelId          ChannelId,
  reliability        BOOLEAN,
  domainReferenceID  INTEGER(0..65535) OPTIONAL,
  dataPriority       DataPriority,
  segmentation       Segmentation,
  userData           OCTET STRING,
  totalDataSize      INTEGER OPTIONAL,
  nonStandard        SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

UniformSendDataIndication ::= SEQUENCE {
  initiator          UserId,
  channelId          ChannelId,
  reliability        BOOLEAN,
  domainReferenceID  INTEGER(0..65535) OPTIONAL,
  dataPriority       DataPriority,
  segmentation       Segmentation,
  userData           OCTET STRING,
  totalDataSize      INTEGER OPTIONAL,
  nonStandard        SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 8:  Token management
TokenGrabRequest ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenGrabConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId,
  tokenId      TokenId,
  tokenStatus  TokenStatus,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenInhibitRequest ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenInhibitConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId,
  tokenId      TokenId,
  tokenStatus  TokenStatus,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenGiveRequest ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  recipient    UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenGiveIndication ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  recipient    UserId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenGiveResponse ::= SEQUENCE {
  result       Result,
  recipient    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenGiveConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId,
  tokenId      TokenId,
  tokenStatus  TokenStatus,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenPleaseRequest ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenPleaseIndication ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenReleaseRequest ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenReleaseConfirm ::= SEQUENCE {
  result       Result,
  initiator    UserId,
  tokenId      TokenId,
  tokenStatus  TokenStatus,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenTestRequest ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

TokenTestConfirm ::= SEQUENCE {
  initiator    UserId,
  tokenId      TokenId,
  tokenStatus  TokenStatus,
  nonStandard  SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 9:  Capabilities notification
CapabilityID ::= CHOICE {standardID     INTEGER(0..65535),
                         nonstandardID  Key
}

CapabilityClass ::= CHOICE {
  null         NULL,
  unsignedMin  INTEGER(0..MAX),
  unsignedMax  INTEGER(0..MAX)
}

ParticipationIndicator ::= CHOICE {global   NULL,
                                   partial  INTEGER(1..2)
}

RequestCapability ::= SEQUENCE {
  capabilityID            CapabilityID,
  capabilityClass         CapabilityClass,
  participationIndicator  ParticipationIndicator,
  nonStandard             SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

SeqOfRequestCapabilities ::= SEQUENCE OF RequestCapability

IndicationCapability ::= SEQUENCE {
  capabilityID               CapabilityID,
  capabilityClass            CapabilityClass,
  summitProviderSupported    BOOLEAN,
  intermediateNodeSupported  BOOLEAN,
  nonStandard                SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

SeqOfIndicationCapabilities ::= SEQUENCE OF IndicationCapability

CapabilitiesNotificationRequest ::= SEQUENCE {
  v2NodePresent  BOOLEAN,
  addList        SeqOfRequestCapabilities OPTIONAL,
  removeList     SeqOfRequestCapabilities OPTIONAL,
  nonStandard    SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

CapabilitiesNotificationIndication ::= SEQUENCE {
  v2NodePresent  BOOLEAN,
  addList        SeqOfIndicationCapabilities OPTIONAL,
  removeList     SeqOfIndicationCapabilities OPTIONAL,
  nonStandard    SEQUENCE OF NonStandardParameter OPTIONAL,
  ...
}

-- Part 10:  Status codes
Reason ::=
  CHOICE -- in DisconnectProviderUltimatum, DetachUserRequest, DetachUserIndication
   {
  rn-domain-disconnected  NULL,
  rn-provider-initiated   NULL,
  rn-token-purged         NULL,
  rn-user-requested       NULL,
  rn-channel-purged       NULL,
  ...
}

Result ::= CHOICE -- in Connect, response, confirm
            {
  rt-successful               NULL,
  rt-domain-merging           NULL,
  rt-domain-not-hierarchical  NULL,
  rt-no-such-channel          NULL,
  rt-no-such-domain           NULL,
  rt-no-such-user             NULL,
  rt-not-admitted             NULL,
  rt-other-user-id            NULL,
  rt-parameters-unacceptable  NULL,
  rt-token-not-available      NULL,
  rt-token-not-possessed      NULL,
  rt-too-many-channels        NULL,
  rt-too-many-tokens          NULL,
  rt-too-many-users           NULL,
  rt-unspecified-failure      NULL,
  rt-user-rejected            NULL,
  ...
}

Diagnostic ::= CHOICE -- in RejectMCSPDUUltimatum
                {
  dc-inconsistent-merge        NULL,
  dc-forbidden-PDU-downward    NULL,
  dc-forbidden-PDU-upward      NULL,
  dc-invalid-BER-encoding      NULL,
  dc-invalid-PER-encoding      NULL,
  dc-misrouted-user            NULL,
  dc-unrequested-confirm       NULL,
  dc-wrong-transport-priority  NULL,
  dc-channel-id-conflict       NULL,
  dc-token-id-conflict         NULL,
  dc-not-user-id-channel       NULL,
  dc-too-many-channels         NULL,
  dc-too-many-tokens           NULL,
  dc-too-many-users            NULL,
  ...
}

-- Part 11:  MCSPDU repertoire
NonStandardPDU ::= SEQUENCE {data  NonStandardParameter,
                             ...
}

ExtendedParameterMCSPDU ::= CHOICE {
  extendedParameterPropose  ExtendedParameterPropose,
  extendedParameterAccept   ExtendedParameterAccept,
  nonStandard               NonStandardPDU,
  ...
}

DomainMCSPDU ::= CHOICE {
  plumbDomainIndication        PlumbDomainIndication,
  erectDomainRequest           ErectDomainRequest,
  mergeChannelsRequest         MergeChannelsRequest,
  mergeChannelsConfirm         MergeChannelsConfirm,
  purgeChannelsIndication      PurgeChannelsIndication,
  mergeTokensRequest           MergeTokensRequest,
  mergeTokensConfirm           MergeTokensConfirm,
  purgeTokensIndication        PurgeTokensIndication,
  disconnectProviderUltimatum  DisconnectProviderUltimatum,
  rejectMCSPDUUltimatum        RejectMCSPDUUltimatum,
  attachUserRequest            AttachUserRequest,
  attachUserConfirm            AttachUserConfirm,
  detachUserRequest            DetachUserRequest,
  detachUserIndication         DetachUserIndication,
  channelJoinRequest           ChannelJoinRequest,
  channelJoinConfirm           ChannelJoinConfirm,
  channelLeaveRequest          ChannelLeaveRequest,
  channelConveneRequest        ChannelConveneRequest,
  channelConveneConfirm        ChannelConveneConfirm,
  channelDisbandRequest        ChannelDisbandRequest,
  channelDisbandIndication     ChannelDisbandIndication,
  channelAdmitRequest          ChannelAdmitRequest,
  channelAdmitIndication       ChannelAdmitIndication,
  channelExpelRequest          ChannelExpelRequest,
  channelExpelIndication       ChannelExpelIndication,
  sendDataRequest              SendDataRequest,
  sendDataIndication           SendDataIndication,
  uniformSendDataRequest       UniformSendDataRequest,
  uniformSendDataIndication    UniformSendDataIndication,
  tokenGrabRequest             TokenGrabRequest,
  tokenGrabConfirm             TokenGrabConfirm,
  tokenInhibitRequest          TokenInhibitRequest,
  tokenInhibitConfirm          TokenInhibitConfirm,
  tokenGiveRequest             TokenGiveRequest,
  tokenGiveIndication          TokenGiveIndication,
  tokenGiveResponse            TokenGiveResponse,
  tokenGiveConfirm             TokenGiveConfirm,
  tokenPleaseRequest           TokenPleaseRequest,
  tokenPleaseIndication        TokenPleaseIndication,
  tokenReleaseRequest          TokenReleaseRequest,
  tokenReleaseConfirm          TokenReleaseConfirm,
  tokenTestRequest             TokenTestRequest,
  tokenTestConfirm             TokenTestConfirm,
  nonStandard                  NonStandardPDU,
  ...
}

END
-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D