- Main Page
- Classes
- Files

- File List

# include/pion/spdy/decompressor.hpp

    00001 // ---------------------------------------------------------------------
    00002 // pion:  a Boost C++ framework for building lightweight HTTP interfaces
    00003 // ---------------------------------------------------------------------
    00004 // Copyright (C) 2007-2014 Splunk Inc.  (https://github.com/splunk/pion)
    00005 //
    00006 // Distributed under the Boost Software License, Version 1.0.
    00007 // See http://www.boost.org/LICENSE_1_0.txt
    00008 //
    00009
    00010 #ifndef __PION_SPDYDECOMPRESSOR_HEADER__
    00011 #define __PION_SPDYDECOMPRESSOR_HEADER__
    00012
    00013
    00014 #include <boost/noncopyable.hpp>
    00015 #include <boost/shared_ptr.hpp>
    00016 #include <pion/config.hpp>
    00017 #include <pion/spdy/types.hpp>
    00018 #include <zlib.h>
    00019
    00020
    00021 namespace pion {    // begin namespace pion
    00022 namespace spdy {    // begin namespace spdy
    00023
    00024
    00028
    00029 class PION_API decompressor
    00030 {
    00031 public:
    00032
    00034     enum data_size_t {
    00036         MAX_UNCOMPRESSED_DATA_BUF_SIZE = 16384
    00037     };
    00038
    00040     decompressor();
    00041
    00043     ~decompressor();
    00044
    00050     char* decompress(const char *compressed_data_ptr,
    00051                      boost::uint32_t stream_id,
    00052                      const spdy_control_frame_info& frame,
    00053                      boost::uint32_t header_block_length);
    00054
    00055
    00056 protected:
    00057
    00063     bool spdy_decompress_header(const char *compressed_data_ptr,
    00064                                 z_streamp decomp,
    00065                                 boost::uint32_t length,
    00066                                 boost::uint32_t& uncomp_length);
    00067
    00068
    00069 private:
    00070
    00072     z_streamp                           m_request_zstream;
    00073
    00075     z_streamp                           m_response_zstream;
    00076
    00078     boost::uint32_t                     m_dictionary_id;
    00079
    00081     boost::uint8_t                      m_uncompressed_header[MAX_UNCOMPRESSED_DATA_BUF_SIZE];
    00082
    00083     // SPDY Dictionary used for zlib decompression
    00084     static const char                   SPDY_ZLIB_DICTIONARY[];
    00085 };
    00086
    00088 typedef boost::shared_ptr<decompressor>       decompressor_ptr;
    00089
    00090 }   // end namespace spdy
    00091 }   // end namespace pion
    00092
    00093 #endif
    00094