Class: Async::WebSocket::ConnectResponse

Inherits:
Protocol::HTTP::Response
  • Object
show all
Includes:
Protocol::WebSocket::Headers
Defined in:
lib/async/websocket/connect_response.rb

Overview

The response from the server back to the client for negotiating HTTP/2 WebSockets.

Instance Method Summary collapse

Constructor Details

#initialize(request, headers = nil, protocol: nil, &block) ⇒ ConnectResponse

Returns a new instance of ConnectResponse.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/async/websocket/connect_response.rb', line 15

def initialize(request, headers = nil, protocol: nil, &block)
  headers = ::Protocol::HTTP::Headers[headers]
  
  if protocol
    headers.add(SEC_WEBSOCKET_PROTOCOL, protocol)
  end
  
  # For compatibility with HTTP/1 websockets proxied over HTTP/2, we process the accept nounce here:
  if accept_nounce = request.headers[SEC_WEBSOCKET_KEY]&.first
    headers.add(SEC_WEBSOCKET_ACCEPT, Nounce.accept_digest(accept_nounce))
  end
  
  body = Async::HTTP::Body::Hijack.wrap(request, &block)
  
  super(request.version, 200, headers, body)
end