| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209 | 
							- /* <!-- copyright */
 
- /*
 
-  * aria2 - The high speed download utility
 
-  *
 
-  * Copyright (C) 2006 Tatsuhiro Tsujikawa
 
-  *
 
-  * This program is free software; you can redistribute it and/or modify
 
-  * it under the terms of the GNU General Public License as published by
 
-  * the Free Software Foundation; either version 2 of the License, or
 
-  * (at your option) any later version.
 
-  *
 
-  * This program is distributed in the hope that it will be useful,
 
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
-  * GNU General Public License for more details.
 
-  *
 
-  * You should have received a copy of the GNU General Public License
 
-  * along with this program; if not, write to the Free Software
 
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-  *
 
-  * In addition, as a special exception, the copyright holders give
 
-  * permission to link the code of portions of this program with the
 
-  * OpenSSL library under certain conditions as described in each
 
-  * individual source file, and distribute linked combinations
 
-  * including the two.
 
-  * You must obey the GNU General Public License in all respects
 
-  * for all of the code used other than OpenSSL.  If you modify
 
-  * file(s) with this exception, you may extend this exception to your
 
-  * version of the file(s), but you are not obligated to do so.  If you
 
-  * do not wish to do so, delete this exception statement from your
 
-  * version.  If you delete this exception statement from all source
 
-  * files in the program, then also delete it here.
 
-  */
 
- /* copyright --> */
 
- #include "OptionHandlerFactory.h"
 
- #include "prefs.h"
 
- #include "OptionHandlerImpl.h"
 
- #include "array_fun.h"
 
- #include "usage_text.h"
 
- #include "A2STR.h"
 
- #include "Util.h"
 
- #include "help_tags.h"
 
- #include "StringFormat.h"
 
- namespace aria2 {
 
- OptionHandlers OptionHandlerFactory::createOptionHandlers()
 
- {
 
-   OptionHandlers handlers;
 
-   // General Options
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ALLOW_OVERWRITE,
 
- 				    TEXT_ALLOW_OVERWRITE,
 
- 				    V_FALSE));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ALLOW_PIECE_LENGTH_CHANGE,
 
- 				    TEXT_ALLOW_PIECE_LENGTH_CHANGE,
 
- 				    V_FALSE));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   } 
 
- #ifdef ENABLE_ASYNC_DNS
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ASYNC_DNS,
 
- 				    TEXT_ASYNC_DNS,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_ASYNC_DNS
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_AUTO_FILE_RENAMING,
 
- 				    TEXT_AUTO_FILE_RENAMING,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_AUTO_SAVE_INTERVAL,
 
- 				    TEXT_AUTO_SAVE_INTERVAL,
 
- 				    "60",
 
- 				    0, 600));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
- #ifdef ENABLE_MESSAGE_DIGEST
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_CHECK_INTEGRITY,
 
- 				    TEXT_CHECK_INTEGRITY,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'V'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_MESSAGE_DIGEST
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_CONF_PATH,
 
- 				    TEXT_CONF_PATH,
 
- 				    Util::getHomeDir()+"/.aria2/aria2.conf"));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_CONTINUE,
 
- 				    TEXT_CONTINUE,
 
- 				    V_FALSE, // TODO ommit?
 
- 				    OptionHandler::NO_ARG,
 
- 				    'c'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_DAEMON,
 
- 				    TEXT_DAEMON,
 
- 				    V_FALSE,
 
- 				    OptionHandler::NO_ARG,
 
- 				    'D')); // TODO ommit?
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_DIR,
 
- 				    TEXT_DIR,
 
- 				    ".",
 
- 				    A2STR::NIL,
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'd'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_DNS_TIMEOUT,
 
- 					  NO_DESCRIPTION,
 
- 					  "30",
 
- 					  1, 60));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
- #ifdef ENABLE_DIRECT_IO
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ENABLE_DIRECT_IO,
 
- 				    TEXT_ENABLE_DIRECT_IO,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_DIRECT_IO
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ENABLE_HTTP_SERVER,
 
