@see WebSocket::Handshake::Base#valid?
# File lib/websocket/handshake/handler/server76.rb, line 9 def valid? super && !!finishing_line end
Response to client challenge from request Sec-WebSocket-Key1, Sec-WebSocket-Key2 and leftovers @return [String] Challenge response or nil if error occured
# File lib/websocket/handshake/handler/server76.rb, line 44 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.instance_variable_get('@leftovers').strip sum = [first].pack("N*") + [second].pack("N*") + third Digest::MD5.digest(sum) end
@see WebSocket::Handshake::Handler::Base#finishing_line
# File lib/websocket/handshake/handler/server76.rb, line 36 def finishing_line @finishing_line ||= challenge_response end
@see WebSocket::Handshake::Handler::Base#handshake_keys
# File lib/websocket/handshake/handler/server76.rb, line 26 def handshake_keys [ ["Upgrade", "WebSocket"], ["Connection", "Upgrade"], ["Sec-WebSocket-Origin", @handshake.headers['origin']], ["Sec-WebSocket-Location", @handshake.uri] ] end
@see WebSocket::Handshake::Handler::Base#header_line
# File lib/websocket/handshake/handler/server76.rb, line 21 def header_line "HTTP/1.1 101 WebSocket Protocol Handshake" end
Calculate numbers over spaces, according to spec 5.2 @param [String] string Key to parse @return [Integer] Result of calculations or nil if error occured
# File lib/websocket/handshake/handler/server76.rb, line 59 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 == 0 # 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 return quotient end
@see WebSocket::Handshake::Base#reserved_leftover_lines
# File lib/websocket/handshake/handler/server76.rb, line 16 def reserved_leftover_lines 1 end