/* * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include namespace Swift { class ZLibCompressor; class ZLibDecompressor; class SWIFTEN_API CompressionLayer : public StreamLayer, boost::noncopyable { public: CompressionLayer() {} virtual void writeData(const SafeByteArray& data) { try { writeDataToChildLayer(compressor_.process(data)); } catch (const ZLibException&) { onError(); } } virtual void handleDataRead(const SafeByteArray& data) { try { writeDataToParentLayer(decompressor_.process(data)); } catch (const ZLibException&) { onError(); } } public: boost::signal onError; private: ZLibCompressor compressor_; ZLibDecompressor decompressor_; }; }