Skip to main content

aria2_core/
constants.rs

1// Protocol defaults
2pub const USER_AGENT: &str = "aria2-rust/1.0";
3pub const FTP_DEFAULT_PORT: u16 = 21;
4pub const FTP_DEFAULT_USER: &str = "anonymous";
5pub const FTP_DEFAULT_PASSWORD: &str = "aria2@";
6pub const SFTP_DEFAULT_PORT: u16 = 22;
7
8// HTTP defaults
9pub const HTTP_DEFAULT_CONNECT_TIMEOUT_SECS: u64 = 15;
10pub const HTTP_DEFAULT_OVERALL_TIMEOUT_SECS: u64 = 120;
11pub const HTTP_DEFAULT_COMMAND_TIMEOUT_SECS: u64 = 300;
12pub const HTTP_DEFAULT_POOL_IDLE_TIMEOUT_SECS: u64 = 90;
13pub const HTTP_DEFAULT_TCP_KEEPALIVE_SECS: u64 = 60;
14pub const HTTP_DEFAULT_MAX_REDIRECTS: usize = 5;
15pub const HTTP_DEFAULT_POOL_MAX_IDLE_PER_HOST: usize = 8;
16pub const HTTP_SPEED_UPDATE_INTERVAL_MS: u64 = 500;
17pub const HTTP_DEFAULT_ERROR_CODE: u16 = 500;
18
19// HTTP client pool defaults (higher concurrency than per-download defaults)
20pub const HTTP_CLIENT_POOL_MAX_IDLE_PER_HOST: usize = 16;
21pub const HTTP_CLIENT_POOL_IDLE_TIMEOUT_SECS: u64 = 300;
22
23// HTTP connection manager config defaults
24pub const HTTP_CONFIG_DEFAULT_MAX_CONNECTIONS: usize = 16;
25pub const HTTP_CONFIG_DEFAULT_CONNECT_TIMEOUT_SECS: u64 = 30;
26pub const HTTP_CONFIG_DEFAULT_READ_TIMEOUT_SECS: u64 = 60;
27pub const HTTP_CONFIG_DEFAULT_WRITE_TIMEOUT_SECS: u64 = 60;
28pub const HTTP_CONFIG_DEFAULT_IDLE_TIMEOUT_SECS: u64 = 300;
29
30// CORS defaults
31pub const CORS_ALLOW_METHODS: &str = "POST, GET, OPTIONS";
32pub const CORS_ALLOW_HEADERS: &str = "Content-Type, Authorization";
33pub const CORS_MAX_AGE: &str = "86400";
34
35// Retry defaults
36pub const DEFAULT_MAX_RETRIES: u32 = 3;
37pub const DEFAULT_RETRY_WAIT_SECS: u64 = 1;
38pub const RETRYABLE_HTTP_CODES: [u16; 6] = [408, 429, 500, 502, 503, 504];
39
40// BitTorrent defaults
41pub const BT_BLOCK_SIZE: usize = 16384;
42pub const BT_MAX_RETRIES: u32 = 3;
43pub const BT_BLOCK_REQUEST_TIMEOUT_SECS: u64 = 3;
44pub const BT_MAX_BLOCK_READ_MESSAGES: usize = 10000;
45pub const BT_PUBLIC_TRACKER_PEER_THRESHOLD: usize = 15;
46pub const BT_MAX_PUBLIC_TRACKERS_TO_TRY: usize = 10;
47pub const BT_DEFAULT_MAX_UPLOAD_SLOTS: usize = 4;
48pub const BT_CHOKE_ROTATION_INTERVAL_SECS: u64 = 10;
49pub const BT_OPTIMISTIC_UNCHOKE_INTERVAL_SECS: u64 = 30;
50pub const BT_SNUBBED_TIMEOUT_SECS: u64 = 60;
51pub const BT_ENDGAME_THRESHOLD: usize = 20;
52pub const BT_PEER_CONNECTION_DELAY_MS: u64 = 100;
53pub const BT_MAX_UNCHOKE_WAIT_ATTEMPTS: usize = 50;
54pub const BT_PEER_MESSAGE_TIMEOUT_SECS: u64 = 5;
55pub const BT_HANDSHAKE_RESPONSE_SIZE: usize = 68;
56pub const BT_RECEIVE_BUFFER_SIZE: usize = 4096;
57pub const BT_RETRY_DELAY_MS: u64 = 100;
58
59// Segment/Download defaults
60pub const DEFAULT_FILE_ALLOCATION: &str = "falloc";
61/// Default value for the `secure-falloc` option. When `false`, fallocate-based
62/// allocation on platforms that don't zero-fill allocated blocks (macOS
63/// `F_PREALLOCATE`, Windows `SetFileValidData`) leaves residual disk data
64/// accessible until overwritten. Set to `true` to zero-fill at a performance
65/// cost. Linux `fallocate(2)` always returns zeroed blocks, so this option has
66/// no effect there.
67pub const DEFAULT_SECURE_FALLOC: bool = false;
68pub const CONCURRENT_MIN_FILE_SIZE: usize = 1024 * 1024;
69pub const PROGRESS_UPDATE_BYTES: usize = 256 * 1024;
70pub const DEFAULT_MAX_CONNECTION_PER_SERVER: usize = 4;
71pub const DEFAULT_SPLIT: u16 = 5;
72pub const MIN_SEGMENT_SIZE: usize = 1024 * 256;
73pub const MAX_SEGMENT_SIZE: usize = 1024 * 1024 * 16;
74pub const DEFAULT_SEGMENT_SIZE: usize = 1_048_576;
75pub const DEFAULT_MAX_CONNECTIONS_PER_MIRROR: usize = 2;
76pub const MAX_RETRIES_PER_SEGMENT: u32 = 3;
77pub const MAX_MIRROR_FAILURES: u32 = 3;
78
79// Mirror coordinator defaults
80pub const MIRROR_SPEED_THRESHOLD: u64 = 10_000;
81pub const MIRROR_COOLDOWN_SECS: u64 = 60;
82
83// Rate limiter defaults
84pub const DEFAULT_BURST_BYTES: usize = 256 * 1024;
85pub const RATE_LIMITER_CHUNK_SIZE: usize = 8192;
86pub const RATE_LIMITER_MIN_CHUNK_SIZE: usize = 512;
87pub const RATE_LIMITER_MIN_WAIT_SECS: f64 = 0.000001;
88
89// FTP defaults
90pub const FTP_DEFAULT_COMMAND_TIMEOUT_SECS: u64 = 300;
91pub const FTP_WELCOME_TIMEOUT_SECS: u64 = 15;
92pub const FTP_COMMAND_TIMEOUT_SECS: u64 = 30;
93pub const FTP_TRANSFER_COMPLETE_TIMEOUT_SECS: u64 = 10;
94pub const FTP_DATA_CONNECTION_TIMEOUT_SECS: u64 = 30;
95pub const FTP_BUFFER_SIZE: usize = 65536;
96pub const FTP_SPEED_UPDATE_INTERVAL_MS: u64 = 500;
97pub const FTP_BASE_RETRY_WAIT_MS: u64 = 1000;
98
99// FTP connection pool defaults
100pub const FTP_POOL_DEFAULT_MAX_CONNECTIONS: usize = 16;
101pub const FTP_POOL_DEFAULT_MAX_IDLE_TIME_SECS: u64 = 300;
102pub const FTP_POOL_DEFAULT_MAX_CONNECTION_AGE_SECS: u64 = 1800;
103pub const FTP_POOL_DEFAULT_CONNECT_TIMEOUT_SECS: u64 = 30;
104pub const FTP_POOL_DEFAULT_READ_TIMEOUT_SECS: u64 = 30;
105
106// SFTP defaults
107pub const SFTP_CONNECT_TIMEOUT_SECS: u64 = 15;
108pub const SFTP_READ_TIMEOUT_SECS: u64 = 30;
109pub const SFTP_COMMAND_TIMEOUT_SECS: u64 = 300;
110pub const SFTP_DISK_WRITE_CHUNK_SIZE: usize = 64 * 1024;
111pub const SFTP_SPEED_UPDATE_INTERVAL_MS: u64 = 500;
112
113// LPD defaults
114pub const LPD_MULTICAST_ADDRESS: &str = "239.192.152.143";
115pub const LPD_PORT: u16 = 6771;
116pub const LPD_DEFAULT_ANNOUNCE_INTERVAL_SECS: u64 = 300;
117pub const LPD_RECEIVE_BUFFER_SIZE: usize = 1024;
118pub const LPD_DEFAULT_RECEIVE_TIMEOUT_MS: u64 = 2000;
119pub const LPD_ANNOUNCE_DISCOVER_WAIT_MS: u64 = 500;
120
121// Choking algorithm weights
122pub const CHOKING_DOWNLOAD_SPEED_WEIGHT: f64 = 0.00001;
123pub const CHOKING_UPLOAD_SPEED_WEIGHT: f64 = 0.000005;
124pub const CHOKING_SNUBBED_PENALTY: f64 = 1000.0;
125pub const CHOKING_INTEREST_BONUS: f64 = 50.0;
126pub const CHOKING_ANTI_CHURN_THRESHOLD_SECS: u64 = 60;
127pub const CHOKING_ANTI_CHURN_BONUS: f64 = 30.0;
128
129// Peer stats
130pub const PEER_STATS_EMA_ALPHA: f64 = 0.5;
131pub const PEER_STATS_BAD_DATA_THRESHOLD: usize = 3;
132
133// Selector defaults
134pub const DEFAULT_NB_SERVER_TO_EVALUATE: usize = 3;
135pub const DEFAULT_NB_CONNECTIONS: usize = 1;
136
137// Default paths
138pub const DEFAULT_OUTPUT_DIR: &str = ".";
139pub const DEFAULT_FILENAME: &str = "download";
140pub const DEFAULT_HOST: &str = "localhost";