libs/http/src/detail/filter.cpp

0.0% Lines (0/26) 0.0% Functions (0/1) 0.0% Branches (0/23)
libs/http/src/detail/filter.cpp
Line Hits 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 #include "src/detail/filter.hpp"
12
13 #include <boost/capy/buffers/front.hpp>
14
15 namespace boost {
16 namespace http {
17 namespace detail {
18
19 auto
20 ✗ filter::
21 process(
22 capy::slice_of<
23 boost::span<const capy::mutable_buffer>> out,
24 capy::const_buffer_pair in,
25 bool more) -> results
26 {
27 ✗ results rv;
28 ✗ bool p_more = true;
29 for(;;)
30 {
31 ✗ if(!more && p_more && in[1].size() == 0)
32 {
33 ✗ if(capy::buffer_size(out) < min_out_buffer())
34 {
35 ✗ rv.out_short = true;
36 ✗ return rv;
37 }
38 ✗ p_more = false;
39 }
40
41 ✗ auto ob = capy::front(out);
42 ✗ auto ib = capy::front(in);
43 ✗ auto rs = do_process(ob, ib, p_more);
44
45 ✗ rv.in_bytes += rs.in_bytes;
46 ✗ rv.out_bytes += rs.out_bytes;
47
48 ✗ if(rs.ec)
49 {
50 ✗ rv.ec = rs.ec;
51 ✗ return rv;
52 }
53
54 ✗ if(rs.finished)
55 {
56 ✗ rv.finished = true;
57 ✗ return rv;
58 }
59
60 ✗ capy::remove_prefix(out, rs.out_bytes);
61 ✗ capy::remove_prefix(in, rs.in_bytes);
62
63 ✗ if(capy::buffer_empty(out))
64 ✗ return rv;
65
66 ✗ if(capy::buffer_empty(in) && rs.out_bytes < ob.size())
67 ✗ return rv;
68 ✗ }
69 }
70
71 } // detail
72 } // http
73 } // boost
74