1.3.2.2 Data Transfer Sequences

The data transfer sequences have the goal of transferring audio data from the server to the client. Two different protocols exist for the data transfer sequences: one protocol transfers over virtual channels, and another transfers over UDP.

The data transfer sequence over virtual channels has a very simple protocol. If the client version or server version is less than 8, the server sends two consecutive packets of audio data: a WaveInfo PDU (section 2.2.3.3) and a Wave PDU (section 2.2.3.4). Upon consuming the audio data, the client sends back a Wave Confirm PDU (section 2.2.3.8) to the server to notify the server that it has consumed the audio data. Consuming the audio data means it was processed, canceled, or dropped by the client. See section 3.2.5.2.1.6 for details of how the wTimeStamp field of the Wave Confirm PDU is set.

Data transfer sequence over virtual channels using WaveInfo PDU and Wave PDU

Figure 3: Data transfer sequence over virtual channels using WaveInfo PDU and Wave PDU

If the client and server versions are both at least 8, the server sends Wave2 PDU (section 2.2.3.10). On consuming the audio data, the client sends back a Wave Confirm PDU (section 2.2.3.8) to the server to notify the server that it has consumed the audio data.

Data transfer sequence over virtual channels using Wave2 PDU

Figure 4: Data transfer sequence over virtual channels using Wave2 PDU

The protocol for the data transfer sequence over UDP is a little more involved. Similar to the protocol over virtual channels, the server sends a chunk of audio data to the client. When the client finishes consuming the audio data, the client sends back a Wave Confirm PDU to the server. The difference with the protocol used over virtual channels is how the server sends the audio data.

If either the client or server version is less than 5, the server sends audio data using a Wave Encrypt PDU (section 2.2.3.5). Upon consumption of the audio data, the client sends a Wave Confirm PDU to the server.

Data transfer sequence over UDP

Figure 5: Data transfer sequence over UDP

If the client and server versions are both at least 5, another method can be used to send audio data over UDP. This method involves the server sending the audio data in successive PDUs. All PDUs (except for the final one) are UDP Wave PDUs (section 2.2.3.6). The final PDU is a UDP Wave Last PDU (section 2.2.3.7). Given these PDUs, the client reconstructs the audio data sample. Upon consumption of audio data, the client sends a Wave Confirm PDU to the server.

Data transfer sequence over UDP when protocol version is at least 5

Figure 6: Data transfer sequence over UDP when protocol version is at least 5

During the initialization sequence (section 1.3.2.1), the server uses the Crypt Key PDU (section 2.2.2.4) to send a 32-byte private key over a virtual channel to the client. Some audio data is encrypted using this key.

At the end of the audio data transfer, the server notifies the client by sending a Close PDU (section 2.2.3.9) over a virtual channel.