1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
use karyon_net::{Endpoint, Port};
use crate::Version;
/// the Configuration for the P2P network.
pub struct Config {
/// Represents the network version.
pub version: Version,
/// Enable monitor
pub enable_monitor: bool,
/////////////////
// PeerPool
////////////////
/// Timeout duration for the handshake with new peers, in seconds.
pub handshake_timeout: u64,
/// Interval at which the ping protocol sends ping messages to a peer to
/// maintain connections, in seconds.
pub ping_interval: u64,
/// Timeout duration for receiving the pong message corresponding to the
/// sent ping message, in seconds.
pub ping_timeout: u64,
/// The maximum number of retries for outbound connection establishment.
pub max_connect_retries: usize,
/////////////////
// DISCOVERY
////////////////
/// A list of bootstrap peers for the seeding process.
pub bootstrap_peers: Vec<Endpoint>,
/// An optional listening endpoint to accept incoming connections.
pub listen_endpoint: Option<Endpoint>,
/// A list of endpoints representing peers that the `Discovery` will
/// manually connect to.
pub peer_endpoints: Vec<Endpoint>,
/// The number of available inbound slots for incoming connections.
pub inbound_slots: usize,
/// The number of available outbound slots for outgoing connections.
pub outbound_slots: usize,
/// TCP/UDP port for lookup and refresh processes.
pub discovery_port: Port,
/// Time interval, in seconds, at which the Discovery restarts the
/// seeding process.
pub seeding_interval: u64,
/////////////////
// LOOKUP
////////////////
/// The number of available inbound slots for incoming connections during
/// the lookup process.
pub lookup_inbound_slots: usize,
/// The number of available outbound slots for outgoing connections during
/// the lookup process.
pub lookup_outbound_slots: usize,
/// Timeout duration for a peer response during the lookup process, in
/// seconds.
pub lookup_response_timeout: u64,
/// Maximum allowable time for a live connection with a peer during the
/// lookup process, in seconds.
pub lookup_connection_lifespan: u64,
/// The maximum number of retries for outbound connection establishment
/// during the lookup process.
pub lookup_connect_retries: usize,
/////////////////
// REFRESH
////////////////
/// Interval at which the table refreshes its entries, in seconds.
pub refresh_interval: u64,
/// Timeout duration for a peer response during the table refresh process,
/// in seconds.
pub refresh_response_timeout: u64,
/// The maximum number of retries for outbound connection establishment
/// during the refresh process.
pub refresh_connect_retries: usize,
/// Enables TLS for all connections.
pub enable_tls: bool,
}
impl Default for Config {
fn default() -> Self {
Config {
version: "0.1.0".parse().unwrap(),
enable_monitor: false,
handshake_timeout: 2,
ping_interval: 20,
ping_timeout: 2,
bootstrap_peers: vec![],
listen_endpoint: None,
peer_endpoints: vec![],
inbound_slots: 12,
outbound_slots: 12,
max_connect_retries: 3,
discovery_port: 0,
seeding_interval: 60,
lookup_inbound_slots: 20,
lookup_outbound_slots: 20,
lookup_response_timeout: 1,
lookup_connection_lifespan: 3,
lookup_connect_retries: 3,
refresh_interval: 1800,
refresh_response_timeout: 1,
refresh_connect_retries: 3,
enable_tls: false,
}
}
}
|