Skip to main content

dope_session/pool/client/
state.rs

1use crate::protocol::client::ClientProtocol;
2use dope_core::addr::SockAddr;
3use dope_core::driver::{IoRequest, PoolDriver};
4
5use super::super::slot::INGRESS_BUF_CAP;
6use crate::session::ClientSessionGeneric;
7
8pub(crate) const CLIENT_IOV_CAP: usize = 32;
9
10pub(crate) const CLIENT_BYTES_CAP: usize = 256 * 1024;
11
12pub(crate) enum ClientSlotPhase<B: PoolDriver> {
13    Idle,
14    Connecting {
15        fixed_idx: u32,
16        raw_fd: i32,
17        request: IoRequest<B, SockAddr>,
18    },
19    Active,
20}
21
22impl<B: PoolDriver> Default for ClientSlotPhase<B> {
23    #[inline(always)]
24    fn default() -> Self {
25        Self::Idle
26    }
27}
28
29pub struct ClientSlotState<P: ClientProtocol, B: PoolDriver> {
30    pub(crate) session: ClientSessionGeneric<P, INGRESS_BUF_CAP, CLIENT_IOV_CAP>,
31    pub(crate) phase: ClientSlotPhase<B>,
32    pub(crate) upstream_tag: u32,
33}
34
35impl<P: ClientProtocol, B: PoolDriver> Default for ClientSlotState<P, B> {
36    fn default() -> Self {
37        Self {
38            session: ClientSessionGeneric::default(),
39            phase: ClientSlotPhase::Idle,
40            upstream_tag: 0,
41        }
42    }
43}