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 #include "prefs.h"
36 
37 #include <cassert>
38 #include <vector>
39 #include <map>
40 
41 namespace aria2 {
42 
Pref(const char * k,size_t i)43 Pref::Pref(const char* k, size_t i) : k(k), i(i) {}
44 
45 namespace {
46 
47 class PrefFactory {
48 public:
PrefFactory()49   PrefFactory() : count_(0)
50   {
51     // We add special null pref whose ID is 0.
52     makePref("");
53   }
~PrefFactory()54   ~PrefFactory()
55   {
56     for (size_t i = 0; i < count_; ++i) {
57       delete i2p_[i];
58     }
59   }
60 
nextId()61   size_t nextId() { return count_++; }
makePref(const char * key)62   Pref* makePref(const char* key)
63   {
64     size_t id = nextId();
65     auto pref = new Pref(key, id);
66     i2p_.push_back(pref);
67     k2p_[key] = pref;
68     return pref;
69   }
getCount() const70   size_t getCount() const { return count_; }
i2p(size_t id) const71   PrefPtr i2p(size_t id) const
72   {
73     assert(id < count_);
74     return i2p_[id];
75   }
k2p(const std::string & k) const76   PrefPtr k2p(const std::string& k) const
77   {
78     auto i = k2p_.find(k);
79     if (i == k2p_.end()) {
80       return i2p_[0];
81     }
82     return (*i).second;
83   }
84 
85 private:
86   size_t count_;
87   std::vector<PrefPtr> i2p_;
88   std::map<std::string, PrefPtr> k2p_;
89 };
90 
getPrefFactory()91 PrefFactory* getPrefFactory()
92 {
93   // singleton.
94   static auto pf = new PrefFactory();
95   return pf;
96 }
97 
makePref(const char * key)98 Pref* makePref(const char* key) { return getPrefFactory()->makePref(key); }
99 
100 } // namespace
101 
102 namespace option {
103 
countOption()104 size_t countOption() { return getPrefFactory()->getCount(); }
105 
i2p(size_t id)106 PrefPtr i2p(size_t id) { return getPrefFactory()->i2p(id); }
107 
k2p(const std::string & key)108 PrefPtr k2p(const std::string& key) { return getPrefFactory()->k2p(key); }
109 
deletePrefResource()110 void deletePrefResource() { delete getPrefFactory(); }
111 
112 } // namespace option
113 
114 /**
115  * Constants
116  */
117 const std::string A2_V_TRUE("true");
118 const std::string A2_V_FALSE("false");
119 const std::string A2_V_DEFAULT("default");
120 const std::string V_NONE("none");
121 const std::string V_MEM("mem");
122 const std::string V_ALL("all");
123 const std::string A2_V_FULL("full");
124 const std::string A2_V_HIDE("hide");
125 const std::string A2_V_GEOM("geom");
126 const std::string V_PREALLOC("prealloc");
127 const std::string V_FALLOC("falloc");
128 const std::string V_TRUNC("trunc");
129 const std::string V_DEBUG("debug");
130 const std::string V_INFO("info");
131 const std::string V_NOTICE("notice");
132 const std::string V_WARN("warn");
133 const std::string V_ERROR("error");
134 const std::string V_INORDER("inorder");
135 const std::string A2_V_RANDOM("random");
136 const std::string V_FEEDBACK("feedback");
137 const std::string V_ADAPTIVE("adaptive");
138 const std::string V_LIBUV("libuv");
139 const std::string V_EPOLL("epoll");
140 const std::string V_KQUEUE("kqueue");
141 const std::string V_PORT("port");
142 const std::string V_POLL("poll");
143 const std::string V_SELECT("select");
144 const std::string V_BINARY("binary");
145 const std::string V_ASCII("ascii");
146 const std::string V_GET("get");
147 const std::string V_TUNNEL("tunnel");
148 const std::string V_PLAIN("plain");
149 const std::string V_ARC4("arc4");
150 const std::string V_HTTP("http");
151 const std::string V_HTTPS("https");
152 const std::string V_FTP("ftp");
153 const std::string A2_V_TLS11("TLSv1.1");
154 const std::string A2_V_TLS12("TLSv1.2");
155 const std::string A2_V_TLS13("TLSv1.3");
156 
157 PrefPtr PREF_VERSION = makePref("version");
158 PrefPtr PREF_HELP = makePref("help");
159 
160 /**
161  * General preferences
162  */
163 // values: 1*digit
164 PrefPtr PREF_TIMEOUT = makePref("timeout");
165 // values: 1*digit
166 PrefPtr PREF_DNS_TIMEOUT = makePref("dns-timeout");
167 // values: 1*digit
168 PrefPtr PREF_CONNECT_TIMEOUT = makePref("connect-timeout");
169 // values: 1*digit
170 PrefPtr PREF_MAX_TRIES = makePref("max-tries");
171 // values: 1*digit
172 PrefPtr PREF_AUTO_SAVE_INTERVAL = makePref("auto-save-interval");
173 // values: a string that your file system recognizes as a file name.
174 PrefPtr PREF_LOG = makePref("log");
175 // values: a string that your file system recognizes as a directory.
176 PrefPtr PREF_DIR = makePref("dir");
177 // values: a string that your file system recognizes as a file name.
178 PrefPtr PREF_OUT = makePref("out");
179 // values: 1*digit
180 PrefPtr PREF_SPLIT = makePref("split");
181 // value: true | false
182 PrefPtr PREF_DAEMON = makePref("daemon");
183 // value: a string
184 PrefPtr PREF_REFERER = makePref("referer");
185 // value: 1*digit
186 PrefPtr PREF_LOWEST_SPEED_LIMIT = makePref("lowest-speed-limit");
187 // value: 1*digit
188 PrefPtr PREF_PIECE_LENGTH = makePref("piece-length");
189 // value: 1*digit
190 PrefPtr PREF_MAX_OVERALL_DOWNLOAD_LIMIT =
191     makePref("max-overall-download-limit");
192 // value: 1*digit
193 PrefPtr PREF_MAX_DOWNLOAD_LIMIT = makePref("max-download-limit");
194 // value: 1*digit
195 PrefPtr PREF_STARTUP_IDLE_TIME = makePref("startup-idle-time");
196 // value: prealloc | fallc | none
197 PrefPtr PREF_FILE_ALLOCATION = makePref("file-allocation");
198 // value: 1*digit
199 PrefPtr PREF_NO_FILE_ALLOCATION_LIMIT = makePref("no-file-allocation-limit");
200 // value: true | false
201 PrefPtr PREF_ALLOW_OVERWRITE = makePref("allow-overwrite");
202 // value: true | false
203 PrefPtr PREF_REALTIME_CHUNK_CHECKSUM = makePref("realtime-chunk-checksum");
204 // value: true | false
205 PrefPtr PREF_CHECK_INTEGRITY = makePref("check-integrity");
206 // value: string that your file system recognizes as a file name.
207 PrefPtr PREF_NETRC_PATH = makePref("netrc-path");
208 // value:
209 PrefPtr PREF_CONTINUE = makePref("continue");
210 // value:
211 PrefPtr PREF_NO_NETRC = makePref("no-netrc");
212 // value: 1*digit
213 PrefPtr PREF_MAX_DOWNLOADS = makePref("max-downloads");
214 // value: string that your file system recognizes as a file name.
215 PrefPtr PREF_INPUT_FILE = makePref("input-file");
216 // value: true | false
217 PrefPtr PREF_DEFERRED_INPUT = makePref("deferred-input");
218 // value: 1*digit
219 PrefPtr PREF_MAX_CONCURRENT_DOWNLOADS = makePref("max-concurrent-downloads");
220 // value: true | false | A:B
221 PrefPtr PREF_OPTIMIZE_CONCURRENT_DOWNLOADS =
222     makePref("optimize-concurrent-downloads");
223 // values: 1*digit ['.' [ 1*digit ] ]
224 PrefPtr PREF_OPTIMIZE_CONCURRENT_DOWNLOADS_COEFFA =
225     makePref("optimize-concurrent-downloads-coeffA");
226 // values: 1*digit ['.' [ 1*digit ] ]
227 PrefPtr PREF_OPTIMIZE_CONCURRENT_DOWNLOADS_COEFFB =
228     makePref("optimize-concurrent-downloads-coeffB");
229 // value: true | false
230 PrefPtr PREF_FORCE_SEQUENTIAL = makePref("force-sequential");
231 // value: true | false
232 PrefPtr PREF_AUTO_FILE_RENAMING = makePref("auto-file-renaming");
233 // value: true | false
234 PrefPtr PREF_PARAMETERIZED_URI = makePref("parameterized-uri");
235 // value: true | false
236 PrefPtr PREF_ALLOW_PIECE_LENGTH_CHANGE = makePref("allow-piece-length-change");
237 // value: true | false
238 PrefPtr PREF_NO_CONF = makePref("no-conf");
239 // value: string
240 PrefPtr PREF_CONF_PATH = makePref("conf-path");
241 // value: 1*digit
242 PrefPtr PREF_STOP = makePref("stop");
243 // value: true | false
244 PrefPtr PREF_QUIET = makePref("quiet");
245 // value: true | false
246 PrefPtr PREF_ASYNC_DNS = makePref("async-dns");
247 // value: 1*digit
248 PrefPtr PREF_SUMMARY_INTERVAL = makePref("summary-interval");
249 // value: debug, info, notice, warn, error
250 PrefPtr PREF_LOG_LEVEL = makePref("log-level");
251 // value: debug, info, notice, warn, error
252 PrefPtr PREF_CONSOLE_LOG_LEVEL = makePref("console-log-level");
253 // value: inorder | feedback | adaptive
254 PrefPtr PREF_URI_SELECTOR = makePref("uri-selector");
255 // value: 1*digit
256 PrefPtr PREF_SERVER_STAT_TIMEOUT = makePref("server-stat-timeout");
257 // value: string that your file system recognizes as a file name.
258 PrefPtr PREF_SERVER_STAT_IF = makePref("server-stat-if");
259 // value: string that your file system recognizes as a file name.
260 PrefPtr PREF_SERVER_STAT_OF = makePref("server-stat-of");
261 // value: true | false
262 PrefPtr PREF_REMOTE_TIME = makePref("remote-time");
263 // value: 1*digit
264 PrefPtr PREF_MAX_FILE_NOT_FOUND = makePref("max-file-not-found");
265 // value: epoll | select
266 PrefPtr PREF_EVENT_POLL = makePref("event-poll");
267 // value: true | false
268 PrefPtr PREF_ENABLE_RPC = makePref("enable-rpc");
269 // value: 1*digit
270 PrefPtr PREF_RPC_LISTEN_PORT = makePref("rpc-listen-port");
271 // value: string
272 PrefPtr PREF_RPC_USER = makePref("rpc-user");
273 // value: string
274 PrefPtr PREF_RPC_PASSWD = makePref("rpc-passwd");
275 // value: 1*digit
276 PrefPtr PREF_RPC_MAX_REQUEST_SIZE = makePref("rpc-max-request-size");
277 // value: true | false
278 PrefPtr PREF_RPC_LISTEN_ALL = makePref("rpc-listen-all");
279 // value: true | false
280 PrefPtr PREF_RPC_ALLOW_ORIGIN_ALL = makePref("rpc-allow-origin-all");
281 // value: string that your file system recognizes as a file name.
282 PrefPtr PREF_RPC_CERTIFICATE = makePref("rpc-certificate");
283 // value: string that your file system recognizes as a file name.
284 PrefPtr PREF_RPC_PRIVATE_KEY = makePref("rpc-private-key");
285 // value: true | false
286 PrefPtr PREF_RPC_SECURE = makePref("rpc-secure");
287 // value: true | false
288 PrefPtr PREF_RPC_SAVE_UPLOAD_METADATA = makePref("rpc-save-upload-metadata");
289 // value: true | false
290 PrefPtr PREF_DRY_RUN = makePref("dry-run");
291 // value: true | false
292 PrefPtr PREF_REUSE_URI = makePref("reuse-uri");
293 // value: string
294 PrefPtr PREF_ON_DOWNLOAD_START = makePref("on-download-start");
295 PrefPtr PREF_ON_DOWNLOAD_PAUSE = makePref("on-download-pause");
296 PrefPtr PREF_ON_DOWNLOAD_STOP = makePref("on-download-stop");
297 PrefPtr PREF_ON_DOWNLOAD_COMPLETE = makePref("on-download-complete");
298 PrefPtr PREF_ON_DOWNLOAD_ERROR = makePref("on-download-error");
299 // value: string
300 PrefPtr PREF_INTERFACE = makePref("interface");
301 // value: string
302 PrefPtr PREF_MULTIPLE_INTERFACE = makePref("multiple-interface");
303 // value: true | false
304 PrefPtr PREF_DISABLE_IPV6 = makePref("disable-ipv6");
305 // value: true | false
306 PrefPtr PREF_HUMAN_READABLE = makePref("human-readable");
307 // value: true | false
308 PrefPtr PREF_REMOVE_CONTROL_FILE = makePref("remove-control-file");
309 // value: true | false
310 PrefPtr PREF_ALWAYS_RESUME = makePref("always-resume");
311 // value: 1*digit
312 PrefPtr PREF_MAX_RESUME_FAILURE_TRIES = makePref("max-resume-failure-tries");
313 // value: string that your file system recognizes as a file name.
314 PrefPtr PREF_SAVE_SESSION = makePref("save-session");
315 // value: 1*digit
316 PrefPtr PREF_MAX_CONNECTION_PER_SERVER = makePref("max-connection-per-server");
317 // value: 1*digit
318 PrefPtr PREF_MIN_SPLIT_SIZE = makePref("min-split-size");
319 // value: true | false
320 PrefPtr PREF_CONDITIONAL_GET = makePref("conditional-get");
321 // value: true | false
322 PrefPtr PREF_SELECT_LEAST_USED_HOST = makePref("select-least-used-host");
323 // value: true | false
324 PrefPtr PREF_ENABLE_ASYNC_DNS6 = makePref("enable-async-dns6");
325 // value: 1*digit
326 PrefPtr PREF_MAX_DOWNLOAD_RESULT = makePref("max-download-result");
327 // value: 1*digit
328 PrefPtr PREF_RETRY_WAIT = makePref("retry-wait");
329 // value: string
330 PrefPtr PREF_ASYNC_DNS_SERVER = makePref("async-dns-server");
331 // value: true | false
332 PrefPtr PREF_SHOW_CONSOLE_READOUT = makePref("show-console-readout");
333 // value: default | inorder
334 PrefPtr PREF_STREAM_PIECE_SELECTOR = makePref("stream-piece-selector");
335 // value: true | false
336 PrefPtr PREF_TRUNCATE_CONSOLE_READOUT = makePref("truncate-console-readout");
337 // value: true | false
338 PrefPtr PREF_PAUSE = makePref("pause");
339 // value: default | full | hide
340 PrefPtr PREF_DOWNLOAD_RESULT = makePref("download-result");
341 // value: true | false
342 PrefPtr PREF_HASH_CHECK_ONLY = makePref("hash-check-only");
343 // values: hashType=digest
344 PrefPtr PREF_CHECKSUM = makePref("checksum");
345 // value: pid
346 PrefPtr PREF_STOP_WITH_PROCESS = makePref("stop-with-process");
347 // value: true | false
348 PrefPtr PREF_ENABLE_MMAP = makePref("enable-mmap");
349 // value: true | false
350 PrefPtr PREF_FORCE_SAVE = makePref("force-save");
351 // value: true | false
352 PrefPtr PREF_SAVE_NOT_FOUND = makePref("save-not-found");
353 // value: 1*digit
354 PrefPtr PREF_DISK_CACHE = makePref("disk-cache");
355 // value: string
356 PrefPtr PREF_GID = makePref("gid");
357 // values: 1*digit
358 PrefPtr PREF_SAVE_SESSION_INTERVAL = makePref("save-session-interval");
359 PrefPtr PREF_ENABLE_COLOR = makePref("enable-color");
360 // value: string
361 PrefPtr PREF_RPC_SECRET = makePref("rpc-secret");
362 // values: 1*digit
363 PrefPtr PREF_DSCP = makePref("dscp");
364 // values: true | false
365 PrefPtr PREF_PAUSE_METADATA = makePref("pause-metadata");
366 // values: 1*digit
367 PrefPtr PREF_RLIMIT_NOFILE = makePref("rlimit-nofile");
368 // values: SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2
369 PrefPtr PREF_MIN_TLS_VERSION = makePref("min-tls-version");
370 // value: 1*digit
371 PrefPtr PREF_SOCKET_RECV_BUFFER_SIZE = makePref("socket-recv-buffer-size");
372 // value: 1*digit
373 PrefPtr PREF_MAX_MMAP_LIMIT = makePref("max-mmap-limit");
374 // value: true | false
375 PrefPtr PREF_STDERR = makePref("stderr");
376 // value: true | false
377 PrefPtr PREF_KEEP_UNFINISHED_DOWNLOAD_RESULT =
378     makePref("keep-unfinished-download-result");
379 
380 /**
381  * FTP related preferences
382  */
383 PrefPtr PREF_FTP_USER = makePref("ftp-user");
384 PrefPtr PREF_FTP_PASSWD = makePref("ftp-passwd");
385 // values: binary | ascii
386 PrefPtr PREF_FTP_TYPE = makePref("ftp-type");
387 // values: true | false
388 PrefPtr PREF_FTP_PASV = makePref("ftp-pasv");
389 // values: true | false
390 PrefPtr PREF_FTP_REUSE_CONNECTION = makePref("ftp-reuse-connection");
391 // values: hashType=digest
392 PrefPtr PREF_SSH_HOST_KEY_MD = makePref("ssh-host-key-md");
393 
394 /**
395  * HTTP related preferences
396  */
397 PrefPtr PREF_HTTP_USER = makePref("http-user");
398 PrefPtr PREF_HTTP_PASSWD = makePref("http-passwd");
399 // values: string
400 PrefPtr PREF_USER_AGENT = makePref("user-agent");
401 // value: string that your file system recognizes as a file name.
402 PrefPtr PREF_LOAD_COOKIES = makePref("load-cookies");
403 // value: string that your file system recognizes as a file name.
404 PrefPtr PREF_SAVE_COOKIES = makePref("save-cookies");
405 // values: true | false
406 PrefPtr PREF_ENABLE_HTTP_KEEP_ALIVE = makePref("enable-http-keep-alive");
407 // values: true | false
408 PrefPtr PREF_ENABLE_HTTP_PIPELINING = makePref("enable-http-pipelining");
409 // value: 1*digit
410 PrefPtr PREF_MAX_HTTP_PIPELINING = makePref("max-http-pipelining");
411 // value: string
412 PrefPtr PREF_HEADER = makePref("header");
413 // value: string that your file system recognizes as a file name.
414 PrefPtr PREF_CERTIFICATE = makePref("certificate");
415 // value: string that your file system recognizes as a file name.
416 PrefPtr PREF_PRIVATE_KEY = makePref("private-key");
417 // value: string that your file system recognizes as a file name.
418 PrefPtr PREF_CA_CERTIFICATE = makePref("ca-certificate");
419 // value: true | false
420 PrefPtr PREF_CHECK_CERTIFICATE = makePref("check-certificate");
421 // value: true | false
422 PrefPtr PREF_USE_HEAD = makePref("use-head");
423 // value: true | false
424 PrefPtr PREF_HTTP_AUTH_CHALLENGE = makePref("http-auth-challenge");
425 // value: true | false
426 PrefPtr PREF_HTTP_NO_CACHE = makePref("http-no-cache");
427 // value: true | false
428 PrefPtr PREF_HTTP_ACCEPT_GZIP = makePref("http-accept-gzip");
429 // value: true | false
430 PrefPtr PREF_CONTENT_DISPOSITION_DEFAULT_UTF8 =
431     makePref("content-disposition-default-utf8");
432 
433 /**
434  * Proxy related preferences
435  */
436 PrefPtr PREF_HTTP_PROXY = makePref("http-proxy");
437 PrefPtr PREF_HTTPS_PROXY = makePref("https-proxy");
438 PrefPtr PREF_FTP_PROXY = makePref("ftp-proxy");
439 PrefPtr PREF_ALL_PROXY = makePref("all-proxy");
440 // values: comma separated hostname or domain
441 PrefPtr PREF_NO_PROXY = makePref("no-proxy");
442 // values: get | tunnel
443 PrefPtr PREF_PROXY_METHOD = makePref("proxy-method");
444 PrefPtr PREF_HTTP_PROXY_USER = makePref("http-proxy-user");
445 PrefPtr PREF_HTTP_PROXY_PASSWD = makePref("http-proxy-passwd");
446 PrefPtr PREF_HTTPS_PROXY_USER = makePref("https-proxy-user");
447 PrefPtr PREF_HTTPS_PROXY_PASSWD = makePref("https-proxy-passwd");
448 PrefPtr PREF_FTP_PROXY_USER = makePref("ftp-proxy-user");
449 PrefPtr PREF_FTP_PROXY_PASSWD = makePref("ftp-proxy-passwd");
450 PrefPtr PREF_ALL_PROXY_USER = makePref("all-proxy-user");
451 PrefPtr PREF_ALL_PROXY_PASSWD = makePref("all-proxy-passwd");
452 
453 /**
454  * BitTorrent related preferences
455  */
456 // values: 1*digit
457 PrefPtr PREF_PEER_CONNECTION_TIMEOUT = makePref("peer-connection-timeout");
458 // values: 1*digit
459 PrefPtr PREF_BT_TIMEOUT = makePref("bt-timeout");
460 // values: 1*digit
461 PrefPtr PREF_BT_REQUEST_TIMEOUT = makePref("bt-request-timeout");
462 // values: true | false
463 PrefPtr PREF_SHOW_FILES = makePref("show-files");
464 // values: 1*digit
465 PrefPtr PREF_MAX_OVERALL_UPLOAD_LIMIT = makePref("max-overall-upload-limit");
466 // values: 1*digit
467 PrefPtr PREF_MAX_UPLOAD_LIMIT = makePref("max-upload-limit");
468 // values: a string that your file system recognizes as a file name.
469 PrefPtr PREF_TORRENT_FILE = makePref("torrent-file");
470 // values: 1*digit
471 PrefPtr PREF_LISTEN_PORT = makePref("listen-port");
472 // values: true | false | mem
473 PrefPtr PREF_FOLLOW_TORRENT = makePref("follow-torrent");
474 // values: 1*digit * = makePref(  = makePref(,|-) 1*digit);
475 PrefPtr PREF_SELECT_FILE = makePref("select-file");
476 // values: 1*digit
477 PrefPtr PREF_SEED_TIME = makePref("seed-time");
478 // values: 1*digit ['.' [ 1*digit ] ]
479 PrefPtr PREF_SEED_RATIO = makePref("seed-ratio");
480 // values: 1*digit
481 PrefPtr PREF_BT_KEEP_ALIVE_INTERVAL = makePref("bt-keep-alive-interval");
482 // values: a string, less than or equals to 20 bytes length
483 PrefPtr PREF_PEER_ID_PREFIX = makePref("peer-id-prefix");
484 // values: a string representing the extended BT handshake peer user agent
485 PrefPtr PREF_PEER_AGENT = makePref("peer-agent");
486 // values: true | false
487 PrefPtr PREF_ENABLE_PEER_EXCHANGE = makePref("enable-peer-exchange");
488 // values: true | false
489 PrefPtr PREF_ENABLE_DHT = makePref("enable-dht");
490 // values: a string
491 PrefPtr PREF_DHT_LISTEN_ADDR = makePref("dht-listen-addr");
492 // values: 1*digit
493 PrefPtr PREF_DHT_LISTEN_PORT = makePref("dht-listen-port");
494 // values: a string
495 PrefPtr PREF_DHT_ENTRY_POINT_HOST = makePref("dht-entry-point-host");
496 // values: 1*digit
497 PrefPtr PREF_DHT_ENTRY_POINT_PORT = makePref("dht-entry-point-port");
498 // values: a string  = makePref(hostname:port);
499 PrefPtr PREF_DHT_ENTRY_POINT = makePref("dht-entry-point");
500 // values: a string
501 PrefPtr PREF_DHT_FILE_PATH = makePref("dht-file-path");
502 // values: true | false
503 PrefPtr PREF_ENABLE_DHT6 = makePref("enable-dht6");
504 // values: a string
505 PrefPtr PREF_DHT_LISTEN_ADDR6 = makePref("dht-listen-addr6");
506 // values: a string
507 PrefPtr PREF_DHT_ENTRY_POINT_HOST6 = makePref("dht-entry-point-host6");
508 // values: 1*digit
509 PrefPtr PREF_DHT_ENTRY_POINT_PORT6 = makePref("dht-entry-point-port6");
510 // values: a string  = makePref(hostname:port)
511 PrefPtr PREF_DHT_ENTRY_POINT6 = makePref("dht-entry-point6");
512 // values: a string
513 PrefPtr PREF_DHT_FILE_PATH6 = makePref("dht-file-path6");
514 // values: plain | arc4
515 PrefPtr PREF_BT_MIN_CRYPTO_LEVEL = makePref("bt-min-crypto-level");
516 // values:: true | false
517 PrefPtr PREF_BT_REQUIRE_CRYPTO = makePref("bt-require-crypto");
518 // values: 1*digit
519 PrefPtr PREF_BT_REQUEST_PEER_SPEED_LIMIT =
520     makePref("bt-request-peer-speed-limit");
521 // values: 1*digit
522 PrefPtr PREF_BT_MAX_OPEN_FILES = makePref("bt-max-open-files");
523 // values: true | false
524 PrefPtr PREF_BT_SEED_UNVERIFIED = makePref("bt-seed-unverified");
525 // values: true | false
526 PrefPtr PREF_BT_HASH_CHECK_SEED = makePref("bt-hash-check-seed");
527 // values: 1*digit
528 PrefPtr PREF_BT_MAX_PEERS = makePref("bt-max-peers");
529 // values: a string  = makePref(IP address)
530 PrefPtr PREF_BT_EXTERNAL_IP = makePref("bt-external-ip");
531 // values: 1*digit '=' a string that your file system recognizes as a file name.
532 PrefPtr PREF_INDEX_OUT = makePref("index-out");
533 // values: 1*digit
534 PrefPtr PREF_BT_TRACKER_INTERVAL = makePref("bt-tracker-interval");
535 // values: 1*digit
536 PrefPtr PREF_BT_STOP_TIMEOUT = makePref("bt-stop-timeout");
537 // values: head[=SIZE]|tail[=SIZE], ...
538 PrefPtr PREF_BT_PRIORITIZE_PIECE = makePref("bt-prioritize-piece");
539 // values: true | false
540 PrefPtr PREF_BT_SAVE_METADATA = makePref("bt-save-metadata");
541 // values: true | false
542 PrefPtr PREF_BT_METADATA_ONLY = makePref("bt-metadata-only");
543 // values: true | false
544 PrefPtr PREF_BT_ENABLE_LPD = makePref("bt-enable-lpd");
545 // values: string
546 PrefPtr PREF_BT_LPD_INTERFACE = makePref("bt-lpd-interface");
547 // values: 1*digit
548 PrefPtr PREF_BT_TRACKER_TIMEOUT = makePref("bt-tracker-timeout");
549 // values: 1*digit
550 PrefPtr PREF_BT_TRACKER_CONNECT_TIMEOUT =
551     makePref("bt-tracker-connect-timeout");
552 // values: 1*digit
553 PrefPtr PREF_DHT_MESSAGE_TIMEOUT = makePref("dht-message-timeout");
554 // values: string
555 PrefPtr PREF_ON_BT_DOWNLOAD_COMPLETE = makePref("on-bt-download-complete");
556 // values: string
557 PrefPtr PREF_BT_TRACKER = makePref("bt-tracker");
558 // values: string
559 PrefPtr PREF_BT_EXCLUDE_TRACKER = makePref("bt-exclude-tracker");
560 // values: true | false
561 PrefPtr PREF_BT_REMOVE_UNSELECTED_FILE = makePref("bt-remove-unselected-file");
562 PrefPtr PREF_BT_DETACH_SEED_ONLY = makePref("bt-detach-seed-only");
563 PrefPtr PREF_BT_FORCE_ENCRYPTION = makePref("bt-force-encryption");
564 // values: true | false
565 PrefPtr PREF_BT_ENABLE_HOOK_AFTER_HASH_CHECK =
566     makePref("bt-enable-hook-after-hash-check");
567 // values: true | false
568 PrefPtr PREF_BT_LOAD_SAVED_METADATA = makePref("bt-load-saved-metadata");
569 
570 /**
571  * Metalink related preferences
572  */
573 // values: a string that your file system recognizes as a file name.
574 PrefPtr PREF_METALINK_FILE = makePref("metalink-file");
575 // values: a string
576 PrefPtr PREF_METALINK_VERSION = makePref("metalink-version");
577 // values: a string
578 PrefPtr PREF_METALINK_LANGUAGE = makePref("metalink-language");
579 // values: a string
580 PrefPtr PREF_METALINK_OS = makePref("metalink-os");
581 // values: a string
582 PrefPtr PREF_METALINK_LOCATION = makePref("metalink-location");
583 // values: true | false | mem
584 PrefPtr PREF_FOLLOW_METALINK = makePref("follow-metalink");
585 // values: http | https | ftp | none
586 PrefPtr PREF_METALINK_PREFERRED_PROTOCOL =
587     makePref("metalink-preferred-protocol");
588 // values: true | false
589 PrefPtr PREF_METALINK_ENABLE_UNIQUE_PROTOCOL =
590     makePref("metalink-enable-unique-protocol");
591 PrefPtr PREF_METALINK_BASE_URI = makePref("metalink-base-uri");
592 
593 } // namespace aria2
594