use std::sync::Arc;
mod connection;
mod endpoint;
mod incoming;
mod mutex;
mod recv_stream;
pub(crate) mod runtime;
mod send_stream;
mod work_limiter;
pub use self::connection::{
AcceptBi, AcceptUni, Connecting, Connection, OpenBi, OpenUni, ReadDatagram, SendDatagram,
SendDatagramError, ZeroRttAccepted,
};
pub use self::endpoint::{Accept, Endpoint, EndpointStats};
pub use self::incoming::{Incoming, IncomingFuture, RetryError};
pub use self::recv_stream::{ReadError, ReadExactError, ReadToEndError, RecvStream, ResetError};
pub use self::runtime::{AsyncTimer, AsyncUdpSocket, Runtime, UdpPoller, default_runtime};
pub use self::send_stream::{SendStream, StoppedError, WriteError};
pub use self::runtime::TokioRuntime;
#[derive(Debug)]
pub(crate) enum ConnectionEvent {
Close {
error_code: crate::VarInt,
reason: bytes::Bytes,
},
Proto(crate::shared::ConnectionEvent),
Rebind(Arc<dyn AsyncUdpSocket>),
}
pub(crate) fn udp_transmit<'a>(t: &crate::Transmit, buffer: &'a [u8]) -> quinn_udp::Transmit<'a> {
quinn_udp::Transmit {
destination: t.destination,
ecn: t.ecn.map(udp_ecn),
contents: buffer,
segment_size: t.segment_size,
src_ip: t.src_ip,
}
}
fn udp_ecn(ecn: crate::EcnCodepoint) -> quinn_udp::EcnCodepoint {
match ecn {
crate::EcnCodepoint::Ect0 => quinn_udp::EcnCodepoint::Ect0,
crate::EcnCodepoint::Ect1 => quinn_udp::EcnCodepoint::Ect1,
crate::EcnCodepoint::Ce => quinn_udp::EcnCodepoint::Ce,
}
}
pub(crate) const IO_LOOP_BOUND: usize = 160;
pub(crate) const RECV_TIME_BOUND: crate::Duration = crate::Duration::from_micros(50);