Class: Async::WebSocket::UpgradeResponse

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

Overview

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

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of UpgradeResponse.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/async/websocket/upgrade_response.rb', line 33

def initialize(request, headers = nil, protocol: nil, &block)
  headers = ::Protocol::HTTP::Headers[headers]
  
  if accept_nounce = request.headers[SEC_WEBSOCKET_KEY]&.first
    headers.add(SEC_WEBSOCKET_ACCEPT, Nounce.accept_digest(accept_nounce))
    status = 101
  else
    status = 400
  end
  
  if protocol
    headers.add(SEC_WEBSOCKET_PROTOCOL, protocol)
  end
  
  body = Async::HTTP::Body::Hijack.wrap(request, &block)
  super(request.version, status, headers, body, PROTOCOL)
end