// // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) // Copyright (c) 2020 Richard Hodges (hodges.r@gmail.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // Official repository: https://github.com/boostorg/beast // #ifndef BOOST_BEAST_TEST_DETAIL_STREAM_STATE_HPP #define BOOST_BEAST_TEST_DETAIL_STREAM_STATE_HPP #include #include #include #include #include #include #include #include #include #include namespace boost { namespace beast { namespace test { namespace detail { struct stream_state; struct stream_service_impl { std::mutex m_; std::vector v_; BOOST_BEAST_DECL void remove(stream_state& impl); }; //------------------------------------------------------------------------------ class stream_service : public beast::detail::service_base { boost::shared_ptr sp_; BOOST_BEAST_DECL void shutdown() override; public: BOOST_BEAST_DECL explicit stream_service(net::execution_context& ctx); BOOST_BEAST_DECL static auto make_impl( net::any_io_executor exec, test::fail_count* fc) -> boost::shared_ptr; }; //------------------------------------------------------------------------------ struct stream_read_op_base { virtual ~stream_read_op_base() = default; virtual void operator()(error_code ec) = 0; }; //------------------------------------------------------------------------------ enum class stream_status { ok, eof, }; //------------------------------------------------------------------------------ struct stream_state { net::any_io_executor exec; boost::weak_ptr wp; std::mutex m; flat_buffer b; std::condition_variable cv; std::unique_ptr op; stream_status code = stream_status::ok; fail_count* fc = nullptr; std::size_t nread = 0; std::size_t nread_bytes = 0; std::size_t nwrite = 0; std::size_t nwrite_bytes = 0; std::size_t read_max = (std::numeric_limits::max)(); std::size_t write_max = (std::numeric_limits::max)(); BOOST_BEAST_DECL stream_state( net::any_io_executor exec_, boost::weak_ptr wp_, fail_count* fc_); BOOST_BEAST_DECL ~stream_state(); BOOST_BEAST_DECL void remove() noexcept; BOOST_BEAST_DECL void notify_read(); BOOST_BEAST_DECL void cancel_read(); }; } // detail } // test } // beast } // boost #ifdef BOOST_BEAST_HEADER_ONLY #include #endif #endif // BOOST_BEAST_TEST_DETAIL_STREAM_STATE_HPP