- 				    TEXT_ENABLE_HTTP_SERVER,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_EXPERIMENTAL);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     std::string params[] = {
 
- #ifdef HAVE_EPOLL
 
-       V_EPOLL,
 
- #endif // HAVE_EPOLL
 
-       V_SELECT
 
-     };
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_EVENT_POLL,
 
- 				    TEXT_EVENT_POLL,
 
- #ifdef HAVE_EPOLL
 
- 				    V_EPOLL,
 
- #else // !HAVE_EPOLL
 
- 				    V_SELECT,
 
- #endif // !HAVE_EPOLL
 
- 				    std::deque<std::string>
 
- 				    (¶ms[0],¶ms[arrayLength(params)])));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_FILE_ALLOCATION,
 
- 				    TEXT_FILE_ALLOCATION,
 
- 				    V_PREALLOC,
 
- 				    V_NONE, V_PREALLOC,
 
- #ifdef HAVE_POSIX_FALLOCATE
 
- 				    V_FALLOC,
 
- #endif // HAVE_POSIX_FALLOCATE
 
- 				    'a'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_FORCE_SEQUENTIAL,
 
- 				    TEXT_FORCE_SEQUENTIAL,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'Z'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_HTTP_SERVER_LISTEN_PORT,
 
- 				    TEXT_HTTP_SERVER_LISTEN_PORT,
 
- 				    "6800",
 
- 				    1024, UINT16_MAX));
 
-     op->addTag(TAG_EXPERIMENTAL);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_INPUT_FILE,
 
- 				    TEXT_INPUT_FILE,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "FILENAME,-",
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'i'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_LOG,
 
- 				    TEXT_LOG,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "FILENAME,-",
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'l'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     const std::string params[] = { V_DEBUG, V_INFO, V_NOTICE, V_WARN, V_ERROR };
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_LOG_LEVEL,
 
- 				    TEXT_LOG_LEVEL,
 
- 				    V_DEBUG,
 
- 				    std::deque<std::string>
 
- 				    (¶ms[0],
 
- 				     ¶ms[arrayLength(params)])));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_MAX_CONCURRENT_DOWNLOADS,
 
- 				    TEXT_MAX_CONCURRENT_DOWNLOADS,
 
- 				    "5",
 
- 				    1, -1,
 
- 				    'j'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_MAX_DOWNLOAD_LIMIT,
 
- 				    TEXT_MAX_DOWNLOAD_LIMIT,
 
- 				    "0",
 
- 				    0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_MAX_OVERALL_DOWNLOAD_LIMIT,
 
- 				    TEXT_MAX_OVERALL_DOWNLOAD_LIMIT,
 
- 				    "0",
 
- 				    0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_NO_CONF,
 
- 				    TEXT_NO_CONF,
 
- 				    V_FALSE,
 
- 				    OptionHandler::NO_ARG));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_NO_FILE_ALLOCATION_LIMIT,
 
- 				    TEXT_NO_FILE_ALLOCATION_LIMIT,
 
- 				    "5M",
 
- 				    0));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_PARAMETERIZED_URI,
 
- 				    TEXT_PARAMETERIZED_URI,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'P'));  
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_QUIET,
 
- 				    TEXT_QUIET,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'q'));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
- #ifdef ENABLE_MESSAGE_DIGEST
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_REALTIME_CHUNK_CHECKSUM,
 
- 				    TEXT_REALTIME_CHUNK_CHECKSUM,
 
- 				    V_TRUE));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_MESSAGE_DIGEST
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_STOP,
 
- 				    TEXT_STOP,
 
- 				    "0",
 
- 				    0, INT32_MAX));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_SUMMARY_INTERVAL,
 
- 				    TEXT_SUMMARY_INTERVAL,
 
- 				    "60",
 
- 				    0, INT32_MAX));
 
-     op->addTag(TAG_ADVANCED);
 
-     handlers.push_back(op);
 
-   }
 
-   // HTTP/FTP options
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_CONNECT_TIMEOUT,
 
