class HttpDecoders::GZip
Constants
- MAGIC_STRING
Public Class Methods
encoding_names()
click to toggle source
# File lib/http_decoders.rb, line 221 def self.encoding_names %w(gzip compressed) end
new()
click to toggle source
Calls superclass method
HttpDecoders::Base::new
# File lib/http_decoders.rb, line 225 def initialize super @buffer = nil end
Public Instance Methods
decompress(compressed)
click to toggle source
# File lib/http_decoders.rb, line 230 def decompress(compressed) compressed .force_encoding(Encoding::ASCII_8BIT) .each_line(MAGIC_STRING) .map { |chunk| decompress_chunk(chunk) } .join('') end
finalize()
click to toggle source
# File lib/http_decoders.rb, line 238 def finalize if @zstream if !@zstream.finished? r = @zstream.finish end @zstream.close r else nil end rescue Zlib::Error raise DecoderError end
Private Instance Methods
decompress_buffer()
click to toggle source
# File lib/http_decoders.rb, line 279 def decompress_buffer next_stream = find_stream(@buffer.join) if @buffer return unless next_stream @buffer = nil decompressed = finalize.to_s reset decompressed + decompress(next_stream) end
decompress_chunk(compressed)
click to toggle source
# File lib/http_decoders.rb, line 254 def decompress_chunk(compressed) @header ||= GZipHeader.new if !@header.finished? compressed = @header.extract_stream(compressed) end if @buffer @buffer << compressed decompress_buffer else @zstream ||= Zlib::Inflate.new(-Zlib::MAX_WBITS) decompressed = @zstream.inflate(compressed) # Gzip tailer with CRC32 and length is included after deflate stream. # Buffer input including magic byte if @header.finished? && @zstream.finished? @buffer = [] @buffer << MAGIC_STRING if compressed.end_with?(MAGIC_STRING) end decompressed.to_s end rescue Zlib::Error raise DecoderError end
find_stream(decompressed)
click to toggle source
# File lib/http_decoders.rb, line 289 def find_stream(decompressed) index = decompressed.force_encoding(Encoding::ASCII_8BIT).index(MAGIC_STRING) if index decompressed[index..-1] else nil end end
reset()
click to toggle source
# File lib/http_decoders.rb, line 298 def reset @header = nil @zstream = nil end