class PermessageDeflate::ServerSession
Public Class Methods
new(options, params)
click to toggle source
Calls superclass method
# File lib/permessage_deflate/server_session.rb, line 14 def initialize(options, params) super(options) @params = params end
valid_params?(params)
click to toggle source
Calls superclass method
# File lib/permessage_deflate/server_session.rb, line 4 def self.valid_params?(params) return false unless super if params.has_key?('client_max_window_bits') return false unless ([true] + VALID_WINDOW_BITS).include?(params['client_max_window_bits']) end true end
Public Instance Methods
generate_response()
click to toggle source
# File lib/permessage_deflate/server_session.rb, line 19 def generate_response response = {} # https://tools.ietf.org/html/rfc7692#section-7.1.1.1 @own_context_takeover = !@accept_no_context_takeover && !@params['server_no_context_takeover'] response['server_no_context_takeover'] = true unless @own_context_takeover # https://tools.ietf.org/html/rfc7692#section-7.1.1.2 @peer_context_takeover = !@request_no_context_takeover && !@params['client_no_context_takeover'] response['client_no_context_takeover'] = true unless @peer_context_takeover # https://tools.ietf.org/html/rfc7692#section-7.1.2.1 @own_window_bits = [ @accept_max_window_bits || MAX_WINDOW_BITS, @params['server_max_window_bits'] || MAX_WINDOW_BITS ].min # In violation of the spec, Firefox closes the connection if it does not # send server_max_window_bits but the server includes this in its response if @own_window_bits < MAX_WINDOW_BITS and @params['server_max_window_bits'] response['server_max_window_bits'] = @own_window_bits end # https://tools.ietf.org/html/rfc7692#section-7.1.2.2 if client_max = @params['client_max_window_bits'] client_max = MAX_WINDOW_BITS if client_max == true @peer_window_bits = [@request_max_window_bits || MAX_WINDOW_BITS, client_max].min else @peer_window_bits = MAX_WINDOW_BITS end if @peer_window_bits < MAX_WINDOW_BITS response['client_max_window_bits'] = @peer_window_bits end response end