2.2.2.5 Pipeline (Request and Response)
The purpose of the Pipeline request is to determine whether the pipelined mode of operation of the protocol is possible.
If a client sends a Pipeline request, the first Pipeline request is sent after the first Describe request and before the first Play (section 2.2.2.6) request.
The Pipeline request is defined as an HTTP 1.1 GET request that satisfies the ABNF syntax for WMS-Pipeline-Request and satisfies all of the following conditions:
The GET request includes a Pragma header with the pipeline-request (section 2.2.1.4.16) token on a Pragma header.
The GET request does not include the xPlayNextEntry (section 2.2.1.4.35) token on a Pragma header.
The GET request does not include the xPlayStrm (section 2.2.1.4.36) token on a Pragma header.
The syntax of the response to the first Pipeline request MUST be in accordance with the ABNF syntax for WMS-Pipeline-Response-1 (defined later in this section) and satisfies all of the following conditions:
The response uses the HTTP 1.1 protocol, as specified in [RFC2616].
The response uses Chunked Transfer Coding, as specified in [RFC2616] section 3.6.1.
The syntax of the response to the second Pipeline request is defined as WMS-Pipeline-Response-2 (defined later in this section).
-
WMS-Pipeline-Request = WMS-Pipeline-Req-Line WMS-PipeReq-Headers CRLF WMS-Pipeline-Req-Line = "GET" SP Request-URI SP "HTTP/1.1" CRLF WMS-PipeReq-Headers = *( User-Agent ; section 2.2.1.8 / "Connection: keep-alive" CRLF / PipeReq-Pragma / HTTP-Header-Types ) PipeReq-Pragma = "Pragma: " #PipeReq-Token-REQ CRLF PipeReq-Token-REQ = client-id ; section 2.2.1.4.5 / no-cache ; section 2.2.1.4.12 / pipeline-request ; section 2.2.1.4.16 WMS-Pipeline-Response-1 = Status-Line WMS-PipeResp1-Headers CRLF WMS-PipeResp1-Body WMS-PipeResp1-Headers = *( PipeResp1-Header-REQ / PipeResp1-Header-OPT / PipeResp1-Pragma / HTTP-Header-Types ) PipeResp1-Header-REQ = Cache-Control ; section 2.2.1.1 / Server ; section 2.2.1.5 / "Transfer-Encoding: chunked" CRLF PipeResp1-Header-OPT = Supported ; section 2.2.1.7 / "Connection: keep-alive" CRLF PipeResp1-Pragma = "Pragma: " #PipeResp1-Pragma-Types CRLF PipeResp1-Pragma-Types = PipeResp1-Token-REQ / PipeResp1-Token-OPT PipeResp1-Token-REQ = client-id ; section 2.2.1.4.5 / no-cache ; section 2.2.1.4.12 PipeResp1-Token-OPT = timeout ; section 2.2.1.4.29 WMS-PipeResp1-Body = "4" CRLF "$T" %x00 %x00 CRLF
The syntax of the second Pipeline response is defined as follows.
-
WMS-Pipeline-Response-2 = "0" CRLF CRLF ( WMS-PipeResp2A / WMS-PipeResp2B ) CRLF WMS-PipeResp2A = "HTTP/1.1 204 No Content" CRLF WMS-PipeResp2A-Headers WMS-PipeResp2B = "HTTP/1.0 204 No Content" CRLF WMS-PipeResp2B-Headers WMS-PipeResp2A-Headers = *( PipeResp2-Header-REQ / PipeResp2-Header-OPT / PipeResp2A-Pragma / HTTP-Header-Types ) WMS-PipeResp2B-Headers = *( PipeResp2-Header-REQ / PipeResp2-Header-OPT / PipeResp2B-Pragma / HTTP-Header-Types ) PipeResp2-Header-REQ = Cache-Control ; section 2.2.1.1 / "Content-Length: 0" CRLF / Server ; section 2.2.1.5 PipeResp2-Header-OPT = Supported ; section 2.2.1.7 PipeResp2A-Pragma = "Pragma: " #PipeResp2A-Pragma-Types CRLF PipeResp2A-Pragma-Types = PipeResp2A-Token-REQ / PipeResp2-Token-OPT PipeResp2A-Token-REQ = client-id ; section 2.2.1.4.5 / no-cache ; section 2.2.1.4.12 / "pipeline-result=1" ; section 2.2.1.4.17 PipeResp2B-Pragma = "Pragma: " #PipeResp2B-Pragma-Types CRLF PipeResp2B-Pragma-Types = PipeResp2B-Token-REQ / PipeResp2-Token-OPT PipeResp2B-Token-REQ = client-id ; section 2.2.1.4.5 / no-cache ; section 2.2.1.4.12 / "pipeline-result=0" ; section 2.2.1.4.17 PipeResp2-Token-OPT = timeout ; section 2.2.1.4.29
The following example shows a Pipeline request.
-
GET /audio HTTP/1.1 Accept: */* User-Agent: NSPlayer/12.0.7680.0 Host: SampleServer Pragma: no-cache Pragma: pipeline-request=1 Pragma: client-id=297067864 Connection: keep-alive
The following example shows a Pipeline response.
-
HTTP/1.1 200 OK Server: Cougar/9.5.6001.18281 Date: Thu, 25 Feb 2010 15:06:06 GMT Pragma: no-cache, client-id=297067864, features="seekable", timeout=60000 Cache-Control: no-cache, x-wms-content-size=3923, max-age=86399, user-public, must-revalidate, proxy-public, proxy-revalidate Last-Modified: Fri, 05 Jan 2001 18:09:30 GMT Etag: "3923" Transfer-Encoding: chunked Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.predstrm, com.microsoft.wm.fastcache, com.microsoft.wm.startupprofile