OptionHandlerFactory.cc 62 KB

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