- 				    TEXT_CONNECT_TIMEOUT,
 
- 				    "60",
 
- 				    1, 600));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_DRY_RUN,
 
- 				    TEXT_DRY_RUN,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_LOWEST_SPEED_LIMIT,
 
- 				    TEXT_LOWEST_SPEED_LIMIT,
 
- 				    "0",
 
- 				    0));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_MAX_FILE_NOT_FOUND,
 
- 				    TEXT_MAX_FILE_NOT_FOUND,
 
- 				    "0",
 
- 				    0));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_MAX_TRIES,
 
- 				    TEXT_MAX_TRIES,
 
- 				    "5",
 
- 				    0, -1,
 
- 				    'm'));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_OUT,
 
- 				    TEXT_OUT,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "FILENAME",
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'o'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_REMOTE_TIME,
 
- 				    TEXT_REMOTE_TIME,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'R'));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_RESET_URI,
 
- 				    NO_DESCRIPTION,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_RETRY_WAIT,
 
- 				    TEXT_RETRY_WAIT,
 
- 				    "5",
 
- 				    0, 60));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_REUSE_URI,
 
- 				    NO_DESCRIPTION,
 
- 				    V_TRUE));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<UnitNumberOptionHandler> op(new UnitNumberOptionHandler
 
- 					     (PREF_SEGMENT_SIZE,
 
- 					      NO_DESCRIPTION,
 
- 					      "1M",
 
- 					      1024, -1));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_SERVER_STAT_IF,
 
- 				    TEXT_SERVER_STAT_IF,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "FILENAME"));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_SERVER_STAT_OF,
 
- 				    TEXT_SERVER_STAT_OF,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "FILENAME"));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_SERVER_STAT_TIMEOUT,
 
- 				    TEXT_SERVER_STAT_TIMEOUT,
 
- 				    "86400",
 
- 				    0, INT32_MAX));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_SPLIT,
 
- 				    TEXT_SPLIT,
 
- 				    "5",
 
- 				    1, -1,
 
- 				    's'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_STARTUP_IDLE_TIME,
 
- 					  NO_DESCRIPTION,
 
- 					  "10",
 
- 					  1, 60));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_TIMEOUT,
 
- 				    TEXT_TIMEOUT,
 
- 				    "60",
 
- 				    1, 600,
 
- 				    't'));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     const std::string params[] = { V_INORDER, V_FEEDBACK, V_ADAPTIVE };
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_URI_SELECTOR,
 
- 				    TEXT_URI_SELECTOR,
 
- 				    V_FEEDBACK,
 
- 				    std::deque<std::string>
 
- 				    (¶ms[0], ¶ms[arrayLength(params)])));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   // HTTP Specific Options
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_CA_CERTIFICATE,
 
- 				    TEXT_CA_CERTIFICATE,
 
- 				    CA_BUNDLE));
 
-     op->addTag(TAG_HTTP);
 
-     op->addTag(TAG_HTTPS);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_CERTIFICATE,
 
- 				    TEXT_CERTIFICATE));
 
-     op->addTag(TAG_HTTP);
 
-     op->addTag(TAG_HTTPS);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_CHECK_CERTIFICATE,
 
- 				    TEXT_CHECK_CERTIFICATE,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_HTTP);
 
-     op->addTag(TAG_HTTPS);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ENABLE_HTTP_KEEP_ALIVE,
 
- 				    TEXT_ENABLE_HTTP_KEEP_ALIVE,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ENABLE_HTTP_PIPELINING,
 
- 				    TEXT_ENABLE_HTTP_PIPELINING,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new CumulativeOptionHandler
 
- 				   (PREF_HEADER,
 
- 				    TEXT_HEADER,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "\n"));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_HTTP_AUTH_CHALLENGE,
 
- 				    TEXT_HTTP_AUTH_CHALLENGE,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_HTTP_AUTH_SCHEME,
 
- 				    TEXT_HTTP_AUTH_SCHEME,
 
- 				    V_BASIC,
 
- 				    V_BASIC));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_HTTP_PASSWD,
 
