-- Generated by Asnp, the pretty-printer of France Telecom R&D (http://asn1.elibel.tm.fr/asnp/)
Remote-Operations-Information-Objects {joint-iso-itu-t remote-operations(4)
  informationObjects(5) version1(0)} 
  
DEFINITIONS

::=

BEGIN

-- exports everything
IMPORTS
  emptyBind, emptyUnbind
    FROM Remote-Operations-Useful-Definitions {joint-iso-itu-t
      remote-operations(4) useful-definitions(7) version1(0)};

OPERATION ::= CLASS {
  &ArgumentType          OPTIONAL,
  &argumentTypeOptional  BOOLEAN OPTIONAL,
  &returnResult          BOOLEAN DEFAULT TRUE,
  &ResultType            OPTIONAL,
  &resultTypeOptional    BOOLEAN OPTIONAL,
  &Errors                ERROR OPTIONAL,
  &Linked                OPERATION OPTIONAL,
  &synchronous           BOOLEAN DEFAULT FALSE,
  &alwaysReturns         BOOLEAN DEFAULT TRUE,
  &InvokePriority        Priority OPTIONAL,
  &ResultPriority        Priority OPTIONAL,
  &operationCode         Code UNIQUE OPTIONAL
}
WITH SYNTAX {
  [ARGUMENT &ArgumentType
   [OPTIONAL &argumentTypeOptional]]
  [RESULT &ResultType
   [OPTIONAL &resultTypeOptional]]
  [RETURN RESULT &returnResult]
  [ERRORS &Errors]
  [LINKED &Linked]
  [SYNCHRONOUS &synchronous]
  [ALWAYS RESPONDS &alwaysReturns]
  [INVOKE PRIORITY &InvokePriority]
  [RESULT-PRIORITY &ResultPriority]
  [CODE &operationCode]
}

ERROR ::= CLASS {
  &ParameterType          OPTIONAL,
  &parameterTypeOptional  BOOLEAN OPTIONAL,
  &ErrorPriority          Priority OPTIONAL,
  &errorCode              Code UNIQUE OPTIONAL
}
WITH SYNTAX {
  [PARAMETER &ParameterType
   [OPTIONAL &parameterTypeOptional]]
  [PRIORITY &ErrorPriority]
  [CODE &errorCode]
}

OPERATION-PACKAGE ::= CLASS {
  &Both      OPERATION OPTIONAL,
  &Consumer  OPERATION OPTIONAL,
  &Supplier  OPERATION OPTIONAL,
  &id        OBJECT IDENTIFIER UNIQUE OPTIONAL
}
-- continued on the next page
WITH SYNTAX {
  [OPERATIONS &Both]
  [CONSUMER INVOKES &Supplier]
  [SUPPLIER INVOKES &Consumer]
  [ID &id]
}

CONNECTION-PACKAGE ::= CLASS {
  &bind                OPERATION DEFAULT emptyBind,
  &unbind              OPERATION DEFAULT emptyUnbind,
  &responderCanUnbind  BOOLEAN DEFAULT FALSE,
  &unbindCanFail       BOOLEAN DEFAULT FALSE,
  &id                  OBJECT IDENTIFIER UNIQUE OPTIONAL
}
WITH SYNTAX {
  [BIND &bind]
  [UNBIND &unbind]
  [RESPONDER UNBIND &responderCanUnbind]
  [FAILURE TO UNBIND &unbindCanFail]
  [ID &id]
}

CONTRACT ::= CLASS {
  &connection           CONNECTION-PACKAGE OPTIONAL,
  &OperationsOf         OPERATION-PACKAGE OPTIONAL,
  &InitiatorConsumerOf  OPERATION-PACKAGE OPTIONAL,
  &InitiatorSupplierOf  OPERATION-PACKAGE OPTIONAL,
  &id                   OBJECT IDENTIFIER UNIQUE OPTIONAL
}
WITH SYNTAX {
  [CONNECTION &connection]
  [OPERATIONS OF &OperationsOf]
  [INITIATOR CONSUMER OF &InitiatorConsumerOf]
  [RESPONDER CONSUMER OF &InitiatorSupplierOf]
  [ID &id]
}

ROS-OBJECT-CLASS ::= CLASS {
  &Is                    ROS-OBJECT-CLASS OPTIONAL,
  &Initiates             CONTRACT OPTIONAL,
  &Responds              CONTRACT OPTIONAL,
  &InitiatesAndResponds  CONTRACT OPTIONAL,
  &id                    OBJECT IDENTIFIER UNIQUE
}
WITH SYNTAX {
  [IS &Is]
  [BOTH &InitiatesAndResponds]
  [INITIATES &Initiates]
  [RESPONDS &Responds]
  ID &id
}

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

Priority ::= INTEGER(0..MAX)

END -- end of Information Object specifications

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

