Line data Source code
1 : //
2 : // Copyright (c) 2023 Vinnie Falco (vinnie.falco@gmail.com)
3 : // Copyright (c) 2024 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_DETAIL_FILTER_HPP
12 : #define BOOST_HTTP_DETAIL_FILTER_HPP
13 :
14 : #include <boost/capy/buffers/buffer_pair.hpp>
15 : #include <boost/capy/buffers/slice.hpp>
16 : #include <boost/core/span.hpp>
17 : #include <boost/system/error_code.hpp>
18 :
19 : namespace boost {
20 : namespace http {
21 : namespace detail {
22 :
23 : /** Base class for all filters
24 : */
25 : class filter
26 : {
27 : public:
28 0 : virtual ~filter() = default;
29 :
30 : /** The results of processing the filter.
31 : */
32 : struct results
33 : {
34 : /** The error, if any occurred.
35 : */
36 : system::error_code ec;
37 :
38 : /** The number of bytes produced in the output.
39 :
40 : This may be less than the total number
41 : of bytes available for writing in the
42 : destination buffers.
43 : */
44 : std::size_t out_bytes = 0;
45 :
46 : /** The number of bytes consumed from the input.
47 :
48 : This may be less than the total number
49 : of bytes available for reading in the
50 : source buffers.
51 : */
52 : std::size_t in_bytes = 0;
53 :
54 : /** True if the output buffer is too
55 : small to make progress.
56 :
57 : This can only happen in deflate operation.
58 : */
59 : bool out_short = false;
60 :
61 : /** True if there will be no more output.
62 : */
63 : bool finished = false;
64 : };
65 :
66 : results
67 : process(
68 : capy::slice_of<
69 : boost::span<const capy::mutable_buffer>> out,
70 : capy::const_buffer_pair in,
71 : bool more);
72 :
73 : protected:
74 : virtual
75 : std::size_t
76 0 : min_out_buffer() const noexcept
77 : {
78 0 : return 0;
79 : }
80 :
81 : virtual
82 : results
83 : do_process(
84 : capy::mutable_buffer,
85 : capy::const_buffer,
86 : bool) noexcept = 0;
87 : };
88 :
89 : } // detail
90 : } // http
91 : } // boost
92 :
93 : #endif
|