class WebSocket::Handshake::Handler::Client76

Constants

NOISE_CHARS

Public Instance Methods

valid?() click to toggle source

@see WebSocket::Handshake::Base#valid?

# File lib/websocket/handshake/handler/client76.rb, line 8
def valid?
  super && verify_challenge
end

Private Instance Methods

challenge() click to toggle source

Expected challenge that should be sent by server @return [String] challenge

# File lib/websocket/handshake/handler/client76.rb, line 52
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
finishing_line() click to toggle source

@see WebSocket::Handshake::Handler::Base#finishing_line

# File lib/websocket/handshake/handler/client76.rb, line 28
def finishing_line
  key3
end
generate_key(key) click to toggle source

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 74
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
  key
end
generate_key3() click to toggle source

Generate third key

# File lib/websocket/handshake/handler/client76.rb, line 93
def generate_key3
  [rand(0x100000000)].pack('N') + [rand(0x100000000)].pack('N')
end
handshake_keys() click to toggle source

@see WebSocket::Handshake::Handler::Base#handshake_keys

# File lib/websocket/handshake/handler/client76.rb, line 20
def handshake_keys
  keys = super
  keys << ['Sec-WebSocket-Key1', key1]
  keys << ['Sec-WebSocket-Key2', key2]
  keys
end
key1() click to toggle source

Sec-WebSocket-Key1 value @return [String] key

# File lib/websocket/handshake/handler/client76.rb, line 34
def key1
  @key1 ||= generate_key(:key1)
end
key2() click to toggle source

Sec-WebSocket-Key2 value @return [String] key

# File lib/websocket/handshake/handler/client76.rb, line 40
def key2
  @key2 ||= generate_key(:key2)
end
key3() click to toggle source

Value of third key, sent in body @return [String] key

# File lib/websocket/handshake/handler/client76.rb, line 46
def key3
  @key3 ||= generate_key3
end
reserved_leftover_lines() click to toggle source

@see WebSocket::Handshake::Base#reserved_leftover_lines

# File lib/websocket/handshake/handler/client76.rb, line 15
def reserved_leftover_lines
  1
end
verify_challenge() click to toggle source

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 64
def verify_challenge
  fail WebSocket::Error::Handshake::InvalidAuthentication unless @handshake.leftovers == challenge
  true
end