diff options
Diffstat (limited to 'src/FeatureConfig.cc')
| -rw-r--r-- | src/FeatureConfig.cc | 183 |
1 files changed, 78 insertions, 105 deletions
diff --git a/src/FeatureConfig.cc b/src/FeatureConfig.cc index d91e557f..722c3ada 100644 --- a/src/FeatureConfig.cc +++ b/src/FeatureConfig.cc @@ -2,7 +2,7 @@ /* * aria2 - The high speed download utility * - * Copyright (C) 2006 Tatsuhiro Tsujikawa + * Copyright (C) 2012 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 @@ -34,133 +34,106 @@ /* copyright --> */ #include "FeatureConfig.h" -#include <numeric> - -#include "array_fun.h" #include "util.h" -#include "Request.h" namespace aria2 { -SharedHandle<FeatureConfig> FeatureConfig::featureConfig_; +uint16_t getDefaultPort(const std::string& protocol) +{ + if(protocol == "http") { + return 80; + } else if(protocol == "https") { + return 443; + } else if(protocol == "ftp") { + return 21; + } else { + return 0; + } +} -const std::string FeatureConfig::FEATURE_HTTPS("HTTPS"); -const std::string FeatureConfig::FEATURE_BITTORRENT("BitTorrent"); -const std::string FeatureConfig::FEATURE_METALINK("Metalink"); -const std::string FeatureConfig::FEATURE_MESSAGE_DIGEST("Message Digest"); -const std::string FeatureConfig::FEATURE_ASYNC_DNS("Async DNS"); -const std::string FeatureConfig::FEATURE_XML_RPC("XML-RPC"); -const std::string FeatureConfig::FEATURE_GZIP("GZip"); -const std::string FeatureConfig::FEATURE_FIREFOX3_COOKIE("Firefox3 Cookie"); +std::string featureSummary() +{ + std::string s; + for(int i = 0; i < MAX_FEATURE; ++i) { + const char* name = strSupportedFeature(i); + if(name) { + s += name; + s += ", "; + } + } + return util::strip(s, ", "); +} -#ifdef ENABLE_SSL -# define HTTPS_ENABLED true -#else // !ENABLE_SSL -# define HTTPS_ENABLED false -#endif // !ENABLE_SSL +const char* strSupportedFeature(int feature) +{ + switch(feature) { + case(FEATURE_ASYNC_DNS): +#ifdef ENABLE_ASYNC_DNS + return "Async DNS"; +#else // !ENABLE_ASYNC_DNS + return 0; +#endif // !ENABLE_ASYNC_DNS + break; + case(FEATURE_BITTORRENT): #ifdef ENABLE_BITTORRENT -# define BITTORRENT_ENABLED true + return "BitTorrent"; #else // !ENABLE_BITTORRENT -# define BITTORRENT_ENABLED false + return 0; #endif // !ENABLE_BITTORRENT + break; -#ifdef ENABLE_METALINK -# define METALINK_ENABLED true -#else // !ENABLE_METALINK -# define METALINK_ENABLED false -#endif // !ENABLE_METALINK + case(FEATURE_FF3_COOKIE): +#ifdef HAVE_SQLITE3 + return "Firefox3 Cookie"; +#else // !HAVE_SQLITE3 + return 0; +#endif // !HAVE_SQLITE3 + break; + + case(FEATURE_GZIP): +#ifdef HAVE_ZLIB + return "GZip"; +#else // !HAVE_ZLIB + return 0; +#endif // !HAVE_ZLIB + break; + + case(FEATURE_HTTPS): +#ifdef ENABLE_SSL + return "HTTPS"; +#else // !ENABLE_SSL + return 0; +#endif // !ENABLE_SSL + break; + case(FEATURE_MESSAGE_DIGEST): #ifdef ENABLE_MESSAGE_DIGEST -# define MESSAGE_DIGEST_ENABLED true + return "Message Digest"; #else // !ENABLE_MESSAGE_DIGEST -# define MESSAGE_DIGEST_ENABLED false + return 0; #endif // !ENABLE_MESSAGE_DIGEST + break; -#ifdef ENABLE_ASYNC_DNS -# define ASYNC_DNS_ENABLED true -#else // !ENABLE_ASYNC_DNS -# define ASYNC_DNS_ENABLED false -#endif // !ENABLE_ASYNC_DNS + case(FEATURE_METALINK): +#ifdef ENABLE_METALINK + return "Metalink"; +#else // !ENABLE_METALINK + return 0; +#endif // !ENABLE_METALINK + break; + case(FEATURE_XML_RPC): #ifdef ENABLE_XML_RPC -# define XML_RPC_ENABLED true + return "XML-RPC"; #else // !ENABLE_XML_RPC -# define XML_RPC_ENABLED false + return 0; #endif // !ENABLE_XML_RPC + break; -#ifdef HAVE_ZLIB -# define GZIP_ENABLED true -#else // !HAVE_ZLIB -# define GZIP_ENABLED false -#endif // !HAVE_ZLIB - -#ifdef HAVE_SQLITE3 -# define FIREFOX3_COOKIE_ENABLED true -#else // !HAVE_SQLITE3 -# define FIREFOX3_COOKIE_ENABLED false -#endif // !HAVE_SQLITE3 - -FeatureConfig::FeatureConfig() { - defaultPorts_.insert(PortMap::value_type(Request::PROTO_HTTP, 80)); - defaultPorts_.insert(PortMap::value_type(Request::PROTO_HTTPS, 443)); - defaultPorts_.insert(PortMap::value_type(Request::PROTO_FTP, 21)); - - FeatureMap::value_type featureArray[] = { - FeatureMap::value_type(FEATURE_HTTPS, HTTPS_ENABLED), - FeatureMap::value_type(FEATURE_BITTORRENT, BITTORRENT_ENABLED), - FeatureMap::value_type(FEATURE_METALINK, METALINK_ENABLED), - FeatureMap::value_type(FEATURE_MESSAGE_DIGEST, MESSAGE_DIGEST_ENABLED), - FeatureMap::value_type(FEATURE_ASYNC_DNS, ASYNC_DNS_ENABLED), - FeatureMap::value_type(FEATURE_XML_RPC, XML_RPC_ENABLED), - FeatureMap::value_type(FEATURE_GZIP, GZIP_ENABLED), - FeatureMap::value_type(FEATURE_FIREFOX3_COOKIE, FIREFOX3_COOKIE_ENABLED), - }; - - features_.insert(vbegin(featureArray), vend(featureArray)); -} - -FeatureConfig::~FeatureConfig() {} - -const SharedHandle<FeatureConfig>& FeatureConfig::getInstance() -{ - if(!featureConfig_) { - featureConfig_.reset(new FeatureConfig()); - } - return featureConfig_; -} - -uint16_t FeatureConfig::getDefaultPort(const std::string& protocol) const -{ - PortMap::const_iterator itr = defaultPorts_.find(protocol); - if(itr == defaultPorts_.end()) { + default: return 0; - } else { - return itr->second; - } -} - -bool FeatureConfig::isSupported(const std::string& feature) const -{ - FeatureMap::const_iterator itr = features_.find(feature); - if(itr == features_.end()) { - return false; - } else { - return itr->second; - } -} - -std::string FeatureConfig::featureSummary() const -{ - std::string s; - for(FeatureMap::const_iterator i = features_.begin(), eoi = features_.end(); - i != eoi; ++i) { - if((*i).second) { - s += (*i).first; - s += ", "; - } } - return util::strip(s, ", "); } } // namespace aria2 |
