distant_net/common/transport/framed/handshake.rs
1use super::{CompressionLevel, CompressionType, EncryptionType};
2
3/// Definition of the handshake to perform for a transport
4#[derive(Clone, Debug)]
5pub enum Handshake {
6 /// Indicates that the handshake is being performed from the client-side
7 Client {
8 /// Preferred compression algorithm when presented options by server
9 preferred_compression_type: Option<CompressionType>,
10
11 /// Preferred compression level when presented options by server
12 preferred_compression_level: Option<CompressionLevel>,
13
14 /// Preferred encryption algorithm when presented options by server
15 preferred_encryption_type: Option<EncryptionType>,
16 },
17
18 /// Indicates that the handshake is being performed from the server-side
19 Server {
20 /// List of available compression algorithms for use between client and server
21 compression_types: Vec<CompressionType>,
22
23 /// List of available encryption algorithms for use between client and server
24 encryption_types: Vec<EncryptionType>,
25 },
26}
27
28impl Handshake {
29 /// Creates a new client handshake definition, providing defaults for the preferred compression
30 /// type, compression level, and encryption type
31 pub fn client() -> Self {
32 Self::Client {
33 preferred_compression_type: None,
34 preferred_compression_level: None,
35 preferred_encryption_type: Some(EncryptionType::XChaCha20Poly1305),
36 }
37 }
38
39 /// Creates a new server handshake definition, providing defaults for the compression types and
40 /// encryption types by including all known variants
41 pub fn server() -> Self {
42 Self::Server {
43 compression_types: CompressionType::known_variants().to_vec(),
44 encryption_types: EncryptionType::known_variants().to_vec(),
45 }
46 }
47
48 /// Returns true if handshake is from client-side
49 pub fn is_client(&self) -> bool {
50 matches!(self, Self::Client { .. })
51 }
52
53 /// Returns true if handshake is from server-side
54 pub fn is_server(&self) -> bool {
55 matches!(self, Self::Server { .. })
56 }
57}