2.2.2.1 PushSetup Request

The purpose of the PushSetup request is to request permission to start streaming Advanced Systems Format (ASF) data packets to the server.

The URL specified by the client in the HTTP request line of the POST request identifies the "publishing point". The concept of a publishing point is similar to that of a broadcast channel. A server might have multiple publishing points, and different publishing points can have different access permissions associated with them. For example, some publishing points require HTTP access authentication (as specified in [RFC2616] section 11). As another example, publishing points can also allow only clients that connect from a specific IP address.

The Windows Media HTTP Push Distribution Protocol allows for publishing points to be created by the PushSetup request. The optional Template-URL (section 2.2.2.1.1) syntax element in the message body of the POST request specifies the path to an existing publishing point on the server that is to be used as a template when creating the new publishing point.

The client can specify if the server can remove the publishing point after the streaming session has ended. This removal is performed by using the AutoDestroy (section 2.2.2.1.2) syntax element in the message body of the POST request.

A server that receives a POST request can identify it as a PushSetup request through the Content-Type (section 2.2.1.1) header. The media type specified on the Content-Type header MUST be "application/x-wms-pushsetup".

The syntax of the PushSetup request is defined as follows.

 WMS-PushSetup-Request    = WMS-PushSetup-Req-Line
                            WMS-PushSetReq-Headers 
                            CRLF
                            WMS-PushSetReq-Body 
   
 WMS-PushSetup-Req-Line   = "POST" SP Request-URI SP HTTP-Version CRLF
  
  
 WMS-PushSetReq-Headers= *( PushSetReq-Header-REQ
                            / PushSetReq-Header-OPT
                            / HTTP-Header-Types )
  
 PushSetReq-Header-REQ    = Content-Length ; section 14.13 of [RFC2616]
                            / Content-Type ; section 2.2.1.1
                            / Host         ; section 14.23 of [RFC2616]
                            / User-Agent   ; section 2.2.1.8
  
 PushSetReq-Header-OPT    = Authorization  ; [RFC2616] section 14.8
                            / Cache-Control; [RFC2616] section 14.9 
                            / Cookie       ; section 2.2.1.3
                            / Proxy-Authorization ; [RFC2616] section 14.34 
                            / X-Accept-Authentication ; section 2.2.1.9
  
 WMS-PushSetReq-Body      = [ *1Template-Url ; section 2.2.2.1.1
                              AutoDestroy ]  ; section 2.2.2.1.2

The syntax of the PushSetup response is defined as follows:

  
 WMS-PushSetup-Response  = Status-Line
                           WMS-PushSetResp-Headers
  
 WMS-PushSetResp-Headers = *( PushSetResp-Header-REQ
                            / PushSetResp-Header-OPT
                            / PushSetResp-Pragma
                            / HTTP-Header-Types )
  
 PushSetResp-Header-REQ  =  Cache-Control; section 2.2.1.1 of [MS-WMSP]
                            / Server     ; section 2.2.1.5
                            / Set-Cookie ; section 2.2.1.6
  
 PushSetResp-Header-OPT  =  Content-Length ; section 14.13 of [RFC2616]
                            / Location; [RFC2616] section 14.30
                            / Proxy-Authenticate ; [RFC2616] section 14.33
                            / Supported   ; section 2.2.1.7
                            / Via; [RFC2616] section 14.45
                            / WWW-Authenticate; [RFC2616] section 14.47
  
 PushSetResp-Pragma       = "Pragma: " #PushSetResp-Pragma-Types CRLF
  
 PushSetResp-Pragma-Types = PushSetResp-Token-REQ
                            / PushSetResp-Token-OPT
  
 PushSetResp-Token-REQ    = no-cache      ; section 2.2.1.4.1
  
 PushSetResp-Token-OPT    = timeout       ; section 2.2.1.4.2