2.1.2.1.8 Outbound PDU Stream
Outbound PDUs from the PDU stream MUST be encoded as BLOBs in the message body of the OUT channel. The first PDU in the OUT channel MUST start from the beginning of the message body of the OUT channel, and each subsequent PDU from the PDU stream MUST be placed as a BLOB immediately after the previous PDU in the OUT channel without any delimiters. The following diagram describes the layout of the PDUs in the message body of the OUT channel.
Figure 11: OUT channel message PDU stream
Each PDU encoded as a BLOB contains its length inside the PDU and thus no delimiters are necessary between the BLOBs. The length of the RPC PDUs is defined in RPC PDU Encodings [C706] section 12. The length of the RTS PDUs is defined in section 2.2.3.6.
An OUT channel contains a variable number of PDUs and the PDUs themselves might have variable sizes. An OUT channel MUST NOT contain more PDUs than can fit in its maximum content length as indicated by the Content-Length header. If there is not enough space on an OUT channel for another PDU from the PDU stream, the OUT channel is considered expired and MUST NOT be used by the server anymore. A successor OUT channel MUST be established. How the server manages the channel lifetime is specified in section 3.2.5.
The PDUs are sent in the message body as they are generated. PDU N MUST be sent as soon as it is generated and will not wait for PDU N+1 to be generated.
By using the message body of the OUT channel to transmit PDUs over HTTP/HTTPS, this protocol obtains a half-duplex channel for a limited number of bytes that provides reliable, in-order, at-most-once delivery semantics between a client and outbound proxy.