- 				    TEXT_HTTP_PASSWD));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_HTTP_USER,
 
- 				    TEXT_HTTP_USER));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_LOAD_COOKIES,
 
- 				    TEXT_LOAD_COOKIES,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "FILENAME"));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_MAX_HTTP_PIPELINING,
 
- 					  NO_DESCRIPTION,
 
- 					  "2",
 
- 					  1, 8));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_PRIVATE_KEY,
 
- 				    TEXT_PRIVATE_KEY));
 
-     op->addTag(TAG_HTTP);
 
-     op->addTag(TAG_HTTPS);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_REFERER,
 
- 				    TEXT_REFERER));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_USE_HEAD,
 
- 				    TEXT_USE_HEAD,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_USER_AGENT,
 
- 				    TEXT_USER_AGENT,
 
- 				    "aria2",
 
- 				    A2STR::NIL,
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'U'));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   // FTP Specific Options
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_FTP_PASSWD,
 
- 				    TEXT_FTP_PASSWD));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_FTP);
 
-     handlers.push_back(op);
 
-   }    
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_FTP_PASV,
 
- 				    TEXT_FTP_PASV,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'p'));
 
-     op->addTag(TAG_FTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_FTP_REUSE_CONNECTION,
 
- 				    TEXT_FTP_REUSE_CONNECTION,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_FTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_FTP_TYPE,
 
- 				    TEXT_FTP_TYPE,
 
- 				    V_BINARY,
 
- 				    V_BINARY, V_ASCII));
 
-     op->addTag(TAG_FTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_FTP_USER,
 
- 				    TEXT_FTP_USER));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_FTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<DefaultOptionHandler> op(new DefaultOptionHandler
 
- 					  (PREF_NETRC_PATH,
 
- 					   NO_DESCRIPTION,
 
- 					   Util::getHomeDir()+"/.netrc",
 
- 					   "/PATH/TO/NETRC"));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_NO_NETRC,
 
- 				    TEXT_NO_NETRC,
 
- 				    V_FALSE, // TODO ommit?
 
- 				    OptionHandler::NO_ARG,
 
- 				    'n'));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   // Proxy options
 
-   {
 
-     SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
 
- 				   (PREF_HTTP_PROXY,
 
- 				    TEXT_HTTP_PROXY,
 
- 				    NO_DEFAULT_VALUE));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
 
- 				   (PREF_HTTPS_PROXY,
 
- 				    TEXT_HTTPS_PROXY,
 
- 				    NO_DEFAULT_VALUE));
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
 
- 				   (PREF_FTP_PROXY,
 
- 				    TEXT_FTP_PROXY,
 
- 				    NO_DEFAULT_VALUE));
 
-     op->addTag(TAG_FTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new HttpProxyOptionHandler
 
- 				   (PREF_ALL_PROXY,
 
- 				    TEXT_ALL_PROXY,
 
- 				    NO_DEFAULT_VALUE));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_NO_PROXY,
 
- 				    TEXT_NO_PROXY));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_PROXY_METHOD,
 
- 				    TEXT_PROXY_METHOD,
 
- 				    V_GET,
 
- 				    V_GET, V_TUNNEL));
 
-     op->addTag(TAG_FTP);
 
-     op->addTag(TAG_HTTP);
 
-     handlers.push_back(op);
 
-   }
 
-   // BitTorrent/Metalink Options
 
- #if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
 
-   {
 
-     SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
 
- 				   (PREF_SELECT_FILE,
 
- 				    TEXT_SELECT_FILE,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    1, INT32_MAX));
 
-     op->addTag(TAG_BITTORRENT);
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_SHOW_FILES,
 
- 				    TEXT_SHOW_FILES,
 
- 				    V_FALSE, // TODO ommit?
 
- 				    OptionHandler::NO_ARG,
 
- 				    'S'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_BITTORRENT || ENABLE_METALINK
 
-   // BitTorrent Specific Options
 
- #ifdef ENABLE_BITTORRENT
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_BT_EXTERNAL_IP,
 
