p2p/connection/incoming_effectful/
p2p_connection_incoming_effectful_actions.rs

1use crate::{
2    connection::{incoming::P2pConnectionIncomingInitOpts, P2pConnectionEffectfulAction},
3    identity::PublicKey,
4    webrtc::{ConnectionAuth, ConnectionAuthEncrypted},
5    P2pState, PeerId,
6};
7use openmina_core::ActionEvent;
8use serde::{Deserialize, Serialize};
9
10#[derive(Serialize, Deserialize, Debug, Clone, ActionEvent)]
11#[action_event(fields(debug(opts), display(peer_id), display(error)))]
12pub enum P2pConnectionIncomingEffectfulAction {
13    /// Incoming connection is initialized.
14    Init { opts: P2pConnectionIncomingInitOpts },
15    ConnectionAuthorizationEncryptAndSend {
16        peer_id: PeerId,
17        other_pub_key: PublicKey,
18        auth: ConnectionAuth,
19    },
20    ConnectionAuthorizationDecryptAndCheck {
21        peer_id: PeerId,
22        other_pub_key: PublicKey,
23        expected_auth: ConnectionAuth,
24        auth: ConnectionAuthEncrypted,
25    },
26}
27
28impl redux::EnablingCondition<P2pState> for P2pConnectionIncomingEffectfulAction {
29    fn is_enabled(&self, _: &P2pState, _: redux::Timestamp) -> bool {
30        true
31    }
32}
33
34impl From<P2pConnectionIncomingEffectfulAction> for crate::P2pEffectfulAction {
35    fn from(a: P2pConnectionIncomingEffectfulAction) -> crate::P2pEffectfulAction {
36        crate::P2pEffectfulAction::Connection(P2pConnectionEffectfulAction::Incoming(a))
37    }
38}