Call-Park-Pickup-Operations 
{
  itu-t recommendation h 450 5 version1(0)  call-park-pickup-operations(0)
}

DEFINITIONS AUTOMATIC TAGS ::=
BEGIN

  IMPORTS Extension FROM H4501 -- Manufacturer-specific-service-extension-definition
          {
            itu-t recommendation h 450 1 version1(0) msi-definition(18)
          }

          notAvailable, invalidCallState,  resourceUnavailable, 
          supplementaryServiceInteractionNotAllowed FROM H4501 -- H4501-General-Error-List 
          {
            itu-t recommendation h 450 1 version1(0) general-error-list (1)
          }

          EndpointAddress FROM H4501 -- Addressing-Data-Elements 
          {
            itu-t recommendation h 450 1 version1(0) addressing-data-elements(9)
          }

          MixedExtension FROM H4504 -- Call-Hold-Operations 
          {
            itu-t recommendation h 450 4 version1(0) call-hold-operations(0)
          }

          NonStandardParameter, CallIdentifier FROM H225; -- H323-MESSAGES see H.225.0

  CallParkPickupOperations ::= ENUMERATED
  {
    cpRequest(106),
    cpSetup(107),
    groupIndicationOn(8),
    groupIndicationOff(9),
    pickrequ(110),
    pickup(111),
    pickExe(112),
    cpNotify(113),
    cpickupNotify(114)
  }


  CpRequestArg ::= SEQUENCE
  {
    parkingNumber    EndpointAddress,
    parkedNumber     EndpointAddress,
    parkedToNumber   EndpointAddress,
    parkedToPosition ParkedToPosition OPTIONAL,
    extensionArg     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ... 
  }

  CpRequestRes ::= SEQUENCE
  {
    parkedToNumber   EndpointAddress,
    parkedToPosition ParkedToPosition OPTIONAL,
    parkCondition    ParkCondition,
    extensionRes      SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  CpSetupArg ::= SEQUENCE
  {
    parkingNumber    EndpointAddress,
    parkedNumber     EndpointAddress,
    parkedToNumber   EndpointAddress,
    parkedToPosition ParkedToPosition OPTIONAL,
    extensionArg     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ... 
  }

  CpSetupRes ::= SEQUENCE
  {
    parkedToNumber   EndpointAddress,
    parkedToPosition ParkedToPosition OPTIONAL,
    parkCondition    ParkCondition,
    extensionRes     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  GroupIndicationOnArg ::= SEQUENCE
  {
    callPickupId      CallIdentifier, -- identification of the call to be retrieved (parked or alerting call); 
                                      -- its value equals the value of the CallIdentifier as assigned for the parked /
                                      -- alerting call within Setup-UUIE
    groupMemberUserNr EndpointAddress,
    retrieveCallType  CallType,
    partyToRetrieve   EndpointAddress, -- Parked or Calling User 
    retrieveAddress   EndpointAddress, -- parked-to or alerting entity address 
                                       -- (may also be a GK, see clause 9.2)
    parkPosition      ParkedToPosition OPTIONAL,
    extensionArg      SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  GroupIndicationOnRes ::= SEQUENCE
  {
    extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  GroupIndicationOffArg ::= SEQUENCE
  {
    callPickupId      CallIdentifier, -- identification of the call that has been picked up (parked or alerting call)
    groupMemberUserNr EndpointAddress,
    extensionArg      SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  GroupIndicationOffRes ::= SEQUENCE
  {
    extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  PickrequArg ::= SEQUENCE
  {
    picking-upNumber EndpointAddress,
    callPickupId     CallIdentifier   OPTIONAL, -- identification of the call to be picked up (parked or alerting call), if known
    partyToRetrieve  EndpointAddress  OPTIONAL, -- Parked or Calling User 
    retrieveAddress  EndpointAddress,           -- parked-to or alerting entity address
    parkPosition     ParkedToPosition OPTIONAL,
    extensionArg     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  PickrequRes ::= SEQUENCE
  {
    callPickupId CallIdentifier, -- identification of the call that is being picked up (parked or alerting call), 
                                 -- if not sent in pickrequ invoke, it is assigned at the parked-to / alerting
                                 -- endpoint and reflects the CallIdentification of the parked / alerting call for
                                 -- later association with the pickExe invoke APDU. 
    extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }


  PickupArg ::= SEQUENCE
  {
    callPickupId     CallIdentifier, -- identification of this call to be picked up (parked or alerting call); 
                                     -- equals the CallIdentifier value that was assigned to this call in Setup-UUIE
    picking-upNumber EndpointAddress, 
    extensionArg     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  PickupRes ::= SEQUENCE
  {
    extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }


  PickExeArg ::= SEQUENCE
  {
    callPickupId     CallIdentifier,   -- identification of the parked / alerting call to be picked-up; 
                                       -- required at picking-up endpoint to associate the SS-PICKUP invoked with this
                                       -- incoming setup message carrying the pickExe invoke APDU.
    picking-upNumber EndpointAddress,
    partyToRetrieve  EndpointAddress,  -- Parked or Calling User
    extensionArg     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  PickExeRes ::= SEQUENCE
  {
    extensionRes SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  CpNotifyArg ::= SEQUENCE
  {
    parkingNumber EndpointAddress OPTIONAL,
    extensionArg  SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  CpickupNotifyArg ::= SEQUENCE
  {
    picking-upNumber EndpointAddress OPTIONAL,
    extensionArg     SEQUENCE SIZE (0..255) OF MixedExtension OPTIONAL,
    ...
  }

  ParkedToPosition ::= INTEGER (0..65535)

  ParkCondition ::= ENUMERATED
  { 
    unspecified (0),
    parkedToUserIdle (1), 
    parkedToUserBusy (2), 
    parkedToGroup (3), 
    ...
  } 

  CallType ::= ENUMERATED
  { 
    parkedCall (0), 
    alertingCall (1), 
    ...
  } 

  CallPickupErrors ::= ENUMERATED
  {
    callPickupIdInvalid(2000),
    callAlreadyPickedUp(2001),
    undefined(2002)
  }

END -- of Call-Park-Pickup-Operations
