1 /* <!-- copyright */
2 /*
3  * aria2 - The high speed download utility
4  *
5  * Copyright (C) 2006 Tatsuhiro Tsujikawa
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  *
21  * In addition, as a special exception, the copyright holders give
22  * permission to link the code of portions of this program with the
23  * OpenSSL library under certain conditions as described in each
24  * individual source file, and distribute linked combinations
25  * including the two.
26  * You must obey the GNU General Public License in all respects
27  * for all of the code used other than OpenSSL.  If you modify
28  * file(s) with this exception, you may extend this exception to your
29  * version of the file(s), but you are not obligated to do so.  If you
30  * do not wish to do so, delete this exception statement from your
31  * version.  If you delete this exception statement from all source
32  * files in the program, then also delete it here.
33  */
34 /* copyright --> */
35 #ifndef D_PREFS_H
36 #define D_PREFS_H
37 
38 #include "common.h"
39 #include <string>
40 
41 namespace aria2 {
42 
43 struct Pref {
44   Pref(const char* k, size_t i);
45   // Keyword, aka Option Name
46   const char* k;
47   // Option ID
48   size_t i;
49 };
50 
51 typedef const Pref* PrefPtr;
52 
53 namespace option {
54 
55 // Returns the number of options.
56 size_t countOption();
57 
58 // Returns Pref whose ID is id. id must be less than countOption().
59 PrefPtr i2p(size_t id);
60 
61 // Returns Pref whose keyword is k. If no such Pref is found, returns
62 // special null Pref whose ID is 0.
63 PrefPtr k2p(const std::string& k);
64 
65 // Deletes resources allocated for preferences. Call this function at
66 // the end of the program only once.
67 void deletePrefResource();
68 
69 } // namespace option
70 
71 /**
72  * Constants
73  */
74 extern const std::string A2_V_TRUE;
75 extern const std::string A2_V_FALSE;
76 extern const std::string A2_V_DEFAULT;
77 extern const std::string V_NONE;
78 extern const std::string V_MEM;
79 extern const std::string V_ALL;
80 extern const std::string A2_V_FULL;
81 extern const std::string A2_V_HIDE;
82 extern const std::string A2_V_GEOM;
83 extern const std::string V_PREALLOC;
84 extern const std::string V_FALLOC;
85 extern const std::string V_TRUNC;
86 extern const std::string V_DEBUG;
87 extern const std::string V_INFO;
88 extern const std::string V_NOTICE;
89 extern const std::string V_WARN;
90 extern const std::string V_ERROR;
91 extern const std::string V_INORDER;
92 extern const std::string A2_V_RANDOM;
93 extern const std::string V_FEEDBACK;
94 extern const std::string V_ADAPTIVE;
95 extern const std::string V_LIBUV;
96 extern const std::string V_EPOLL;
97 extern const std::string V_KQUEUE;
98 extern const std::string V_PORT;
99 extern const std::string V_POLL;
100 extern const std::string V_SELECT;
101 extern const std::string V_BINARY;
102 extern const std::string V_ASCII;
103 extern const std::string V_GET;
104 extern const std::string V_TUNNEL;
105 extern const std::string V_PLAIN;
106 extern const std::string V_ARC4;
107 extern const std::string V_HTTP;
108 extern const std::string V_HTTPS;
109 extern const std::string V_FTP;
110 extern const std::string A2_V_TLS11;
111 extern const std::string A2_V_TLS12;
112 extern const std::string A2_V_TLS13;
113 
114 extern PrefPtr PREF_VERSION;
115 extern PrefPtr PREF_HELP;
116 
117 /**
118  * General preferences
119  */
120 // values: 1*digit
121 extern PrefPtr PREF_TIMEOUT;
122 // values: 1*digit
123 extern PrefPtr PREF_DNS_TIMEOUT;
124 // values: 1*digit
125 extern PrefPtr PREF_CONNECT_TIMEOUT;
126 // values: 1*digit
127 extern PrefPtr PREF_MAX_TRIES;
128 // values: 1*digit
129 extern PrefPtr PREF_AUTO_SAVE_INTERVAL;
130 // values: a string that your file system recognizes as a file name.
131 extern PrefPtr PREF_LOG;
132 // values: a string that your file system recognizes as a directory.
133 extern PrefPtr PREF_DIR;
134 // values: a string that your file system recognizes as a file name.
135 extern PrefPtr PREF_OUT;
136 // values: 1*digit
137 extern PrefPtr PREF_SPLIT;
138 // value: true | false
139 extern PrefPtr PREF_DAEMON;
140 // value: a string
141 extern PrefPtr PREF_REFERER;
142 // value: 1*digit
143 extern PrefPtr PREF_LOWEST_SPEED_LIMIT;
144 // value: 1*digit
145 extern PrefPtr PREF_PIECE_LENGTH;
146 // value: 1*digit
147 extern PrefPtr PREF_MAX_DOWNLOAD_LIMIT;
148 // value: 1*digit
149 extern PrefPtr PREF_STARTUP_IDLE_TIME;
150 // value: prealloc | falloc | none
151 extern PrefPtr PREF_FILE_ALLOCATION;
152 // value: 1*digit
153 extern PrefPtr PREF_NO_FILE_ALLOCATION_LIMIT;
154 // value: true | false
155 extern PrefPtr PREF_ALLOW_OVERWRITE;
156 // value: true | false
157 extern PrefPtr PREF_REALTIME_CHUNK_CHECKSUM;
158 // value: true | false
159 extern PrefPtr PREF_CHECK_INTEGRITY;
160 // value: string that your file system recognizes as a file name.
161 extern PrefPtr PREF_NETRC_PATH;
162 // value:
163 extern PrefPtr PREF_CONTINUE;
164 // value:
165 extern PrefPtr PREF_NO_NETRC;
166 // value: 1*digit
167 extern PrefPtr PREF_MAX_OVERALL_DOWNLOAD_LIMIT;
168 // value: 1*digit
169 extern PrefPtr PREF_MAX_DOWNLOADS;
170 // value: string that your file system recognizes as a file name.
171 extern PrefPtr PREF_INPUT_FILE;
172 // value: true | false
173 extern PrefPtr PREF_DEFERRED_INPUT;
174 // value: 1*digit
175 extern PrefPtr PREF_MAX_CONCURRENT_DOWNLOADS;
176 // value: true | false
177 extern PrefPtr PREF_OPTIMIZE_CONCURRENT_DOWNLOADS;
178 // value: 1*digit ['.' [ 1*digit ] ]
179 extern PrefPtr PREF_OPTIMIZE_CONCURRENT_DOWNLOADS_COEFFA;
180 // value: 1*digit ['.' [ 1*digit ] ]
181 extern PrefPtr PREF_OPTIMIZE_CONCURRENT_DOWNLOADS_COEFFB;
182 // value: true | false
183 extern PrefPtr PREF_FORCE_SEQUENTIAL;
184 // value: true | false
185 extern PrefPtr PREF_AUTO_FILE_RENAMING;
186 // value: true | false
187 extern PrefPtr PREF_PARAMETERIZED_URI;
188 // value: true | false
189 extern PrefPtr PREF_ALLOW_PIECE_LENGTH_CHANGE;
190 // value: true | false
191 extern PrefPtr PREF_NO_CONF;
192 // value: string
193 extern PrefPtr PREF_CONF_PATH;
194 // value: 1*digit
195 extern PrefPtr PREF_STOP;
196 // value: true | false
197 extern PrefPtr PREF_QUIET;
198 // value: true | false
199 extern PrefPtr PREF_ASYNC_DNS;
200 // value: 1*digit
201 extern PrefPtr PREF_SUMMARY_INTERVAL;
202 // value: debug, info, notice, warn, error
203 extern PrefPtr PREF_LOG_LEVEL;
204 // value: debug, info, notice, warn, error
205 extern PrefPtr PREF_CONSOLE_LOG_LEVEL;
206 // value: inorder | feedback | adaptive
207 extern PrefPtr PREF_URI_SELECTOR;
208 // value: 1*digit
209 extern PrefPtr PREF_SERVER_STAT_TIMEOUT;
210 // value: string that your file system recognizes as a file name.
211 extern PrefPtr PREF_SERVER_STAT_IF;
212 // value: string that your file system recognizes as a file name.
213 extern PrefPtr PREF_SERVER_STAT_OF;
214 // value: true | false
215 extern PrefPtr PREF_REMOTE_TIME;
216 // value: 1*digit
217 extern PrefPtr PREF_MAX_FILE_NOT_FOUND;
218 // value: epoll | select
219 extern PrefPtr PREF_EVENT_POLL;
220 // value: true | false
221 extern PrefPtr PREF_ENABLE_RPC;
222 // value: 1*digit
223 extern PrefPtr PREF_RPC_LISTEN_PORT;
224 // value: string
225 extern PrefPtr PREF_RPC_USER;
226 // value: string
227 extern PrefPtr PREF_RPC_PASSWD;
228 // value: 1*digit
229 extern PrefPtr PREF_RPC_MAX_REQUEST_SIZE;
230 // value: true | false
231 extern PrefPtr PREF_RPC_LISTEN_ALL;
232 // value: true | false
233 extern PrefPtr PREF_RPC_ALLOW_ORIGIN_ALL;
234 // value: string that your file system recognizes as a file name.
235 extern PrefPtr PREF_RPC_CERTIFICATE;
236 // value: string that your file system recognizes as a file name.
237 extern PrefPtr PREF_RPC_PRIVATE_KEY;
238 // value: true | false
239 extern PrefPtr PREF_RPC_SECURE;
240 // value: true | false
241 extern PrefPtr PREF_RPC_SAVE_UPLOAD_METADATA;
242 // value: true | false
243 extern PrefPtr PREF_DRY_RUN;
244 // value: true | false
245 extern PrefPtr PREF_REUSE_URI;
246 // value: string
247 extern PrefPtr PREF_ON_DOWNLOAD_START;
248 extern PrefPtr PREF_ON_DOWNLOAD_PAUSE;
249 extern PrefPtr PREF_ON_DOWNLOAD_STOP;
250 extern PrefPtr PREF_ON_DOWNLOAD_COMPLETE;
251 extern PrefPtr PREF_ON_DOWNLOAD_ERROR;
252 // value: string
253 extern PrefPtr PREF_INTERFACE;
254 // value: string
255 extern PrefPtr PREF_MULTIPLE_INTERFACE;
256 // value: true | false
257 extern PrefPtr PREF_DISABLE_IPV6;
258 // value: true | false
259 extern PrefPtr PREF_HUMAN_READABLE;
260 // value: true | false
261 extern PrefPtr PREF_REMOVE_CONTROL_FILE;
262 // value: true | false
263 extern PrefPtr PREF_ALWAYS_RESUME;
264 // value: 1*digit
265 extern PrefPtr PREF_MAX_RESUME_FAILURE_TRIES;
266 // value: string that your file system recognizes as a file name.
267 extern PrefPtr PREF_SAVE_SESSION;
268 // value: 1*digit
269 extern PrefPtr PREF_MAX_CONNECTION_PER_SERVER;
270 // value: 1*digit
271 extern PrefPtr PREF_MIN_SPLIT_SIZE;
272 // value: true | false
273 extern PrefPtr PREF_CONDITIONAL_GET;
274 // value: true | false
275 extern PrefPtr PREF_SELECT_LEAST_USED_HOST;
276 // value: true | false
277 extern PrefPtr PREF_ENABLE_ASYNC_DNS6;
278 // value: 1*digit
279 extern PrefPtr PREF_MAX_DOWNLOAD_RESULT;
280 // value: 1*digit
281 extern PrefPtr PREF_RETRY_WAIT;
282 // value: string
283 extern PrefPtr PREF_ASYNC_DNS_SERVER;
284 // value: true | false
285 extern PrefPtr PREF_SHOW_CONSOLE_READOUT;
286 // value: default | inorder | geom
287 extern PrefPtr PREF_STREAM_PIECE_SELECTOR;
288 // value: true | false
289 extern PrefPtr PREF_TRUNCATE_CONSOLE_READOUT;
290 // value: true | false
291 extern PrefPtr PREF_PAUSE;
292 // value: default | full | hide
293 extern PrefPtr PREF_DOWNLOAD_RESULT;
294 // value: true | false
295 extern PrefPtr PREF_HASH_CHECK_ONLY;
296 // values: hashType=digest
297 extern PrefPtr PREF_CHECKSUM;
298 // value: pid
299 extern PrefPtr PREF_STOP_WITH_PROCESS;
300 // value: true | false
301 extern PrefPtr PREF_ENABLE_MMAP;
302 // value: true | false
303 extern PrefPtr PREF_FORCE_SAVE;
304 // value: true | false
305 extern PrefPtr PREF_SAVE_NOT_FOUND;
306 // value: 1*digit
307 extern PrefPtr PREF_DISK_CACHE;
308 // value: string
309 extern PrefPtr PREF_GID;
310 // values: 1*digit
311 extern PrefPtr PREF_SAVE_SESSION_INTERVAL;
312 // value: true |false
313 extern PrefPtr PREF_ENABLE_COLOR;
314 // value: string
315 extern PrefPtr PREF_RPC_SECRET;
316 // values: 1*digit
317 extern PrefPtr PREF_DSCP;
318 // values: true | false
319 extern PrefPtr PREF_PAUSE_METADATA;
320 // values: 1*digit
321 extern PrefPtr PREF_RLIMIT_NOFILE;
322 // values: SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2
323 extern PrefPtr PREF_MIN_TLS_VERSION;
324 // value: 1*digit
325 extern PrefPtr PREF_SOCKET_RECV_BUFFER_SIZE;
326 // value: 1*digit
327 extern PrefPtr PREF_MAX_MMAP_LIMIT;
328 // value: true | false
329 extern PrefPtr PREF_STDERR;
330 // value: true | false
331 extern PrefPtr PREF_KEEP_UNFINISHED_DOWNLOAD_RESULT;
332 
333 /**
334  * FTP related preferences
335  */
336 extern PrefPtr PREF_FTP_USER;
337 extern PrefPtr PREF_FTP_PASSWD;
338 // values: binary | ascii
339 extern PrefPtr PREF_FTP_TYPE;
340 // values: true | false
341 extern PrefPtr PREF_FTP_PASV;
342 // values: true | false
343 extern PrefPtr PREF_FTP_REUSE_CONNECTION;
344 // values: hashType=digest
345 extern PrefPtr PREF_SSH_HOST_KEY_MD;
346 
347 /**
348  * HTTP related preferences
349  */
350 extern PrefPtr PREF_HTTP_USER;
351 extern PrefPtr PREF_HTTP_PASSWD;
352 // values: string
353 extern PrefPtr PREF_USER_AGENT;
354 // value: string that your file system recognizes as a file name.
355 extern PrefPtr PREF_LOAD_COOKIES;
356 // value: string that your file system recognizes as a file name.
357 extern PrefPtr PREF_SAVE_COOKIES;
358 // values: true | false
359 extern PrefPtr PREF_ENABLE_HTTP_KEEP_ALIVE;
360 // values: true | false
361 extern PrefPtr PREF_ENABLE_HTTP_PIPELINING;
362 // value: 1*digit
363 extern PrefPtr PREF_MAX_HTTP_PIPELINING;
364 // value: string
365 extern PrefPtr PREF_HEADER;
366 // value: string that your file system recognizes as a file name.
367 extern PrefPtr PREF_CERTIFICATE;
368 // value: string that your file system recognizes as a file name.
369 extern PrefPtr PREF_PRIVATE_KEY;
370 // value: string that your file system recognizes as a file name.
371 extern PrefPtr PREF_CA_CERTIFICATE;
372 // value: true | false
373 extern PrefPtr PREF_CHECK_CERTIFICATE;
374 // value: true | false
375 extern PrefPtr PREF_USE_HEAD;
376 // value: true | false
377 extern PrefPtr PREF_HTTP_AUTH_CHALLENGE;
378 // value: true | false
379 extern PrefPtr PREF_HTTP_NO_CACHE;
380 // value: true | false
381 extern PrefPtr PREF_HTTP_ACCEPT_GZIP;
382 // value: true | false
383 extern PrefPtr PREF_CONTENT_DISPOSITION_DEFAULT_UTF8;
384 
385 /**;
386  * Proxy related preferences
387  */
388 extern PrefPtr PREF_HTTP_PROXY;
389 extern PrefPtr PREF_HTTPS_PROXY;
390 extern PrefPtr PREF_FTP_PROXY;
391 extern PrefPtr PREF_ALL_PROXY;
392 // values: comma separated hostname or domain
393 extern PrefPtr PREF_NO_PROXY;
394 // values: get | tunnel
395 extern PrefPtr PREF_PROXY_METHOD;
396 extern PrefPtr PREF_HTTP_PROXY_USER;
397 extern PrefPtr PREF_HTTP_PROXY_PASSWD;
398 extern PrefPtr PREF_HTTPS_PROXY_USER;
399 extern PrefPtr PREF_HTTPS_PROXY_PASSWD;
400 extern PrefPtr PREF_FTP_PROXY_USER;
401 extern PrefPtr PREF_FTP_PROXY_PASSWD;
402 extern PrefPtr PREF_ALL_PROXY_USER;
403 extern PrefPtr PREF_ALL_PROXY_PASSWD;
404 
405 /**
406  * BitTorrent related preferences
407  */
408 // values: 1*digit
409 extern PrefPtr PREF_PEER_CONNECTION_TIMEOUT;
410 // values: 1*digit
411 extern PrefPtr PREF_BT_TIMEOUT;
412 // values: 1*digit
413 extern PrefPtr PREF_BT_REQUEST_TIMEOUT;
414 // values: true | false
415 extern PrefPtr PREF_SHOW_FILES;
416 // values: 1*digit
417 extern PrefPtr PREF_MAX_OVERALL_UPLOAD_LIMIT;
418 // values: 1*digit
419 extern PrefPtr PREF_MAX_UPLOAD_LIMIT;
420 // values: a string that your file system recognizes as a file name.
421 extern PrefPtr PREF_TORRENT_FILE;
422 // values: 1*digit
423 extern PrefPtr PREF_LISTEN_PORT;
424 // values: true | false | mem
425 extern PrefPtr PREF_FOLLOW_TORRENT;
426 // values: 1*digit *( (,|-) 1*digit)
427 extern PrefPtr PREF_SELECT_FILE;
428 // values: 1*digit ['.' [ 1*digit ] ]
429 extern PrefPtr PREF_SEED_TIME;
430 // values: 1*digit ['.' [ 1*digit ] ]
431 extern PrefPtr PREF_SEED_RATIO;
432 // values: 1*digit
433 extern PrefPtr PREF_BT_KEEP_ALIVE_INTERVAL;
434 // values: a string, less than or equals to 20 bytes length
435 extern PrefPtr PREF_PEER_ID_PREFIX;
436 // values: a string representing the extended BT handshake peer user agent
437 extern PrefPtr PREF_PEER_AGENT;
438 // values: true | false
439 extern PrefPtr PREF_ENABLE_PEER_EXCHANGE;
440 // values: true | false
441 extern PrefPtr PREF_ENABLE_DHT;
442 // values: a string
443 extern PrefPtr PREF_DHT_LISTEN_ADDR;
444 // values: 1*digit
445 extern PrefPtr PREF_DHT_LISTEN_PORT;
446 // values: a string
447 extern PrefPtr PREF_DHT_ENTRY_POINT_HOST;
448 // values: 1*digit
449 extern PrefPtr PREF_DHT_ENTRY_POINT_PORT;
450 // values: a string (hostname:port)
451 extern PrefPtr PREF_DHT_ENTRY_POINT;
452 // values: a string
453 extern PrefPtr PREF_DHT_FILE_PATH;
454 // values: true | false
455 extern PrefPtr PREF_ENABLE_DHT6;
456 // values: a string
457 extern PrefPtr PREF_DHT_LISTEN_ADDR6;
458 // values: a string
459 extern PrefPtr PREF_DHT_ENTRY_POINT_HOST6;
460 // values: 1*digit
461 extern PrefPtr PREF_DHT_ENTRY_POINT_PORT6;
462 // values: a string (hostname:port)
463 extern PrefPtr PREF_DHT_ENTRY_POINT6;
464 // values: a string
465 extern PrefPtr PREF_DHT_FILE_PATH6;
466 // values: plain | arc4
467 extern PrefPtr PREF_BT_MIN_CRYPTO_LEVEL;
468 // values:: true | false
469 extern PrefPtr PREF_BT_REQUIRE_CRYPTO;
470 // values: 1*digit
471 extern PrefPtr PREF_BT_REQUEST_PEER_SPEED_LIMIT;
472 // values: 1*digit
473 extern PrefPtr PREF_BT_MAX_OPEN_FILES;
474 // values: true | false
475 extern PrefPtr PREF_BT_SEED_UNVERIFIED;
476 // values: true | false
477 extern PrefPtr PREF_BT_HASH_CHECK_SEED;
478 // values: 1*digit
479 extern PrefPtr PREF_BT_MAX_PEERS;
480 // values: a string (IP address)
481 extern PrefPtr PREF_BT_EXTERNAL_IP;
482 // values: 1*digit '=' a string that your file system recognizes as a file name.
483 extern PrefPtr PREF_INDEX_OUT;
484 // values: 1*digit
485 extern PrefPtr PREF_BT_TRACKER_INTERVAL;
486 // values: 1*digit
487 extern PrefPtr PREF_BT_STOP_TIMEOUT;
488 // values: head[=SIZE]|tail[=SIZE], ...
489 extern PrefPtr PREF_BT_PRIORITIZE_PIECE;
490 // values: true | false
491 extern PrefPtr PREF_BT_SAVE_METADATA;
492 // values: true | false
493 extern PrefPtr PREF_BT_METADATA_ONLY;
494 // values: true | false
495 extern PrefPtr PREF_BT_ENABLE_LPD;
496 // values: string
497 extern PrefPtr PREF_BT_LPD_INTERFACE;
498 // values: 1*digit
499 extern PrefPtr PREF_BT_TRACKER_TIMEOUT;
500 // values: 1*digit
501 extern PrefPtr PREF_BT_TRACKER_CONNECT_TIMEOUT;
502 // values: 1*digit
503 extern PrefPtr PREF_DHT_MESSAGE_TIMEOUT;
504 // values: string
505 extern PrefPtr PREF_ON_BT_DOWNLOAD_COMPLETE;
506 // values: string
507 extern PrefPtr PREF_BT_TRACKER;
508 // values: string
509 extern PrefPtr PREF_BT_EXCLUDE_TRACKER;
510 // values: true | false
511 extern PrefPtr PREF_BT_REMOVE_UNSELECTED_FILE;
512 // values: true |false
513 extern PrefPtr PREF_BT_DETACH_SEED_ONLY;
514 // values: true | false
515 extern PrefPtr PREF_BT_FORCE_ENCRYPTION;
516 // values: true | false
517 extern PrefPtr PREF_BT_ENABLE_HOOK_AFTER_HASH_CHECK;
518 // values: true | false
519 extern PrefPtr PREF_BT_LOAD_SAVED_METADATA;
520 
521 /**
522  * Metalink related preferences
523  */
524 // values: a string that your file system recognizes as a file name.
525 extern PrefPtr PREF_METALINK_FILE;
526 // values: a string
527 extern PrefPtr PREF_METALINK_VERSION;
528 // values: a string
529 extern PrefPtr PREF_METALINK_LANGUAGE;
530 // values: a string
531 extern PrefPtr PREF_METALINK_OS;
532 // values: a string
533 extern PrefPtr PREF_METALINK_LOCATION;
534 // values: true | false | mem
535 extern PrefPtr PREF_FOLLOW_METALINK;
536 // values: http | https | ftp | none
537 extern PrefPtr PREF_METALINK_PREFERRED_PROTOCOL;
538 // values: true | false
539 extern PrefPtr PREF_METALINK_ENABLE_UNIQUE_PROTOCOL;
540 // values: a string
541 extern PrefPtr PREF_METALINK_BASE_URI;
542 
543 } // namespace aria2
544 
545 #endif // D_PREFS_H
546