OptionHandlerFactory.cc 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301
  1. /* <!-- copyright */
  2. /*
  3. * aria2 - The high speed download utility
  4. *
  5. * Copyright (C) 2006 Tatsuhiro Tsujikawa
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. *
  21. * In addition, as a special exception, the copyright holders give
  22. * permission to link the code of portions of this program with the
  23. * OpenSSL library under certain conditions as described in each
  24. * individual source file, and distribute linked combinations
  25. * including the two.
  26. * You must obey the GNU General Public License in all respects
  27. * for all of the code used other than OpenSSL. If you modify
  28. * file(s) with this exception, you may extend this exception to your
  29. * version of the file(s), but you are not obligated to do so. If you
  30. * do not wish to do so, delete this exception statement from your
  31. * version. If you delete this exception statement from all source
  32. * files in the program, then also delete it here.
  33. */
  34. /* copyright --> */
  35. #include "OptionHandlerFactory.h"
  36. #include "prefs.h"
  37. #include "OptionHandlerImpl.h"
  38. #include "array_fun.h"
  39. #include "usage_text.h"
  40. #include "A2STR.h"
  41. #include "util.h"
  42. #include "help_tags.h"
  43. #include "StringFormat.h"
  44. #include "File.h"
  45. namespace aria2 {
  46. OptionHandlers OptionHandlerFactory::createOptionHandlers()
  47. {
  48. OptionHandlers handlers;
  49. // General Options
  50. {
  51. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  52. (PREF_ALLOW_OVERWRITE,
  53. TEXT_ALLOW_OVERWRITE,
  54. V_FALSE));
  55. op->addTag(TAG_ADVANCED);
  56. op->addTag(TAG_FILE);
  57. handlers.push_back(op);
  58. }
  59. {
  60. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  61. (PREF_ALLOW_PIECE_LENGTH_CHANGE,
  62. TEXT_ALLOW_PIECE_LENGTH_CHANGE,
  63. V_FALSE));
  64. op->addTag(TAG_ADVANCED);
  65. handlers.push_back(op);
  66. }
  67. #ifdef ENABLE_ASYNC_DNS
  68. {
  69. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  70. (PREF_ASYNC_DNS,
  71. TEXT_ASYNC_DNS,
  72. V_TRUE,
  73. OptionHandler::OPT_ARG));
  74. op->addTag(TAG_ADVANCED);
  75. handlers.push_back(op);
  76. }
  77. #endif // ENABLE_ASYNC_DNS
  78. {
  79. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  80. (PREF_AUTO_FILE_RENAMING,
  81. TEXT_AUTO_FILE_RENAMING,
  82. V_TRUE,
  83. OptionHandler::OPT_ARG));
  84. op->addTag(TAG_ADVANCED);
  85. op->addTag(TAG_FILE);
  86. handlers.push_back(op);
  87. }
  88. {
  89. SharedHandle<OptionHandler> op(new NumberOptionHandler
  90. (PREF_AUTO_SAVE_INTERVAL,
  91. TEXT_AUTO_SAVE_INTERVAL,
  92. "60",
  93. 0, 600));
  94. op->addTag(TAG_ADVANCED);
  95. handlers.push_back(op);
  96. }
  97. #ifdef ENABLE_MESSAGE_DIGEST
  98. {
  99. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  100. (PREF_CHECK_INTEGRITY,
  101. TEXT_CHECK_INTEGRITY,
  102. V_FALSE,
  103. OptionHandler::OPT_ARG,
  104. 'V'));
  105. op->addTag(TAG_BASIC);
  106. op->addTag(TAG_BITTORRENT);
  107. op->addTag(TAG_METALINK);
  108. op->addTag(TAG_FILE);
  109. handlers.push_back(op);
  110. }
  111. #endif // ENABLE_MESSAGE_DIGEST
  112. {
  113. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  114. (PREF_CONF_PATH,
  115. TEXT_CONF_PATH,
  116. util::getHomeDir()+"/.aria2/aria2.conf"));
  117. op->addTag(TAG_ADVANCED);
  118. handlers.push_back(op);
  119. }
  120. {
  121. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  122. (PREF_CONTINUE,
  123. TEXT_CONTINUE,
  124. V_FALSE, // TODO ommit?
  125. OptionHandler::NO_ARG,
  126. 'c'));
  127. op->addTag(TAG_BASIC);
  128. op->addTag(TAG_FTP);
  129. op->addTag(TAG_HTTP);
  130. handlers.push_back(op);
  131. }
  132. {
  133. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  134. (PREF_DAEMON,
  135. TEXT_DAEMON,
  136. V_FALSE,
  137. OptionHandler::NO_ARG,
  138. 'D')); // TODO ommit?
  139. op->addTag(TAG_ADVANCED);
  140. handlers.push_back(op);
  141. }
  142. {
  143. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  144. (PREF_DIR,
  145. TEXT_DIR,
  146. File::getCurrentDir(),
  147. A2STR::NIL,
  148. OptionHandler::REQ_ARG,
  149. 'd'));
  150. op->addTag(TAG_BASIC);
  151. op->addTag(TAG_FILE);
  152. handlers.push_back(op);
  153. }
  154. {
  155. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  156. (PREF_DNS_TIMEOUT,
  157. NO_DESCRIPTION,
  158. "30",
  159. 1, 60));
  160. op->hide();
  161. handlers.push_back(op);
  162. }
  163. #ifdef ENABLE_DIRECT_IO
  164. {
  165. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  166. (PREF_ENABLE_DIRECT_IO,
  167. TEXT_ENABLE_DIRECT_IO,
  168. V_TRUE,
  169. OptionHandler::OPT_ARG));
  170. op->addTag(TAG_ADVANCED);
  171. op->addTag(TAG_FILE);
  172. handlers.push_back(op);
  173. }
  174. #endif // ENABLE_DIRECT_IO
  175. #ifdef ENABLE_XML_RPC
  176. {
  177. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  178. (PREF_ENABLE_XML_RPC,
  179. TEXT_ENABLE_XML_RPC,
  180. V_FALSE,
  181. OptionHandler::OPT_ARG));
  182. op->addTag(TAG_XML_RPC);
  183. handlers.push_back(op);
  184. }
  185. #endif // ENABLE_XML_RPC
  186. {
  187. std::string params[] = {
  188. #ifdef HAVE_EPOLL
  189. V_EPOLL,
  190. #endif // HAVE_EPOLL
  191. V_SELECT
  192. };
  193. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  194. (PREF_EVENT_POLL,
  195. TEXT_EVENT_POLL,
  196. #ifdef HAVE_EPOLL
  197. V_EPOLL,
  198. #else // !HAVE_EPOLL
  199. V_SELECT,
  200. #endif // !HAVE_EPOLL
  201. std::deque<std::string>
  202. (&params[0],&params[arrayLength(params)])));
  203. op->addTag(TAG_ADVANCED);
  204. handlers.push_back(op);
  205. }
  206. {
  207. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  208. (PREF_FILE_ALLOCATION,
  209. TEXT_FILE_ALLOCATION,
  210. V_PREALLOC,
  211. V_NONE, V_PREALLOC,
  212. #ifdef HAVE_POSIX_FALLOCATE
  213. V_FALLOC,
  214. #endif // HAVE_POSIX_FALLOCATE
  215. 'a'));
  216. op->addTag(TAG_BASIC);
  217. op->addTag(TAG_FILE);
  218. handlers.push_back(op);
  219. }
  220. {
  221. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  222. (PREF_FORCE_SEQUENTIAL,
  223. TEXT_FORCE_SEQUENTIAL,
  224. V_FALSE,
  225. OptionHandler::OPT_ARG,
  226. 'Z'));
  227. op->addTag(TAG_BASIC);
  228. handlers.push_back(op);
  229. }
  230. {
  231. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  232. (PREF_INPUT_FILE,
  233. TEXT_INPUT_FILE,
  234. NO_DEFAULT_VALUE,
  235. "FILENAME,-",
  236. OptionHandler::REQ_ARG,
  237. 'i'));
  238. op->addTag(TAG_BASIC);
  239. handlers.push_back(op);
  240. }
  241. {
  242. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  243. (PREF_LOG,
  244. TEXT_LOG,
  245. NO_DEFAULT_VALUE,
  246. "FILENAME,-",
  247. OptionHandler::REQ_ARG,
  248. 'l'));
  249. op->addTag(TAG_BASIC);
  250. handlers.push_back(op);
  251. }
  252. {
  253. const std::string params[] = { V_DEBUG, V_INFO, V_NOTICE, V_WARN, V_ERROR };
  254. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  255. (PREF_LOG_LEVEL,
  256. TEXT_LOG_LEVEL,
  257. V_DEBUG,
  258. std::deque<std::string>
  259. (&params[0],
  260. &params[arrayLength(params)])));
  261. op->addTag(TAG_ADVANCED);
  262. handlers.push_back(op);
  263. }
  264. {
  265. SharedHandle<OptionHandler> op(new NumberOptionHandler
  266. (PREF_MAX_CONCURRENT_DOWNLOADS,
  267. TEXT_MAX_CONCURRENT_DOWNLOADS,
  268. "5",
  269. 1, -1,
  270. 'j'));
  271. op->addTag(TAG_BASIC);
  272. handlers.push_back(op);
  273. }
  274. {
  275. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  276. (PREF_MAX_DOWNLOAD_LIMIT,
  277. TEXT_MAX_DOWNLOAD_LIMIT,
  278. "0",
  279. 0));
  280. op->addTag(TAG_BITTORRENT);
  281. op->addTag(TAG_FTP);
  282. op->addTag(TAG_HTTP);
  283. handlers.push_back(op);
  284. }
  285. {
  286. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  287. (PREF_MAX_OVERALL_DOWNLOAD_LIMIT,
  288. TEXT_MAX_OVERALL_DOWNLOAD_LIMIT,
  289. "0",
  290. 0));
  291. op->addTag(TAG_BITTORRENT);
  292. op->addTag(TAG_FTP);
  293. op->addTag(TAG_HTTP);
  294. handlers.push_back(op);
  295. }
  296. {
  297. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  298. (PREF_NO_CONF,
  299. TEXT_NO_CONF,
  300. V_FALSE,
  301. OptionHandler::NO_ARG));
  302. op->addTag(TAG_ADVANCED);
  303. handlers.push_back(op);
  304. }
  305. {
  306. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  307. (PREF_NO_FILE_ALLOCATION_LIMIT,
  308. TEXT_NO_FILE_ALLOCATION_LIMIT,
  309. "5M",
  310. 0));
  311. op->addTag(TAG_ADVANCED);
  312. op->addTag(TAG_FILE);
  313. handlers.push_back(op);
  314. }
  315. {
  316. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  317. (PREF_ON_DOWNLOAD_COMPLETE,
  318. TEXT_ON_DOWNLOAD_COMPLETE,
  319. NO_DEFAULT_VALUE,
  320. "/path/to/command"));
  321. op->addTag(TAG_ADVANCED);
  322. op->addTag(TAG_HOOK);
  323. handlers.push_back(op);
  324. }
  325. {
  326. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  327. (PREF_ON_DOWNLOAD_ERROR,
  328. TEXT_ON_DOWNLOAD_ERROR,
  329. NO_DEFAULT_VALUE,
  330. "/path/to/command"));
  331. op->addTag(TAG_ADVANCED);
  332. op->addTag(TAG_HOOK);
  333. handlers.push_back(op);
  334. }
  335. {
  336. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  337. (PREF_ON_DOWNLOAD_START,
  338. TEXT_ON_DOWNLOAD_START,
  339. NO_DEFAULT_VALUE,
  340. "/path/to/command"));
  341. op->addTag(TAG_ADVANCED);
  342. op->addTag(TAG_HOOK);
  343. handlers.push_back(op);
  344. }
  345. {
  346. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  347. (PREF_ON_DOWNLOAD_STOP,
  348. TEXT_ON_DOWNLOAD_STOP,
  349. NO_DEFAULT_VALUE,
  350. "/path/to/command"));
  351. op->addTag(TAG_ADVANCED);
  352. op->addTag(TAG_HOOK);
  353. handlers.push_back(op);
  354. }
  355. {
  356. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  357. (PREF_PARAMETERIZED_URI,
  358. TEXT_PARAMETERIZED_URI,
  359. V_FALSE,
  360. OptionHandler::OPT_ARG,
  361. 'P'));
  362. op->addTag(TAG_ADVANCED);
  363. handlers.push_back(op);
  364. }
  365. {
  366. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  367. (PREF_QUIET,
  368. TEXT_QUIET,
  369. V_FALSE,
  370. OptionHandler::OPT_ARG,
  371. 'q'));
  372. op->addTag(TAG_ADVANCED);
  373. handlers.push_back(op);
  374. }
  375. #ifdef ENABLE_MESSAGE_DIGEST
  376. {
  377. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  378. (PREF_REALTIME_CHUNK_CHECKSUM,
  379. TEXT_REALTIME_CHUNK_CHECKSUM,
  380. V_TRUE));
  381. op->addTag(TAG_METALINK);
  382. handlers.push_back(op);
  383. }
  384. #endif // ENABLE_MESSAGE_DIGEST
  385. {
  386. SharedHandle<OptionHandler> op(new NumberOptionHandler
  387. (PREF_STOP,
  388. TEXT_STOP,
  389. "0",
  390. 0, INT32_MAX));
  391. op->addTag(TAG_ADVANCED);
  392. handlers.push_back(op);
  393. }
  394. {
  395. SharedHandle<OptionHandler> op(new NumberOptionHandler
  396. (PREF_SUMMARY_INTERVAL,
  397. TEXT_SUMMARY_INTERVAL,
  398. "60",
  399. 0, INT32_MAX));
  400. op->addTag(TAG_ADVANCED);
  401. handlers.push_back(op);
  402. }
  403. #ifdef ENABLE_XML_RPC
  404. {
  405. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  406. (PREF_XML_RPC_LISTEN_ALL,
  407. TEXT_XML_RPC_LISTEN_ALL,
  408. V_FALSE,
  409. OptionHandler::OPT_ARG));
  410. op->addTag(TAG_XML_RPC);
  411. handlers.push_back(op);
  412. }
  413. {
  414. SharedHandle<OptionHandler> op(new NumberOptionHandler
  415. (PREF_XML_RPC_LISTEN_PORT,
  416. TEXT_XML_RPC_LISTEN_PORT,
  417. "6800",
  418. 1024, UINT16_MAX));
  419. op->addTag(TAG_XML_RPC);
  420. handlers.push_back(op);
  421. }
  422. {
  423. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  424. (PREF_XML_RPC_MAX_REQUEST_SIZE,
  425. TEXT_XML_RPC_MAX_REQUEST_SIZE,
  426. "2M",
  427. 0));
  428. op->addTag(TAG_XML_RPC);
  429. handlers.push_back(op);
  430. }
  431. {
  432. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  433. (PREF_XML_RPC_USER,
  434. TEXT_XML_RPC_USER));
  435. op->addTag(TAG_XML_RPC);
  436. handlers.push_back(op);
  437. }
  438. {
  439. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  440. (PREF_XML_RPC_PASSWD,
  441. TEXT_XML_RPC_PASSWD));
  442. op->addTag(TAG_XML_RPC);
  443. handlers.push_back(op);
  444. }
  445. #endif // ENABLE_XML_RPC
  446. // HTTP/FTP options
  447. {
  448. SharedHandle<OptionHandler> op(new NumberOptionHandler
  449. (PREF_CONNECT_TIMEOUT,
  450. TEXT_CONNECT_TIMEOUT,
  451. "60",
  452. 1, 600));
  453. op->addTag(TAG_FTP);
  454. op->addTag(TAG_HTTP);
  455. handlers.push_back(op);
  456. }
  457. {
  458. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  459. (PREF_DRY_RUN,
  460. TEXT_DRY_RUN,
  461. V_FALSE,
  462. OptionHandler::OPT_ARG));
  463. op->addTag(TAG_FTP);
  464. op->addTag(TAG_HTTP);
  465. handlers.push_back(op);
  466. }
  467. {
  468. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  469. (PREF_LOWEST_SPEED_LIMIT,
  470. TEXT_LOWEST_SPEED_LIMIT,
  471. "0",
  472. 0));
  473. op->addTag(TAG_FTP);
  474. op->addTag(TAG_HTTP);
  475. handlers.push_back(op);
  476. }
  477. {
  478. SharedHandle<OptionHandler> op(new NumberOptionHandler
  479. (PREF_MAX_FILE_NOT_FOUND,
  480. TEXT_MAX_FILE_NOT_FOUND,
  481. "0",
  482. 0));
  483. op->addTag(TAG_FTP);
  484. op->addTag(TAG_HTTP);
  485. handlers.push_back(op);
  486. }
  487. {
  488. SharedHandle<OptionHandler> op(new NumberOptionHandler
  489. (PREF_MAX_TRIES,
  490. TEXT_MAX_TRIES,
  491. "5",
  492. 0, -1,
  493. 'm'));
  494. op->addTag(TAG_FTP);
  495. op->addTag(TAG_HTTP);
  496. handlers.push_back(op);
  497. }
  498. {
  499. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  500. (PREF_NO_NETRC,
  501. TEXT_NO_NETRC,
  502. V_FALSE, // TODO ommit?
  503. OptionHandler::NO_ARG,
  504. 'n'));
  505. op->addTag(TAG_FTP);
  506. op->addTag(TAG_HTTP);
  507. handlers.push_back(op);
  508. }
  509. {
  510. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  511. (PREF_OUT,
  512. TEXT_OUT,
  513. NO_DEFAULT_VALUE,
  514. "FILENAME",
  515. OptionHandler::REQ_ARG,
  516. 'o'));
  517. op->addTag(TAG_BASIC);
  518. op->addTag(TAG_FTP);
  519. op->addTag(TAG_HTTP);
  520. op->addTag(TAG_FILE);
  521. handlers.push_back(op);
  522. }
  523. {
  524. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  525. (PREF_REMOTE_TIME,
  526. TEXT_REMOTE_TIME,
  527. V_FALSE,
  528. OptionHandler::OPT_ARG,
  529. 'R'));
  530. op->addTag(TAG_FTP);
  531. op->addTag(TAG_HTTP);
  532. handlers.push_back(op);
  533. }
  534. {
  535. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  536. (PREF_REUSE_URI,
  537. NO_DESCRIPTION,
  538. V_TRUE));
  539. op->hide();
  540. handlers.push_back(op);
  541. }
  542. {
  543. SharedHandle<UnitNumberOptionHandler> op(new UnitNumberOptionHandler
  544. (PREF_SEGMENT_SIZE,
  545. NO_DESCRIPTION,
  546. "1M",
  547. 1024, -1));
  548. op->hide();
  549. handlers.push_back(op);
  550. }
  551. {
  552. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  553. (PREF_SERVER_STAT_IF,
  554. TEXT_SERVER_STAT_IF,
  555. NO_DEFAULT_VALUE,
  556. "FILENAME"));
  557. op->addTag(TAG_FTP);
  558. op->addTag(TAG_HTTP);
  559. handlers.push_back(op);
  560. }
  561. {
  562. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  563. (PREF_SERVER_STAT_OF,
  564. TEXT_SERVER_STAT_OF,
  565. NO_DEFAULT_VALUE,
  566. "FILENAME"));
  567. op->addTag(TAG_FTP);
  568. op->addTag(TAG_HTTP);
  569. handlers.push_back(op);
  570. }
  571. {
  572. SharedHandle<OptionHandler> op(new NumberOptionHandler
  573. (PREF_SERVER_STAT_TIMEOUT,
  574. TEXT_SERVER_STAT_TIMEOUT,
  575. "86400",
  576. 0, INT32_MAX));
  577. op->addTag(TAG_FTP);
  578. op->addTag(TAG_HTTP);
  579. handlers.push_back(op);
  580. }
  581. {
  582. SharedHandle<OptionHandler> op(new NumberOptionHandler
  583. (PREF_SPLIT,
  584. TEXT_SPLIT,
  585. "5",
  586. 1, -1,
  587. 's'));
  588. op->addTag(TAG_BASIC);
  589. op->addTag(TAG_FTP);
  590. op->addTag(TAG_HTTP);
  591. handlers.push_back(op);
  592. }
  593. {
  594. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  595. (PREF_STARTUP_IDLE_TIME,
  596. NO_DESCRIPTION,
  597. "10",
  598. 1, 60));
  599. op->hide();
  600. handlers.push_back(op);
  601. }
  602. {
  603. SharedHandle<OptionHandler> op(new NumberOptionHandler
  604. (PREF_TIMEOUT,
  605. TEXT_TIMEOUT,
  606. "60",
  607. 1, 600,
  608. 't'));
  609. op->addTag(TAG_FTP);
  610. op->addTag(TAG_HTTP);
  611. handlers.push_back(op);
  612. }
  613. {
  614. const std::string params[] = { V_INORDER, V_FEEDBACK, V_ADAPTIVE };
  615. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  616. (PREF_URI_SELECTOR,
  617. TEXT_URI_SELECTOR,
  618. V_FEEDBACK,
  619. std::deque<std::string>
  620. (&params[0], &params[arrayLength(params)])));
  621. op->addTag(TAG_FTP);
  622. op->addTag(TAG_HTTP);
  623. handlers.push_back(op);
  624. }
  625. // HTTP Specific Options
  626. {
  627. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  628. (PREF_CA_CERTIFICATE,
  629. TEXT_CA_CERTIFICATE,
  630. CA_BUNDLE));
  631. op->addTag(TAG_HTTP);
  632. op->addTag(TAG_HTTPS);
  633. handlers.push_back(op);
  634. }
  635. {
  636. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  637. (PREF_CERTIFICATE,
  638. TEXT_CERTIFICATE));
  639. op->addTag(TAG_HTTP);
  640. op->addTag(TAG_HTTPS);
  641. handlers.push_back(op);
  642. }
  643. {
  644. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  645. (PREF_CHECK_CERTIFICATE,
  646. TEXT_CHECK_CERTIFICATE,
  647. V_TRUE,
  648. OptionHandler::OPT_ARG));
  649. op->addTag(TAG_HTTP);
  650. op->addTag(TAG_HTTPS);
  651. handlers.push_back(op);
  652. }
  653. {
  654. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  655. (PREF_ENABLE_HTTP_KEEP_ALIVE,
  656. TEXT_ENABLE_HTTP_KEEP_ALIVE,
  657. V_TRUE,
  658. OptionHandler::OPT_ARG));
  659. op->addTag(TAG_HTTP);
  660. handlers.push_back(op);
  661. }
  662. {
  663. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  664. (PREF_ENABLE_HTTP_PIPELINING,
  665. TEXT_ENABLE_HTTP_PIPELINING,
  666. V_FALSE,
  667. OptionHandler::OPT_ARG));
  668. op->addTag(TAG_HTTP);
  669. handlers.push_back(op);
  670. }
  671. {
  672. SharedHandle<OptionHandler> op(new CumulativeOptionHandler
  673. (PREF_HEADER,
  674. TEXT_HEADER,
  675. NO_DEFAULT_VALUE,
  676. "\n"));
  677. op->addTag(TAG_HTTP);
  678. handlers.push_back(op);
  679. }
  680. {
  681. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  682. (PREF_HTTP_AUTH_CHALLENGE,
  683. TEXT_HTTP_AUTH_CHALLENGE,
  684. V_FALSE,
  685. OptionHandler::OPT_ARG));
  686. op->addTag(TAG_HTTP);
  687. handlers.push_back(op);
  688. }
  689. {
  690. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  691. (PREF_HTTP_AUTH_SCHEME,
  692. TEXT_HTTP_AUTH_SCHEME,
  693. V_BASIC,
  694. V_BASIC));
  695. op->addTag(TAG_HTTP);
  696. handlers.push_back(op);
  697. }
  698. {
  699. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  700. (PREF_HTTP_PASSWD,
  701. TEXT_HTTP_PASSWD));
  702. op->addTag(TAG_BASIC);
  703. op->addTag(TAG_HTTP);
  704. handlers.push_back(op);
  705. }
  706. {
  707. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  708. (PREF_HTTP_USER,
  709. TEXT_HTTP_USER));
  710. op->addTag(TAG_BASIC);
  711. op->addTag(TAG_HTTP);
  712. handlers.push_back(op);
  713. }
  714. {
  715. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  716. (PREF_LOAD_COOKIES,
  717. TEXT_LOAD_COOKIES,
  718. NO_DEFAULT_VALUE,
  719. "/path/to/file"));
  720. op->addTag(TAG_BASIC);
  721. op->addTag(TAG_HTTP);
  722. op->addTag(TAG_COOKIE);
  723. handlers.push_back(op);
  724. }
  725. {
  726. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  727. (PREF_MAX_HTTP_PIPELINING,
  728. NO_DESCRIPTION,
  729. "2",
  730. 1, 8));
  731. op->hide();
  732. handlers.push_back(op);
  733. }
  734. {
  735. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  736. (PREF_PRIVATE_KEY,
  737. TEXT_PRIVATE_KEY));
  738. op->addTag(TAG_HTTP);
  739. op->addTag(TAG_HTTPS);
  740. handlers.push_back(op);
  741. }
  742. {
  743. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  744. (PREF_REFERER,
  745. TEXT_REFERER));
  746. op->addTag(TAG_HTTP);
  747. handlers.push_back(op);
  748. }
  749. {
  750. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  751. (PREF_SAVE_COOKIES,
  752. TEXT_SAVE_COOKIES,
  753. NO_DEFAULT_VALUE,
  754. "/path/to/file"));
  755. op->addTag(TAG_HTTP);
  756. op->addTag(TAG_COOKIE);
  757. handlers.push_back(op);
  758. }
  759. {
  760. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  761. (PREF_USE_HEAD,
  762. TEXT_USE_HEAD,
  763. V_FALSE,
  764. OptionHandler::OPT_ARG));
  765. op->addTag(TAG_HTTP);
  766. handlers.push_back(op);
  767. }
  768. {
  769. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  770. (PREF_USER_AGENT,
  771. TEXT_USER_AGENT,
  772. "aria2/"PACKAGE_VERSION,
  773. A2STR::NIL,
  774. OptionHandler::REQ_ARG,
  775. 'U'));
  776. op->addTag(TAG_HTTP);
  777. handlers.push_back(op);
  778. }
  779. // FTP Specific Options
  780. {
  781. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  782. (PREF_FTP_PASSWD,
  783. TEXT_FTP_PASSWD));
  784. op->addTag(TAG_BASIC);
  785. op->addTag(TAG_FTP);
  786. handlers.push_back(op);
  787. }
  788. {
  789. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  790. (PREF_FTP_PASV,
  791. TEXT_FTP_PASV,
  792. V_TRUE,
  793. OptionHandler::OPT_ARG,
  794. 'p'));
  795. op->addTag(TAG_FTP);
  796. handlers.push_back(op);
  797. }
  798. {
  799. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  800. (PREF_FTP_REUSE_CONNECTION,
  801. TEXT_FTP_REUSE_CONNECTION,
  802. V_TRUE,
  803. OptionHandler::OPT_ARG));
  804. op->addTag(TAG_FTP);
  805. handlers.push_back(op);
  806. }
  807. {
  808. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  809. (PREF_FTP_TYPE,
  810. TEXT_FTP_TYPE,
  811. V_BINARY,
  812. V_BINARY, V_ASCII));
  813. op->addTag(TAG_FTP);
  814. handlers.push_back(op);
  815. }
  816. {
  817. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  818. (PREF_FTP_USER,
  819. TEXT_FTP_USER));
  820. op->addTag(TAG_BASIC);
  821. op->addTag(TAG_FTP);
  822. handlers.push_back(op);
  823. }
  824. {
  825. SharedHandle<DefaultOptionHandler> op(new DefaultOptionHandler
  826. (PREF_NETRC_PATH,
  827. NO_DESCRIPTION,
  828. util::getHomeDir()+"/.netrc",
  829. "/PATH/TO/NETRC"));
  830. op->hide();
  831. handlers.push_back(op);
  832. }
  833. // Proxy options
  834. {
  835. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  836. (PREF_HTTP_PROXY,
  837. TEXT_HTTP_PROXY,
  838. NO_DEFAULT_VALUE));
  839. op->addTag(TAG_HTTP);
  840. handlers.push_back(op);
  841. }
  842. {
  843. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  844. (PREF_HTTPS_PROXY,
  845. TEXT_HTTPS_PROXY,
  846. NO_DEFAULT_VALUE));
  847. op->addTag(TAG_HTTP);
  848. op->addTag(TAG_HTTPS);
  849. handlers.push_back(op);
  850. }
  851. {
  852. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  853. (PREF_FTP_PROXY,
  854. TEXT_FTP_PROXY,
  855. NO_DEFAULT_VALUE));
  856. op->addTag(TAG_FTP);
  857. handlers.push_back(op);
  858. }
  859. {
  860. SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
  861. (PREF_ALL_PROXY,
  862. TEXT_ALL_PROXY,
  863. NO_DEFAULT_VALUE));
  864. op->addTag(TAG_FTP);
  865. op->addTag(TAG_HTTP);
  866. op->addTag(TAG_HTTPS);
  867. handlers.push_back(op);
  868. }
  869. {
  870. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  871. (PREF_NO_PROXY,
  872. TEXT_NO_PROXY));
  873. op->addTag(TAG_FTP);
  874. op->addTag(TAG_HTTP);
  875. op->addTag(TAG_HTTPS);
  876. handlers.push_back(op);
  877. }
  878. {
  879. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  880. (PREF_PROXY_METHOD,
  881. TEXT_PROXY_METHOD,
  882. V_GET,
  883. V_GET, V_TUNNEL));
  884. op->addTag(TAG_FTP);
  885. op->addTag(TAG_HTTP);
  886. handlers.push_back(op);
  887. }
  888. // BitTorrent/Metalink Options
  889. #if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
  890. {
  891. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  892. (PREF_SELECT_FILE,
  893. TEXT_SELECT_FILE,
  894. NO_DEFAULT_VALUE,
  895. 1, INT32_MAX));
  896. op->addTag(TAG_BITTORRENT);
  897. op->addTag(TAG_METALINK);
  898. handlers.push_back(op);
  899. }
  900. {
  901. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  902. (PREF_SHOW_FILES,
  903. TEXT_SHOW_FILES,
  904. V_FALSE, // TODO ommit?
  905. OptionHandler::NO_ARG,
  906. 'S'));
  907. op->addTag(TAG_BASIC);
  908. op->addTag(TAG_BITTORRENT);
  909. op->addTag(TAG_METALINK);
  910. handlers.push_back(op);
  911. }
  912. #endif // ENABLE_BITTORRENT || ENABLE_METALINK
  913. // BitTorrent Specific Options
  914. #ifdef ENABLE_BITTORRENT
  915. {
  916. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  917. (PREF_BT_EXTERNAL_IP,
  918. TEXT_BT_EXTERNAL_IP,
  919. NO_DEFAULT_VALUE,
  920. "a numeric IP address"));
  921. op->addTag(TAG_BITTORRENT);
  922. handlers.push_back(op);
  923. }
  924. {
  925. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  926. (PREF_BT_KEEP_ALIVE_INTERVAL,
  927. NO_DESCRIPTION,
  928. "120",
  929. 1, 120));
  930. op->hide();
  931. handlers.push_back(op);
  932. }
  933. {
  934. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  935. (PREF_BT_HASH_CHECK_SEED,
  936. TEXT_BT_HASH_CHECK_SEED,
  937. V_TRUE,
  938. OptionHandler::OPT_ARG));
  939. op->addTag(TAG_BITTORRENT);
  940. handlers.push_back(op);
  941. }
  942. {
  943. SharedHandle<OptionHandler> op(new NumberOptionHandler
  944. (PREF_BT_MAX_OPEN_FILES,
  945. TEXT_BT_MAX_OPEN_FILES,
  946. "100",
  947. 1));
  948. op->addTag(TAG_BITTORRENT);
  949. handlers.push_back(op);
  950. }
  951. {
  952. SharedHandle<OptionHandler> op(new NumberOptionHandler
  953. (PREF_BT_MAX_PEERS,
  954. TEXT_BT_MAX_PEERS,
  955. "55",
  956. 0));
  957. op->addTag(TAG_BITTORRENT);
  958. handlers.push_back(op);
  959. }
  960. {
  961. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  962. (PREF_BT_MIN_CRYPTO_LEVEL,
  963. TEXT_BT_MIN_CRYPTO_LEVEL,
  964. V_PLAIN,
  965. V_PLAIN, V_ARC4));
  966. op->addTag(TAG_BITTORRENT);
  967. handlers.push_back(op);
  968. }
  969. {
  970. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  971. (PREF_BT_REQUEST_PEER_SPEED_LIMIT,
  972. TEXT_BT_REQUEST_PEER_SPEED_LIMIT,
  973. "50K",
  974. 0));
  975. op->addTag(TAG_BITTORRENT);
  976. handlers.push_back(op);
  977. }
  978. {
  979. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  980. (PREF_BT_REQUIRE_CRYPTO,
  981. TEXT_BT_REQUIRE_CRYPTO,
  982. V_FALSE));
  983. op->addTag(TAG_BITTORRENT);
  984. handlers.push_back(op);
  985. }
  986. {
  987. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  988. (PREF_BT_REQUEST_TIMEOUT,
  989. NO_DESCRIPTION,
  990. "60",
  991. 1, 600));
  992. op->hide();
  993. handlers.push_back(op);
  994. }
  995. {
  996. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  997. (PREF_BT_SEED_UNVERIFIED,
  998. TEXT_BT_SEED_UNVERIFIED,
  999. V_FALSE,
  1000. OptionHandler::OPT_ARG));
  1001. op->addTag(TAG_BITTORRENT);
  1002. handlers.push_back(op);
  1003. }
  1004. {
  1005. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1006. (PREF_BT_STOP_TIMEOUT,
  1007. TEXT_BT_STOP_TIMEOUT,
  1008. "0",
  1009. 0));
  1010. op->addTag(TAG_BITTORRENT);
  1011. handlers.push_back(op);
  1012. }
  1013. {
  1014. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1015. (PREF_BT_TIMEOUT,
  1016. NO_DESCRIPTION,
  1017. "180",
  1018. 1, 600));
  1019. op->hide();
  1020. handlers.push_back(op);
  1021. }
  1022. {
  1023. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1024. (PREF_BT_TRACKER_INTERVAL,
  1025. TEXT_BT_TRACKER_INTERVAL,
  1026. "0",
  1027. 0));
  1028. op->addTag(TAG_BITTORRENT);
  1029. handlers.push_back(op);
  1030. }
  1031. {
  1032. SharedHandle<OptionHandler> op(new HostPortOptionHandler
  1033. (PREF_DHT_ENTRY_POINT,
  1034. TEXT_DHT_ENTRY_POINT,
  1035. NO_DEFAULT_VALUE,
  1036. PREF_DHT_ENTRY_POINT_HOST,
  1037. PREF_DHT_ENTRY_POINT_PORT));
  1038. op->addTag(TAG_BITTORRENT);
  1039. handlers.push_back(op);
  1040. }
  1041. {
  1042. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1043. (PREF_DHT_FILE_PATH,
  1044. TEXT_DHT_FILE_PATH,
  1045. util::getHomeDir()+"/.aria2/dht.dat",
  1046. "/PATH/TO/DHT_DAT"));
  1047. op->addTag(TAG_BITTORRENT);
  1048. handlers.push_back(op);
  1049. }
  1050. {
  1051. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  1052. (PREF_DHT_LISTEN_PORT,
  1053. TEXT_DHT_LISTEN_PORT,
  1054. "6881-6999",
  1055. 1024, UINT16_MAX));
  1056. op->addTag(TAG_BASIC);
  1057. op->addTag(TAG_BITTORRENT);
  1058. handlers.push_back(op);
  1059. }
  1060. {
  1061. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1062. (PREF_ENABLE_DHT,
  1063. TEXT_ENABLE_DHT,
  1064. V_FALSE,
  1065. OptionHandler::OPT_ARG));
  1066. op->addTag(TAG_BASIC);
  1067. op->addTag(TAG_BITTORRENT);
  1068. handlers.push_back(op);
  1069. }
  1070. {
  1071. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1072. (PREF_ENABLE_PEER_EXCHANGE,
  1073. TEXT_ENABLE_PEER_EXCHANGE,
  1074. V_TRUE,
  1075. OptionHandler::OPT_ARG));
  1076. op->addTag(TAG_BITTORRENT);
  1077. handlers.push_back(op);
  1078. }
  1079. {
  1080. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1081. (PREF_FOLLOW_TORRENT,
  1082. TEXT_FOLLOW_TORRENT,
  1083. V_TRUE,
  1084. V_TRUE, V_MEM, V_FALSE));
  1085. op->addTag(TAG_BITTORRENT);
  1086. handlers.push_back(op);
  1087. }
  1088. {
  1089. SharedHandle<OptionHandler> op(new IndexOutOptionHandler
  1090. (PREF_INDEX_OUT,
  1091. TEXT_INDEX_OUT,
  1092. 'O'));
  1093. op->addTag(TAG_BITTORRENT);
  1094. handlers.push_back(op);
  1095. }
  1096. {
  1097. SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
  1098. (PREF_LISTEN_PORT,
  1099. TEXT_LISTEN_PORT,
  1100. "6881-6999",
  1101. 1024, UINT16_MAX));
  1102. op->addTag(TAG_BASIC);
  1103. op->addTag(TAG_BITTORRENT);
  1104. handlers.push_back(op);
  1105. }
  1106. {
  1107. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  1108. (PREF_MAX_OVERALL_UPLOAD_LIMIT,
  1109. TEXT_MAX_OVERALL_UPLOAD_LIMIT,
  1110. "0",
  1111. 0));
  1112. op->addTag(TAG_BASIC);
  1113. op->addTag(TAG_BITTORRENT);
  1114. handlers.push_back(op);
  1115. }
  1116. {
  1117. SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
  1118. (PREF_MAX_UPLOAD_LIMIT,
  1119. TEXT_MAX_UPLOAD_LIMIT,
  1120. "0",
  1121. 0, -1,
  1122. 'u'));
  1123. op->addTag(TAG_BASIC);
  1124. op->addTag(TAG_BITTORRENT);
  1125. handlers.push_back(op);
  1126. }
  1127. {
  1128. SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
  1129. (PREF_PEER_CONNECTION_TIMEOUT,
  1130. NO_DESCRIPTION,
  1131. "20",
  1132. 1, 600));
  1133. op->hide();
  1134. handlers.push_back(op);
  1135. }
  1136. {
  1137. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1138. (PREF_PEER_ID_PREFIX,
  1139. TEXT_PEER_ID_PREFIX,
  1140. "aria2/"PACKAGE_VERSION"-"));
  1141. op->addTag(TAG_BITTORRENT);
  1142. handlers.push_back(op);
  1143. }
  1144. {
  1145. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1146. (PREF_SEED_TIME,
  1147. TEXT_SEED_TIME,
  1148. NO_DEFAULT_VALUE,
  1149. 0));
  1150. op->addTag(TAG_BITTORRENT);
  1151. handlers.push_back(op);
  1152. }
  1153. {
  1154. SharedHandle<OptionHandler> op(new FloatNumberOptionHandler
  1155. (PREF_SEED_RATIO,
  1156. TEXT_SEED_RATIO,
  1157. "1.0",
  1158. 0.0));
  1159. op->addTag(TAG_BITTORRENT);
  1160. handlers.push_back(op);
  1161. }
  1162. {
  1163. SharedHandle<OptionHandler> op(new LocalFilePathOptionHandler
  1164. (PREF_TORRENT_FILE,
  1165. TEXT_TORRENT_FILE,
  1166. NO_DEFAULT_VALUE,
  1167. 'T'));
  1168. op->addTag(TAG_BASIC);
  1169. op->addTag(TAG_BITTORRENT);
  1170. handlers.push_back(op);
  1171. }
  1172. #endif // ENABLE_BITTORRENT
  1173. // Metalink Specific Options
  1174. #ifdef ENABLE_METALINK
  1175. {
  1176. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1177. (PREF_FOLLOW_METALINK,
  1178. TEXT_FOLLOW_METALINK,
  1179. V_TRUE,
  1180. V_TRUE, V_MEM, V_FALSE));
  1181. op->addTag(TAG_METALINK);
  1182. handlers.push_back(op);
  1183. }
  1184. {
  1185. SharedHandle<OptionHandler> op(new BooleanOptionHandler
  1186. (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL,
  1187. TEXT_METALINK_ENABLE_UNIQUE_PROTOCOL,
  1188. V_TRUE,
  1189. OptionHandler::OPT_ARG));
  1190. op->addTag(TAG_METALINK);
  1191. handlers.push_back(op);
  1192. }
  1193. {
  1194. SharedHandle<OptionHandler> op(new LocalFilePathOptionHandler
  1195. (PREF_METALINK_FILE,
  1196. TEXT_METALINK_FILE,
  1197. NO_DEFAULT_VALUE,
  1198. 'M'));
  1199. op->addTag(TAG_BASIC);
  1200. op->addTag(TAG_METALINK);
  1201. handlers.push_back(op);
  1202. }
  1203. {
  1204. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1205. (PREF_METALINK_LANGUAGE,
  1206. TEXT_METALINK_LANGUAGE));
  1207. op->addTag(TAG_METALINK);
  1208. handlers.push_back(op);
  1209. }
  1210. {
  1211. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1212. (PREF_METALINK_LOCATION,
  1213. TEXT_METALINK_LOCATION));
  1214. op->addTag(TAG_METALINK);
  1215. handlers.push_back(op);
  1216. }
  1217. {
  1218. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1219. (PREF_METALINK_OS,
  1220. TEXT_METALINK_OS));
  1221. op->addTag(TAG_METALINK);
  1222. handlers.push_back(op);
  1223. }
  1224. {
  1225. const std::string params[] = { V_HTTP, V_HTTPS, V_FTP, V_NONE };
  1226. SharedHandle<OptionHandler> op(new ParameterOptionHandler
  1227. (PREF_METALINK_PREFERRED_PROTOCOL,
  1228. TEXT_METALINK_PREFERRED_PROTOCOL,
  1229. V_NONE,
  1230. std::deque<std::string>
  1231. (&params[0], &params[arrayLength(params)])));
  1232. op->addTag(TAG_METALINK);
  1233. handlers.push_back(op);
  1234. }
  1235. {
  1236. SharedHandle<OptionHandler> op(new NumberOptionHandler
  1237. (PREF_METALINK_SERVERS,
  1238. TEXT_METALINK_SERVERS,
  1239. "5",
  1240. 1, -1,
  1241. 'C'));
  1242. op->addTag(TAG_METALINK);
  1243. handlers.push_back(op);
  1244. }
  1245. {
  1246. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1247. (PREF_METALINK_VERSION,
  1248. TEXT_METALINK_VERSION));
  1249. op->addTag(TAG_METALINK);
  1250. handlers.push_back(op);
  1251. }
  1252. #endif // ENABLE_METALINK
  1253. // Version Option
  1254. {
  1255. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1256. ("version",
  1257. TEXT_VERSION,
  1258. NO_DEFAULT_VALUE,
  1259. A2STR::NIL,
  1260. OptionHandler::NO_ARG,
  1261. 'v'));
  1262. op->addTag(TAG_BASIC);
  1263. handlers.push_back(op);
  1264. }
  1265. // Help Option
  1266. {
  1267. SharedHandle<OptionHandler> op(new DefaultOptionHandler
  1268. ("help",
  1269. TEXT_HELP,
  1270. TAG_BASIC,
  1271. StringFormat
  1272. ("%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
  1273. "%s, %s, %s, %s",
  1274. TAG_BASIC,
  1275. TAG_ADVANCED,
  1276. TAG_HTTP,
  1277. TAG_HTTPS,
  1278. TAG_FTP,
  1279. TAG_METALINK,
  1280. TAG_BITTORRENT,
  1281. TAG_COOKIE,
  1282. TAG_HOOK,
  1283. TAG_FILE,
  1284. TAG_XML_RPC,
  1285. TAG_EXPERIMENTAL,
  1286. TAG_HELP,
  1287. TAG_ALL).str(),
  1288. OptionHandler::OPT_ARG,
  1289. 'h'));
  1290. op->addTag(TAG_BASIC);
  1291. op->addTag(TAG_HELP);
  1292. handlers.push_back(op);
  1293. }
  1294. return handlers;
  1295. }
  1296. } // namespace aria2