pub trait Subscriber: 'static + Send {
    type ConnectionContext: 'static + Send;

Show 60 methods fn create_connection_context(
        &mut self,
        meta: &ConnectionMeta,
        info: &ConnectionInfo
    ) -> Self::ConnectionContext; fn supervisor_timeout(
        &mut self,
        conn_context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        context: &Context<'_>
    ) -> Option<Duration> { ... } fn on_supervisor_timeout(
        &mut self,
        conn_context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        context: &Context<'_>
    ) -> Outcome { ... } fn on_application_protocol_information(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ApplicationProtocolInformation<'_>
    ) { ... } fn on_server_name_information(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ServerNameInformation<'_>
    ) { ... } fn on_packet_sent(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PacketSent
    ) { ... } fn on_packet_received(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PacketReceived
    ) { ... } fn on_active_path_updated(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ActivePathUpdated<'_>
    ) { ... } fn on_path_created(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PathCreated<'_>
    ) { ... } fn on_frame_sent(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &FrameSent
    ) { ... } fn on_frame_received(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &FrameReceived<'_>
    ) { ... } fn on_packet_lost(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PacketLost<'_>
    ) { ... } fn on_recovery_metrics(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &RecoveryMetrics<'_>
    ) { ... } fn on_congestion(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &Congestion<'_>
    ) { ... } fn on_ack_processed(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &AckProcessed<'_>
    ) { ... } fn on_rx_ack_range_dropped(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &RxAckRangeDropped<'_>
    ) { ... } fn on_ack_range_received(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &AckRangeReceived<'_>
    ) { ... } fn on_packet_dropped(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PacketDropped<'_>
    ) { ... } fn on_key_update(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &KeyUpdate
    ) { ... } fn on_key_space_discarded(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &KeySpaceDiscarded
    ) { ... } fn on_connection_started(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ConnectionStarted<'_>
    ) { ... } fn on_connection_closed(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ConnectionClosed
    ) { ... } fn on_duplicate_packet(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &DuplicatePacket<'_>
    ) { ... } fn on_transport_parameters_received(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &TransportParametersReceived<'_>
    ) { ... } fn on_datagram_sent(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &DatagramSent
    ) { ... } fn on_datagram_received(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &DatagramReceived
    ) { ... } fn on_datagram_dropped(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &DatagramDropped
    ) { ... } fn on_connection_id_updated(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ConnectionIdUpdated<'_>
    ) { ... } fn on_ecn_state_changed(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &EcnStateChanged<'_>
    ) { ... } fn on_connection_migration_denied(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &ConnectionMigrationDenied
    ) { ... } fn on_handshake_status_updated(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &HandshakeStatusUpdated
    ) { ... } fn on_path_challenge_updated(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PathChallengeUpdated<'_>
    ) { ... } fn on_tls_client_hello(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &TlsClientHello<'_>
    ) { ... } fn on_tls_server_hello(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &TlsServerHello<'_>
    ) { ... } fn on_rx_stream_progress(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &RxStreamProgress
    ) { ... } fn on_tx_stream_progress(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &TxStreamProgress
    ) { ... } fn on_keep_alive_timer_expired(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &KeepAliveTimerExpired
    ) { ... } fn on_mtu_updated(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &MtuUpdated
    ) { ... } fn on_slow_start_exited(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &SlowStartExited
    ) { ... } fn on_delivery_rate_sampled(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &DeliveryRateSampled
    ) { ... } fn on_pacing_rate_updated(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &PacingRateUpdated
    ) { ... } fn on_bbr_state_changed(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &BbrStateChanged
    ) { ... } fn on_version_information(
        &mut self,
        meta: &EndpointMeta,
        event: &VersionInformation<'_>
    ) { ... } fn on_endpoint_packet_sent(
        &mut self,
        meta: &EndpointMeta,
        event: &EndpointPacketSent
    ) { ... } fn on_endpoint_packet_received(
        &mut self,
        meta: &EndpointMeta,
        event: &EndpointPacketReceived
    ) { ... } fn on_endpoint_datagram_sent(
        &mut self,
        meta: &EndpointMeta,
        event: &EndpointDatagramSent
    ) { ... } fn on_endpoint_datagram_received(
        &mut self,
        meta: &EndpointMeta,
        event: &EndpointDatagramReceived
    ) { ... } fn on_endpoint_datagram_dropped(
        &mut self,
        meta: &EndpointMeta,
        event: &EndpointDatagramDropped
    ) { ... } fn on_endpoint_connection_attempt_failed(
        &mut self,
        meta: &EndpointMeta,
        event: &EndpointConnectionAttemptFailed
    ) { ... } fn on_platform_tx(&mut self, meta: &EndpointMeta, event: &PlatformTx) { ... } fn on_platform_tx_error(
        &mut self,
        meta: &EndpointMeta,
        event: &PlatformTxError
    ) { ... } fn on_platform_rx(&mut self, meta: &EndpointMeta, event: &PlatformRx) { ... } fn on_platform_rx_error(
        &mut self,
        meta: &EndpointMeta,
        event: &PlatformRxError
    ) { ... } fn on_platform_feature_configured(
        &mut self,
        meta: &EndpointMeta,
        event: &PlatformFeatureConfigured
    ) { ... } fn on_platform_event_loop_wakeup(
        &mut self,
        meta: &EndpointMeta,
        event: &PlatformEventLoopWakeup
    ) { ... } fn on_platform_event_loop_sleep(
        &mut self,
        meta: &EndpointMeta,
        event: &PlatformEventLoopSleep
    ) { ... } fn on_event<M, E>(&mut self, meta: &M, event: &E)
    where
        M: Meta,
        E: Event
