@see WebSocket::Handshake::Base#valid?
# File lib/websocket/handshake/handler/client76.rb, line 9 def valid? super && verify_challenge end
Expected challenge that should be sent by server @return [String] challenge
# File lib/websocket/handshake/handler/client76.rb, line 53 def challenge return @challenge if defined?(@challenge) key1 && key2 sum = [@key1_number].pack("N*") + [@key2_number].pack("N*") + key3 @challenge = Digest::MD5.digest(sum) end
@see WebSocket::Handshake::Handler::Base#finishing_line
# File lib/websocket/handshake/handler/client76.rb, line 29 def finishing_line key3 end
Generate Sec-WebSocket-Key1 and Sec-WebSocket-Key2 @param [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 75 def generate_key(key) spaces = 1 + rand(12) max = 0xffffffff / spaces number = rand(max + 1) instance_variable_set("@#{key}_number", number) key = (number * spaces).to_s (1 + rand(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 return key end
Generate third key
# File lib/websocket/handshake/handler/client76.rb, line 94 def generate_key3 [rand(0x100000000)].pack("N") + [rand(0x100000000)].pack("N") end
@see WebSocket::Handshake::Handler::Base#handshake_keys
# File lib/websocket/handshake/handler/client76.rb, line 21 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 35 def key1 @key1 ||= generate_key(:key1) end
Sec-WebSocket-Key2 value @return [String] key
# File lib/websocket/handshake/handler/client76.rb, line 41 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 47 def key3 @key3 ||= generate_key3 end
@see WebSocket::Handshake::Base#reserved_leftover_lines
# File lib/websocket/handshake/handler/client76.rb, line 16 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 65 def verify_challenge raise WebSocket::Error::Handshake::InvalidAuthentication unless @handshake.instance_variable_get('@leftovers') == challenge true end