class WebSocket::Handshake::Handler::Server76
Public Instance Methods
valid?()
click to toggle source
@see WebSocket::Handshake::Base#valid?
Calls superclass method
WebSocket::Handshake::Handler::Base#valid?
# File lib/websocket/handshake/handler/server76.rb, line 9 def valid? super && !!finishing_line end
Private Instance Methods
challenge_response()
click to toggle source
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.leftovers sum = [first].pack('N*') + [second].pack('N*') + third Digest::MD5.digest(sum) end
finishing_line()
click to toggle source
@see WebSocket::Handshake::Handler::Base#finishing_line
# File lib/websocket/handshake/handler/server76.rb, line 36 def finishing_line @finishing_line ||= challenge_response end
handshake_keys()
click to toggle source
@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
header_line()
click to toggle source
@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
numbers_over_spaces(string)
click to toggle source
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
reserved_leftover_lines()
click to toggle source
@see WebSocket::Handshake::Base#reserved_leftover_lines
# File lib/websocket/handshake/handler/server76.rb, line 16 def reserved_leftover_lines 1 end