diff --git a/CMakeLists.txt b/CMakeLists.txt index e78b8a9..23077e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -437,10 +437,14 @@ endif() if(WINDOWS_NATIVE) - set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/session_win32_file_storage.cpp) + if(NOT DISABLE_GZIP) + set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/session_win32_file_storage.cpp) + endif() set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/winservice.cpp) else() - set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/session_posix_file_storage.cpp) + if(NOT DISABLE_GZIP) + set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/session_posix_file_storage.cpp) + endif() set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/daemonize.cpp) endif() diff --git a/cppcms_boost.tar.bz2 b/cppcms_boost.tar.bz2 deleted file mode 100644 index aad3137..0000000 Binary files a/cppcms_boost.tar.bz2 and /dev/null differ diff --git a/cppcms_boost/src/gzip.cpp b/cppcms_boost/src/gzip.cpp deleted file mode 100644 index 0f4b42d..0000000 --- a/cppcms_boost/src/gzip.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com) -// (C) Copyright 2003-2007 Jonathan Turkanis -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) - -// See http://www.boost.org/libs/iostreams for documentation. - -// To configure Boost to work with libbz2, see the -// installation instructions here: -// http://boost.org/libs/iostreams/doc/index.html?path=7 - -// Define BOOST_IOSTREAMS_SOURCE so that -// knows that we are building the library (possibly exporting code), rather -// than using it (possibly importing code). -#define CPPCMS_BOOST_IOSTREAMS_SOURCE - -#include -#include - -namespace cppcms_boost { namespace iostreams { - -//------------------Implementation of gzip_header-----------------------------// - -namespace detail { - -void gzip_header::process(char c) -{ - uint8_t value = static_cast(c); - switch (state_) { - case s_id1: - if (value != gzip::magic::id1) - throw gzip_error(gzip::bad_header); - state_ = s_id2; - break; - case s_id2: - if (value != gzip::magic::id2) - throw gzip_error(gzip::bad_header); - state_ = s_cm; - break; - case s_cm: - if (value != gzip::method::deflate) - throw gzip_error(gzip::bad_method); - state_ = s_flg; - break; - case s_flg: - flags_ = value; - state_ = s_mtime; - break; - case s_mtime: - mtime_ += value << (offset_ * 8); - if (offset_ == 3) { - state_ = s_xfl; - offset_ = 0; - } else { - ++offset_; - } - break; - case s_xfl: - state_ = s_os; - break; - case s_os: - os_ = value; - if (flags_ & gzip::flags::extra) { - state_ = s_extra; - } else if (flags_ & gzip::flags::name) { - state_ = s_name; - } else if (flags_ & gzip::flags::comment) { - state_ = s_comment; - } else if (flags_ & gzip::flags::header_crc) { - state_ = s_hcrc; - } else { - state_ = s_done; - } - break; - case s_xlen: - xlen_ += value << (offset_ * 8); - if (offset_ == 1) { - state_ = s_extra; - offset_ = 0; - } else { - ++offset_; - } - break; - case s_extra: - if (--xlen_ == 0) { - if (flags_ & gzip::flags::name) { - state_ = s_name; - } else if (flags_ & gzip::flags::comment) { - state_ = s_comment; - } else if (flags_ & gzip::flags::header_crc) { - state_ = s_hcrc; - } else { - state_ = s_done; - } - } - break; - case s_name: - if (c != 0) { - file_name_ += c; - } else if (flags_ & gzip::flags::comment) { - state_ = s_comment; - } else if (flags_ & gzip::flags::header_crc) { - state_ = s_hcrc; - } else { - state_ = s_done; - } - break; - case s_comment: - if (c != 0) { - comment_ += c; - } else if (flags_ & gzip::flags::header_crc) { - state_ = s_hcrc; - } else { - state_ = s_done; - } - break; - case s_hcrc: - if (offset_ == 1) { - state_ = s_done; - offset_ = 0; - } else { - ++offset_; - } - break; - default: - assert(0); - } -} - -void gzip_header::reset() -{ - file_name_.clear(); - comment_.clear(); - os_ = flags_ = offset_ = xlen_ = 0; - mtime_ = 0; - state_ = s_id1; -} - -//------------------Implementation of gzip_footer-----------------------------// - -void gzip_footer::process(char c) -{ - uint8_t value = static_cast(c); - if (state_ == s_crc) { - crc_ += value << (offset_ * 8); - if (offset_ == 3) { - state_ = s_isize; - offset_ = 0; - } else { - ++offset_; - } - } else if (state_ == s_isize) { - isize_ += value << (offset_ * 8); - if (offset_ == 3) { - state_ = s_done; - offset_ = 0; - } else { - ++offset_; - } - } else { - assert(0); - } -} - -void gzip_footer::reset() -{ - crc_ = isize_ = offset_ = 0; - state_ = s_crc; -} - -} // End namespace boost::iostreams::detail. - -} } // End namespaces iostreams, boost. diff --git a/cppcms_boost/src/zlib.cpp b/cppcms_boost/src/zlib.cpp deleted file mode 100644 index 3979551..0000000 --- a/cppcms_boost/src/zlib.cpp +++ /dev/null @@ -1,191 +0,0 @@ -// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com) -// (C) Copyright 2003-2007 Jonathan Turkanis -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) - -// See http://www.boost.org/libs/iostreams for documentation. - -// To configure Boost to work with zlib, see the -// installation instructions here: -// http://boost.org/libs/iostreams/doc/index.html?path=7 - -// Define BOOST_IOSTREAMS_SOURCE so that -// knows that we are building the library (possibly exporting code), rather -// than using it (possibly importing code). -#define CPPCMS_BOOST_IOSTREAMS_SOURCE - -#include -#include -#include "zlib.h" // Jean-loup Gailly's and Mark Adler's "zlib.h" header. - // To configure Boost to work with zlib, see the - // installation instructions here: - // http://boost.org/libs/iostreams/doc/index.html?path=7 - -namespace cppcms_boost { namespace iostreams { - -namespace zlib { - - // Compression levels - -const int no_compression = Z_NO_COMPRESSION; -const int best_speed = Z_BEST_SPEED; -const int best_compression = Z_BEST_COMPRESSION; -const int default_compression = Z_DEFAULT_COMPRESSION; - - // Compression methods - -const int deflated = Z_DEFLATED; - - // Compression strategies - -const int default_strategy = Z_DEFAULT_STRATEGY; -const int filtered = Z_FILTERED; -const int huffman_only = Z_HUFFMAN_ONLY; - - // Status codes - -const int okay = Z_OK; -const int stream_end = Z_STREAM_END; -const int stream_error = Z_STREAM_ERROR; -const int version_error = Z_VERSION_ERROR; -const int data_error = Z_DATA_ERROR; -const int mem_error = Z_MEM_ERROR; -const int buf_error = Z_BUF_ERROR; - - // Flush codes - -const int finish = Z_FINISH; -const int no_flush = Z_NO_FLUSH; -const int sync_flush = Z_SYNC_FLUSH; - - // Code for current OS - -//const int os_code = OS_CODE; - -} // End namespace zlib. - -//------------------Implementation of zlib_error------------------------------// - -zlib_error::zlib_error(int error) - : CPPCMS_BOOST_IOSTREAMS_FAILURE("zlib error"), error_(error) - { } - -void zlib_error::check(int error) -{ - switch (error) { - case Z_OK: - case Z_STREAM_END: - //case Z_BUF_ERROR: - return; - case Z_MEM_ERROR: - throw std::bad_alloc(); - default: - throw zlib_error(error); - ; - } -} - -//------------------Implementation of zlib_base-------------------------------// - -namespace detail { - -zlib_base::zlib_base() - : stream_(new z_stream), calculate_crc_(false), crc_(0) - { } - -zlib_base::~zlib_base() { delete static_cast(stream_); } - -void zlib_base::before( const char*& src_begin, const char* src_end, - char*& dest_begin, char* dest_end ) -{ - z_stream* s = static_cast(stream_); - s->next_in = reinterpret_cast(const_cast(src_begin)); - s->avail_in = static_cast(src_end - src_begin); - s->next_out = reinterpret_cast(dest_begin); - s->avail_out= static_cast(dest_end - dest_begin); -} - -void zlib_base::after(const char*& src_begin, char*& dest_begin, bool compress) -{ - z_stream* s = static_cast(stream_); - char* next_in = reinterpret_cast(s->next_in); - char* next_out = reinterpret_cast(s->next_out); - if (calculate_crc_) { - const zlib::byte* buf = compress ? - reinterpret_cast(src_begin) : - reinterpret_cast( - const_cast(dest_begin) - ); - zlib::uint length = compress ? - static_cast(next_in - src_begin) : - static_cast(next_out - dest_begin); - if (length > 0) - crc_ = crc32(crc_, buf, length); - } - total_in_ = s->total_in; - total_out_ = s->total_out; - src_begin = const_cast(next_in); - dest_begin = next_out; -} - -int zlib_base::xdeflate(int flush) -{ - return ::deflate(static_cast(stream_), flush); -} - -int zlib_base::xinflate(int flush) -{ - return ::inflate(static_cast(stream_), flush); -} - -void zlib_base::reset(bool compress, bool realloc) -{ - z_stream* s = static_cast(stream_); - // Undiagnosed bug: - // deflateReset(), etc., return Z_DATA_ERROR - //zlib_error::check( - realloc ? - (compress ? deflateReset(s) : inflateReset(s)) : - (compress ? deflateEnd(s) : inflateEnd(s)) - ; - //); -} - -void zlib_base::do_init - ( const zlib_params& p, bool compress, - #if !CPPCMS_BOOST_WORKAROUND(CPPCMS_BOOST_MSVC, < 1300) - zlib::xalloc_func /* alloc */, zlib::xfree_func /* free*/, - #endif - void* derived ) -{ - calculate_crc_ = p.calculate_crc; - z_stream* s = static_cast(stream_); - - // Current interface for customizing memory management - // is non-conforming and has been disabled: - //#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) - // s->zalloc = alloc; - // s->zfree = free; - //#else - s->zalloc = 0; - s->zfree = 0; - //#endif - s->opaque = derived; - int window_bits = p.noheader? -p.window_bits : p.window_bits; - zlib_error::check( - compress ? - deflateInit2( s, - p.level, - p.method, - window_bits, - p.mem_level, - p.strategy ) : - inflateInit2(s, window_bits) - ); -} - -} // End namespace detail. - -//----------------------------------------------------------------------------// - -} } // End namespaces iostreams, boost. diff --git a/private/crc32.h b/private/crc32.h new file mode 100644 index 0000000..3ca03b3 --- /dev/null +++ b/private/crc32.h @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2008-2012 Artyom Beilis (Tonkikh) +// +// See accompanying file COPYING.TXT file for licensing details. +// +/////////////////////////////////////////////////////////////////////////////// +#ifndef CPPCMS_IMPL_CRC32_H +#define CPPCMS_IMPL_CRC32_H +#include +#include + +namespace cppcms { +namespace impl { + +class crc32_calc { +public: + crc32_calc() + { + value_ = crc32(0,0,0); + } + void process_bytes(void const *ptr,size_t n) + { + if(n==0) + return; + value_ = crc32(value_,reinterpret_cast(ptr),n); + } + uint32_t checksum() const + { + return value_; + } +private: + uint32_t value_; +}; + +} // impl +} // cppcms +#endif diff --git a/src/session_posix_file_storage.cpp b/src/session_posix_file_storage.cpp index bf0a7a1..c363237 100644 --- a/src/session_posix_file_storage.cpp +++ b/src/session_posix_file_storage.cpp @@ -13,12 +13,7 @@ #include #include -#ifdef CPPCMS_USE_EXTERNAL_BOOST -# include -#else // Internal Boost -# include - namespace boost = cppcms_boost; -#endif +#include "crc32.h" #include #include @@ -258,7 +253,7 @@ bool session_file_storage::read_from_file(int fd,time_t &timeout,std::string &da if(!read_all(fd,&crc,sizeof(crc)) || !read_all(fd,&size,sizeof(size))) return false; std::vector buffer(size,0); - boost::crc_32_type crc_calc; + impl::crc32_calc crc_calc; if(size > 0) { if(!read_all(fd,&buffer.front(),size)) return false; @@ -282,7 +277,7 @@ void session_file_storage::save_to_file(int fd,time_t timeout,std::string const uint32_t crc; uint32_t size; } tmp = { timeout, 0, static_cast(in.size()) }; - boost::crc_32_type crc_calc; + impl::crc32_calc crc_calc; crc_calc.process_bytes(in.data(),in.size()); tmp.crc=crc_calc.checksum(); if(!write_all(fd,&tmp,sizeof(tmp)) || !write_all(fd,in.data(),in.size())) diff --git a/src/session_win32_file_storage.cpp b/src/session_win32_file_storage.cpp index 5f14049..f9771d9 100644 --- a/src/session_win32_file_storage.cpp +++ b/src/session_win32_file_storage.cpp @@ -15,12 +15,7 @@ #include -#ifdef CPPCMS_USE_EXTERNAL_BOOST -# include -#else // Internal Boost -# include - namespace boost = cppcms_boost; -#endif +#include "crc32.h" #include #include @@ -168,7 +163,7 @@ bool session_file_storage::read_from_file(HANDLE h,time_t &timeout,std::string & if(!read_all(h,&crc,sizeof(crc)) || !read_all(h,&size,sizeof(size))) return false; std::vector buffer(size,0); - boost::crc_32_type crc_calc; + impl::crc32_calc crc_calc; if(size > 0) { if(!read_all(h,&buffer.front(),size)) return false; @@ -192,7 +187,7 @@ void session_file_storage::save_to_file(HANDLE h,time_t timeout,std::string cons uint32_t crc; uint32_t size; } tmp = { timeout, 0, in.size() }; - boost::crc_32_type crc_calc; + impl::crc32_calc crc_calc; crc_calc.process_bytes(in.data(),in.size()); tmp.crc=crc_calc.checksum(); if(!write_all(h,&tmp,sizeof(tmp)) || !write_all(h,in.data(),in.size()))