class PermessageDeflate::Session
Constants
- MAX_WINDOW_BITS
- MIN_WINDOW_BITS
- VALID_PARAMS
- VALID_WINDOW_BITS
Public Class Methods
new(options)
click to toggle source
# File lib/permessage_deflate/session.rb, line 34 def initialize(options) @level = options.fetch(:level, Zlib::DEFAULT_COMPRESSION) @mem_level = options.fetch(:mem_level, Zlib::DEF_MEM_LEVEL) @strategy = options.fetch(:strategy, Zlib::DEFAULT_STRATEGY) @accept_no_context_takeover = options.fetch(:no_context_takeover, false) @accept_max_window_bits = options.fetch(:max_window_bits, nil) @request_no_context_takeover = options.fetch(:request_no_context_takeover, false) @request_max_window_bits = options.fetch(:request_max_window_bits, nil) @deflate = @inflate = nil end
valid_params?(params)
click to toggle source
# File lib/permessage_deflate/session.rb, line 15 def self.valid_params?(params) return false unless params.keys.all? { |k| VALID_PARAMS.include?(k) } return false if params.values.grep(Array).any? if params.has_key?('server_no_context_takeover') return false unless params['server_no_context_takeover'] == true end if params.has_key?('client_no_context_takeover') return false unless params['client_no_context_takeover'] == true end if params.has_key?('server_max_window_bits') return false unless VALID_WINDOW_BITS.include?(params['server_max_window_bits']) end true end
Public Instance Methods
close()
click to toggle source
# File lib/permessage_deflate/session.rb, line 69 def close free(@inflate) @inflate = nil free(@deflate) @deflate = nil end
process_incoming_message(message)
click to toggle source
# File lib/permessage_deflate/session.rb, line 47 def process_incoming_message(message) return message unless message.rsv1 inflate = get_inflate message.data = inflate.inflate(message.data) + inflate.inflate([0x00, 0x00, 0xff, 0xff].pack('C*')) free(inflate) unless @inflate message end
process_outgoing_message(message)
click to toggle source
# File lib/permessage_deflate/session.rb, line 59 def process_outgoing_message(message) deflate = get_deflate message.data = deflate.deflate(message.data, Zlib::SYNC_FLUSH)[0...-4] message.rsv1 = true free(deflate) unless @deflate message end
Private Instance Methods
free(codec)
click to toggle source
# File lib/permessage_deflate/session.rb, line 79 def free(codec) return if codec.nil? codec.finish rescue nil codec.close end
get_deflate()
click to toggle source
# File lib/permessage_deflate/session.rb, line 95 def get_deflate return @deflate if @deflate window_bits = [@own_window_bits, MIN_WINDOW_BITS].max deflate = Zlib::Deflate.new(@level, -window_bits, @mem_level, @strategy) @deflate = deflate if @own_context_takeover deflate end
get_inflate()
click to toggle source
# File lib/permessage_deflate/session.rb, line 85 def get_inflate return @inflate if @inflate window_bits = [@peer_window_bits, MIN_WINDOW_BITS].max inflate = Zlib::Inflate.new(-window_bits) @inflate = inflate if @peer_context_takeover inflate end