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 10 def valid? super && !finishing_line.nil? 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 41 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 35 def finishing_line @finishing_line ||= challenge_response end
header_line()
click to toggle source
@see WebSocket::Handshake::Handler::Base#header_line
# File lib/websocket/handshake/handler/server76.rb, line 30 def header_line 'HTTP/1.1 101 WebSocket Protocol Handshake' end
headers()
click to toggle source
# File lib/websocket/handshake/handler/server76.rb, line 16 def headers { origin: 'Sec-WebSocket-Origin', location: 'Sec-WebSocket-Location', protocol: 'Sec-WebSocket-Protocol' }.freeze 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 56 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
reserved_leftover_lines()
click to toggle source
@see WebSocket::Handshake::Base#reserved_leftover_lines
# File lib/websocket/handshake/handler/server76.rb, line 25 def reserved_leftover_lines 1 end