diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-02-07 11:00:34 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-02-07 11:00:34 +0000 |
| commit | 2881dbe025d2002fc5260969cd0c402404713ebc (patch) | |
| tree | 4d30de40e909a9c9e9f3d2bdb0ad2748afc35922 /src/OptionHandlerFactory.cc | |
| parent | bbb3589293139db527cf72f0a30e989fc2889a53 (diff) | |
2009-02-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added OptionParser::parseArg() which internally uses getopt_long
to parse command-line options. All command-line options are now
configured by OptionHandler. No manual editing of struct option*
is required any more.
* src/NameMatchOptionHandler.h
* src/OptionHandler.h
* src/OptionHandlerFactory.cc
* src/OptionHandlerImpl.h
* src/OptionParser.cc
* src/OptionParser.h
* src/array_fun.h
* src/main.cc
* src/option_processing.cc
* test/OptionHandlerTest.cc
* test/OptionParserTest.cc
Diffstat (limited to 'src/OptionHandlerFactory.cc')
| -rw-r--r-- | src/OptionHandlerFactory.cc | 280 |
1 files changed, 185 insertions, 95 deletions
diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index 0b3ac849..df0df63c 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -64,19 +64,23 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() 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)); + 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)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_ADVANCED); handlers.push_back(op); } @@ -89,16 +93,20 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() 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)); + 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, @@ -111,7 +119,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_CONTINUE, TEXT_CONTINUE, - V_FALSE)); // TODO ommit? + V_FALSE, // TODO ommit? + OptionHandler::NO_ARG, + 'c')); op->addTag(TAG_BASIC); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); @@ -121,7 +131,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_DAEMON, TEXT_DAEMON, - V_FALSE)); // TODO ommit? + V_FALSE, + OptionHandler::NO_ARG, + 'D')); // TODO ommit? op->addTag(TAG_ADVANCED); handlers.push_back(op); } @@ -129,32 +141,39 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new DefaultOptionHandler (PREF_DIR, TEXT_DIR, - ".")); + ".", + A2STR::NIL, + OptionHandler::REQ_ARG, + 'd')); op->addTag(TAG_BASIC); handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_DNS_TIMEOUT, - NO_DESCRIPTION, - "30", - 1, 60, - true)); + 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)); + 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)); + V_FALSE, + OptionHandler::OPT_ARG)); op->addTag(TAG_EXPERIMENTAL); handlers.push_back(op); } @@ -183,7 +202,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_FILE_ALLOCATION, TEXT_FILE_ALLOCATION, V_PREALLOC, - V_NONE, V_PREALLOC)); + V_NONE, V_PREALLOC, + 'a')); op->addTag(TAG_BASIC); handlers.push_back(op); } @@ -191,7 +211,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_FORCE_SEQUENTIAL, TEXT_FORCE_SEQUENTIAL, - V_FALSE)); + V_FALSE, + OptionHandler::OPT_ARG, + 'Z')); op->addTag(TAG_BASIC); handlers.push_back(op); } @@ -209,7 +231,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_INPUT_FILE, TEXT_INPUT_FILE, NO_DEFAULT_VALUE, - "FILENAME,-")); + "FILENAME,-", + OptionHandler::REQ_ARG, + 'i')); op->addTag(TAG_BASIC); handlers.push_back(op); } @@ -218,7 +242,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_LOG, TEXT_LOG, NO_DEFAULT_VALUE, - "FILENAME,-")); + "FILENAME,-", + OptionHandler::REQ_ARG, + 'l')); op->addTag(TAG_BASIC); handlers.push_back(op); } @@ -239,7 +265,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_MAX_CONCURRENT_DOWNLOADS, TEXT_MAX_CONCURRENT_DOWNLOADS, "5", - 1, 45)); + 1, 45, + 'j')); op->addTag(TAG_BASIC); handlers.push_back(op); } @@ -258,7 +285,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_NO_CONF, TEXT_NO_CONF, - V_FALSE)); + V_FALSE, + OptionHandler::NO_ARG)); op->addTag(TAG_ADVANCED); handlers.push_back(op); } @@ -275,7 +303,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_PARAMETERIZED_URI, TEXT_PARAMETERIZED_URI, - V_FALSE)); + V_FALSE, + OptionHandler::OPT_ARG, + 'P')); op->addTag(TAG_ADVANCED); handlers.push_back(op); } @@ -283,10 +313,13 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_QUIET, TEXT_QUIET, - V_FALSE)); + 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, @@ -295,6 +328,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() op->addTag(TAG_METALINK); handlers.push_back(op); } +#endif // ENABLE_MESSAGE_DIGEST { SharedHandle<OptionHandler> op(new NumberOptionHandler (PREF_STOP, @@ -349,7 +383,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_MAX_TRIES, TEXT_MAX_TRIES, "5", - 0)); + 0, -1, + 'm')); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); handlers.push_back(op); @@ -359,7 +394,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_OUT, TEXT_OUT, NO_DEFAULT_VALUE, - "FILENAME")); + "FILENAME", + OptionHandler::REQ_ARG, + 'o')); op->addTag(TAG_BASIC); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); @@ -369,7 +406,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_REMOTE_TIME, TEXT_REMOTE_TIME, - V_FALSE)); + V_FALSE, + OptionHandler::OPT_ARG, + 'R')); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); handlers.push_back(op); @@ -385,12 +424,12 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new UnitNumberOptionHandler - (PREF_SEGMENT_SIZE, - NO_DESCRIPTION, - "1M", - 1024, -1, - true)); + SharedHandle<UnitNumberOptionHandler> op(new UnitNumberOptionHandler + (PREF_SEGMENT_SIZE, + NO_DESCRIPTION, + "1M", + 1024, -1)); + op->hide(); handlers.push_back(op); } { @@ -428,19 +467,20 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_SPLIT, TEXT_SPLIT, "5", - 1)); + 1, -1, + 's')); op->addTag(TAG_BASIC); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_STARTUP_IDLE_TIME, - NO_DESCRIPTION, - "10", - 1, 60, - true)); + SharedHandle<NumberOptionHandler> op(new NumberOptionHandler + (PREF_STARTUP_IDLE_TIME, + NO_DESCRIPTION, + "10", + 1, 60)); + op->hide(); handlers.push_back(op); } { @@ -448,7 +488,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_TIMEOUT, TEXT_TIMEOUT, "60", - 1, 600)); + 1, 600, + 't')); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); handlers.push_back(op); @@ -487,7 +528,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_CHECK_CERTIFICATE, TEXT_CHECK_CERTIFICATE, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_HTTP); op->addTag(TAG_HTTPS); handlers.push_back(op); @@ -496,7 +538,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_ENABLE_HTTP_KEEP_ALIVE, TEXT_ENABLE_HTTP_KEEP_ALIVE, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_HTTP); handlers.push_back(op); } @@ -504,7 +547,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_ENABLE_HTTP_PIPELINING, TEXT_ENABLE_HTTP_PIPELINING, - V_FALSE)); + V_FALSE, + OptionHandler::OPT_ARG)); op->addTag(TAG_HTTP); handlers.push_back(op); } @@ -553,12 +597,12 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_MAX_HTTP_PIPELINING, - NO_DESCRIPTION, - "2", - 1, 8, - true)); + SharedHandle<NumberOptionHandler> op(new NumberOptionHandler + (PREF_MAX_HTTP_PIPELINING, + NO_DESCRIPTION, + "2", + 1, 8)); + op->hide(); handlers.push_back(op); } { @@ -577,10 +621,11 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new DefaultOptionHandler + SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_USE_HEAD, TEXT_USE_HEAD, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_HTTP); handlers.push_back(op); } @@ -588,7 +633,10 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new DefaultOptionHandler (PREF_USER_AGENT, TEXT_USER_AGENT, - "aria2")); + "aria2", + A2STR::NIL, + OptionHandler::REQ_ARG, + 'U')); op->addTag(TAG_HTTP); handlers.push_back(op); } @@ -605,7 +653,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_FTP_PASV, TEXT_FTP_PASV, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG, + 'p')); op->addTag(TAG_FTP); handlers.push_back(op); } @@ -613,7 +663,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_FTP_REUSE_CONNECTION, TEXT_FTP_REUSE_CONNECTION, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_FTP); handlers.push_back(op); } @@ -635,19 +686,21 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new DefaultOptionHandler - (PREF_NETRC_PATH, - NO_DESCRIPTION, - Util::getHomeDir()+"/.netrc", - "/PATH/TO/NETRC", - true)); + 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? + V_FALSE, // TODO ommit? + OptionHandler::NO_ARG, + 'n')); op->addTag(TAG_FTP); op->addTag(TAG_HTTP); handlers.push_back(op); @@ -705,6 +758,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } // BitTorrent/Metalink Options +#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK { SharedHandle<OptionHandler> op(new IntegerRangeOptionHandler (PREF_SELECT_FILE, @@ -719,13 +773,17 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_SHOW_FILES, TEXT_SHOW_FILES, - V_FALSE)); // TODO ommit? + 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, @@ -736,19 +794,20 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_BT_KEEP_ALIVE_INTERVAL, - NO_DESCRIPTION, - "120", - 1, 120, - true)); + 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)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_BITTORRENT); handlers.push_back(op); } @@ -798,29 +857,30 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_BT_REQUEST_TIMEOUT, - NO_DESCRIPTION, - "60", - 1, 600, - true)); + 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)); + V_FALSE, + OptionHandler::OPT_ARG)); op->addTag(TAG_BITTORRENT); handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_BT_TIMEOUT, - NO_DESCRIPTION, - "180", - 1, 600, - true)); + SharedHandle<NumberOptionHandler> op(new NumberOptionHandler + (PREF_BT_TIMEOUT, + NO_DESCRIPTION, + "180", + 1, 600)); + op->hide(); handlers.push_back(op); } { @@ -864,7 +924,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_ENABLE_DHT, TEXT_ENABLE_DHT, - V_FALSE)); + V_FALSE, + OptionHandler::OPT_ARG)); op->addTag(TAG_BASIC); op->addTag(TAG_BITTORRENT); handlers.push_back(op); @@ -873,7 +934,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_ENABLE_PEER_EXCHANGE, TEXT_ENABLE_PEER_EXCHANGE, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_BITTORRENT); handlers.push_back(op); } @@ -911,18 +973,19 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_MAX_UPLOAD_LIMIT, TEXT_MAX_UPLOAD_LIMIT, "0", - 0)); + 0, -1, + 'u')); op->addTag(TAG_BASIC); op->addTag(TAG_BITTORRENT); handlers.push_back(op); } { - SharedHandle<OptionHandler> op(new NumberOptionHandler - (PREF_PEER_CONNECTION_TIMEOUT, - NO_DESCRIPTION, - "20", - 1, 600, - true)); + SharedHandle<NumberOptionHandler> op(new NumberOptionHandler + (PREF_PEER_CONNECTION_TIMEOUT, + NO_DESCRIPTION, + "20", + 1, 600)); + op->hide(); handlers.push_back(op); } { @@ -954,12 +1017,18 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() { SharedHandle<OptionHandler> op(new DefaultOptionHandler (PREF_TORRENT_FILE, - TEXT_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, @@ -973,14 +1042,19 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() SharedHandle<OptionHandler> op(new BooleanOptionHandler (PREF_METALINK_ENABLE_UNIQUE_PROTOCOL, TEXT_METALINK_ENABLE_UNIQUE_PROTOCOL, - V_TRUE)); + V_TRUE, + OptionHandler::OPT_ARG)); op->addTag(TAG_METALINK); handlers.push_back(op); } { SharedHandle<OptionHandler> op(new DefaultOptionHandler (PREF_METALINK_FILE, - TEXT_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); @@ -1022,7 +1096,8 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() (PREF_METALINK_SERVERS, TEXT_METALINK_SERVERS, "5", - 1)); + 1, -1, + 'C')); op->addTag(TAG_METALINK); handlers.push_back(op); } @@ -1033,6 +1108,19 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() 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 @@ -1048,7 +1136,9 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() TAG_METALINK, TAG_BITTORRENT, TAG_EXPERIMENTAL, - TAG_HELP).str())); + TAG_HELP).str(), + OptionHandler::OPT_ARG, + 'h')); op->addTag(TAG_BASIC); op->addTag(TAG_HELP); handlers.push_back(op); |
