-- Generated by Asnp, the pretty-printer of France Telecom R&D (http://asn1.elibel.tm.fr/asnp/)
Remote-Operations-Useful-Definitions {joint-iso-itu-t remote-operations(4)
  useful-definitions(7) version1(0)}

DEFINITIONS IMPLICIT TAGS

::=

BEGIN

-- exports everything
IMPORTS
  OPERATION, ERROR, OPERATION-PACKAGE, Code
    FROM Remote-Operations-Information-Objects {joint-iso-itu-t
      remote-operations(4) informationObjects(5) version1(0)}
  InvokeId, ROS{}
    FROM Remote-Operations-Generic-ROS-PDUs {joint-iso-itu-t
      remote-operations(4) generic-ROS-PDUs(6) version1(0)};

emptyBind OPERATION ::= {ERRORS       {refuse}
                         SYNCHRONOUS  TRUE
}

emptyUnbind OPERATION ::= {SYNCHRONOUS  TRUE
}

refuse ERROR ::= {CODE  local:-1
}

no-op OPERATION ::= {ALWAYS RESPONDS  FALSE
                     CODE             local:-1
}

Forward{OPERATION:OperationSet} OPERATION ::=
  {OperationSet | OperationSet.&Linked.&Linked |
   OperationSet.&Linked.&Linked.&Linked.&Linked}

Reverse{OPERATION:OperationSet} OPERATION ::= {Forward{{OperationSet.&Linked}}}

ConsumerPerforms{OPERATION-PACKAGE:package} OPERATION ::=
  {Forward{{package.&Consumer}} | Forward{{package.&Both}} |
   Reverse{{package.&Supplier}} | Reverse{{package.&Both}}}

SupplierPerforms{OPERATION-PACKAGE:package} OPERATION ::=
  {Forward{{package.&Supplier}} | Forward{{package.&Both}} |
   Reverse{{package.&Consumer}} | Reverse{{package.&Both}}}

AllOperations{OPERATION-PACKAGE:package} OPERATION ::=
  {ConsumerPerforms{package} | SupplierPerforms{package}}

-- continued on the next page
recode{OPERATION:operation, Code:code} OPERATION ::= {
  ARGUMENT         operation.&ArgumentType
  OPTIONAL         operation.&argumentTypeOptional
  RESULT           operation.&ResultType
  OPTIONAL         operation.&resultTypeOptional
  RETURN RESULT    operation.&returnResult
  ERRORS           {operation.&Errors}
  LINKED           {operation.&Linked}
  SYNCHRONOUS      operation.&synchronous
  ALWAYS RESPONDS  operation.&alwaysReturns
  INVOKE PRIORITY  {operation.&InvokePriority}
  RESULT-PRIORITY  {operation.&ResultPriority}
  CODE             code
}

switch{OPERATION-PACKAGE:package, OBJECT IDENTIFIER:id} OPERATION-PACKAGE ::= 
{
  OPERATIONS        {package.&Both}
  CONSUMER INVOKES  {package.&Consumer}
  SUPPLIER INVOKES  {package.&Supplier}
  ID                id
}

combine{OPERATION-PACKAGE:ConsumerConsumes, OPERATION-PACKAGE:ConsumerSupplies,
        OPERATION-PACKAGE:base} OPERATION-PACKAGE ::= {
  OPERATIONS        {ConsumerConsumes.&Both | ConsumerSupplies.&Both}
  CONSUMER INVOKES  {ConsumerConsumes.&Consumer | ConsumerSupplies.&Supplier}
  SUPPLIER INVOKES  {ConsumerConsumes.&Supplier | ConsumerSupplies.&Consumer}
  ID                base.&id
}

ROS-SingleAS{InvokeId:InvokeIdSet, OPERATION-PACKAGE:package} ::=
  ROS{{InvokeIdSet}, {AllOperations  {package}}, {AllOperations  {package}}}

ROS-ConsumerAS{InvokeId:InvokeIdSet, OPERATION-PACKAGE:package} ::=
  ROS
    {{InvokeIdSet}, {ConsumerPerforms  {package}},
    {SupplierPerforms  {package}}}

ROS-SupplierAS{InvokeId:InvokeIdSet, OPERATION-PACKAGE:package} ::=
  ROS
    {{InvokeIdSet}, {SupplierPerforms  {package}},
    {ConsumerPerforms  {package}}}

END -- end of useful definitions.

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

