Module: EventMachine::WebSocket::Handshake76

Included in:
Handler03, Handler76
Defined in:
lib/em-websocket/handshake76.rb

Instance Method Summary collapse

Instance Method Details

#handshakeObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/em-websocket/handshake76.rb', line 6

def handshake
  challenge_response = solve_challenge(
    request['sec-websocket-key1'],
    request['sec-websocket-key2'],
    request['third-key']
  )

  location  = "#{request['host'].scheme}://#{request['host'].host}"
  location << ":#{request['host'].port}" if request['host'].port
  location << request['path']

  upgrade =  "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
  upgrade << "Upgrade: WebSocket\r\n"
  upgrade << "Connection: Upgrade\r\n"
  upgrade << "Sec-WebSocket-Location: #{location}\r\n"
  upgrade << "Sec-WebSocket-Origin: #{request['origin']}\r\n"
  if protocol = request['sec-websocket-protocol']
    validate_protocol!(protocol)
    upgrade << "Sec-WebSocket-Protocol: #{protocol}\r\n"
  end
  upgrade << "\r\n"
  upgrade << challenge_response

  debug [:upgrade_headers, upgrade]

  return upgrade
end