LCOV - code coverage report
Current view: top level - include/boost/http/zlib - deflate.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 1 1
Test Date: 2026-06-13 19:44:58 Functions: 100.0 % 1 1

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
       3                 : // Copyright (c) 2025 Mohammad Nejati
       4                 : //
       5                 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6                 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7                 : //
       8                 : // Official repository: https://github.com/cppalliance/http
       9                 : //
      10                 : 
      11                 : #ifndef BOOST_HTTP_ZLIB_DEFLATE_HPP
      12                 : #define BOOST_HTTP_ZLIB_DEFLATE_HPP
      13                 : 
      14                 : #include <boost/http/detail/config.hpp>
      15                 : #include <boost/http/zlib/service.hpp>
      16                 : #include <boost/http/zlib/stream.hpp>
      17                 : 
      18                 : #include <boost/capy/ex/execution_context.hpp>
      19                 : 
      20                 : #include <cstddef>
      21                 : 
      22                 : namespace boost {
      23                 : namespace http {
      24                 : namespace zlib {
      25                 : 
      26                 : /** Provides the ZLib compression API.
      27                 : 
      28                 :     This service interface exposes the ZLib deflate (compression)
      29                 :     functionality through a set of virtual functions. The deflate
      30                 :     algorithm compresses data by finding repeated byte sequences
      31                 :     and encoding them efficiently using a combination of LZ77 and
      32                 :     Huffman coding.
      33                 : 
      34                 :     The windowBits parameter in init2() controls the format:
      35                 :     - 8..15: zlib format with specified window size
      36                 :     - -8..-15: raw deflate format (no header/trailer)
      37                 :     - 16+windowBits: gzip format
      38                 : 
      39                 :     @code
      40                 :     // Example: Basic compression
      41                 :     boost::http::datastore ctx;
      42                 :     auto& deflate_svc = boost::http::zlib::install_deflate_service(ctx);
      43                 : 
      44                 :     boost::http::zlib::stream st = {};
      45                 :     std::vector<unsigned char> input_data = get_data();
      46                 :     std::vector<unsigned char> output(input_data.size() * 2);
      47                 : 
      48                 :     st.zalloc = nullptr;
      49                 :     st.zfree = nullptr;
      50                 :     st.opaque = nullptr;
      51                 : 
      52                 :     deflate_svc.init(st, boost::http::zlib::default_compression);
      53                 : 
      54                 :     st.avail_in = input_data.size();
      55                 :     st.next_in = input_data.data();
      56                 :     st.avail_out = output.size();
      57                 :     st.next_out = output.data();
      58                 : 
      59                 :     deflate_svc.deflate(st, boost::http::zlib::finish);
      60                 :     output.resize(st.total_out);
      61                 : 
      62                 :     deflate_svc.deflate_end(st);
      63                 :     @endcode
      64                 : 
      65                 :     @code
      66                 :     // Example: Gzip compression with custom window size
      67                 :     boost::http::zlib::stream st = {};
      68                 :     st.zalloc = nullptr;
      69                 :     st.zfree = nullptr;
      70                 : 
      71                 :     // Use gzip format (16 + 15 for max window)
      72                 :     deflate_svc.init2(st,
      73                 :         6,                                      // level
      74                 :         boost::http::zlib::deflated,           // method
      75                 :         16 + 15,                                // gzip format
      76                 :         8,                                      // memLevel
      77                 :         boost::http::zlib::default_strategy);   // strategy
      78                 : 
      79                 :     // Compress data...
      80                 :     deflate_svc.deflate_end(st);
      81                 :     @endcode
      82                 : */
      83                 : struct BOOST_SYMBOL_VISIBLE
      84                 :     deflate_service
      85                 :     : capy::execution_context::service
      86                 : {
      87                 :     /** Return the ZLib version string. */
      88                 :     virtual char const* version() const noexcept = 0;
      89                 : 
      90                 :     /** Initialize deflate compression.
      91                 :         @param st The stream to initialize.
      92                 :         @param level The compression level.
      93                 :         @return Zero on success, or an error code.
      94                 :     */
      95                 :     virtual int init(stream& st, int level) const = 0;
      96                 : 
      97                 :     /** Initialize deflate compression with extended parameters.
      98                 :         @param st The stream to initialize.
      99                 :         @param level The compression level.
     100                 :         @param method The compression method.
     101                 :         @param windowBits The base-2 logarithm of the window size.
     102                 :         @param memLevel Memory usage level (1-9).
     103                 :         @param strategy The compression strategy.
     104                 :         @return Zero on success, or an error code.
     105                 :     */
     106                 :     virtual int init2(stream& st, int level, int method,
     107                 :         int windowBits, int memLevel, int strategy) const = 0;
     108                 : 
     109                 :     /** Set the compression dictionary.
     110                 :         @param st The stream.
     111                 :         @param dict Pointer to the dictionary data.
     112                 :         @param len Length of the dictionary.
     113                 :         @return Zero on success, or an error code.
     114                 :     */
     115                 :     virtual int set_dict(stream& st, unsigned char const* dict, unsigned len) const = 0;
     116                 : 
     117                 :     /** Return the current compression dictionary.
     118                 :         @param st The stream.
     119                 :         @param dest Destination buffer for the dictionary.
     120                 :         @param len Pointer to variable receiving dictionary length.
     121                 :         @return Zero on success, or an error code.
     122                 :     */
     123                 :     virtual int get_dict(stream& st, unsigned char* dest, unsigned* len) const = 0;
     124                 : 
     125                 :     /** Duplicate a deflate stream.
     126                 :         @param dest The destination stream.
     127                 :         @param src The source stream to duplicate.
     128                 :         @return Zero on success, or an error code.
     129                 :     */
     130                 :     virtual int dup(stream& dest, stream& src) const = 0;
     131                 : 
     132                 :     /** Compress data in the stream.
     133                 :         @param st The stream containing data to compress.
     134                 :         @param flush The flush mode.
     135                 :         @return Status code indicating compression state.
     136                 :     */
     137                 :     virtual int deflate(stream& st, int flush) const = 0;
     138                 : 
     139                 :     /** Release all resources held by the deflate stream.
     140                 :         @param st The stream to finalize.
     141                 :         @return Zero on success, or an error code.
     142                 :     */
     143                 :     virtual int deflate_end(stream& st) const = 0;
     144                 : 
     145                 :     /** Reset the deflate stream state.
     146                 :         @param st The stream to reset.
     147                 :         @return Zero on success, or an error code.
     148                 :     */
     149                 :     virtual int reset(stream& st) const = 0;
     150                 : 
     151                 :     /** Dynamically update compression parameters.
     152                 :         @param st The stream.
     153                 :         @param level The new compression level.
     154                 :         @param strategy The new compression strategy.
     155                 :         @return Zero on success, or an error code.
     156                 :     */
     157                 :     virtual int params(stream& st, int level, int strategy) const = 0;
     158                 : 
     159                 :     /** Return an upper bound on compressed size.
     160                 :         @param st The stream.
     161                 :         @param sourceLen The length of source data.
     162                 :         @return Maximum possible compressed size.
     163                 :     */
     164                 :     virtual std::size_t bound(stream& st, unsigned long sourceLen) const = 0;
     165                 : 
     166                 :     /** Return the number of pending output bytes.
     167                 :         @param st The stream.
     168                 :         @param pending Pointer to variable receiving pending byte count.
     169                 :         @param bits Pointer to variable receiving pending bit count.
     170                 :         @return Zero on success, or an error code.
     171                 :     */
     172                 :     virtual int pending(stream& st, unsigned* pending, int* bits) const = 0;
     173                 : 
     174                 :     /** Insert bits into the compressed stream.
     175                 :         @param st The stream.
     176                 :         @param bits Number of bits to insert.
     177                 :         @param value The bit pattern to insert.
     178                 :         @return Zero on success, or an error code.
     179                 :     */
     180                 :     virtual int prime(stream& st, int bits, int value) const = 0;
     181                 : 
     182                 :     /** Set the gzip header information.
     183                 :         @param st The stream.
     184                 :         @param header Pointer to gzip header structure.
     185                 :         @return Zero on success, or an error code.
     186                 :     */
     187                 :     virtual int set_header(stream& st, void* header) const = 0;
     188                 : 
     189                 : protected:
     190 HIT           1 :     void shutdown() override {}
     191                 : };
     192                 : 
     193                 : } // zlib
     194                 : } // http
     195                 : } // boost
     196                 : 
     197                 : #endif
        

Generated by: LCOV version 2.3