OptionHandlerFactory.cc 66 KB

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