3 Protocol Details

The following sections specify details of the Remote Assistance Protocol, including basic Remote Assistance connection establishment, session initialization, file transfer, chat, share control, and voice abstract data models and message processing rules.

There are three versions of the Remote Assistance protocol as described in section 1.7.

  • Version 1

  • Version 2<1>

  • Version 3<2>

Implementations MUST support version 1 functionality. Implementations MAY<3> also support version 2 functionality along with version 1. Implementations SHOULD<4> support the functionality of version 1, 2, and 3.

The following table shows the protocol version negotiated based on the highest version supported by the expert and novice. The highest version that is supported by both the expert and novice is chosen.

Implementations

Expert—version 1 only

Expert—versions 1 and 2

Expert—versions 1, 2, and 3

Novice–version 1 only

Protocol is version 1.

Expert uses version 1 based on Remote Assistance Connection String 1.Novice always uses version 1.

Expert uses version 1 based on Remote Assistance Connection String 1.Novice always uses version 1.

Novice—versions 1 and 2

Expert always uses version 1. Novice uses version 1 after receiving REMOTEDESKTOP_CTL_VERSIONINFO from the expert.

Expert uses version 2 based on Remote Assistance Connection String 2.Novice uses version 2 after receiving the REMOTEDESKTOP_EXPERT_ON_VISTA packet from the expert.

Expert uses version 2 based on Remote Assistance Connection String 2. Novice uses version 2 after receiving the REMOTEDESKTOP_EXPERT_ON_VISTA packet from the expert.

Novice—version 1, version 2, and version 3

Expert always uses version 1.Novice uses version 1 after receiving REMOTEDESKTOP_CTL_VERSIONINFO from the expert.

Expert uses version 2 based on Remote Assistance Connection String 2.Novice uses version 2 after receiving the REMOTEDESKTOP_EXPERT_ON_VISTA packet from the expert.

Expert uses version 2 based on Remote Assistance Connection String 2. Novice uses version 2 after receiving the REMOTEDESKTOP_EXPERT_ON_VISTA packet from the expert. When the novice initiates using Remote Assistance Initiation over PNRP protocol, the expert and novice always use version 3.

The novice and expert implementations determine the version of the protocol that will be used based on the version(s) supported, the initiation method, and the version message as follows.

Novice determination of the protocol version:

A novice implementing version 1 only MUST use version 1 of the protocol.

A novice implementing version 1 and 2 MUST determine the version of protocol to use based on the Remote Assistance initiation method used and the version message it receives from expert after the Remote Assistance Connection is established:

  1. Version 2 of the protocol is used if the novice receives REMOTEDESKTOP_EXPERT_ON_VISTA packet from the expert during session initialization.

  2. Version 1 of the protocol is used if the novice receives REMOTEDESKTOP_CTL_VERSIONINFO from the expert during session initialization.

A novice implementing version 1, 2, and 3 MUST determine the version of the protocol to use based on the Remote Assistance initiation method used and the version message it receives from the expert:

  1. Version 3 of the protocol MUST be used, if the novice initiated the Remote Assistance using the Remote Assistance Initiation over PNRP protocol.

  2. Version 2 of the protocol is used if the novice receives REMOTEDESKTOP_EXPERT_ON_VISTA packet from the expert during session initialization.

  3. Version 1 of the protocol is used if the novice receives REMOTEDESKTOP_CTL_VERSIONINFO from the expert during session initialization.

Expert determination of protocol version:

An expert implementing version 1 only MUST use version 1 of the protocol.

An expert implementing version 1 and 2 MUST determine the version of protocol to use based on how it obtained the Remote Assistance Connection String:

  1. Version 1 of the protocol MUST be used, if any of the following conditions apply:

    1. Expert obtains the Remote Assistance Connection string 1 during the Remote Assistance initiation using the IPCHService (see [MS-RAI] section 3.2).

    2. Expert obtains the Remote Assistance Connection String 1 using the Remote Assistance Invitation File Format of the first type (see [MS-RAI] section 6).

  2. Version 2 of the protocol MUST be used, if any of the following conditions apply:

    1. Expert obtains the Remote Assistance Connection String 2 during the Remote Assistance initiation using IRASrv (see [MS-RAI] section 3.4).

    2. Expert obtains the Remote Assistance Connection String 2 using the Remote Assistance Invitation File Format of the second type (see [MS-RAI] section 6).

An expert implementing version 1, 2, and 3 MUST determine the version of protocol to use based on how it obtained the Remote Assistance Connection String.

  1. Version 3 MUST be used, if the Remote Assistance connection was initiated using the Remote Assistance Initiation over PNRP protocol.

  2. Version 1 of the protocol MUST be used, if any of the following conditions apply:

    1. Expert obtains the Remote Assistance Connection String 1 during Remote Assistance initiation using IPCHService (see [MS-RAI] section 3.2).

    2. Expert obtains the Remote Assistance Connection String 1 using Remote Assistance Invitation File Format of the first type (see [MS-RAI] section 6).

  3. Version 2 of the protocol MUST be used, if any of the following conditions apply:

    1. Expert obtains the Remote Assistance Connection String 2 during the Remote Assistance initiation using IRASrv (see [MS-RAI] section 3.4).

    2. Expert obtains the Remote Assistance Connection String 2 using the Remote Assistance Invitation File Format of the second type (see [MS-RAI] section 6).

Once the novice and expert determine the version of the protocol to use, it cannot be changed for the rest of the Remote Assistance Connection. Also, when a novice or an expert receives a message from a version it does not implement, the message MUST be dropped without returning any error code.

Show: