-- Module IDMProtocolSpecification (X.519:02/2001)
-- See also ITU-T X.519 (02/2001)
-- See also the index of all ASN.1 assignments needed in this document

IDMProtocolSpecification {joint-iso-itu-t ds(5) module(1)
  iDMProtocolSpecification(30) 4} DEFINITIONS ::=
BEGIN

-- EXPORTS All 
-- The types and values defined in this module are exported for use in the
-- other ASN.1 modules contained within the Directory Specifications, and for
-- the use of other applications which will use them to access Directory
-- services. Other applications may use them for their own purposes, but this
-- will not constrain extensions and modifications needed to maintain or
-- improve the Directory service.
IMPORTS
  -- from ITU-T Rec. X.501 | ISO/IEC 9594-2
  certificateExtensions
    FROM UsefulDefinitions {joint-iso-itu-t ds(5) module(1)
      usefulDefinitions(0) 4}
  -- from ITU-T Rec. X.509 | ISO/IEC 9594-8
  GeneralName
    FROM CertificateExtensions {joint-iso-itu-t ds(5) module(1)
      certificateExtensions(26) 4};

-- The classes following are a simplified equivalent of these commented
-- imports that are adequate for use by the IDM protocol and allow this
-- module to stand independently of the ROSE module.
-- IMPORTS
--	OPERATION, ERROR
--		FROM Remote-Operations-Information-Objects 
--			{joint-iso-itu-t remote-operations(4) informationObjects(5) version1(0)} ;
OPERATION ::= CLASS {
  &ArgumentType   OPTIONAL,
  &ResultType     OPTIONAL,
  &Errors         ERROR OPTIONAL,
  &operationCode  Code UNIQUE OPTIONAL
}
WITH SYNTAX {
  ARGUMENT &ArgumentType
  RESULT &ResultType
  ERRORS &Errors
  CODE &operationCode
}

ERROR ::= CLASS {&ParameterType  ,
                 &errorCode      Code UNIQUE OPTIONAL
}WITH SYNTAX {PARAMETER &ParameterType
              CODE &errorCode
}

Code ::= CHOICE {local   INTEGER,
                 global  OBJECT IDENTIFIER
}

-- IDM-protocol information object class 
IDM-PROTOCOL ::= CLASS {
  &bind-operation  OPERATION,
  &Operations      OPERATION,
  &id              OBJECT IDENTIFIER UNIQUE
}
WITH SYNTAX {
  BIND-OPERATION &bind-operation
  OPERATIONS &Operations
  ID &id
}

-- IDM protocol 
IDM-PDU{IDM-PROTOCOL:protocol} ::= CHOICE {
  bind        [0]  Bind{{protocol}},
  bindResult  [1]  BindResult{{protocol}},
  bindError   [2]  BindError{{protocol}},
  request     [3]  Request{{protocol.&Operations}},
  result      [4]  Result{{protocol.&Operations}},
  error       [5]  Error{{protocol.&Operations}},
  reject      [6]  Reject,
  unbind      [7]  Unbind,
  abort       [8]  Abort
}

Bind{IDM-PROTOCOL:Protocols} ::= SEQUENCE {
  protocolID      IDM-PROTOCOL.&id({Protocols}),
  callingAETitle  [0]  GeneralName OPTIONAL,
  calledAETitle   [1]  GeneralName OPTIONAL,
  argument
    [2]  IDM-PROTOCOL.&bind-operation.&ArgumentType
           ({Protocols}{@protocolID})
}

BindResult{IDM-PROTOCOL:Protocols} ::= SEQUENCE {
  protocolID         IDM-PROTOCOL.&id({Protocols}),
  respondingAETitle  [0]  GeneralName OPTIONAL,
  result
    [1]  IDM-PROTOCOL.&bind-operation.&ResultType
           ({Protocols}{@protocolID})
}

BindError{IDM-PROTOCOL:Protocols} ::= SEQUENCE {
  protocolID         IDM-PROTOCOL.&id({Protocols}),
  errcode
    IDM-PROTOCOL.&bind-operation.&Errors.&errorCode
      ({Protocols}{@protocolID}),
  respondingAETitle  [0]  GeneralName OPTIONAL,
  aETitleError
    ENUMERATED {callingAETitleNotAccepted(0), calledAETitleNotRecognized(1)}
      OPTIONAL,
  error
    [1]  IDM-PROTOCOL.&bind-operation.&Errors.&ParameterType
           ({Protocols}{@protocolID, @errcode})
}

Request{OPERATION:Operations} ::= SEQUENCE {
  invokeID  INTEGER,
  opcode    OPERATION.&operationCode({Operations}),
  argument  OPERATION.&ArgumentType({Operations}{@opcode})
}

Result{OPERATION:Operations} ::= SEQUENCE {
  invokeID  INTEGER,
  opcode    OPERATION.&operationCode({Operations}),
  result    OPERATION.&ResultType({Operations}{@opcode})
}

Error{OPERATION:Operations} ::= SEQUENCE {
  invokeID  INTEGER,
  errcode   OPERATION.&Errors.&errorCode({Operations}),
  error     OPERATION.&Errors.&ParameterType({Operations}{@errcode})
}

Reject ::= SEQUENCE {
  invokeID  INTEGER,
  reason
    ENUMERATED {mistypedPDU(0), duplicateInvokeIDRequest(1),
                unsupportedOperationRequest(2), unknownOperationRequest(3),
                mistypedArgumentRequest(4), resourceLimitationRequest(5),
                unknownInvokeIDResult(6), mistypedResultRequest(7),
                unknownInvokeIDError(8), unknownError(9),
                mistypedParameterError(10)}
}

Unbind ::= NULL

Abort ::= ENUMERATED {
  mistypedPDU(0), unboundRequest(1), invalidPDU(2), resourceLimitation(3),
  connectionFailed(4), invalidProtocol(5), reasonNotSpecified(6)}

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