- 				    TEXT_BT_EXTERNAL_IP,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    "a numeric IP address"));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_BT_KEEP_ALIVE_INTERVAL,
 
- 					  NO_DESCRIPTION,
 
- 					  "120",
 
- 					  1, 120));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_BT_HASH_CHECK_SEED,
 
- 				    TEXT_BT_HASH_CHECK_SEED,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_BT_MAX_OPEN_FILES,
 
- 				    TEXT_BT_MAX_OPEN_FILES,
 
- 				    "100",
 
- 				    1));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_BT_MAX_PEERS,
 
- 				    TEXT_BT_MAX_PEERS,
 
- 				    "55",
 
- 				    0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
- 				   
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_BT_MIN_CRYPTO_LEVEL,
 
- 				    TEXT_BT_MIN_CRYPTO_LEVEL,
 
- 				    V_PLAIN,
 
- 				    V_PLAIN, V_ARC4));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_BT_REQUEST_PEER_SPEED_LIMIT,
 
- 				    TEXT_BT_REQUEST_PEER_SPEED_LIMIT,
 
- 				    "50K",
 
- 				    0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_BT_REQUIRE_CRYPTO,
 
- 				    TEXT_BT_REQUIRE_CRYPTO,
 
- 				    V_FALSE));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_BT_REQUEST_TIMEOUT,
 
- 					  NO_DESCRIPTION,
 
- 					  "60",
 
- 					  1, 600));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_BT_SEED_UNVERIFIED,
 
- 				    TEXT_BT_SEED_UNVERIFIED,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_BT_TIMEOUT,
 
- 					  NO_DESCRIPTION,
 
- 					  "180",
 
- 					  1, 600));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_BT_TRACKER_INTERVAL,
 
- 					  TEXT_BT_TRACKER_INTERVAL,
 
- 					  "0",
 
- 					  0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new HostPortOptionHandler
 
- 				   (PREF_DHT_ENTRY_POINT,
 
- 				    TEXT_DHT_ENTRY_POINT,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    PREF_DHT_ENTRY_POINT_HOST,
 
- 				    PREF_DHT_ENTRY_POINT_PORT));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_DHT_FILE_PATH,
 
- 				    TEXT_DHT_FILE_PATH,
 
- 				    Util::getHomeDir()+"/.aria2/dht.dat",
 
- 				    "/PATH/TO/DHT_DAT"));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
 
- 				   (PREF_DHT_LISTEN_PORT,
 
- 				    TEXT_DHT_LISTEN_PORT,
 
- 				    "6881-6999",
 
- 				    1024, UINT16_MAX));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ENABLE_DHT,
 
- 				    TEXT_ENABLE_DHT,
 
- 				    V_FALSE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_ENABLE_PEER_EXCHANGE,
 
- 				    TEXT_ENABLE_PEER_EXCHANGE,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_FOLLOW_TORRENT,
 
- 				    TEXT_FOLLOW_TORRENT,
 
- 				    V_TRUE,
 
- 				    V_TRUE, V_MEM, V_FALSE));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new IndexOutOptionHandler
 
- 				   (PREF_INDEX_OUT,
 
- 				    TEXT_INDEX_OUT,
 
- 				    'O'));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler
 
- 				   (PREF_LISTEN_PORT,
 
- 				    TEXT_LISTEN_PORT,
 
- 				    "6881-6999",
 
- 				    1024, UINT16_MAX));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_MAX_OVERALL_UPLOAD_LIMIT,
 
- 				    TEXT_MAX_OVERALL_UPLOAD_LIMIT,
 
- 				    "0",
 
- 				    0));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 
- 				   (PREF_MAX_UPLOAD_LIMIT,
 
- 				    TEXT_MAX_UPLOAD_LIMIT,
 
- 				    "0",
 
- 				    0, -1,
 
- 				    'u'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
 
- 					 (PREF_PEER_CONNECTION_TIMEOUT,
 
- 					  NO_DESCRIPTION,
 
- 					  "20",
 
- 					  1, 600));
 
