class WebSocket::Driver::Client

def validate_handshake

def validate_handshake
  @status  = @http.code
  @headers = Headers.new(@http.headers)
  unless @http.code == 101
    return fail_handshake("Unexpected response code: #{ @http.code }")
  end
  upgrade    = @http['Upgrade'] || ''
  connection = @http['Connection'] || ''
  accept     = @http['Sec-WebSocket-Accept'] || ''
  protocol   = @http['Sec-WebSocket-Protocol'] || ''
  if upgrade == ''
    return fail_handshake("'Upgrade' header is missing")
  elsif upgrade.downcase != 'websocket'
    return fail_handshake("'Upgrade' header value is not 'WebSocket'")
  end
  if connection == ''
    return fail_handshake("'Connection' header is missing")
  elsif connection.downcase != 'upgrade'
    return fail_handshake("'Connection' header value is not 'Upgrade'")
  end
  unless accept == @accept
    return fail_handshake('Sec-WebSocket-Accept mismatch')
  end
  unless protocol == ''
    if @protocols.include?(protocol)
      @protocol = protocol
    else
      return fail_handshake('Sec-WebSocket-Protocol mismatch')
    end
  end
  begin
    @extensions.activate(@headers['Sec-WebSocket-Extensions'])
  rescue ::WebSocket::Extensions::ExtensionError => error
    return fail_handshake(error.message)
  end
end