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 described organization is provided to facilitate the explanation of how the protocol behaves. This specification does not mandate that implementations adhere to this model as long as their external behavior is consistent with that described in this document.

$P-Arrival-Time: This is an unsigned 64-bit integer number that stores the time at which a $P is received. Because this variable is used only for computing relative time differences, the absolute clock offset is of no consequence and can be chosen arbitrarily. The value of the variable is in units of one hundred nanoseconds. The minimum value is 0x0000000000000000. The maximum value is 0xFFFFFFFFFFFFFFFF. The default value is 0x0000000000000000.

$P-Packets-Expected: This is a numerical variable that stores the number of $P packets that are expected to be received. The allowed values for this variable are 0, 1, 2, and 3. The default value is 0.

Authentication-Schemes: This variable is a string that specifies the authentication schemes supported by the client, listed in order of preference. Each authentication scheme is identified as auth-scheme token (defined in [RFC1945] section 11), and multiple auth-scheme tokens are separated by commas. The default value of this variable is an empty string.

Client-ID: The value of this variable is an identifier assigned by the server for the current streaming "session". Because the client-ID value is provided by the server, the initial value is undefined.

Client-Initialization-Status: A flag that, if set to 1, indicates that the protocol has been initialized.  Otherwise, the protocol has not been initialized.  The initial value is 0.

Client-State: This variable stores the client's state. Possible values are INIT, STREAMING, and IDLE.

Client-Token: This variable stores the token used by the client on the User-Agent header. Three values are possible: "NSPlayer", "NSServer", and "WMCacheProxy".

Client-Token-Version: This variable stores the server major and minor version number provided by the higher layer.

Cookie-List: This variable stores the list of cookies received from the Set-Cookie header. The initial value of the list is empty. The Cookie-List SHOULD be persistent and SHOULD be shared with other instances of the Windows Media Streaming Protocol (WMSP) and RTSP extensions run by the same user on the same machine. This means that if a cookie is set for the URL rtsp://example.com/, and then a cookie with the same name is set for the URL http://example.com/, the second cookie overrides the first cookie because the two URLs are considered equivalent.

Expected-Packets: This variable specifies the packet types that the client is expecting to receive. The variable can be set to any combination of $C, $D, $E, $H, $M, $P, and $T. The variable can also be empty, meaning that no packets are expected. The variable can be implemented as an unordered list or as a bit mask that is seven bits wide with one bit for each packet type. By default this variable is empty.

Expected-Responses: This variable is an ordered list where each element specifies the type of message response that is expected. Elements are always added to the tail end of the list when a request is sent and removed from the head of the list when a response is received. The possible values for the individual elements are: Describe, GetContentInfo, KeepAlive, Log, pipeline, Play, PlayNextEntry, SelectStream, SendEvent, and Stop. The default value of this variable is an empty list.

Higher-Layer-ID: This variable is a numerical identifier that is assigned by the higher layer.  In case the higher layer is maintaining multiple instances of the client role, the higher layer can use this variable to determine which client role instance is invoking it, as long as the higher layer makes sure to assign a distinct Higher-Layer-ID value to each instance of the client role.  The initial value is undefined.

Keepalive-timeout: This variable stores the frequency at which the client will send KeepAlive requests (section 2.2.2.3). The default value is 60 seconds.

KeepAlive-Mode: This variable specifies if the protocol is in pipelined mode or non-pipelined mode.

Pipeline-Test-Allowed: A flag that, if set to 1, indicates that the server is willing to let the client test if the pipelined mode of the protocol can be used.

Playlist-gen-id: The value of this variable is an identifier assigned by the server to identify the current playlist entry. The default value is 0.

Server-features: This variable stores the capabilities that the server specified on the most recently received Supported header.

Server-Version: This variable stores the server product name (the value of server-token) and major and minor version number that the server specified on the most recently received Server header.

Note The preceding conceptual data can be implemented by using a variety of techniques. This protocol does not prescribe or advocate any specific implementation technique.