class WebSocket::Handshake::Handler::Server76
def challenge_response
-
(String)
- Challenge response or nil if error occured
def challenge_response # Refer to 5.2 4-9 of the draft 76 first = numbers_over_spaces(@handshake.headers['sec-websocket-key1'].to_s) second = numbers_over_spaces(@handshake.headers['sec-websocket-key2'].to_s) third = @handshake.leftovers sum = [first].pack('N*') + [second].pack('N*') + third Digest::MD5.digest(sum) end
def finishing_line
- See: WebSocket::Handshake::Handler::Base#finishing_line -
def finishing_line @finishing_line ||= challenge_response end
def header_line
- See: WebSocket::Handshake::Handler::Base#header_line -
def header_line 'HTTP/1.1 101 WebSocket Protocol Handshake' end
def headers
def headers { origin: 'Sec-WebSocket-Origin', location: 'Sec-WebSocket-Location', protocol: 'Sec-WebSocket-Protocol' }.freeze end
def numbers_over_spaces(string)
-
(Integer)
- Result of calculations or nil if error occured
Parameters:
-
string
(String
) -- Key to parse
def numbers_over_spaces(string) numbers = string.scan(/[0-9]/).join.to_i spaces = string.scan(/ /).size # As per 5.2.5, abort the connection if spaces are zero. raise WebSocket::Error::Handshake::InvalidAuthentication if spaces.zero? # As per 5.2.6, abort if numbers is not an integral multiple of spaces raise WebSocket::Error::Handshake::InvalidAuthentication if numbers % spaces != 0 quotient = numbers / spaces raise WebSocket::Error::Handshake::InvalidAuthentication if quotient > 2**32 - 1 quotient end
def reserved_leftover_lines
- See: WebSocket::Handshake::Base#reserved_leftover_lines -
def reserved_leftover_lines 1 end
def valid?
- See: WebSocket::Handshake::Base#valid? -
def valid? super && !finishing_line.nil? end