OptionHandlerFactory.cc 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971
  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. op->addTag(TAG_HTTP);
  435. handlers.push_back(op);
  436. }
  437. {
  438. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  439. (PREF_CERTIFICATE,
  440. TEXT_CERTIFICATE));
  441. op->addTag(TAG_HTTP);
  442. handlers.push_back(op);
  443. }
  444. {
  445. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  446. (PREF_CHECK_CERTIFICATE,
  447. TEXT_CHECK_CERTIFICATE,
  448. V_FALSE));
  449. op->addTag(TAG_HTTP);
  450. handlers.push_back(op);
  451. }
  452. {
  453. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  454. (PREF_ENABLE_HTTP_KEEP_ALIVE,
  455. TEXT_ENABLE_HTTP_KEEP_ALIVE,
  456. V_TRUE));
  457. op->addTag(TAG_HTTP);
  458. handlers.push_back(op);
  459. }
  460. {
  461. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  462. (PREF_ENABLE_HTTP_PIPELINING,
  463. TEXT_ENABLE_HTTP_PIPELINING,
  464. V_FALSE));
  465. op->addTag(TAG_HTTP);
  466. handlers.push_back(op);
  467. }
  468. {
  469. SharedHandle<OptionHandler> op(new CumulativeOptionHandler
  470. (PREF_HEADER,
  471. TEXT_HEADER,
  472. NO_DEFAULT_VALUE,
  473. "\n"));
  474. op->addTag(TAG_HTTP);
  475. handlers.push_back(op);
  476. }
  477. {
  478. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  479. (PREF_HTTP_AUTH_SCHEME,
  480. TEXT_HTTP_AUTH_SCHEME,
  481. V_BASIC,
  482. V_BASIC));
  483. op->addTag(TAG_HTTP);
  484. handlers.push_back(op);
  485. }
  486. {
  487. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  488. (PREF_HTTP_PASSWD,
  489. TEXT_HTTP_PASSWD));
  490. op->addTag(TAG_BASIC);
  491. op->addTag(TAG_HTTP);
  492. handlers.push_back(op);
  493. }
  494. {
  495. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  496. (PREF_HTTP_USER,
  497. TEXT_HTTP_USER));
  498. op->addTag(TAG_BASIC);
  499. op->addTag(TAG_HTTP);
  500. handlers.push_back(op);
  501. }
  502. {
  503. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  504. (PREF_LOAD_COOKIES,
  505. TEXT_LOAD_COOKIES,
  506. NO_DEFAULT_VALUE,
  507. "FILENAME"));
  508. op->addTag(TAG_BASIC);
  509. op->addTag(TAG_HTTP);
  510. handlers.push_back(op);
  511. }
  512. {
  513. SharedHandle<OptionHandler> op(new NumberOptionHandler
  514. (PREF_MAX_HTTP_PIPELINING,
  515. NO_DESCRIPTION,
  516. "2",
  517. 1, 8,
  518. true));
  519. handlers.push_back(op);
  520. }
  521. {
  522. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  523. (PREF_PRIVATE_KEY,
  524. TEXT_PRIVATE_KEY));
  525. op->addTag(TAG_HTTP);
  526. handlers.push_back(op);
  527. }
  528. {
  529. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  530. (PREF_REFERER,
  531. TEXT_REFERER));
  532. op->addTag(TAG_HTTP);
  533. handlers.push_back(op);
  534. }
  535. {
  536. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  537. (PREF_USER_AGENT,
  538. TEXT_USER_AGENT,
  539. "aria2"));
  540. op->addTag(TAG_HTTP);
  541. handlers.push_back(op);
  542. }
  543. // FTP Specific Options
  544. {
  545. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  546. (PREF_FTP_PASSWD,
  547. TEXT_FTP_PASSWD));
  548. op->addTag(TAG_BASIC);
  549. op->addTag(TAG_FTP);
  550. handlers.push_back(op);
  551. }
  552. {
  553. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  554. (PREF_FTP_PASV,
  555. TEXT_FTP_PASV,
  556. V_TRUE));
  557. op->addTag(TAG_FTP);
  558. handlers.push_back(op);
  559. }
  560. {
  561. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  562. (PREF_FTP_REUSE_CONNECTION,
  563. TEXT_FTP_REUSE_CONNECTION,
  564. V_TRUE));
  565. op->addTag(TAG_FTP);
  566. handlers.push_back(op);
  567. }
  568. {
  569. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  570. (PREF_FTP_TYPE,
  571. TEXT_FTP_TYPE,
  572. V_BINARY,
  573. V_BINARY, V_ASCII));
  574. op->addTag(TAG_FTP);
  575. handlers.push_back(op);
  576. }
  577. {
  578. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  579. (PREF_FTP_USER,
  580. TEXT_FTP_USER));
  581. op->addTag(TAG_BASIC);
  582. op->addTag(TAG_FTP);
  583. handlers.push_back(op);
  584. }
  585. {
  586. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  587. (PREF_NETRC_PATH,
  588. NO_DESCRIPTION,
  589. Util::getHomeDir()+"/.netrc",
  590. "/PATH/TO/NETRC",
  591. true));
  592. handlers.push_back(op);
  593. }
  594. {
  595. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  596. (PREF_NO_NETRC,
  597. TEXT_NO_NETRC,
  598. V_FALSE)); // TODO ommit?
  599. op->addTag(TAG_FTP);
  600. op->addTag(TAG_HTTP);
  601. handlers.push_back(op);
  602. }
  603. // Proxy options
  604. {
  605. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  606. (PREF_HTTP_PROXY,
  607. TEXT_HTTP_PROXY,
  608. NO_DEFAULT_VALUE));
  609. op->addTag(TAG_HTTP);
  610. handlers.push_back(op);
  611. }
  612. {
  613. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  614. (PREF_HTTPS_PROXY,
  615. TEXT_HTTPS_PROXY,
  616. NO_DEFAULT_VALUE));
  617. op->addTag(TAG_HTTP);
  618. handlers.push_back(op);
  619. }
  620. {
  621. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  622. (PREF_FTP_PROXY,
  623. TEXT_FTP_PROXY,
  624. NO_DEFAULT_VALUE));
  625. op->addTag(TAG_FTP);
  626. handlers.push_back(op);
  627. }
  628. {
  629. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  630. (PREF_ALL_PROXY,
  631. TEXT_ALL_PROXY,
  632. NO_DEFAULT_VALUE));
  633. op->addTag(TAG_FTP);
  634. op->addTag(TAG_HTTP);
  635. handlers.push_back(op);
  636. }
  637. {
  638. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  639. (PREF_NO_PROXY,
  640. TEXT_NO_PROXY));
  641. op->addTag(TAG_FTP);
  642. op->addTag(TAG_HTTP);
  643. handlers.push_back(op);
  644. }
  645. {
  646. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  647. (PREF_PROXY_METHOD,
  648. TEXT_PROXY_METHOD,
  649. V_TUNNEL,
  650. V_GET, V_TUNNEL));
  651. op->addTag(TAG_FTP);
  652. op->addTag(TAG_HTTP);
  653. handlers.push_back(op);
  654. }
  655. // BitTorrent/Metalink Options
  656. {
  657. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  658. (PREF_SELECT_FILE,
  659. TEXT_SELECT_FILE,
  660. NO_DEFAULT_VALUE,
  661. 1, INT32_MAX));
  662. op->addTag(TAG_BITTORRENT);
  663. op->addTag(TAG_METALINK);
  664. handlers.push_back(op);
  665. }
  666. {
  667. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  668. (PREF_SHOW_FILES,
  669. TEXT_SHOW_FILES,
  670. V_FALSE)); // TODO ommit?
  671. op->addTag(TAG_BASIC);
  672. op->addTag(TAG_BITTORRENT);
  673. op->addTag(TAG_METALINK);
  674. handlers.push_back(op);
  675. }
  676. // BitTorrent Specific Options
  677. {
  678. SharedHandle<OptionHandler> op(new NumberOptionHandler
  679. (PREF_BT_KEEP_ALIVE_INTERVAL,
  680. NO_DESCRIPTION,
  681. "120",
  682. 1, 120,
  683. true));
  684. handlers.push_back(op);
  685. }
  686. {
  687. SharedHandle<OptionHandler> op(new NumberOptionHandler
  688. (PREF_BT_MAX_OPEN_FILES,
  689. TEXT_BT_MAX_OPEN_FILES,
  690. "100",
  691. 1));
  692. op->addTag(TAG_BITTORRENT);
  693. handlers.push_back(op);
  694. }
  695. {
  696. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  697. (PREF_BT_MIN_CRYPTO_LEVEL,
  698. TEXT_BT_MIN_CRYPTO_LEVEL,
  699. V_PLAIN,
  700. V_PLAIN, V_ARC4));
  701. op->addTag(TAG_BITTORRENT);
  702. handlers.push_back(op);
  703. }
  704. {
  705. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  706. (PREF_BT_REQUEST_PEER_SPEED_LIMIT,
  707. TEXT_BT_REQUEST_PEER_SPEED_LIMIT,
  708. "50K",
  709. 0));
  710. op->addTag(TAG_BITTORRENT);
  711. handlers.push_back(op);
  712. }
  713. {
  714. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  715. (PREF_BT_REQUIRE_CRYPTO,
  716. TEXT_BT_REQUIRE_CRYPTO,
  717. V_FALSE));
  718. op->addTag(TAG_BITTORRENT);
  719. handlers.push_back(op);
  720. }
  721. {
  722. SharedHandle<OptionHandler> op(new NumberOptionHandler
  723. (PREF_BT_REQUEST_TIMEOUT,
  724. NO_DESCRIPTION,
  725. "60",
  726. 1, 600,
  727. true));
  728. handlers.push_back(op);
  729. }
  730. {
  731. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  732. (PREF_BT_SEED_UNVERIFIED,
  733. TEXT_BT_SEED_UNVERIFIED,
  734. V_FALSE));
  735. op->addTag(TAG_BITTORRENT);
  736. handlers.push_back(op);
  737. }
  738. {
  739. SharedHandle<OptionHandler> op(new NumberOptionHandler
  740. (PREF_BT_TIMEOUT,
  741. NO_DESCRIPTION,
  742. "180",
  743. 1, 600,
  744. true));
  745. handlers.push_back(op);
  746. }
  747. {
  748. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  749. (PREF_DIRECT_FILE_MAPPING,
  750. TEXT_DIRECT_FILE_MAPPING,
  751. V_TRUE));
  752. op->addTag(TAG_BITTORRENT);
  753. handlers.push_back(op);
  754. }
  755. {
  756. SharedHandle<OptionHandler> op(new HostPortOptionHandler
  757. (PREF_DHT_ENTRY_POINT,
  758. TEXT_DHT_ENTRY_POINT,
  759. NO_DEFAULT_VALUE,
  760. PREF_DHT_ENTRY_POINT_HOST,
  761. PREF_DHT_ENTRY_POINT_PORT));
  762. op->addTag(TAG_BITTORRENT);
  763. handlers.push_back(op);
  764. }
  765. {
  766. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  767. (PREF_DHT_FILE_PATH,
  768. TEXT_DHT_FILE_PATH,
  769. Util::getHomeDir()+"/.aria2/dht.dat",
  770. "/PATH/TO/DHT_DAT"));
  771. op->addTag(TAG_BITTORRENT);
  772. handlers.push_back(op);
  773. }
  774. {
  775. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  776. (PREF_DHT_LISTEN_PORT,
  777. TEXT_DHT_LISTEN_PORT,
  778. "6881-6999",
  779. 1024, UINT16_MAX));
  780. op->addTag(TAG_BASIC);
  781. op->addTag(TAG_BITTORRENT);
  782. handlers.push_back(op);
  783. }
  784. {
  785. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  786. (PREF_ENABLE_DHT,
  787. TEXT_ENABLE_DHT,
  788. V_FALSE));
  789. op->addTag(TAG_BASIC);
  790. op->addTag(TAG_BITTORRENT);
  791. handlers.push_back(op);
  792. }
  793. {
  794. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  795. (PREF_ENABLE_PEER_EXCHANGE,
  796. TEXT_ENABLE_PEER_EXCHANGE,
  797. V_TRUE));
  798. op->addTag(TAG_BITTORRENT);
  799. handlers.push_back(op);
  800. }
  801. {
  802. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  803. (PREF_FOLLOW_TORRENT,
  804. TEXT_FOLLOW_TORRENT,
  805. V_TRUE,
  806. V_TRUE, V_MEM, V_FALSE));
  807. op->addTag(TAG_BITTORRENT);
  808. handlers.push_back(op);
  809. }
  810. {
  811. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  812. (PREF_LISTEN_PORT,
  813. TEXT_LISTEN_PORT,
  814. "6881-6999",
  815. 1024, UINT16_MAX));
  816. op->addTag(TAG_BASIC);
  817. op->addTag(TAG_BITTORRENT);
  818. handlers.push_back(op);
  819. }
  820. {
  821. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  822. (PREF_MAX_UPLOAD_LIMIT,
  823. TEXT_MAX_UPLOAD_LIMIT,
  824. "0",
  825. 0));
  826. op->addTag(TAG_BASIC);
  827. op->addTag(TAG_BITTORRENT);
  828. handlers.push_back(op);
  829. }
  830. {
  831. SharedHandle<OptionHandler> op(new NumberOptionHandler
  832. (PREF_PEER_CONNECTION_TIMEOUT,
  833. NO_DESCRIPTION,
  834. "20",
  835. 1, 600,
  836. true));
  837. handlers.push_back(op);
  838. }
  839. {
  840. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  841. (PREF_PEER_ID_PREFIX,
  842. TEXT_PEER_ID_PREFIX,
  843. "-aria2-"));
  844. op->addTag(TAG_BITTORRENT);
  845. handlers.push_back(op);
  846. }
  847. {
  848. SharedHandle<OptionHandler> op(new NumberOptionHandler
  849. (PREF_SEED_TIME,
  850. TEXT_SEED_TIME,
  851. NO_DEFAULT_VALUE,
  852. 0));
  853. op->addTag(TAG_BITTORRENT);
  854. handlers.push_back(op);
  855. }
  856. {
  857. SharedHandle<OptionHandler> op(new FloatNumberOptionHandler
  858. (PREF_SEED_RATIO,
  859. TEXT_SEED_RATIO,
  860. "1.0",
  861. 0.0));
  862. op->addTag(TAG_BITTORRENT);
  863. handlers.push_back(op);
  864. }
  865. {
  866. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  867. (PREF_TORRENT_FILE,
  868. TEXT_TORRENT_FILE));
  869. op->addTag(TAG_BASIC);
  870. op->addTag(TAG_BITTORRENT);
  871. handlers.push_back(op);
  872. }
  873. // Metalink Specific Options
  874. {
  875. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  876. (PREF_FOLLOW_METALINK,
  877. TEXT_FOLLOW_METALINK,
  878. V_TRUE,
  879. V_TRUE, V_MEM, V_FALSE));
  880. op->addTag(TAG_METALINK);
  881. handlers.push_back(op);
  882. }
  883. {
  884. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  885. (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL,
  886. TEXT_METALINK_ENABLE_UNIQUE_PROTOCOL,
  887. V_TRUE));
  888. op->addTag(TAG_METALINK);
  889. handlers.push_back(op);
  890. }
  891. {
  892. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  893. (PREF_METALINK_FILE,
  894. TEXT_METALINK_FILE));
  895. op->addTag(TAG_BASIC);
  896. op->addTag(TAG_METALINK);
  897. handlers.push_back(op);
  898. }
  899. {
  900. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  901. (PREF_METALINK_LANGUAGE,
  902. TEXT_METALINK_LANGUAGE));
  903. op->addTag(TAG_METALINK);
  904. handlers.push_back(op);
  905. }
  906. {
  907. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  908. (PREF_METALINK_LOCATION,
  909. TEXT_METALINK_LOCATION));
  910. op->addTag(TAG_METALINK);
  911. handlers.push_back(op);
  912. }
  913. {
  914. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  915. (PREF_METALINK_OS,
  916. TEXT_METALINK_OS));
  917. op->addTag(TAG_METALINK);
  918. handlers.push_back(op);
  919. }
  920. {
  921. const std::string params[] = { V_HTTP, V_HTTPS, V_FTP, V_NONE };
  922. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  923. (PREF_METALINK_PREFERRED_PROTOCOL,
  924. TEXT_METALINK_PREFERRED_PROTOCOL,
  925. V_NONE,
  926. std::deque<std::string>
  927. (&params[0], &params[arrayLength(params)])));
  928. op->addTag(TAG_METALINK);
  929. handlers.push_back(op);
  930. }
  931. {
  932. SharedHandle<OptionHandler> op(new NumberOptionHandler
  933. (PREF_METALINK_SERVERS,
  934. TEXT_METALINK_SERVERS,
  935. "5",
  936. 1));
  937. op->addTag(TAG_METALINK);
  938. handlers.push_back(op);
  939. }
  940. {
  941. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  942. (PREF_METALINK_VERSION,
  943. TEXT_METALINK_VERSION));
  944. op->addTag(TAG_METALINK);
  945. handlers.push_back(op);
  946. }
  947. // Help Option
  948. {
  949. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  950. ("help",
  951. TEXT_HELP,
  952. TAG_BASIC,
  953. StringFormat("%s,%s,%s,%s,%s,%s,%s,all",
  954. TAG_BASIC,
  955. TAG_ADVANCED,
  956. TAG_HTTP,
  957. TAG_FTP,
  958. TAG_METALINK,
  959. TAG_BITTORRENT,
  960. TAG_HELP).str()));
  961. op->addTag(TAG_BASIC);
  962. op->addTag(TAG_HELP);
  963. handlers.push_back(op);
  964. }
  965. return handlers;
  966. }
  967. } // namespace aria2