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 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