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