OptionHandlerFactory.cc 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  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 "OptionHandlerFactory.h"
  36. #include "prefs.h"
  37. #include "OptionHandlerImpl.h"
  38. #include "array_fun.h"
  39. #include "usage_text.h"
  40. #include "A2STR.h"
  41. #include "Util.h"
  42. #include "help_tags.h"
  43. #include "StringFormat.h"
  44. namespace aria2 {
  45. OptionHandlers OptionHandlerFactory::createOptionHandlers()
  46. {
  47. OptionHandlers handlers;
  48. // General Options
  49. {
  50. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  51. (PREF_ALLOW_OVERWRITE,
  52. TEXT_ALLOW_OVERWRITE,
  53. V_FALSE));
  54. op->addTag(TAG_ADVANCED);
  55. handlers.push_back(op);
  56. }
  57. {
  58. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  59. (PREF_ALLOW_PIECE_LENGTH_CHANGE,
  60. TEXT_ALLOW_PIECE_LENGTH_CHANGE,
  61. V_FALSE));
  62. op->addTag(TAG_ADVANCED);
  63. handlers.push_back(op);
  64. }
  65. {
  66. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  67. (PREF_ASYNC_DNS,
  68. TEXT_ASYNC_DNS,
  69. V_TRUE));
  70. op->addTag(TAG_ADVANCED);
  71. handlers.push_back(op);
  72. }
  73. {
  74. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  75. (PREF_AUTO_FILE_RENAMING,
  76. TEXT_AUTO_FILE_RENAMING,
  77. V_TRUE));
  78. op->addTag(TAG_ADVANCED);
  79. handlers.push_back(op);
  80. }
  81. {
  82. SharedHandle<OptionHandler> op(new NumberOptionHandler
  83. (PREF_AUTO_SAVE_INTERVAL,
  84. TEXT_AUTO_SAVE_INTERVAL,
  85. "60",
  86. 0, 600));
  87. op->addTag(TAG_ADVANCED);
  88. handlers.push_back(op);
  89. }
  90. {
  91. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  92. (PREF_CHECK_INTEGRITY,
  93. TEXT_CHECK_INTEGRITY,
  94. V_FALSE));
  95. op->addTag(TAG_BASIC);
  96. op->addTag(TAG_BITTORRENT);
  97. op->addTag(TAG_METALINK);
  98. handlers.push_back(op);
  99. }
  100. {
  101. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  102. (PREF_CONF_PATH,
  103. TEXT_CONF_PATH,
  104. Util::getHomeDir()+"/.aria2/aria2.conf"));
  105. op->addTag(TAG_ADVANCED);
  106. handlers.push_back(op);
  107. }
  108. {
  109. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  110. (PREF_CONTINUE,
  111. TEXT_CONTINUE,
  112. V_FALSE)); // TODO ommit?
  113. op->addTag(TAG_BASIC);
  114. op->addTag(TAG_FTP);
  115. op->addTag(TAG_HTTP);
  116. handlers.push_back(op);
  117. }
  118. {
  119. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  120. (PREF_DAEMON,
  121. TEXT_DAEMON,
  122. V_FALSE)); // TODO ommit?
  123. op->addTag(TAG_ADVANCED);
  124. handlers.push_back(op);
  125. }
  126. {
  127. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  128. (PREF_DIR,
  129. TEXT_DIR,
  130. "."));
  131. op->addTag(TAG_BASIC);
  132. handlers.push_back(op);
  133. }
  134. {
  135. SharedHandle<OptionHandler> op(new NumberOptionHandler
  136. (PREF_DNS_TIMEOUT,
  137. NO_DESCRIPTION,
  138. "30",
  139. 1, 60,
  140. true));
  141. handlers.push_back(op);
  142. }
  143. {
  144. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  145. (PREF_ENABLE_DIRECT_IO,
  146. TEXT_ENABLE_DIRECT_IO,
  147. V_TRUE));
  148. op->addTag(TAG_ADVANCED);
  149. handlers.push_back(op);
  150. }
  151. {
  152. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  153. (PREF_FILE_ALLOCATION,
  154. TEXT_FILE_ALLOCATION,
  155. V_PREALLOC,
  156. V_NONE, V_PREALLOC));
  157. op->addTag(TAG_BASIC);
  158. handlers.push_back(op);
  159. }
  160. {
  161. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  162. (PREF_FORCE_SEQUENTIAL,
  163. TEXT_FORCE_SEQUENTIAL,
  164. V_FALSE));
  165. op->addTag(TAG_BASIC);
  166. handlers.push_back(op);
  167. }
  168. {
  169. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  170. (PREF_INPUT_FILE,
  171. TEXT_INPUT_FILE,
  172. NO_DEFAULT_VALUE,
  173. "FILENAME,-"));
  174. op->addTag(TAG_BASIC);
  175. handlers.push_back(op);
  176. }
  177. {
  178. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  179. (PREF_LOG,
  180. TEXT_LOG,
  181. NO_DEFAULT_VALUE,
  182. "FILENAME,-"));
  183. op->addTag(TAG_BASIC);
  184. handlers.push_back(op);
  185. }
  186. {
  187. const std::string params[] = { V_DEBUG, V_INFO, V_NOTICE, V_WARN, V_ERROR };
  188. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  189. (PREF_LOG_LEVEL,
  190. TEXT_LOG_LEVEL,
  191. V_DEBUG,
  192. std::deque<std::string>
  193. (&params[0],
  194. &params[arrayLength(params)])));
  195. op->addTag(TAG_ADVANCED);
  196. handlers.push_back(op);
  197. }
  198. {
  199. SharedHandle<OptionHandler> op(new NumberOptionHandler
  200. (PREF_MAX_CONCURRENT_DOWNLOADS,
  201. TEXT_MAX_CONCURRENT_DOWNLOADS,
  202. "5",
  203. 1, 45));
  204. op->addTag(TAG_BASIC);
  205. handlers.push_back(op);
  206. }
  207. {
  208. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  209. (PREF_MAX_DOWNLOAD_LIMIT,
  210. TEXT_MAX_DOWNLOAD_LIMIT,
  211. "0",
  212. 0));
  213. op->addTag(TAG_BITTORRENT);
  214. op->addTag(TAG_FTP);
  215. op->addTag(TAG_HTTP);
  216. handlers.push_back(op);
  217. }
  218. {
  219. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  220. (PREF_NO_CONF,
  221. TEXT_NO_CONF,
  222. V_FALSE));
  223. op->addTag(TAG_ADVANCED);
  224. handlers.push_back(op);
  225. }
  226. {
  227. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  228. (PREF_NO_FILE_ALLOCATION_LIMIT,
  229. TEXT_NO_FILE_ALLOCATION_LIMIT,
  230. "5M",
  231. 0));
  232. op->addTag(TAG_ADVANCED);
  233. handlers.push_back(op);
  234. }
  235. {
  236. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  237. (PREF_PARAMETERIZED_URI,
  238. TEXT_PARAMETERIZED_URI,
  239. V_FALSE));
  240. op->addTag(TAG_ADVANCED);
  241. handlers.push_back(op);
  242. }
  243. {
  244. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  245. (PREF_QUIET,
  246. TEXT_QUIET,
  247. V_FALSE));
  248. op->addTag(TAG_ADVANCED);
  249. handlers.push_back(op);
  250. }
  251. {
  252. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  253. (PREF_REALTIME_CHUNK_CHECKSUM,
  254. TEXT_REALTIME_CHUNK_CHECKSUM,
  255. V_TRUE));
  256. op->addTag(TAG_METALINK);
  257. handlers.push_back(op);
  258. }
  259. {
  260. SharedHandle<OptionHandler> op(new NumberOptionHandler
  261. (PREF_STOP,
  262. TEXT_STOP,
  263. "0",
  264. 0, INT32_MAX));
  265. op->addTag(TAG_ADVANCED);
  266. handlers.push_back(op);
  267. }
  268. {
  269. SharedHandle<OptionHandler> op(new NumberOptionHandler
  270. (PREF_SUMMARY_INTERVAL,
  271. TEXT_SUMMARY_INTERVAL,
  272. "60",
  273. 0, INT32_MAX));
  274. op->addTag(TAG_ADVANCED);
  275. handlers.push_back(op);
  276. }
  277. // HTTP/FTP options
  278. {
  279. SharedHandle<OptionHandler> op(new NumberOptionHandler
  280. (PREF_CONNECT_TIMEOUT,
  281. TEXT_CONNECT_TIMEOUT,
  282. "60",
  283. 1, 600));
  284. op->addTag(TAG_FTP);
  285. op->addTag(TAG_HTTP);
  286. handlers.push_back(op);
  287. }
  288. {
  289. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  290. (PREF_LOWEST_SPEED_LIMIT,
  291. TEXT_LOWEST_SPEED_LIMIT,
  292. "0",
  293. 0));
  294. op->addTag(TAG_FTP);
  295. op->addTag(TAG_HTTP);
  296. handlers.push_back(op);
  297. }
  298. {
  299. SharedHandle<OptionHandler> op(new NumberOptionHandler
  300. (PREF_MAX_FILE_NOT_FOUND,
  301. TEXT_MAX_FILE_NOT_FOUND,
  302. "0",
  303. 0));
  304. op->addTag(TAG_FTP);
  305. op->addTag(TAG_HTTP);
  306. handlers.push_back(op);
  307. }
  308. {
  309. SharedHandle<OptionHandler> op(new NumberOptionHandler
  310. (PREF_MAX_TRIES,
  311. TEXT_MAX_TRIES,
  312. "5",
  313. 0));
  314. op->addTag(TAG_FTP);
  315. op->addTag(TAG_HTTP);
  316. handlers.push_back(op);
  317. }
  318. {
  319. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  320. (PREF_OUT,
  321. TEXT_OUT,
  322. NO_DEFAULT_VALUE,
  323. "FILENAME"));
  324. op->addTag(TAG_BASIC);
  325. op->addTag(TAG_FTP);
  326. op->addTag(TAG_HTTP);
  327. handlers.push_back(op);
  328. }
  329. {
  330. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  331. (PREF_REMOTE_TIME,
  332. TEXT_REMOTE_TIME,
  333. V_FALSE));
  334. op->addTag(TAG_FTP);
  335. op->addTag(TAG_HTTP);
  336. handlers.push_back(op);
  337. }
  338. {
  339. SharedHandle<OptionHandler> op(new NumberOptionHandler
  340. (PREF_RETRY_WAIT,
  341. TEXT_RETRY_WAIT,
  342. "5",
  343. 0, 60));
  344. op->addTag(TAG_FTP);
  345. op->addTag(TAG_HTTP);
  346. handlers.push_back(op);
  347. }
  348. {
  349. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  350. (PREF_SEGMENT_SIZE,
  351. NO_DESCRIPTION,
  352. "1M",
  353. 1024, -1,
  354. true));
  355. handlers.push_back(op);
  356. }
  357. {
  358. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  359. (PREF_SERVER_STAT_IF,
  360. TEXT_SERVER_STAT_IF,
  361. NO_DEFAULT_VALUE,
  362. "FILENAME"));
  363. op->addTag(TAG_FTP);
  364. op->addTag(TAG_HTTP);
  365. handlers.push_back(op);
  366. }
  367. {
  368. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  369. (PREF_SERVER_STAT_OF,
  370. TEXT_SERVER_STAT_OF,
  371. NO_DEFAULT_VALUE,
  372. "FILENAME"));
  373. op->addTag(TAG_FTP);
  374. op->addTag(TAG_HTTP);
  375. handlers.push_back(op);
  376. }
  377. {
  378. SharedHandle<OptionHandler> op(new NumberOptionHandler
  379. (PREF_SERVER_STAT_TIMEOUT,
  380. TEXT_SERVER_STAT_TIMEOUT,
  381. "86400",
  382. 0, INT32_MAX));
  383. op->addTag(TAG_FTP);
  384. op->addTag(TAG_HTTP);
  385. handlers.push_back(op);
  386. }
  387. {
  388. SharedHandle<OptionHandler> op(new NumberOptionHandler
  389. (PREF_SPLIT,
  390. TEXT_SPLIT,
  391. "5",
  392. 1, 16));
  393. op->addTag(TAG_BASIC);
  394. op->addTag(TAG_FTP);
  395. op->addTag(TAG_HTTP);
  396. handlers.push_back(op);
  397. }
  398. {
  399. SharedHandle<OptionHandler> op(new NumberOptionHandler
  400. (PREF_STARTUP_IDLE_TIME,
  401. NO_DESCRIPTION,
  402. "10",
  403. 1, 60,
  404. true));
  405. handlers.push_back(op);
  406. }
  407. {
  408. SharedHandle<OptionHandler> op(new NumberOptionHandler
  409. (PREF_TIMEOUT,
  410. TEXT_TIMEOUT,
  411. "60",
  412. 1, 600));
  413. op->addTag(TAG_FTP);
  414. op->addTag(TAG_HTTP);
  415. handlers.push_back(op);
  416. }
  417. {
  418. const std::string params[] = { V_INORDER, V_FEEDBACK };
  419. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  420. (PREF_URI_SELECTOR,
  421. TEXT_URI_SELECTOR,
  422. V_INORDER,
  423. std::deque<std::string>
  424. (&params[0], &params[arrayLength(params)])));
  425. op->addTag(TAG_FTP);
  426. op->addTag(TAG_HTTP);
  427. handlers.push_back(op);
  428. }
  429. // HTTP Specific Options
  430. {
  431. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  432. (PREF_CA_CERTIFICATE,
  433. TEXT_CA_CERTIFICATE,
  434. CA_BUNDLE));
  435. op->addTag(TAG_HTTP);
  436. op->addTag(TAG_HTTPS);
  437. handlers.push_back(op);
  438. }
  439. {
  440. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  441. (PREF_CERTIFICATE,
  442. TEXT_CERTIFICATE));
  443. op->addTag(TAG_HTTP);
  444. op->addTag(TAG_HTTPS);
  445. handlers.push_back(op);
  446. }
  447. {
  448. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  449. (PREF_CHECK_CERTIFICATE,
  450. TEXT_CHECK_CERTIFICATE,
  451. V_TRUE));
  452. op->addTag(TAG_HTTP);
  453. op->addTag(TAG_HTTPS);
  454. handlers.push_back(op);
  455. }
  456. {
  457. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  458. (PREF_ENABLE_HTTP_KEEP_ALIVE,
  459. TEXT_ENABLE_HTTP_KEEP_ALIVE,
  460. V_TRUE));
  461. op->addTag(TAG_HTTP);
  462. handlers.push_back(op);
  463. }
  464. {
  465. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  466. (PREF_ENABLE_HTTP_PIPELINING,
  467. TEXT_ENABLE_HTTP_PIPELINING,
  468. V_FALSE));
  469. op->addTag(TAG_HTTP);
  470. handlers.push_back(op);
  471. }
  472. {
  473. SharedHandle<OptionHandler> op(new CumulativeOptionHandler
  474. (PREF_HEADER,
  475. TEXT_HEADER,
  476. NO_DEFAULT_VALUE,
  477. "\n"));
  478. op->addTag(TAG_HTTP);
  479. handlers.push_back(op);
  480. }
  481. {
  482. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  483. (PREF_HTTP_AUTH_SCHEME,
  484. TEXT_HTTP_AUTH_SCHEME,
  485. V_BASIC,
  486. V_BASIC));
  487. op->addTag(TAG_HTTP);
  488. handlers.push_back(op);
  489. }
  490. {
  491. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  492. (PREF_HTTP_PASSWD,
  493. TEXT_HTTP_PASSWD));
  494. op->addTag(TAG_BASIC);
  495. op->addTag(TAG_HTTP);
  496. handlers.push_back(op);
  497. }
  498. {
  499. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  500. (PREF_HTTP_USER,
  501. TEXT_HTTP_USER));
  502. op->addTag(TAG_BASIC);
  503. op->addTag(TAG_HTTP);
  504. handlers.push_back(op);
  505. }
  506. {
  507. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  508. (PREF_LOAD_COOKIES,
  509. TEXT_LOAD_COOKIES,
  510. NO_DEFAULT_VALUE,
  511. "FILENAME"));
  512. op->addTag(TAG_BASIC);
  513. op->addTag(TAG_HTTP);
  514. handlers.push_back(op);
  515. }
  516. {
  517. SharedHandle<OptionHandler> op(new NumberOptionHandler
  518. (PREF_MAX_HTTP_PIPELINING,
  519. NO_DESCRIPTION,
  520. "2",
  521. 1, 8,
  522. true));
  523. handlers.push_back(op);
  524. }
  525. {
  526. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  527. (PREF_PRIVATE_KEY,
  528. TEXT_PRIVATE_KEY));
  529. op->addTag(TAG_HTTP);
  530. op->addTag(TAG_HTTPS);
  531. handlers.push_back(op);
  532. }
  533. {
  534. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  535. (PREF_REFERER,
  536. TEXT_REFERER));
  537. op->addTag(TAG_HTTP);
  538. handlers.push_back(op);
  539. }
  540. {
  541. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  542. (PREF_USE_HEAD,
  543. TEXT_USE_HEAD,
  544. V_TRUE));
  545. op->addTag(TAG_HTTP);
  546. handlers.push_back(op);
  547. }
  548. {
  549. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  550. (PREF_USER_AGENT,
  551. TEXT_USER_AGENT,
  552. "aria2"));
  553. op->addTag(TAG_HTTP);
  554. handlers.push_back(op);
  555. }
  556. // FTP Specific Options
  557. {
  558. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  559. (PREF_FTP_PASSWD,
  560. TEXT_FTP_PASSWD));
  561. op->addTag(TAG_BASIC);
  562. op->addTag(TAG_FTP);
  563. handlers.push_back(op);
  564. }
  565. {
  566. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  567. (PREF_FTP_PASV,
  568. TEXT_FTP_PASV,
  569. V_TRUE));
  570. op->addTag(TAG_FTP);
  571. handlers.push_back(op);
  572. }
  573. {
  574. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  575. (PREF_FTP_REUSE_CONNECTION,
  576. TEXT_FTP_REUSE_CONNECTION,
  577. V_TRUE));
  578. op->addTag(TAG_FTP);
  579. handlers.push_back(op);
  580. }
  581. {
  582. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  583. (PREF_FTP_TYPE,
  584. TEXT_FTP_TYPE,
  585. V_BINARY,
  586. V_BINARY, V_ASCII));
  587. op->addTag(TAG_FTP);
  588. handlers.push_back(op);
  589. }
  590. {
  591. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  592. (PREF_FTP_USER,
  593. TEXT_FTP_USER));
  594. op->addTag(TAG_BASIC);
  595. op->addTag(TAG_FTP);
  596. handlers.push_back(op);
  597. }
  598. {
  599. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  600. (PREF_NETRC_PATH,
  601. NO_DESCRIPTION,
  602. Util::getHomeDir()+"/.netrc",
  603. "/PATH/TO/NETRC",
  604. true));
  605. handlers.push_back(op);
  606. }
  607. {
  608. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  609. (PREF_NO_NETRC,
  610. TEXT_NO_NETRC,
  611. V_FALSE)); // TODO ommit?
  612. op->addTag(TAG_FTP);
  613. op->addTag(TAG_HTTP);
  614. handlers.push_back(op);
  615. }
  616. // Proxy options
  617. {
  618. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  619. (PREF_HTTP_PROXY,
  620. TEXT_HTTP_PROXY,
  621. NO_DEFAULT_VALUE));
  622. op->addTag(TAG_HTTP);
  623. handlers.push_back(op);
  624. }
  625. {
  626. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  627. (PREF_HTTPS_PROXY,
  628. TEXT_HTTPS_PROXY,
  629. NO_DEFAULT_VALUE));
  630. op->addTag(TAG_HTTP);
  631. handlers.push_back(op);
  632. }
  633. {
  634. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  635. (PREF_FTP_PROXY,
  636. TEXT_FTP_PROXY,
  637. NO_DEFAULT_VALUE));
  638. op->addTag(TAG_FTP);
  639. handlers.push_back(op);
  640. }
  641. {
  642. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  643. (PREF_ALL_PROXY,
  644. TEXT_ALL_PROXY,
  645. NO_DEFAULT_VALUE));
  646. op->addTag(TAG_FTP);
  647. op->addTag(TAG_HTTP);
  648. handlers.push_back(op);
  649. }
  650. {
  651. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  652. (PREF_NO_PROXY,
  653. TEXT_NO_PROXY));
  654. op->addTag(TAG_FTP);
  655. op->addTag(TAG_HTTP);
  656. handlers.push_back(op);
  657. }
  658. {
  659. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  660. (PREF_PROXY_METHOD,
  661. TEXT_PROXY_METHOD,
  662. V_TUNNEL,
  663. V_GET, V_TUNNEL));
  664. op->addTag(TAG_FTP);
  665. op->addTag(TAG_HTTP);
  666. handlers.push_back(op);
  667. }
  668. // BitTorrent/Metalink Options
  669. {
  670. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  671. (PREF_SELECT_FILE,
  672. TEXT_SELECT_FILE,
  673. NO_DEFAULT_VALUE,
  674. 1, INT32_MAX));
  675. op->addTag(TAG_BITTORRENT);
  676. op->addTag(TAG_METALINK);
  677. handlers.push_back(op);
  678. }
  679. {
  680. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  681. (PREF_SHOW_FILES,
  682. TEXT_SHOW_FILES,
  683. V_FALSE)); // TODO ommit?
  684. op->addTag(TAG_BASIC);
  685. op->addTag(TAG_BITTORRENT);
  686. op->addTag(TAG_METALINK);
  687. handlers.push_back(op);
  688. }
  689. // BitTorrent Specific Options
  690. {
  691. SharedHandle<OptionHandler> op(new NumberOptionHandler
  692. (PREF_BT_KEEP_ALIVE_INTERVAL,
  693. NO_DESCRIPTION,
  694. "120",
  695. 1, 120,
  696. true));
  697. handlers.push_back(op);
  698. }
  699. {
  700. SharedHandle<OptionHandler> op(new NumberOptionHandler
  701. (PREF_BT_MAX_OPEN_FILES,
  702. TEXT_BT_MAX_OPEN_FILES,
  703. "100",
  704. 1));
  705. op->addTag(TAG_BITTORRENT);
  706. handlers.push_back(op);
  707. }
  708. {
  709. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  710. (PREF_BT_MIN_CRYPTO_LEVEL,
  711. TEXT_BT_MIN_CRYPTO_LEVEL,
  712. V_PLAIN,
  713. V_PLAIN, V_ARC4));
  714. op->addTag(TAG_BITTORRENT);
  715. handlers.push_back(op);
  716. }
  717. {
  718. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  719. (PREF_BT_REQUEST_PEER_SPEED_LIMIT,
  720. TEXT_BT_REQUEST_PEER_SPEED_LIMIT,
  721. "50K",
  722. 0));
  723. op->addTag(TAG_BITTORRENT);
  724. handlers.push_back(op);
  725. }
  726. {
  727. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  728. (PREF_BT_REQUIRE_CRYPTO,
  729. TEXT_BT_REQUIRE_CRYPTO,
  730. V_FALSE));
  731. op->addTag(TAG_BITTORRENT);
  732. handlers.push_back(op);
  733. }
  734. {
  735. SharedHandle<OptionHandler> op(new NumberOptionHandler
  736. (PREF_BT_REQUEST_TIMEOUT,
  737. NO_DESCRIPTION,
  738. "60",
  739. 1, 600,
  740. true));
  741. handlers.push_back(op);
  742. }
  743. {
  744. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  745. (PREF_BT_SEED_UNVERIFIED,
  746. TEXT_BT_SEED_UNVERIFIED,
  747. V_FALSE));
  748. op->addTag(TAG_BITTORRENT);
  749. handlers.push_back(op);
  750. }
  751. {
  752. SharedHandle<OptionHandler> op(new NumberOptionHandler
  753. (PREF_BT_TIMEOUT,
  754. NO_DESCRIPTION,
  755. "180",
  756. 1, 600,
  757. true));
  758. handlers.push_back(op);
  759. }
  760. {
  761. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  762. (PREF_DIRECT_FILE_MAPPING,
  763. TEXT_DIRECT_FILE_MAPPING,
  764. V_TRUE));
  765. op->addTag(TAG_BITTORRENT);
  766. handlers.push_back(op);
  767. }
  768. {
  769. SharedHandle<OptionHandler> op(new HostPortOptionHandler
  770. (PREF_DHT_ENTRY_POINT,
  771. TEXT_DHT_ENTRY_POINT,
  772. NO_DEFAULT_VALUE,
  773. PREF_DHT_ENTRY_POINT_HOST,
  774. PREF_DHT_ENTRY_POINT_PORT));
  775. op->addTag(TAG_BITTORRENT);
  776. handlers.push_back(op);
  777. }
  778. {
  779. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  780. (PREF_DHT_FILE_PATH,
  781. TEXT_DHT_FILE_PATH,
  782. Util::getHomeDir()+"/.aria2/dht.dat",
  783. "/PATH/TO/DHT_DAT"));
  784. op->addTag(TAG_BITTORRENT);
  785. handlers.push_back(op);
  786. }
  787. {
  788. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  789. (PREF_DHT_LISTEN_PORT,
  790. TEXT_DHT_LISTEN_PORT,
  791. "6881-6999",
  792. 1024, UINT16_MAX));
  793. op->addTag(TAG_BASIC);
  794. op->addTag(TAG_BITTORRENT);
  795. handlers.push_back(op);
  796. }
  797. {
  798. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  799. (PREF_ENABLE_DHT,
  800. TEXT_ENABLE_DHT,
  801. V_FALSE));
  802. op->addTag(TAG_BASIC);
  803. op->addTag(TAG_BITTORRENT);
  804. handlers.push_back(op);
  805. }
  806. {
  807. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  808. (PREF_ENABLE_PEER_EXCHANGE,
  809. TEXT_ENABLE_PEER_EXCHANGE,
  810. V_TRUE));
  811. op->addTag(TAG_BITTORRENT);
  812. handlers.push_back(op);
  813. }
  814. {
  815. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  816. (PREF_FOLLOW_TORRENT,
  817. TEXT_FOLLOW_TORRENT,
  818. V_TRUE,
  819. V_TRUE, V_MEM, V_FALSE));
  820. op->addTag(TAG_BITTORRENT);
  821. handlers.push_back(op);
  822. }
  823. {
  824. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  825. (PREF_LISTEN_PORT,
  826. TEXT_LISTEN_PORT,
  827. "6881-6999",
  828. 1024, UINT16_MAX));
  829. op->addTag(TAG_BASIC);
  830. op->addTag(TAG_BITTORRENT);
  831. handlers.push_back(op);
  832. }
  833. {
  834. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  835. (PREF_MAX_OVERALL_UPLOAD_LIMIT,
  836. TEXT_MAX_OVERALL_UPLOAD_LIMIT,
  837. "0",
  838. 0));
  839. op->addTag(TAG_BASIC);
  840. op->addTag(TAG_BITTORRENT);
  841. handlers.push_back(op);
  842. }
  843. {
  844. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  845. (PREF_MAX_UPLOAD_LIMIT,
  846. TEXT_MAX_UPLOAD_LIMIT,
  847. "0",
  848. 0));
  849. op->addTag(TAG_BASIC);
  850. op->addTag(TAG_BITTORRENT);
  851. handlers.push_back(op);
  852. }
  853. {
  854. SharedHandle<OptionHandler> op(new NumberOptionHandler
  855. (PREF_PEER_CONNECTION_TIMEOUT,
  856. NO_DESCRIPTION,
  857. "20",
  858. 1, 600,
  859. true));
  860. handlers.push_back(op);
  861. }
  862. {
  863. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  864. (PREF_PEER_ID_PREFIX,
  865. TEXT_PEER_ID_PREFIX,
  866. "-aria2-"));
  867. op->addTag(TAG_BITTORRENT);
  868. handlers.push_back(op);
  869. }
  870. {
  871. SharedHandle<OptionHandler> op(new NumberOptionHandler
  872. (PREF_SEED_TIME,
  873. TEXT_SEED_TIME,
  874. NO_DEFAULT_VALUE,
  875. 0));
  876. op->addTag(TAG_BITTORRENT);
  877. handlers.push_back(op);
  878. }
  879. {
  880. SharedHandle<OptionHandler> op(new FloatNumberOptionHandler
  881. (PREF_SEED_RATIO,
  882. TEXT_SEED_RATIO,
  883. "1.0",
  884. 0.0));
  885. op->addTag(TAG_BITTORRENT);
  886. handlers.push_back(op);
  887. }
  888. {
  889. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  890. (PREF_TORRENT_FILE,
  891. TEXT_TORRENT_FILE));
  892. op->addTag(TAG_BASIC);
  893. op->addTag(TAG_BITTORRENT);
  894. handlers.push_back(op);
  895. }
  896. // Metalink Specific Options
  897. {
  898. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  899. (PREF_FOLLOW_METALINK,
  900. TEXT_FOLLOW_METALINK,
  901. V_TRUE,
  902. V_TRUE, V_MEM, V_FALSE));
  903. op->addTag(TAG_METALINK);
  904. handlers.push_back(op);
  905. }
  906. {
  907. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  908. (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL,
  909. TEXT_METALINK_ENABLE_UNIQUE_PROTOCOL,
  910. V_TRUE));
  911. op->addTag(TAG_METALINK);
  912. handlers.push_back(op);
  913. }
  914. {
  915. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  916. (PREF_METALINK_FILE,
  917. TEXT_METALINK_FILE));
  918. op->addTag(TAG_BASIC);
  919. op->addTag(TAG_METALINK);
  920. handlers.push_back(op);
  921. }
  922. {
  923. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  924. (PREF_METALINK_LANGUAGE,
  925. TEXT_METALINK_LANGUAGE));
  926. op->addTag(TAG_METALINK);
  927. handlers.push_back(op);
  928. }
  929. {
  930. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  931. (PREF_METALINK_LOCATION,
  932. TEXT_METALINK_LOCATION));
  933. op->addTag(TAG_METALINK);
  934. handlers.push_back(op);
  935. }
  936. {
  937. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  938. (PREF_METALINK_OS,
  939. TEXT_METALINK_OS));
  940. op->addTag(TAG_METALINK);
  941. handlers.push_back(op);
  942. }
  943. {
  944. const std::string params[] = { V_HTTP, V_HTTPS, V_FTP, V_NONE };
  945. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  946. (PREF_METALINK_PREFERRED_PROTOCOL,
  947. TEXT_METALINK_PREFERRED_PROTOCOL,
  948. V_NONE,
  949. std::deque<std::string>
  950. (&params[0], &params[arrayLength(params)])));
  951. op->addTag(TAG_METALINK);
  952. handlers.push_back(op);
  953. }
  954. {
  955. SharedHandle<OptionHandler> op(new NumberOptionHandler
  956. (PREF_METALINK_SERVERS,
  957. TEXT_METALINK_SERVERS,
  958. "5",
  959. 1));
  960. op->addTag(TAG_METALINK);
  961. handlers.push_back(op);
  962. }
  963. {
  964. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  965. (PREF_METALINK_VERSION,
  966. TEXT_METALINK_VERSION));
  967. op->addTag(TAG_METALINK);
  968. handlers.push_back(op);
  969. }
  970. // Help Option
  971. {
  972. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  973. ("help",
  974. TEXT_HELP,
  975. TAG_BASIC,
  976. StringFormat("%s,%s,%s,%s,%s,%s,%s,%s,all",
  977. TAG_BASIC,
  978. TAG_ADVANCED,
  979. TAG_HTTP,
  980. TAG_HTTPS,
  981. TAG_FTP,
  982. TAG_METALINK,
  983. TAG_BITTORRENT,
  984. TAG_HELP).str()));
  985. op->addTag(TAG_BASIC);
  986. op->addTag(TAG_HELP);
  987. handlers.push_back(op);
  988. }
  989. return handlers;
  990. }
  991. } // namespace aria2