-     op->hide();
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_PEER_ID_PREFIX,
 
- 				    TEXT_PEER_ID_PREFIX,
 
- 				    "-aria2-"));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_SEED_TIME,
 
- 				    TEXT_SEED_TIME,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new FloatNumberOptionHandler
 
- 				   (PREF_SEED_RATIO,
 
- 				    TEXT_SEED_RATIO,
 
- 				    "1.0",
 
- 				    0.0));
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_TORRENT_FILE,
 
- 				    TEXT_TORRENT_FILE,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    A2STR::NIL,
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'T'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_BITTORRENT);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_BITTORRENT
 
-   // Metalink Specific Options
 
- #ifdef ENABLE_METALINK
 
-   {
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_FOLLOW_METALINK,
 
- 				    TEXT_FOLLOW_METALINK,
 
- 				    V_TRUE,
 
- 				    V_TRUE, V_MEM, V_FALSE));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new BooleanOptionHandler
 
- 				   (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL,
 
- 				    TEXT_METALINK_ENABLE_UNIQUE_PROTOCOL,
 
- 				    V_TRUE,
 
- 				    OptionHandler::OPT_ARG));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_METALINK_FILE,
 
- 				    TEXT_METALINK_FILE,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    A2STR::NIL,
 
- 				    OptionHandler::REQ_ARG,
 
- 				    'M'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_METALINK_LANGUAGE,
 
- 				    TEXT_METALINK_LANGUAGE));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_METALINK_LOCATION,
 
- 				    TEXT_METALINK_LOCATION));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_METALINK_OS,
 
- 				    TEXT_METALINK_OS));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     const std::string params[] = { V_HTTP, V_HTTPS, V_FTP, V_NONE };
 
-     SharedHandle<OptionHandler> op(new ParameterOptionHandler
 
- 				   (PREF_METALINK_PREFERRED_PROTOCOL,
 
- 				    TEXT_METALINK_PREFERRED_PROTOCOL,
 
- 				    V_NONE,
 
- 				    std::deque<std::string>
 
- 				    (¶ms[0], ¶ms[arrayLength(params)])));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new NumberOptionHandler
 
- 				   (PREF_METALINK_SERVERS,
 
- 				    TEXT_METALINK_SERVERS,
 
- 				    "5",
 
- 				    1, -1,
 
- 				    'C'));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   (PREF_METALINK_VERSION,
 
- 				    TEXT_METALINK_VERSION));
 
-     op->addTag(TAG_METALINK);
 
-     handlers.push_back(op);
 
-   }
 
- #endif // ENABLE_METALINK
 
-   // Version Option
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   ("version",
 
- 				    TEXT_VERSION,
 
- 				    NO_DEFAULT_VALUE,
 
- 				    A2STR::NIL,
 
- 				    OptionHandler::NO_ARG,
 
- 				    'v'));
 
-     op->addTag(TAG_BASIC);
 
-     handlers.push_back(op);
 
-   }
 
-   // Help Option
 
-   {
 
-     SharedHandle<OptionHandler> op(new DefaultOptionHandler
 
- 				   ("help",
 
- 				    TEXT_HELP,
 
- 				    TAG_BASIC,
 
- 				    StringFormat("%s,%s,%s,%s,%s,%s,%s,%s,%s,all",
 
- 						 TAG_BASIC,
 
- 						 TAG_ADVANCED,
 
- 						 TAG_HTTP,
 
- 						 TAG_HTTPS,
 
- 						 TAG_FTP,
 
- 						 TAG_METALINK,
 
- 						 TAG_BITTORRENT,
 
- 						 TAG_EXPERIMENTAL,
 
- 						 TAG_HELP).str(),
 
- 				    OptionHandler::OPT_ARG,
 
- 				    'h'));
 
-     op->addTag(TAG_BASIC);
 
-     op->addTag(TAG_HELP);
 
-     handlers.push_back(op);
 
-   }
 
-   
 
-   return handlers;
 
- }
 
- } // namespace aria2
 
 
  |