3.1.1 Abstract Data Model

This section describes a conceptual model of possible data organization that an implementation maintains to participate in this protocol. The organization is provided to explain how the protocol behaves. This document does not mandate that implementations adhere to this model, as long as their external behavior is consistent with that described in this document.

ClientId: Although this field is negotiated in the Server Announce Request (section 2.2.2.2) message, the Client Announce Reply (section 2.2.2.3) message and the Server Client ID Confirm (section 2.2.2.6) message, the protocol never processes this field after the ID has been established.

DeviceId: A unique ID that is maintained by both the client and the server for each device within a session. This unique ID is generated by the client and sent to the server in the Device Announce Header (section 2.2.1.3). For subsequent operations on the devices, both the client and server use this ID to refer to the device.

FileId: A unique ID generated by the client and sent to the server in a Device Create Response (section 2.2.1.5.1). It is used in every packet in which a Device I/O Request (section 2.2.1.4) is a header. The ID is valid until a Device Close Response (section 2.2.1.5.2) is issued by the client.

CompletionId: For I/O request calls, the server generates this unique ID and sends it to the client in the Device I/O Request (section 2.2.1.4). The client and server use this ID, in addition to the DeviceId, to refer to the request in subsequent messages. When a request is sent to the client, the server adds it to a list of outstanding requests. When the client completes the request, or when the request is canceled from the server by issuing a Device Close Request (section 2.2.1.4.2), the server removes the entry for the request from the outstanding requests list. This ID is valid until a Device I/O Response (section 2.2.1.5) packet is sent from the client to the server. A response is matched to a request if both the CompletionId and the DeviceId fields are equal.

ResultCode: The server generates these status codes in a Server Device Announce Response (section 2.2.2.1) message. If the status code is not successful, the device is not redirected and I/O operations are not issued by the server on that device.

ComputerName: This field is sent by the client in a Client Name Request (section 2.2.2.4) message, but the ComputerName field does not participate in any protocol decision. Typically, this field is used for display purposes on the server.

Capabilities: The client and server store the capability packets that they receive. Based on the fields of the capability packets, some packets will not be supported, as specified in this protocol.