OptionHandlerFactory.cc 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537
  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. #include "File.h"
  45. namespace aria2 {
  46. OptionHandlers OptionHandlerFactory::createOptionHandlers()
  47. {
  48. OptionHandlers handlers;
  49. // General Options
  50. {
  51. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  52. (PREF_ALLOW_OVERWRITE,
  53. TEXT_ALLOW_OVERWRITE,
  54. V_FALSE));
  55. op->addTag(TAG_ADVANCED);
  56. op->addTag(TAG_FILE);
  57. handlers.push_back(op);
  58. }
  59. {
  60. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  61. (PREF_ALLOW_PIECE_LENGTH_CHANGE,
  62. TEXT_ALLOW_PIECE_LENGTH_CHANGE,
  63. V_FALSE));
  64. op->addTag(TAG_ADVANCED);
  65. handlers.push_back(op);
  66. }
  67. {
  68. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  69. (PREF_ALWAYS_RESUME,
  70. TEXT_ALWAYS_RESUME,
  71. V_TRUE,
  72. OptionHandler::OPT_ARG));
  73. op->addTag(TAG_ADVANCED);
  74. op->addTag(TAG_FTP);
  75. op->addTag(TAG_HTTP);
  76. handlers.push_back(op);
  77. }
  78. #ifdef ENABLE_ASYNC_DNS
  79. {
  80. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  81. (PREF_ASYNC_DNS,
  82. TEXT_ASYNC_DNS,
  83. V_TRUE,
  84. OptionHandler::OPT_ARG));
  85. op->addTag(TAG_ADVANCED);
  86. handlers.push_back(op);
  87. }
  88. #endif // ENABLE_ASYNC_DNS
  89. {
  90. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  91. (PREF_AUTO_FILE_RENAMING,
  92. TEXT_AUTO_FILE_RENAMING,
  93. V_TRUE,
  94. OptionHandler::OPT_ARG));
  95. op->addTag(TAG_ADVANCED);
  96. op->addTag(TAG_FILE);
  97. handlers.push_back(op);
  98. }
  99. {
  100. SharedHandle<OptionHandler> op(new NumberOptionHandler
  101. (PREF_AUTO_SAVE_INTERVAL,
  102. TEXT_AUTO_SAVE_INTERVAL,
  103. "60",
  104. 0, 600));
  105. op->addTag(TAG_ADVANCED);
  106. handlers.push_back(op);
  107. }
  108. #ifdef ENABLE_MESSAGE_DIGEST
  109. {
  110. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  111. (PREF_CHECK_INTEGRITY,
  112. TEXT_CHECK_INTEGRITY,
  113. V_FALSE,
  114. OptionHandler::OPT_ARG,
  115. 'V'));
  116. op->addTag(TAG_BASIC);
  117. op->addTag(TAG_BITTORRENT);
  118. op->addTag(TAG_METALINK);
  119. op->addTag(TAG_FILE);
  120. handlers.push_back(op);
  121. }
  122. #endif // ENABLE_MESSAGE_DIGEST
  123. {
  124. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  125. (PREF_CONF_PATH,
  126. TEXT_CONF_PATH,
  127. util::getHomeDir()+"/.aria2/aria2.conf"));
  128. op->addTag(TAG_ADVANCED);
  129. handlers.push_back(op);
  130. }
  131. {
  132. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  133. (PREF_CONTINUE,
  134. TEXT_CONTINUE,
  135. V_FALSE, // TODO ommit?
  136. OptionHandler::NO_ARG,
  137. 'c'));
  138. op->addTag(TAG_BASIC);
  139. op->addTag(TAG_FTP);
  140. op->addTag(TAG_HTTP);
  141. handlers.push_back(op);
  142. }
  143. {
  144. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  145. (PREF_DAEMON,
  146. TEXT_DAEMON,
  147. V_FALSE,
  148. OptionHandler::NO_ARG,
  149. 'D')); // TODO ommit?
  150. op->addTag(TAG_ADVANCED);
  151. handlers.push_back(op);
  152. }
  153. {
  154. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  155. (PREF_DIR,
  156. TEXT_DIR,
  157. File::getCurrentDir(),
  158. A2STR::NIL,
  159. OptionHandler::REQ_ARG,
  160. 'd'));
  161. op->addTag(TAG_BASIC);
  162. op->addTag(TAG_FILE);
  163. handlers.push_back(op);
  164. }
  165. {
  166. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  167. (PREF_DISABLE_IPV6,
  168. TEXT_DISABLE_IPV6,
  169. V_FALSE,
  170. OptionHandler::OPT_ARG));
  171. op->addTag(TAG_ADVANCED);
  172. handlers.push_back(op);
  173. }
  174. {
  175. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  176. (PREF_DNS_TIMEOUT,
  177. NO_DESCRIPTION,
  178. "30",
  179. 1, 60));
  180. op->hide();
  181. handlers.push_back(op);
  182. }
  183. #ifdef ENABLE_DIRECT_IO
  184. {
  185. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  186. (PREF_ENABLE_DIRECT_IO,
  187. TEXT_ENABLE_DIRECT_IO,
  188. V_TRUE,
  189. OptionHandler::OPT_ARG));
  190. op->addTag(TAG_ADVANCED);
  191. op->addTag(TAG_FILE);
  192. handlers.push_back(op);
  193. }
  194. #endif // ENABLE_DIRECT_IO
  195. #ifdef ENABLE_XML_RPC
  196. {
  197. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  198. (PREF_ENABLE_XML_RPC,
  199. TEXT_ENABLE_XML_RPC,
  200. V_FALSE,
  201. OptionHandler::OPT_ARG));
  202. op->addTag(TAG_XML_RPC);
  203. handlers.push_back(op);
  204. }
  205. #endif // ENABLE_XML_RPC
  206. {
  207. std::string params[] = {
  208. #ifdef HAVE_EPOLL
  209. V_EPOLL,
  210. #endif // HAVE_EPOLL
  211. #ifdef HAVE_POLL
  212. V_POLL,
  213. #endif // HAVE_POLL
  214. V_SELECT
  215. };
  216. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  217. (PREF_EVENT_POLL,
  218. TEXT_EVENT_POLL,
  219. #ifdef HAVE_EPOLL
  220. V_EPOLL,
  221. #else // !HAVE_EPOLL
  222. V_SELECT,
  223. #endif // !HAVE_EPOLL
  224. std::vector<std::string>
  225. (vbegin(params), vend(params))));
  226. op->addTag(TAG_ADVANCED);
  227. handlers.push_back(op);
  228. }
  229. {
  230. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  231. (PREF_FILE_ALLOCATION,
  232. TEXT_FILE_ALLOCATION,
  233. V_PREALLOC,
  234. V_NONE, V_PREALLOC,
  235. #ifdef HAVE_POSIX_FALLOCATE
  236. V_FALLOC,
  237. #endif // HAVE_POSIX_FALLOCATE
  238. 'a'));
  239. op->addTag(TAG_BASIC);
  240. op->addTag(TAG_FILE);
  241. handlers.push_back(op);
  242. }
  243. {
  244. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  245. (PREF_FORCE_SEQUENTIAL,
  246. TEXT_FORCE_SEQUENTIAL,
  247. V_FALSE,
  248. OptionHandler::OPT_ARG,
  249. 'Z'));
  250. op->addTag(TAG_BASIC);
  251. handlers.push_back(op);
  252. }
  253. {
  254. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  255. (PREF_HUMAN_READABLE,
  256. TEXT_HUMAN_READABLE,
  257. V_TRUE,
  258. OptionHandler::OPT_ARG));
  259. op->addTag(TAG_ADVANCED);
  260. handlers.push_back(op);
  261. }
  262. {
  263. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  264. (PREF_INPUT_FILE,
  265. TEXT_INPUT_FILE,
  266. NO_DEFAULT_VALUE,
  267. "FILENAME,-",
  268. OptionHandler::REQ_ARG,
  269. 'i'));
  270. op->addTag(TAG_BASIC);
  271. handlers.push_back(op);
  272. }
  273. {
  274. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  275. (PREF_INTERFACE,
  276. TEXT_INTERFACE,
  277. NO_DEFAULT_VALUE,
  278. "interface, IP address, hostname",
  279. OptionHandler::REQ_ARG));
  280. op->addTag(TAG_ADVANCED);
  281. handlers.push_back(op);
  282. }
  283. {
  284. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  285. (PREF_LOG,
  286. TEXT_LOG,
  287. NO_DEFAULT_VALUE,
  288. "FILENAME,-",
  289. OptionHandler::REQ_ARG,
  290. 'l'));
  291. op->addTag(TAG_BASIC);
  292. handlers.push_back(op);
  293. }
  294. {
  295. const std::string params[] = { V_DEBUG, V_INFO, V_NOTICE, V_WARN, V_ERROR };
  296. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  297. (PREF_LOG_LEVEL,
  298. TEXT_LOG_LEVEL,
  299. V_DEBUG,
  300. std::vector<std::string>
  301. (vbegin(params), vend(params))));
  302. op->addTag(TAG_ADVANCED);
  303. handlers.push_back(op);
  304. }
  305. {
  306. SharedHandle<OptionHandler> op(new NumberOptionHandler
  307. (PREF_MAX_CONCURRENT_DOWNLOADS,
  308. TEXT_MAX_CONCURRENT_DOWNLOADS,
  309. "5",
  310. 1, -1,
  311. 'j'));
  312. op->addTag(TAG_BASIC);
  313. handlers.push_back(op);
  314. }
  315. {
  316. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  317. (PREF_MAX_DOWNLOAD_LIMIT,
  318. TEXT_MAX_DOWNLOAD_LIMIT,
  319. "0",
  320. 0));
  321. op->addTag(TAG_BITTORRENT);
  322. op->addTag(TAG_FTP);
  323. op->addTag(TAG_HTTP);
  324. handlers.push_back(op);
  325. }
  326. {
  327. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  328. (PREF_MAX_OVERALL_DOWNLOAD_LIMIT,
  329. TEXT_MAX_OVERALL_DOWNLOAD_LIMIT,
  330. "0",
  331. 0));
  332. op->addTag(TAG_BITTORRENT);
  333. op->addTag(TAG_FTP);
  334. op->addTag(TAG_HTTP);
  335. handlers.push_back(op);
  336. }
  337. {
  338. SharedHandle<OptionHandler> op(new NumberOptionHandler
  339. (PREF_MAX_RESUME_FAILURE_TRIES,
  340. TEXT_MAX_RESUME_FAILURE_TRIES,
  341. "0",
  342. 0));
  343. op->addTag(TAG_ADVANCED);
  344. op->addTag(TAG_FTP);
  345. op->addTag(TAG_HTTP);
  346. handlers.push_back(op);
  347. }
  348. {
  349. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  350. (PREF_NO_CONF,
  351. TEXT_NO_CONF,
  352. V_FALSE,
  353. OptionHandler::NO_ARG));
  354. op->addTag(TAG_ADVANCED);
  355. handlers.push_back(op);
  356. }
  357. {
  358. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  359. (PREF_NO_FILE_ALLOCATION_LIMIT,
  360. TEXT_NO_FILE_ALLOCATION_LIMIT,
  361. "5M",
  362. 0));
  363. op->addTag(TAG_ADVANCED);
  364. op->addTag(TAG_FILE);
  365. handlers.push_back(op);
  366. }
  367. {
  368. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  369. (PREF_ON_DOWNLOAD_COMPLETE,
  370. TEXT_ON_DOWNLOAD_COMPLETE,
  371. NO_DEFAULT_VALUE,
  372. "/path/to/command"));
  373. op->addTag(TAG_ADVANCED);
  374. op->addTag(TAG_HOOK);
  375. handlers.push_back(op);
  376. }
  377. {
  378. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  379. (PREF_ON_DOWNLOAD_ERROR,
  380. TEXT_ON_DOWNLOAD_ERROR,
  381. NO_DEFAULT_VALUE,
  382. "/path/to/command"));
  383. op->addTag(TAG_ADVANCED);
  384. op->addTag(TAG_HOOK);
  385. handlers.push_back(op);
  386. }
  387. {
  388. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  389. (PREF_ON_DOWNLOAD_PAUSE,
  390. TEXT_ON_DOWNLOAD_PAUSE,
  391. NO_DEFAULT_VALUE,
  392. "/path/to/command"));
  393. op->addTag(TAG_ADVANCED);
  394. op->addTag(TAG_HOOK);
  395. handlers.push_back(op);
  396. }
  397. {
  398. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  399. (PREF_ON_DOWNLOAD_START,
  400. TEXT_ON_DOWNLOAD_START,
  401. NO_DEFAULT_VALUE,
  402. "/path/to/command"));
  403. op->addTag(TAG_ADVANCED);
  404. op->addTag(TAG_HOOK);
  405. handlers.push_back(op);
  406. }
  407. {
  408. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  409. (PREF_ON_DOWNLOAD_STOP,
  410. TEXT_ON_DOWNLOAD_STOP,
  411. NO_DEFAULT_VALUE,
  412. "/path/to/command"));
  413. op->addTag(TAG_ADVANCED);
  414. op->addTag(TAG_HOOK);
  415. handlers.push_back(op);
  416. }
  417. {
  418. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  419. (PREF_PARAMETERIZED_URI,
  420. TEXT_PARAMETERIZED_URI,
  421. V_FALSE,
  422. OptionHandler::OPT_ARG,
  423. 'P'));
  424. op->addTag(TAG_ADVANCED);
  425. handlers.push_back(op);
  426. }
  427. {
  428. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  429. (PREF_QUIET,
  430. TEXT_QUIET,
  431. V_FALSE,
  432. OptionHandler::OPT_ARG,
  433. 'q'));
  434. op->addTag(TAG_ADVANCED);
  435. handlers.push_back(op);
  436. }
  437. #ifdef ENABLE_MESSAGE_DIGEST
  438. {
  439. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  440. (PREF_REALTIME_CHUNK_CHECKSUM,
  441. TEXT_REALTIME_CHUNK_CHECKSUM,
  442. V_TRUE));
  443. op->addTag(TAG_METALINK);
  444. handlers.push_back(op);
  445. }
  446. #endif // ENABLE_MESSAGE_DIGEST
  447. {
  448. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  449. (PREF_REMOVE_CONTROL_FILE,
  450. TEXT_REMOVE_CONTROL_FILE,
  451. V_FALSE,
  452. OptionHandler::OPT_ARG));
  453. op->addTag(TAG_ADVANCED);
  454. handlers.push_back(op);
  455. }
  456. {
  457. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  458. (PREF_SAVE_SESSION,
  459. TEXT_SAVE_SESSION,
  460. NO_DEFAULT_VALUE,
  461. "FILENAME"));
  462. op->addTag(TAG_ADVANCED);
  463. handlers.push_back(op);
  464. }
  465. {
  466. SharedHandle<OptionHandler> op(new NumberOptionHandler
  467. (PREF_STOP,
  468. TEXT_STOP,
  469. "0",
  470. 0, INT32_MAX));
  471. op->addTag(TAG_ADVANCED);
  472. handlers.push_back(op);
  473. }
  474. {
  475. SharedHandle<OptionHandler> op(new NumberOptionHandler
  476. (PREF_SUMMARY_INTERVAL,
  477. TEXT_SUMMARY_INTERVAL,
  478. "60",
  479. 0, INT32_MAX));
  480. op->addTag(TAG_ADVANCED);
  481. handlers.push_back(op);
  482. }
  483. #ifdef ENABLE_XML_RPC
  484. {
  485. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  486. (PREF_XML_RPC_LISTEN_ALL,
  487. TEXT_XML_RPC_LISTEN_ALL,
  488. V_FALSE,
  489. OptionHandler::OPT_ARG));
  490. op->addTag(TAG_XML_RPC);
  491. handlers.push_back(op);
  492. }
  493. {
  494. SharedHandle<OptionHandler> op(new NumberOptionHandler
  495. (PREF_XML_RPC_LISTEN_PORT,
  496. TEXT_XML_RPC_LISTEN_PORT,
  497. "6800",
  498. 1024, UINT16_MAX));
  499. op->addTag(TAG_XML_RPC);
  500. handlers.push_back(op);
  501. }
  502. {
  503. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  504. (PREF_XML_RPC_MAX_REQUEST_SIZE,
  505. TEXT_XML_RPC_MAX_REQUEST_SIZE,
  506. "2M",
  507. 0));
  508. op->addTag(TAG_XML_RPC);
  509. handlers.push_back(op);
  510. }
  511. {
  512. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  513. (PREF_XML_RPC_USER,
  514. TEXT_XML_RPC_USER));
  515. op->addTag(TAG_XML_RPC);
  516. handlers.push_back(op);
  517. }
  518. {
  519. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  520. (PREF_XML_RPC_PASSWD,
  521. TEXT_XML_RPC_PASSWD));
  522. op->addTag(TAG_XML_RPC);
  523. handlers.push_back(op);
  524. }
  525. #endif // ENABLE_XML_RPC
  526. // HTTP/FTP options
  527. {
  528. SharedHandle<OptionHandler> op(new NumberOptionHandler
  529. (PREF_CONNECT_TIMEOUT,
  530. TEXT_CONNECT_TIMEOUT,
  531. "60",
  532. 1, 600));
  533. op->addTag(TAG_FTP);
  534. op->addTag(TAG_HTTP);
  535. handlers.push_back(op);
  536. }
  537. {
  538. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  539. (PREF_DRY_RUN,
  540. TEXT_DRY_RUN,
  541. V_FALSE,
  542. OptionHandler::OPT_ARG));
  543. op->addTag(TAG_FTP);
  544. op->addTag(TAG_HTTP);
  545. handlers.push_back(op);
  546. }
  547. {
  548. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  549. (PREF_LOWEST_SPEED_LIMIT,
  550. TEXT_LOWEST_SPEED_LIMIT,
  551. "0",
  552. 0));
  553. op->addTag(TAG_FTP);
  554. op->addTag(TAG_HTTP);
  555. handlers.push_back(op);
  556. }
  557. {
  558. SharedHandle<OptionHandler> op(new NumberOptionHandler
  559. (PREF_MAX_FILE_NOT_FOUND,
  560. TEXT_MAX_FILE_NOT_FOUND,
  561. "0",
  562. 0));
  563. op->addTag(TAG_FTP);
  564. op->addTag(TAG_HTTP);
  565. handlers.push_back(op);
  566. }
  567. {
  568. SharedHandle<OptionHandler> op(new NumberOptionHandler
  569. (PREF_MAX_TRIES,
  570. TEXT_MAX_TRIES,
  571. "5",
  572. 0, -1,
  573. 'm'));
  574. op->addTag(TAG_FTP);
  575. op->addTag(TAG_HTTP);
  576. handlers.push_back(op);
  577. }
  578. {
  579. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  580. (PREF_NO_NETRC,
  581. TEXT_NO_NETRC,
  582. V_FALSE, // TODO ommit?
  583. OptionHandler::NO_ARG,
  584. 'n'));
  585. op->addTag(TAG_FTP);
  586. op->addTag(TAG_HTTP);
  587. handlers.push_back(op);
  588. }
  589. {
  590. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  591. (PREF_OUT,
  592. TEXT_OUT,
  593. NO_DEFAULT_VALUE,
  594. "FILENAME",
  595. OptionHandler::REQ_ARG,
  596. 'o'));
  597. op->addTag(TAG_BASIC);
  598. op->addTag(TAG_FTP);
  599. op->addTag(TAG_HTTP);
  600. op->addTag(TAG_FILE);
  601. handlers.push_back(op);
  602. }
  603. {
  604. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  605. (PREF_REMOTE_TIME,
  606. TEXT_REMOTE_TIME,
  607. V_FALSE,
  608. OptionHandler::OPT_ARG,
  609. 'R'));
  610. op->addTag(TAG_FTP);
  611. op->addTag(TAG_HTTP);
  612. handlers.push_back(op);
  613. }
  614. {
  615. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  616. (PREF_REUSE_URI,
  617. TEXT_REUSE_URI,
  618. V_TRUE,
  619. OptionHandler::OPT_ARG));
  620. op->addTag(TAG_FTP);
  621. op->addTag(TAG_HTTP);
  622. handlers.push_back(op);
  623. }
  624. {
  625. SharedHandle<UnitNumberOptionHandler> op(new UnitNumberOptionHandler
  626. (PREF_SEGMENT_SIZE,
  627. NO_DESCRIPTION,
  628. "1M",
  629. 1024, -1));
  630. op->hide();
  631. handlers.push_back(op);
  632. }
  633. {
  634. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  635. (PREF_SERVER_STAT_IF,
  636. TEXT_SERVER_STAT_IF,
  637. NO_DEFAULT_VALUE,
  638. "FILENAME"));
  639. op->addTag(TAG_FTP);
  640. op->addTag(TAG_HTTP);
  641. handlers.push_back(op);
  642. }
  643. {
  644. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  645. (PREF_SERVER_STAT_OF,
  646. TEXT_SERVER_STAT_OF,
  647. NO_DEFAULT_VALUE,
  648. "FILENAME"));
  649. op->addTag(TAG_FTP);
  650. op->addTag(TAG_HTTP);
  651. handlers.push_back(op);
  652. }
  653. {
  654. SharedHandle<OptionHandler> op(new NumberOptionHandler
  655. (PREF_SERVER_STAT_TIMEOUT,
  656. TEXT_SERVER_STAT_TIMEOUT,
  657. "86400",
  658. 0, INT32_MAX));
  659. op->addTag(TAG_FTP);
  660. op->addTag(TAG_HTTP);
  661. handlers.push_back(op);
  662. }
  663. {
  664. SharedHandle<OptionHandler> op(new NumberOptionHandler
  665. (PREF_SPLIT,
  666. TEXT_SPLIT,
  667. "5",
  668. 1, -1,
  669. 's'));
  670. op->addTag(TAG_BASIC);
  671. op->addTag(TAG_FTP);
  672. op->addTag(TAG_HTTP);
  673. handlers.push_back(op);
  674. }
  675. {
  676. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  677. (PREF_STARTUP_IDLE_TIME,
  678. NO_DESCRIPTION,
  679. "10",
  680. 1, 60));
  681. op->hide();
  682. handlers.push_back(op);
  683. }
  684. {
  685. SharedHandle<OptionHandler> op(new NumberOptionHandler
  686. (PREF_TIMEOUT,
  687. TEXT_TIMEOUT,
  688. "60",
  689. 1, 600,
  690. 't'));
  691. op->addTag(TAG_FTP);
  692. op->addTag(TAG_HTTP);
  693. handlers.push_back(op);
  694. }
  695. {
  696. const std::string params[] = { V_INORDER, V_FEEDBACK, V_ADAPTIVE };
  697. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  698. (PREF_URI_SELECTOR,
  699. TEXT_URI_SELECTOR,
  700. V_FEEDBACK,
  701. std::vector<std::string>
  702. (vbegin(params), vend(params))));
  703. op->addTag(TAG_FTP);
  704. op->addTag(TAG_HTTP);
  705. handlers.push_back(op);
  706. }
  707. // HTTP Specific Options
  708. {
  709. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  710. (PREF_CA_CERTIFICATE,
  711. TEXT_CA_CERTIFICATE,
  712. CA_BUNDLE));
  713. op->addTag(TAG_HTTP);
  714. op->addTag(TAG_HTTPS);
  715. handlers.push_back(op);
  716. }
  717. {
  718. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  719. (PREF_CERTIFICATE,
  720. TEXT_CERTIFICATE));
  721. op->addTag(TAG_HTTP);
  722. op->addTag(TAG_HTTPS);
  723. handlers.push_back(op);
  724. }
  725. {
  726. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  727. (PREF_CHECK_CERTIFICATE,
  728. TEXT_CHECK_CERTIFICATE,
  729. V_TRUE,
  730. OptionHandler::OPT_ARG));
  731. op->addTag(TAG_HTTP);
  732. op->addTag(TAG_HTTPS);
  733. handlers.push_back(op);
  734. }
  735. {
  736. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  737. (PREF_ENABLE_HTTP_KEEP_ALIVE,
  738. TEXT_ENABLE_HTTP_KEEP_ALIVE,
  739. V_TRUE,
  740. OptionHandler::OPT_ARG));
  741. op->addTag(TAG_HTTP);
  742. handlers.push_back(op);
  743. }
  744. {
  745. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  746. (PREF_ENABLE_HTTP_PIPELINING,
  747. TEXT_ENABLE_HTTP_PIPELINING,
  748. V_FALSE,
  749. OptionHandler::OPT_ARG));
  750. op->addTag(TAG_HTTP);
  751. handlers.push_back(op);
  752. }
  753. {
  754. SharedHandle<OptionHandler> op(new CumulativeOptionHandler
  755. (PREF_HEADER,
  756. TEXT_HEADER,
  757. NO_DEFAULT_VALUE,
  758. "\n"));
  759. op->addTag(TAG_HTTP);
  760. handlers.push_back(op);
  761. }
  762. {
  763. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  764. (PREF_HTTP_ACCEPT_GZIP,
  765. TEXT_HTTP_ACCEPT_GZIP,
  766. V_FALSE,
  767. OptionHandler::OPT_ARG));
  768. op->addTag(TAG_HTTP);
  769. handlers.push_back(op);
  770. }
  771. {
  772. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  773. (PREF_HTTP_AUTH_CHALLENGE,
  774. TEXT_HTTP_AUTH_CHALLENGE,
  775. V_FALSE,
  776. OptionHandler::OPT_ARG));
  777. op->addTag(TAG_HTTP);
  778. handlers.push_back(op);
  779. }
  780. {
  781. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  782. (PREF_HTTP_NO_CACHE,
  783. TEXT_HTTP_NO_CACHE,
  784. V_TRUE,
  785. OptionHandler::OPT_ARG));
  786. op->addTag(TAG_HTTP);
  787. handlers.push_back(op);
  788. }
  789. {
  790. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  791. (PREF_HTTP_PASSWD,
  792. TEXT_HTTP_PASSWD));
  793. op->addTag(TAG_BASIC);
  794. op->addTag(TAG_HTTP);
  795. handlers.push_back(op);
  796. }
  797. {
  798. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  799. (PREF_HTTP_USER,
  800. TEXT_HTTP_USER));
  801. op->addTag(TAG_BASIC);
  802. op->addTag(TAG_HTTP);
  803. handlers.push_back(op);
  804. }
  805. {
  806. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  807. (PREF_LOAD_COOKIES,
  808. TEXT_LOAD_COOKIES,
  809. NO_DEFAULT_VALUE,
  810. "/path/to/file"));
  811. op->addTag(TAG_BASIC);
  812. op->addTag(TAG_HTTP);
  813. op->addTag(TAG_COOKIE);
  814. handlers.push_back(op);
  815. }
  816. {
  817. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  818. (PREF_MAX_HTTP_PIPELINING,
  819. NO_DESCRIPTION,
  820. "2",
  821. 1, 8));
  822. op->hide();
  823. handlers.push_back(op);
  824. }
  825. {
  826. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  827. (PREF_PRIVATE_KEY,
  828. TEXT_PRIVATE_KEY));
  829. op->addTag(TAG_HTTP);
  830. op->addTag(TAG_HTTPS);
  831. handlers.push_back(op);
  832. }
  833. {
  834. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  835. (PREF_REFERER,
  836. TEXT_REFERER));
  837. op->addTag(TAG_HTTP);
  838. handlers.push_back(op);
  839. }
  840. {
  841. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  842. (PREF_SAVE_COOKIES,
  843. TEXT_SAVE_COOKIES,
  844. NO_DEFAULT_VALUE,
  845. "/path/to/file"));
  846. op->addTag(TAG_HTTP);
  847. op->addTag(TAG_COOKIE);
  848. handlers.push_back(op);
  849. }
  850. {
  851. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  852. (PREF_USE_HEAD,
  853. TEXT_USE_HEAD,
  854. V_FALSE,
  855. OptionHandler::OPT_ARG));
  856. op->addTag(TAG_HTTP);
  857. handlers.push_back(op);
  858. }
  859. {
  860. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  861. (PREF_USER_AGENT,
  862. TEXT_USER_AGENT,
  863. "aria2/"PACKAGE_VERSION,
  864. A2STR::NIL,
  865. OptionHandler::REQ_ARG,
  866. 'U'));
  867. op->addTag(TAG_HTTP);
  868. handlers.push_back(op);
  869. }
  870. // FTP Specific Options
  871. {
  872. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  873. (PREF_FTP_PASSWD,
  874. TEXT_FTP_PASSWD));
  875. op->addTag(TAG_BASIC);
  876. op->addTag(TAG_FTP);
  877. handlers.push_back(op);
  878. }
  879. {
  880. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  881. (PREF_FTP_PASV,
  882. TEXT_FTP_PASV,
  883. V_TRUE,
  884. OptionHandler::OPT_ARG,
  885. 'p'));
  886. op->addTag(TAG_FTP);
  887. handlers.push_back(op);
  888. }
  889. {
  890. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  891. (PREF_FTP_REUSE_CONNECTION,
  892. TEXT_FTP_REUSE_CONNECTION,
  893. V_TRUE,
  894. OptionHandler::OPT_ARG));
  895. op->addTag(TAG_FTP);
  896. handlers.push_back(op);
  897. }
  898. {
  899. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  900. (PREF_FTP_TYPE,
  901. TEXT_FTP_TYPE,
  902. V_BINARY,
  903. V_BINARY, V_ASCII));
  904. op->addTag(TAG_FTP);
  905. handlers.push_back(op);
  906. }
  907. {
  908. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  909. (PREF_FTP_USER,
  910. TEXT_FTP_USER));
  911. op->addTag(TAG_BASIC);
  912. op->addTag(TAG_FTP);
  913. handlers.push_back(op);
  914. }
  915. {
  916. SharedHandle<DefaultOptionHandler> op(new DefaultOptionHandler
  917. (PREF_NETRC_PATH,
  918. NO_DESCRIPTION,
  919. util::getHomeDir()+"/.netrc",
  920. "/PATH/TO/NETRC"));
  921. op->hide();
  922. handlers.push_back(op);
  923. }
  924. // Proxy options
  925. {
  926. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  927. (PREF_HTTP_PROXY,
  928. TEXT_HTTP_PROXY,
  929. NO_DEFAULT_VALUE));
  930. op->addTag(TAG_HTTP);
  931. handlers.push_back(op);
  932. }
  933. {
  934. SharedHandle<OptionHandler> op(new HttpProxyPasswdOptionHandler
  935. (PREF_HTTP_PROXY_PASSWD,
  936. TEXT_HTTP_PROXY_PASSWD,
  937. NO_DEFAULT_VALUE));
  938. op->addTag(TAG_HTTP);
  939. handlers.push_back(op);
  940. }
  941. {
  942. SharedHandle<OptionHandler> op(new HttpProxyUserOptionHandler
  943. (PREF_HTTP_PROXY_USER,
  944. TEXT_HTTP_PROXY_USER,
  945. NO_DEFAULT_VALUE));
  946. op->addTag(TAG_HTTP);
  947. handlers.push_back(op);
  948. }
  949. {
  950. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  951. (PREF_HTTPS_PROXY,
  952. TEXT_HTTPS_PROXY,
  953. NO_DEFAULT_VALUE));
  954. op->addTag(TAG_HTTP);
  955. op->addTag(TAG_HTTPS);
  956. handlers.push_back(op);
  957. }
  958. {
  959. SharedHandle<OptionHandler> op(new HttpProxyPasswdOptionHandler
  960. (PREF_HTTPS_PROXY_PASSWD,
  961. TEXT_HTTPS_PROXY_PASSWD,
  962. NO_DEFAULT_VALUE));
  963. op->addTag(TAG_HTTP);
  964. op->addTag(TAG_HTTPS);
  965. handlers.push_back(op);
  966. }
  967. {
  968. SharedHandle<OptionHandler> op(new HttpProxyUserOptionHandler
  969. (PREF_HTTPS_PROXY_USER,
  970. TEXT_HTTPS_PROXY_USER,
  971. NO_DEFAULT_VALUE));
  972. op->addTag(TAG_HTTP);
  973. op->addTag(TAG_HTTPS);
  974. handlers.push_back(op);
  975. }
  976. {
  977. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  978. (PREF_FTP_PROXY,
  979. TEXT_FTP_PROXY,
  980. NO_DEFAULT_VALUE));
  981. op->addTag(TAG_FTP);
  982. handlers.push_back(op);
  983. }
  984. {
  985. SharedHandle<OptionHandler> op(new HttpProxyPasswdOptionHandler
  986. (PREF_FTP_PROXY_PASSWD,
  987. TEXT_FTP_PROXY_PASSWD,
  988. NO_DEFAULT_VALUE));
  989. op->addTag(TAG_FTP);
  990. handlers.push_back(op);
  991. }
  992. {
  993. SharedHandle<OptionHandler> op(new HttpProxyUserOptionHandler
  994. (PREF_FTP_PROXY_USER,
  995. TEXT_FTP_PROXY_USER,
  996. NO_DEFAULT_VALUE));
  997. op->addTag(TAG_FTP);
  998. handlers.push_back(op);
  999. }
  1000. {
  1001. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  1002. (PREF_ALL_PROXY,
  1003. TEXT_ALL_PROXY,
  1004. NO_DEFAULT_VALUE));
  1005. op->addTag(TAG_FTP);
  1006. op->addTag(TAG_HTTP);
  1007. op->addTag(TAG_HTTPS);
  1008. handlers.push_back(op);
  1009. }
  1010. {
  1011. SharedHandle<OptionHandler> op(new HttpProxyPasswdOptionHandler
  1012. (PREF_ALL_PROXY_PASSWD,
  1013. TEXT_ALL_PROXY_PASSWD,
  1014. NO_DEFAULT_VALUE));
  1015. op->addTag(TAG_FTP);
  1016. op->addTag(TAG_HTTP);
  1017. op->addTag(TAG_HTTPS);
  1018. handlers.push_back(op);
  1019. }
  1020. {
  1021. SharedHandle<OptionHandler> op(new HttpProxyUserOptionHandler
  1022. (PREF_ALL_PROXY_USER,
  1023. TEXT_ALL_PROXY_USER,
  1024. NO_DEFAULT_VALUE));
  1025. op->addTag(TAG_FTP);
  1026. op->addTag(TAG_HTTP);
  1027. op->addTag(TAG_HTTPS);
  1028. handlers.push_back(op);
  1029. }
  1030. {
  1031. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1032. (PREF_NO_PROXY,
  1033. TEXT_NO_PROXY,
  1034. NO_DEFAULT_VALUE,
  1035. "HOSTNAME,DOMAIN,NETWORK/CIDR"));
  1036. op->addTag(TAG_FTP);
  1037. op->addTag(TAG_HTTP);
  1038. op->addTag(TAG_HTTPS);
  1039. handlers.push_back(op);
  1040. }
  1041. {
  1042. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1043. (PREF_PROXY_METHOD,
  1044. TEXT_PROXY_METHOD,
  1045. V_GET,
  1046. V_GET, V_TUNNEL));
  1047. op->addTag(TAG_FTP);
  1048. op->addTag(TAG_HTTP);
  1049. handlers.push_back(op);
  1050. }
  1051. // BitTorrent/Metalink Options
  1052. #if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
  1053. {
  1054. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  1055. (PREF_SELECT_FILE,
  1056. TEXT_SELECT_FILE,
  1057. NO_DEFAULT_VALUE,
  1058. 1, INT32_MAX));
  1059. op->addTag(TAG_BITTORRENT);
  1060. op->addTag(TAG_METALINK);
  1061. handlers.push_back(op);
  1062. }
  1063. {
  1064. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1065. (PREF_SHOW_FILES,
  1066. TEXT_SHOW_FILES,
  1067. V_FALSE, // TODO ommit?
  1068. OptionHandler::NO_ARG,
  1069. 'S'));
  1070. op->addTag(TAG_BASIC);
  1071. op->addTag(TAG_BITTORRENT);
  1072. op->addTag(TAG_METALINK);
  1073. handlers.push_back(op);
  1074. }
  1075. #endif // ENABLE_BITTORRENT || ENABLE_METALINK
  1076. // BitTorrent Specific Options
  1077. #ifdef ENABLE_BITTORRENT
  1078. {
  1079. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1080. (PREF_BT_ENABLE_LPD,
  1081. TEXT_BT_ENABLE_LPD,
  1082. V_FALSE,
  1083. OptionHandler::OPT_ARG));
  1084. op->addTag(TAG_BITTORRENT);
  1085. handlers.push_back(op);
  1086. }
  1087. {
  1088. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1089. (PREF_BT_EXTERNAL_IP,
  1090. TEXT_BT_EXTERNAL_IP,
  1091. NO_DEFAULT_VALUE,
  1092. "a numeric IP address"));
  1093. op->addTag(TAG_BITTORRENT);
  1094. handlers.push_back(op);
  1095. }
  1096. {
  1097. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1098. (PREF_BT_KEEP_ALIVE_INTERVAL,
  1099. NO_DESCRIPTION,
  1100. "120",
  1101. 1, 120));
  1102. op->hide();
  1103. handlers.push_back(op);
  1104. }
  1105. {
  1106. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1107. (PREF_BT_HASH_CHECK_SEED,
  1108. TEXT_BT_HASH_CHECK_SEED,
  1109. V_TRUE,
  1110. OptionHandler::OPT_ARG));
  1111. op->addTag(TAG_BITTORRENT);
  1112. handlers.push_back(op);
  1113. }
  1114. {
  1115. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1116. (PREF_BT_LPD_INTERFACE,
  1117. TEXT_BT_LPD_INTERFACE,
  1118. NO_DEFAULT_VALUE,
  1119. "interface, IP address",
  1120. OptionHandler::REQ_ARG));
  1121. op->addTag(TAG_BITTORRENT);
  1122. handlers.push_back(op);
  1123. }
  1124. {
  1125. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1126. (PREF_BT_MAX_OPEN_FILES,
  1127. TEXT_BT_MAX_OPEN_FILES,
  1128. "100",
  1129. 1));
  1130. op->addTag(TAG_BITTORRENT);
  1131. handlers.push_back(op);
  1132. }
  1133. {
  1134. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1135. (PREF_BT_MAX_PEERS,
  1136. TEXT_BT_MAX_PEERS,
  1137. "55",
  1138. 0));
  1139. op->addTag(TAG_BITTORRENT);
  1140. handlers.push_back(op);
  1141. }
  1142. {
  1143. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1144. (PREF_BT_METADATA_ONLY,
  1145. TEXT_BT_METADATA_ONLY,
  1146. V_FALSE,
  1147. OptionHandler::OPT_ARG));
  1148. op->addTag(TAG_BITTORRENT);
  1149. handlers.push_back(op);
  1150. }
  1151. {
  1152. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1153. (PREF_BT_MIN_CRYPTO_LEVEL,
  1154. TEXT_BT_MIN_CRYPTO_LEVEL,
  1155. V_PLAIN,
  1156. V_PLAIN, V_ARC4));
  1157. op->addTag(TAG_BITTORRENT);
  1158. handlers.push_back(op);
  1159. }
  1160. {
  1161. SharedHandle<OptionHandler> op(new PrioritizePieceOptionHandler
  1162. (PREF_BT_PRIORITIZE_PIECE,
  1163. TEXT_BT_PRIORITIZE_PIECE));
  1164. op->addTag(TAG_BITTORRENT);
  1165. handlers.push_back(op);
  1166. }
  1167. {
  1168. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  1169. (PREF_BT_REQUEST_PEER_SPEED_LIMIT,
  1170. TEXT_BT_REQUEST_PEER_SPEED_LIMIT,
  1171. "50K",
  1172. 0));
  1173. op->addTag(TAG_BITTORRENT);
  1174. handlers.push_back(op);
  1175. }
  1176. {
  1177. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1178. (PREF_BT_REQUIRE_CRYPTO,
  1179. TEXT_BT_REQUIRE_CRYPTO,
  1180. V_FALSE));
  1181. op->addTag(TAG_BITTORRENT);
  1182. handlers.push_back(op);
  1183. }
  1184. {
  1185. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1186. (PREF_BT_REQUEST_TIMEOUT,
  1187. NO_DESCRIPTION,
  1188. "60",
  1189. 1, 600));
  1190. op->hide();
  1191. handlers.push_back(op);
  1192. }
  1193. {
  1194. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1195. (PREF_BT_SEED_UNVERIFIED,
  1196. TEXT_BT_SEED_UNVERIFIED,
  1197. V_FALSE,
  1198. OptionHandler::OPT_ARG));
  1199. op->addTag(TAG_BITTORRENT);
  1200. handlers.push_back(op);
  1201. }
  1202. {
  1203. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1204. (PREF_BT_SAVE_METADATA,
  1205. TEXT_BT_SAVE_METADATA,
  1206. V_FALSE,
  1207. OptionHandler::OPT_ARG));
  1208. op->addTag(TAG_BITTORRENT);
  1209. handlers.push_back(op);
  1210. }
  1211. {
  1212. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1213. (PREF_BT_STOP_TIMEOUT,
  1214. TEXT_BT_STOP_TIMEOUT,
  1215. "0",
  1216. 0));
  1217. op->addTag(TAG_BITTORRENT);
  1218. handlers.push_back(op);
  1219. }
  1220. {
  1221. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1222. (PREF_BT_TIMEOUT,
  1223. NO_DESCRIPTION,
  1224. "180",
  1225. 1, 600));
  1226. op->hide();
  1227. handlers.push_back(op);
  1228. }
  1229. {
  1230. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1231. (PREF_BT_TRACKER_CONNECT_TIMEOUT,
  1232. TEXT_BT_TRACKER_CONNECT_TIMEOUT,
  1233. "60",
  1234. 1, 600));
  1235. op->addTag(TAG_BITTORRENT);
  1236. handlers.push_back(op);
  1237. }
  1238. {
  1239. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1240. (PREF_BT_TRACKER_INTERVAL,
  1241. TEXT_BT_TRACKER_INTERVAL,
  1242. "0",
  1243. 0));
  1244. op->addTag(TAG_BITTORRENT);
  1245. handlers.push_back(op);
  1246. }
  1247. {
  1248. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1249. (PREF_BT_TRACKER_TIMEOUT,
  1250. TEXT_BT_TRACKER_TIMEOUT,
  1251. "60",
  1252. 1, 600));
  1253. op->addTag(TAG_BITTORRENT);
  1254. handlers.push_back(op);
  1255. }
  1256. {
  1257. SharedHandle<OptionHandler> op(new HostPortOptionHandler
  1258. (PREF_DHT_ENTRY_POINT,
  1259. TEXT_DHT_ENTRY_POINT,
  1260. NO_DEFAULT_VALUE,
  1261. PREF_DHT_ENTRY_POINT_HOST,
  1262. PREF_DHT_ENTRY_POINT_PORT));
  1263. op->addTag(TAG_BITTORRENT);
  1264. handlers.push_back(op);
  1265. }
  1266. {
  1267. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1268. (PREF_DHT_FILE_PATH,
  1269. TEXT_DHT_FILE_PATH,
  1270. util::getHomeDir()+"/.aria2/dht.dat",
  1271. "/PATH/TO/DHT_DAT"));
  1272. op->addTag(TAG_BITTORRENT);
  1273. handlers.push_back(op);
  1274. }
  1275. {
  1276. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  1277. (PREF_DHT_LISTEN_PORT,
  1278. TEXT_DHT_LISTEN_PORT,
  1279. "6881-6999",
  1280. 1024, UINT16_MAX));
  1281. op->addTag(TAG_BASIC);
  1282. op->addTag(TAG_BITTORRENT);
  1283. handlers.push_back(op);
  1284. }
  1285. {
  1286. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1287. (PREF_DHT_MESSAGE_TIMEOUT,
  1288. TEXT_DHT_MESSAGE_TIMEOUT,
  1289. "10",
  1290. 1, 60));
  1291. op->addTag(TAG_BITTORRENT);
  1292. handlers.push_back(op);
  1293. }
  1294. {
  1295. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1296. (PREF_ENABLE_DHT,
  1297. TEXT_ENABLE_DHT,
  1298. V_TRUE,
  1299. OptionHandler::OPT_ARG));
  1300. op->addTag(TAG_BASIC);
  1301. op->addTag(TAG_BITTORRENT);
  1302. handlers.push_back(op);
  1303. }
  1304. {
  1305. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1306. (PREF_ENABLE_PEER_EXCHANGE,
  1307. TEXT_ENABLE_PEER_EXCHANGE,
  1308. V_TRUE,
  1309. OptionHandler::OPT_ARG));
  1310. op->addTag(TAG_BITTORRENT);
  1311. handlers.push_back(op);
  1312. }
  1313. {
  1314. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1315. (PREF_FOLLOW_TORRENT,
  1316. TEXT_FOLLOW_TORRENT,
  1317. V_TRUE,
  1318. V_TRUE, V_MEM, V_FALSE));
  1319. op->addTag(TAG_BITTORRENT);
  1320. handlers.push_back(op);
  1321. }
  1322. {
  1323. SharedHandle<OptionHandler> op(new IndexOutOptionHandler
  1324. (PREF_INDEX_OUT,
  1325. TEXT_INDEX_OUT,
  1326. 'O'));
  1327. op->addTag(TAG_BITTORRENT);
  1328. handlers.push_back(op);
  1329. }
  1330. {
  1331. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  1332. (PREF_LISTEN_PORT,
  1333. TEXT_LISTEN_PORT,
  1334. "6881-6999",
  1335. 1024, UINT16_MAX));
  1336. op->addTag(TAG_BASIC);
  1337. op->addTag(TAG_BITTORRENT);
  1338. handlers.push_back(op);
  1339. }
  1340. {
  1341. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  1342. (PREF_MAX_OVERALL_UPLOAD_LIMIT,
  1343. TEXT_MAX_OVERALL_UPLOAD_LIMIT,
  1344. "0",
  1345. 0));
  1346. op->addTag(TAG_BASIC);
  1347. op->addTag(TAG_BITTORRENT);
  1348. handlers.push_back(op);
  1349. }
  1350. {
  1351. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  1352. (PREF_MAX_UPLOAD_LIMIT,
  1353. TEXT_MAX_UPLOAD_LIMIT,
  1354. "0",
  1355. 0, -1,
  1356. 'u'));
  1357. op->addTag(TAG_BASIC);
  1358. op->addTag(TAG_BITTORRENT);
  1359. handlers.push_back(op);
  1360. }
  1361. {
  1362. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1363. (PREF_PEER_CONNECTION_TIMEOUT,
  1364. NO_DESCRIPTION,
  1365. "20",
  1366. 1, 600));
  1367. op->hide();
  1368. handlers.push_back(op);
  1369. }
  1370. {
  1371. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1372. (PREF_PEER_ID_PREFIX,
  1373. TEXT_PEER_ID_PREFIX,
  1374. "aria2/"PACKAGE_VERSION"-"));
  1375. op->addTag(TAG_BITTORRENT);
  1376. handlers.push_back(op);
  1377. }
  1378. {
  1379. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1380. (PREF_SEED_TIME,
  1381. TEXT_SEED_TIME,
  1382. NO_DEFAULT_VALUE,
  1383. 0));
  1384. op->addTag(TAG_BITTORRENT);
  1385. handlers.push_back(op);
  1386. }
  1387. {
  1388. SharedHandle<OptionHandler> op(new FloatNumberOptionHandler
  1389. (PREF_SEED_RATIO,
  1390. TEXT_SEED_RATIO,
  1391. "1.0",
  1392. 0.0));
  1393. op->addTag(TAG_BITTORRENT);
  1394. handlers.push_back(op);
  1395. }
  1396. {
  1397. SharedHandle<OptionHandler> op(new LocalFilePathOptionHandler
  1398. (PREF_TORRENT_FILE,
  1399. TEXT_TORRENT_FILE,
  1400. NO_DEFAULT_VALUE,
  1401. false,
  1402. 'T'));
  1403. op->addTag(TAG_BASIC);
  1404. op->addTag(TAG_BITTORRENT);
  1405. handlers.push_back(op);
  1406. }
  1407. #endif // ENABLE_BITTORRENT
  1408. // Metalink Specific Options
  1409. #ifdef ENABLE_METALINK
  1410. {
  1411. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1412. (PREF_FOLLOW_METALINK,
  1413. TEXT_FOLLOW_METALINK,
  1414. V_TRUE,
  1415. V_TRUE, V_MEM, V_FALSE));
  1416. op->addTag(TAG_METALINK);
  1417. handlers.push_back(op);
  1418. }
  1419. {
  1420. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1421. (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL,
  1422. TEXT_METALINK_ENABLE_UNIQUE_PROTOCOL,
  1423. V_TRUE,
  1424. OptionHandler::OPT_ARG));
  1425. op->addTag(TAG_METALINK);
  1426. handlers.push_back(op);
  1427. }
  1428. {
  1429. SharedHandle<OptionHandler> op(new LocalFilePathOptionHandler
  1430. (PREF_METALINK_FILE,
  1431. TEXT_METALINK_FILE,
  1432. NO_DEFAULT_VALUE,
  1433. true,
  1434. 'M'));
  1435. op->addTag(TAG_BASIC);
  1436. op->addTag(TAG_METALINK);
  1437. handlers.push_back(op);
  1438. }
  1439. {
  1440. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1441. (PREF_METALINK_LANGUAGE,
  1442. TEXT_METALINK_LANGUAGE));
  1443. op->addTag(TAG_METALINK);
  1444. handlers.push_back(op);
  1445. }
  1446. {
  1447. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1448. (PREF_METALINK_LOCATION,
  1449. TEXT_METALINK_LOCATION));
  1450. op->addTag(TAG_METALINK);
  1451. handlers.push_back(op);
  1452. }
  1453. {
  1454. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1455. (PREF_METALINK_OS,
  1456. TEXT_METALINK_OS));
  1457. op->addTag(TAG_METALINK);
  1458. handlers.push_back(op);
  1459. }
  1460. {
  1461. const std::string params[] = { V_HTTP, V_HTTPS, V_FTP, V_NONE };
  1462. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1463. (PREF_METALINK_PREFERRED_PROTOCOL,
  1464. TEXT_METALINK_PREFERRED_PROTOCOL,
  1465. V_NONE,
  1466. std::vector<std::string>
  1467. (vbegin(params), vend(params))));
  1468. op->addTag(TAG_METALINK);
  1469. handlers.push_back(op);
  1470. }
  1471. {
  1472. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1473. (PREF_METALINK_SERVERS,
  1474. TEXT_METALINK_SERVERS,
  1475. "5",
  1476. 1, -1,
  1477. 'C'));
  1478. op->addTag(TAG_METALINK);
  1479. handlers.push_back(op);
  1480. }
  1481. {
  1482. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1483. (PREF_METALINK_VERSION,
  1484. TEXT_METALINK_VERSION));
  1485. op->addTag(TAG_METALINK);
  1486. handlers.push_back(op);
  1487. }
  1488. #endif // ENABLE_METALINK
  1489. // Version Option
  1490. {
  1491. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1492. ("version",
  1493. TEXT_VERSION,
  1494. NO_DEFAULT_VALUE,
  1495. A2STR::NIL,
  1496. OptionHandler::NO_ARG,
  1497. 'v'));
  1498. op->addTag(TAG_BASIC);
  1499. handlers.push_back(op);
  1500. }
  1501. // Help Option
  1502. {
  1503. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1504. ("help",
  1505. TEXT_HELP,
  1506. TAG_BASIC,
  1507. StringFormat
  1508. ("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
  1509. "%s, %s, %s, %s",
  1510. TAG_BASIC,
  1511. TAG_ADVANCED,
  1512. TAG_HTTP,
  1513. TAG_HTTPS,
  1514. TAG_FTP,
  1515. TAG_METALINK,
  1516. TAG_BITTORRENT,
  1517. TAG_COOKIE,
  1518. TAG_HOOK,
  1519. TAG_FILE,
  1520. TAG_XML_RPC,
  1521. TAG_EXPERIMENTAL,
  1522. TAG_HELP,
  1523. TAG_ALL).str(),
  1524. OptionHandler::OPT_ARG,
  1525. 'h'));
  1526. op->addTag(TAG_BASIC);
  1527. op->addTag(TAG_HELP);
  1528. handlers.push_back(op);
  1529. }
  1530. return handlers;
  1531. }
  1532. } // namespace aria2