decompress_body (::HTTPResponse)

    # File lib/rbot/core/utils/httputil.rb, line 78
        def decompress_body(str)
          method = self['content-encoding']
          case method
          when nil
            return str
          when /gzip/ # Matches gzip, x-gzip, and the non-rfc-compliant gzip;q=\d sent by some servers
            debug "gunzipping body"
            begin
              return Zlib::GzipReader.new(StringIO.new(str)).read
            rescue Zlib::Error => e
              # If we can't unpack the whole stream (e.g. because we're doing a
              # partial read
              debug "full gunzipping failed (#{e}), trying to recover as much as possible"
              ret = ""
              begin
                Zlib::GzipReader.new(StringIO.new(str)).each_byte { |byte|
                  ret << byte
                }
              rescue
              end
              return ret
            end
          when 'deflate'
            debug "inflating body"
            # From http://www.koders.com/ruby/fid927B4382397E5115AC0ABE21181AB5C1CBDD5C17.aspx?s=thread:
            # -MAX_WBITS stops zlib from looking for a zlib header
            inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS)
            begin
              return inflater.inflate(str)
            rescue Zlib::Error => e
              raise e
              # TODO
              # debug "full inflation failed (#{e}), trying to recover as much as possible"
            end
          when /^(?:iso-8859-\d+|windows-\d+|utf-8|utf8)$/i
            # B0rked servers (Freshmeat being one of them) sometimes return the charset
            # in the content-encoding; in this case we assume that the document has
            # a standarc content-encoding
            old_hsh = self.to_hash
            self['content-type']= self['content-type']+"; charset="+method.downcase
            warning "Charset vs content-encoding confusion, trying to recover: from\n#{old_hsh.pretty_inspect}to\n#{self.to_hash.pretty_inspect}"
            return str
          else
            debug self.to_hash
            raise "Unhandled content encoding #{method}"
          end
        end