, { ... } fn on_connection_event<E>(
        &mut self,
        context: &mut Self::ConnectionContext,
        meta: &ConnectionMeta,
        event: &E
    )
    where
        E: Event
, { ... } fn query(
        context: &Self::ConnectionContext,
        query: &mut dyn Query
    ) -> ControlFlow { ... } fn query_mut(
        context: &mut Self::ConnectionContext,
        query: &mut dyn QueryMut
    ) -> ControlFlow { ... }
}
Expand description

Allows for events to be subscribed to

Required Associated Types§

An application provided type associated with each connection.

The context provides a mechanism for applications to provide a custom type and update it on each event, e.g. computing statistics. Each event invocation (e.g. Subscriber::on_packet_sent) also provides mutable access to the context &mut ConnectionContext and allows for updating the context.

use s2n_quic::provider::event::{
    ConnectionInfo, ConnectionMeta, Subscriber, events::PacketSent
};

pub struct MyEventSubscriber;

pub struct MyEventContext {
    packet_sent: u64,
}

impl Subscriber for MyEventSubscriber {
    type ConnectionContext = MyEventContext;

    fn create_connection_context(
        &mut self, _meta: &ConnectionMeta,
        _info: &ConnectionInfo,
    ) -> Self::ConnectionContext {
        MyEventContext { packet_sent: 0 }
    }

    fn on_packet_sent(
        &mut self,
        context: &mut Self::ConnectionContext,
        _meta: &ConnectionMeta,
        _event: &PacketSent,
    ) {
        context.packet_sent += 1;
    }
}

Required Methods§

Creates a context to be passed to each connection-related event

Provided Methods§

The period at which on_supervisor_timeout is called

If multiple event::Subscribers are composed together, the minimum supervisor_timeout across all event::Subscribers will be used.

If the supervisor_timeout() is None across all event::Subscribers, connection supervision will cease for the remaining lifetime of the connection and on_supervisor_timeout will no longer be called.

It is recommended to avoid setting this value less than ~100ms, as short durations may lead to higher CPU utilization.

Called for each supervisor_timeout to determine any action to take on the connection based on the supervisor::Outcome

If multiple event::Subscribers are composed together, the minimum supervisor_timeout across all event::Subscribers will be used, and thus on_supervisor_timeout may be called earlier than the supervisor_timeout for a given event::Subscriber implementation.

Called when the ApplicationProtocolInformation event is triggered

Called when the ServerNameInformation event is triggered

Called when the PacketSent event is triggered

Called when the PacketReceived event is triggered

Called when the ActivePathUpdated event is triggered

Called when the PathCreated event is triggered

Called when the FrameSent event is triggered

Called when the FrameReceived event is triggered

Called when the PacketLost event is triggered

Called when the RecoveryMetrics event is triggered

Called when the Congestion event is triggered

👎Deprecated: use on_rx_ack_range_dropped event instead

Called when the AckProcessed event is triggered

Called when the RxAckRangeDropped event is triggered

Called when the AckRangeReceived event is triggered

Called when the PacketDropped event is triggered

Called when the KeyUpdate event is triggered

Called when the KeySpaceDiscarded event is triggered

Called when the ConnectionStarted event is triggered

Called when the ConnectionClosed event is triggered

Called when the DuplicatePacket event is triggered

Called when the TransportParametersReceived event is triggered

Called when the DatagramSent event is triggered

Called when the DatagramReceived event is triggered

Called when the DatagramDropped event is triggered

Called when the ConnectionIdUpdated event is triggered

Called when the EcnStateChanged event is triggered

Called when the ConnectionMigrationDenied event is triggered

Called when the HandshakeStatusUpdated event is triggered

Called when the PathChallengeUpdated event is triggered

Called when the TlsClientHello event is triggered

Called when the TlsServerHello event is triggered

Called when the RxStreamProgress event is triggered

Called when the TxStreamProgress event is triggered

Called when the KeepAliveTimerExpired event is triggered

Called when the MtuUpdated event is triggered

Called when the SlowStartExited event is triggered

Called when the DeliveryRateSampled event is triggered

Called when the PacingRateUpdated event is triggered

Called when the BbrStateChanged event is triggered

Called when the VersionInformation event is triggered

Called when the EndpointPacketSent event is triggered

Called when the EndpointPacketReceived event is triggered

Called when the EndpointDatagramSent event is triggered

Called when the EndpointDatagramReceived event is triggered

Called when the EndpointDatagramDropped event is triggered

Called when the EndpointConnectionAttemptFailed event is triggered

Called when the PlatformTx event is triggered

Called when the PlatformTxError event is triggered

Called when the PlatformRx event is triggered

Called when the PlatformRxError event is triggered

Called when the PlatformFeatureConfigured event is triggered

Called when the PlatformEventLoopWakeup event is triggered

Called when the PlatformEventLoopSleep event is triggered

Called for each event that relates to the endpoint and all connections

Called for each event that relates to a connection

Used for querying the Subscriber::ConnectionContext on a Subscriber

Used for querying and mutating the Subscriber::ConnectionContext on a Subscriber

Implementations on Foreign Types§

Subscriber is implemented for a 2-element tuple to make it easy to compose multiple subscribers.

👎Deprecated: use on_rx_ack_range_dropped event instead

Implementors§