//------------------------------------------------------------------------------ void Compressor::stopCompression(void) { try { filtering_ostreambuf out; out.push(zlib_compressor(getZlibParams())); out.push(*ostream_); copy (*bufferedStream_, out); obj_->setOStream(*ostream_); ostream_ = 0; bufferedStream_.reset(); } catch (const zlib_error &z_err) { std::cerr << "Zlib compression failed with error code: " << z_err.error() << std::endl; throw z_err; } }
void Compression::ZlibCompress (std::istream& is, std::ostream& os) { // Note : this is important to add the block size in order to be able to exchange // several messages accross not EOF bounded streams (TCP dialog for instance). std::stringstream tmp; std::stringstream ss; filtering_stream<output> fs; fs.push (zlib_compressor()); fs.push (tmp); boost::iostreams::copy (is, fs); fs.pop (); int size = tmp.str ().length (); os << size << '#'; boost::iostreams::copy (tmp, os); }