| Index: net/filter/gzip_filter.h
|
| diff --git a/net/filter/gzip_filter.h b/net/filter/gzip_filter.h
|
| deleted file mode 100644
|
| index c0d80b6859371fdca841def29bf4602de00f8138..0000000000000000000000000000000000000000
|
| --- a/net/filter/gzip_filter.h
|
| +++ /dev/null
|
| @@ -1,151 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// GZipFilter applies gzip and deflate content encoding/decoding to a data
|
| -// stream. As specified by HTTP 1.1, with gzip encoding the content is
|
| -// wrapped with a gzip header, and with deflate encoding the content is in
|
| -// a raw, headerless DEFLATE stream.
|
| -//
|
| -// Internally GZipFilter uses zlib inflate to do decoding.
|
| -//
|
| -// GZipFilter is a subclass of Filter. See the latter's header file filter.h
|
| -// for sample usage.
|
| -
|
| -#ifndef NET_FILTER_GZIP_FILTER_H_
|
| -#define NET_FILTER_GZIP_FILTER_H_
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/macros.h"
|
| -#include "net/filter/filter.h"
|
| -
|
| -typedef struct z_stream_s z_stream;
|
| -
|
| -namespace net {
|
| -
|
| -class GZipHeader;
|
| -
|
| -class GZipFilter : public Filter {
|
| - public:
|
| - ~GZipFilter() override;
|
| -
|
| - // Initializes filter decoding mode and internal control blocks.
|
| - // Parameter filter_type specifies the type of filter, which corresponds to
|
| - // either gzip or deflate decoding. The function returns true if success and
|
| - // false otherwise.
|
| - // The filter can only be initialized once.
|
| - bool InitDecoding(Filter::FilterType filter_type);
|
| -
|
| - // Decodes the pre-filter data and writes the output into the dest_buffer
|
| - // passed in.
|
| - // The function returns FilterStatus. See filter.h for its description.
|
| - //
|
| - // Upon entry, *dest_len is the total size (in number of chars) of the
|
| - // destination buffer. Upon exit, *dest_len is the actual number of chars
|
| - // written into the destination buffer.
|
| - //
|
| - // This function will fail if there is no pre-filter data in the
|
| - // stream_buffer_. On the other hand, *dest_len can be 0 upon successful
|
| - // return. For example, the internal zlib may process some pre-filter data
|
| - // but not produce output yet.
|
| - FilterStatus ReadFilteredData(char* dest_buffer, int* dest_len) override;
|
| -
|
| - private:
|
| - enum DecodingStatus {
|
| - DECODING_UNINITIALIZED,
|
| - DECODING_IN_PROGRESS,
|
| - DECODING_DONE,
|
| - DECODING_ERROR
|
| - };
|
| -
|
| - enum DecodingMode {
|
| - DECODE_MODE_GZIP,
|
| - DECODE_MODE_DEFLATE,
|
| - DECODE_MODE_UNKNOWN
|
| - };
|
| -
|
| - enum GZipCheckHeaderState {
|
| - GZIP_CHECK_HEADER_IN_PROGRESS,
|
| - GZIP_GET_COMPLETE_HEADER,
|
| - GZIP_GET_INVALID_HEADER
|
| - };
|
| -
|
| - static const int kGZipFooterSize = 8;
|
| -
|
| - // Only to be instantiated by Filter::Factory.
|
| - explicit GZipFilter(FilterType type);
|
| - friend class Filter;
|
| -
|
| - // Parses and verifies the GZip header.
|
| - // Upon exit, the function updates gzip_header_status_ accordingly.
|
| - //
|
| - // The function returns Filter::FILTER_OK if it gets a complete header and
|
| - // there are more data in the pre-filter buffer.
|
| - // The function returns Filter::FILTER_NEED_MORE_DATA if it parses all data
|
| - // in the pre-filter buffer, either getting a complete header or a partial
|
| - // header. The caller needs to check gzip_header_status_ and call this
|
| - // function again for partial header.
|
| - // The function returns Filter::FILTER_ERROR if error occurs.
|
| - FilterStatus CheckGZipHeader();
|
| -
|
| - // Internal function to decode the pre-filter data and writes the output into
|
| - // the dest_buffer passed in.
|
| - //
|
| - // This is the internal version of ReadFilteredData. See the latter's
|
| - // comments for the use of function.
|
| - FilterStatus DoInflate(char* dest_buffer, int* dest_len);
|
| -
|
| - // Inserts a zlib header to the data stream before calling zlib inflate.
|
| - // This is used to work around server bugs. See more comments at the place
|
| - // it is called in gzip_filter.cc.
|
| - // The function returns true on success and false otherwise.
|
| - bool InsertZlibHeader();
|
| -
|
| - // Skip the 8 byte GZip footer after z_stream_end
|
| - void SkipGZipFooter();
|
| -
|
| - // Tracks the status of decoding.
|
| - // This variable is initialized by InitDecoding and updated only by
|
| - // ReadFilteredData.
|
| - DecodingStatus decoding_status_;
|
| -
|
| - // Indicates the type of content decoding the GZipFilter is performing.
|
| - // This variable is set only once by InitDecoding.
|
| - DecodingMode decoding_mode_;
|
| -
|
| - // Used to parse the gzip header in gzip stream.
|
| - // It is used when the decoding_mode_ is DECODE_MODE_GZIP.
|
| - std::unique_ptr<GZipHeader> gzip_header_;
|
| -
|
| - // Tracks the progress of parsing gzip header.
|
| - // This variable is maintained by gzip_header_.
|
| - GZipCheckHeaderState gzip_header_status_;
|
| -
|
| - // A flag used by InsertZlibHeader to record whether we've successfully added
|
| - // a zlib header to this stream.
|
| - bool zlib_header_added_;
|
| -
|
| - // Tracks how many bytes of gzip footer have been received.
|
| - int gzip_footer_bytes_;
|
| -
|
| - // The control block of zlib which actually does the decoding.
|
| - // This data structure is initialized by InitDecoding and updated only by
|
| - // DoInflate, with InsertZlibHeader being the exception as a workaround.
|
| - std::unique_ptr<z_stream> zlib_stream_;
|
| -
|
| - // For robustness, when we see the solo sdch filter, we chain in a gzip filter
|
| - // in front of it, with this flag to indicate that the gzip decoding might not
|
| - // be needed. This handles a strange case where "Content-Encoding: sdch,gzip"
|
| - // is reduced by an errant proxy to "Content-Encoding: sdch", while the
|
| - // content is indeed really gzipped result of sdch :-/.
|
| - // If this flag is set, then we will revert to being a pass through filter if
|
| - // we don't get a valid gzip header.
|
| - bool possible_sdch_pass_through_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(GZipFilter);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_FILTER_GZIP_FILTER_H__
|
|
|