class WebSocket::Handshake::Handler::Client76
Constants
- NOISE_CHARS
Public Instance Methods
@see WebSocket::Handshake::Base#valid?
WebSocket::Handshake::Handler::Client75#valid?
# File lib/websocket/handshake/handler/client76.rb, line 10 def valid? super && verify_challenge && verify_protocol end
Private Instance Methods
Expected challenge that should be sent by server @return [String] challenge
# File lib/websocket/handshake/handler/client76.rb, line 54 def challenge return @challenge if defined?(@challenge) key1 && key2 sum = [@key1_number].pack('N*') + [@key2_number].pack('N*') + key3 @challenge = Digest::MD5.digest(sum).strip end
@see WebSocket::Handshake::Handler::Base#finishing_line
# File lib/websocket/handshake/handler/client76.rb, line 30 def finishing_line key3 end
Generate Sec-WebSocket-Key1 and Sec-WebSocket-Key2 @param key [String] name of key. Will be used to set number variable needed later. Valid values: key1, key2 @return [String] generated key
# File lib/websocket/handshake/handler/client76.rb, line 76 def generate_key(key) spaces = rand(1..12) max = 0xffffffff / spaces number = rand(max + 1) instance_variable_set("@#{key}_number", number) key = (number * spaces).to_s rand(1..12).times do char = NOISE_CHARS[rand(NOISE_CHARS.size)] pos = rand(key.size + 1) key[pos...pos] = char end spaces.times do pos = 1 + rand(key.size - 1) key[pos...pos] = ' ' end key end
Generate third key
# File lib/websocket/handshake/handler/client76.rb, line 95 def generate_key3 [rand(0x100000000)].pack('N') + [rand(0x100000000)].pack('N') end
@see WebSocket::Handshake::Handler::Base#handshake_keys
WebSocket::Handshake::Handler::Client75#handshake_keys
# File lib/websocket/handshake/handler/client76.rb, line 22 def handshake_keys keys = super keys << ['Sec-WebSocket-Key1', key1] keys << ['Sec-WebSocket-Key2', key2] keys end
Sec-WebSocket-Key1 value @return [String] key
# File lib/websocket/handshake/handler/client76.rb, line 36 def key1 @key1 ||= generate_key(:key1) end
Sec-WebSocket-Key2 value @return [String] key
# File lib/websocket/handshake/handler/client76.rb, line 42 def key2 @key2 ||= generate_key(:key2) end
Value of third key, sent in body @return [String] key
# File lib/websocket/handshake/handler/client76.rb, line 48 def key3 @key3 ||= generate_key3 end
# File lib/websocket/handshake/handler/client76.rb, line 99 def provided_protocols Array(@handshake.headers['sec-websocket-protocol'].to_s.strip) end
@see WebSocket::Handshake::Base#reserved_leftover_lines
# File lib/websocket/handshake/handler/client76.rb, line 17 def reserved_leftover_lines 1 end
Verify if challenge sent by server match generated one @return [Boolena] True if challenge matches, false otherwise(sets appropriate error)
# File lib/websocket/handshake/handler/client76.rb, line 66 def verify_challenge raise WebSocket::Error::Handshake::InvalidAuthentication unless @handshake.leftovers == challenge true end