6 #include <boost/asio/steady_timer.hpp>
8 #include <nexus/quic/settings.hpp>
13 struct lsquic_out_spec;
15 namespace nexus::quic::detail {
17 struct connection_impl;
21 struct engine_deleter {
void operator()(lsquic_engine* e)
const; };
22 using lsquic_engine_ptr = std::unique_ptr<lsquic_engine, engine_deleter>;
25 mutable std::mutex mutex;
26 boost::asio::any_io_executor ex;
27 boost::asio::steady_timer timer;
28 lsquic_engine_ptr handle;
31 uint32_t max_streams_per_connection;
34 void process(std::unique_lock<std::mutex>& lock);
35 void reschedule(std::unique_lock<std::mutex>& lock);
38 engine_impl(
const boost::asio::any_io_executor& ex, socket_impl* client,
39 const settings* s,
unsigned flags);
42 using executor_type = boost::asio::any_io_executor;
43 executor_type get_executor()
const {
return ex; }
47 int send_packets(
const lsquic_out_spec *specs,
unsigned n_specs);
49 stream_impl* on_new_stream(connection_impl& c, lsquic_stream* stream);