mirror of https://github.com/aria2/aria2
2008-11-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --no-proxy option. It receives comman separated hostname or domains to which proxy should not be used. aria2 honors the environment variable no_proxy to override no-proxy value in configuration file. The user can override the environment variable no_proxy with --no-proxy command-line option. * src/AbstractCommand.cc * src/OptionHandlerFactory.cc * src/option_processing.cc * src/prefs.cc * src/prefs.h * src/usage_text.hpull/1/head
parent
ce4186b4c3
commit
0308785bd8
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2008-11-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Added --no-proxy option. It receives comman separated hostname or
|
||||||
|
domains to which proxy should not be used.
|
||||||
|
aria2 honors the environment variable no_proxy to override no-proxy
|
||||||
|
value in configuration file. The user can override the environment
|
||||||
|
variable no_proxy with --no-proxy command-line option.
|
||||||
|
* src/AbstractCommand.cc
|
||||||
|
* src/OptionHandlerFactory.cc
|
||||||
|
* src/option_processing.cc
|
||||||
|
* src/prefs.cc
|
||||||
|
* src/prefs.h
|
||||||
|
* src/usage_text.h
|
||||||
|
|
||||||
2008-11-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2008-11-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Added the ability to verify peer in SSL/TLS using given CA certificates.
|
Added the ability to verify peer in SSL/TLS using given CA certificates.
|
||||||
|
|
|
@ -33,6 +33,9 @@
|
||||||
*/
|
*/
|
||||||
/* copyright --> */
|
/* copyright --> */
|
||||||
#include "AbstractCommand.h"
|
#include "AbstractCommand.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "RequestGroup.h"
|
#include "RequestGroup.h"
|
||||||
#include "Request.h"
|
#include "Request.h"
|
||||||
#include "DownloadEngine.h"
|
#include "DownloadEngine.h"
|
||||||
|
@ -58,6 +61,7 @@
|
||||||
#include "ServerStat.h"
|
#include "ServerStat.h"
|
||||||
#include "RequestGroupMan.h"
|
#include "RequestGroupMan.h"
|
||||||
#include "A2STR.h"
|
#include "A2STR.h"
|
||||||
|
#include "Util.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -329,9 +333,39 @@ static bool isProxyGETRequest(const std::string& protocol, const Option* option)
|
||||||
return isProxyRequest(protocol, option);
|
return isProxyRequest(protocol, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DomainMatch {
|
||||||
|
private:
|
||||||
|
std::string _hostname;
|
||||||
|
public:
|
||||||
|
DomainMatch(const std::string& hostname):_hostname(hostname) {}
|
||||||
|
|
||||||
|
bool operator()(const std::string& domain) const
|
||||||
|
{
|
||||||
|
if(Util::startsWith(domain, ".")) {
|
||||||
|
return Util::endsWith(_hostname, domain);
|
||||||
|
} else {
|
||||||
|
return Util::endsWith(_hostname, "."+domain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool inNoProxy(const SharedHandle<Request>& req,
|
||||||
|
const std::string& noProxy)
|
||||||
|
{
|
||||||
|
std::deque<std::string> entries;
|
||||||
|
Util::slice(entries, noProxy, ',', true);
|
||||||
|
if(entries.empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return
|
||||||
|
std::find_if(entries.begin(), entries.end(),
|
||||||
|
DomainMatch("."+req->getHost())) != entries.end();
|
||||||
|
}
|
||||||
|
|
||||||
bool AbstractCommand::isProxyDefined() const
|
bool AbstractCommand::isProxyDefined() const
|
||||||
{
|
{
|
||||||
return isProxyRequest(req->getProtocol(), e->option);
|
return isProxyRequest(req->getProtocol(), e->option) &&
|
||||||
|
!inNoProxy(req, e->option->get(PREF_NO_PROXY));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const std::string& getProxyString(const SharedHandle<Request>& req,
|
static const std::string& getProxyString(const SharedHandle<Request>& req,
|
||||||
|
@ -351,6 +385,9 @@ static const std::string& getProxyString(const SharedHandle<Request>& req,
|
||||||
SharedHandle<Request> AbstractCommand::createProxyRequest() const
|
SharedHandle<Request> AbstractCommand::createProxyRequest() const
|
||||||
{
|
{
|
||||||
SharedHandle<Request> proxyRequest;
|
SharedHandle<Request> proxyRequest;
|
||||||
|
if(inNoProxy(req, e->option->get(PREF_NO_PROXY))) {
|
||||||
|
return proxyRequest;
|
||||||
|
}
|
||||||
std::string proxy = getProxyString(req, e->option);
|
std::string proxy = getProxyString(req, e->option);
|
||||||
if(!proxy.empty()) {
|
if(!proxy.empty()) {
|
||||||
proxyRequest.reset(new Request());
|
proxyRequest.reset(new Request());
|
||||||
|
|
|
@ -636,6 +636,14 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
|
||||||
op->addTag(TAG_HTTP);
|
op->addTag(TAG_HTTP);
|
||||||
handlers.push_back(op);
|
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
|
SharedHandle<OptionHandler> op(new ParameterOptionHandler
|
||||||
(PREF_PROXY_METHOD,
|
(PREF_PROXY_METHOD,
|
||||||
|
|
|
@ -186,6 +186,7 @@ Option* option_processing(int argc, char* const argv[])
|
||||||
{ PREF_PRIVATE_KEY.c_str(), required_argument, &lopt, 232 },
|
{ PREF_PRIVATE_KEY.c_str(), required_argument, &lopt, 232 },
|
||||||
{ PREF_CA_CERTIFICATE.c_str(), optional_argument, &lopt, 233 },
|
{ PREF_CA_CERTIFICATE.c_str(), optional_argument, &lopt, 233 },
|
||||||
{ PREF_CHECK_CERTIFICATE.c_str(), optional_argument, &lopt, 234 },
|
{ PREF_CHECK_CERTIFICATE.c_str(), optional_argument, &lopt, 234 },
|
||||||
|
{ PREF_NO_PROXY.c_str(), required_argument, &lopt, 235 },
|
||||||
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
|
#if defined ENABLE_BITTORRENT || defined ENABLE_METALINK
|
||||||
{ PREF_SHOW_FILES.c_str(), no_argument, NULL, 'S' },
|
{ PREF_SHOW_FILES.c_str(), no_argument, NULL, 'S' },
|
||||||
{ PREF_SELECT_FILE.c_str(), required_argument, &lopt, 21 },
|
{ PREF_SELECT_FILE.c_str(), required_argument, &lopt, 21 },
|
||||||
|
@ -466,6 +467,9 @@ Option* option_processing(int argc, char* const argv[])
|
||||||
case 234:
|
case 234:
|
||||||
cmdstream << PREF_CHECK_CERTIFICATE << "=" << toBoolArg(optarg) << "\n";
|
cmdstream << PREF_CHECK_CERTIFICATE << "=" << toBoolArg(optarg) << "\n";
|
||||||
break;
|
break;
|
||||||
|
case 235:
|
||||||
|
cmdstream << PREF_NO_PROXY << "=" << optarg << "\n";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -593,6 +597,7 @@ Option* option_processing(int argc, char* const argv[])
|
||||||
overrideWithEnv(op, oparser, PREF_HTTPS_PROXY, "https_proxy");
|
overrideWithEnv(op, oparser, PREF_HTTPS_PROXY, "https_proxy");
|
||||||
overrideWithEnv(op, oparser, PREF_FTP_PROXY, "ftp_proxy");
|
overrideWithEnv(op, oparser, PREF_FTP_PROXY, "ftp_proxy");
|
||||||
overrideWithEnv(op, oparser, PREF_ALL_PROXY, "all_proxy");
|
overrideWithEnv(op, oparser, PREF_ALL_PROXY, "all_proxy");
|
||||||
|
overrideWithEnv(op, oparser, PREF_NO_PROXY, "no_proxy");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
oparser.parse(op, cmdstream);
|
oparser.parse(op, cmdstream);
|
||||||
|
|
|
@ -196,6 +196,8 @@ const std::string PREF_HTTP_PROXY("http-proxy");
|
||||||
const std::string PREF_HTTPS_PROXY("https-proxy");
|
const std::string PREF_HTTPS_PROXY("https-proxy");
|
||||||
const std::string PREF_FTP_PROXY("ftp-proxy");
|
const std::string PREF_FTP_PROXY("ftp-proxy");
|
||||||
const std::string PREF_ALL_PROXY("all-proxy");
|
const std::string PREF_ALL_PROXY("all-proxy");
|
||||||
|
// values: comma separeted hostname or domain
|
||||||
|
const std::string PREF_NO_PROXY("no-proxy");
|
||||||
// values: get | tunnel
|
// values: get | tunnel
|
||||||
const std::string PREF_PROXY_METHOD("proxy-method");
|
const std::string PREF_PROXY_METHOD("proxy-method");
|
||||||
const std::string V_GET("get");
|
const std::string V_GET("get");
|
||||||
|
|
|
@ -200,6 +200,8 @@ extern const std::string PREF_HTTP_PROXY;
|
||||||
extern const std::string PREF_HTTPS_PROXY;
|
extern const std::string PREF_HTTPS_PROXY;
|
||||||
extern const std::string PREF_FTP_PROXY;
|
extern const std::string PREF_FTP_PROXY;
|
||||||
extern const std::string PREF_ALL_PROXY;
|
extern const std::string PREF_ALL_PROXY;
|
||||||
|
// values: comma separeted hostname or domain
|
||||||
|
extern const std::string PREF_NO_PROXY;
|
||||||
// values: get | tunnel
|
// values: get | tunnel
|
||||||
extern const std::string PREF_PROXY_METHOD;
|
extern const std::string PREF_PROXY_METHOD;
|
||||||
extern const std::string V_GET;
|
extern const std::string V_GET;
|
||||||
|
|
|
@ -407,3 +407,6 @@ _(" --ca-certificate=FILE Use the certificate authorities in FILE to veri
|
||||||
#define TEXT_CHECK_CERTIFICATE \
|
#define TEXT_CHECK_CERTIFICATE \
|
||||||
_(" --check-certificate[=true|false] Verify the peer using certificates specified\n"\
|
_(" --check-certificate[=true|false] Verify the peer using certificates specified\n"\
|
||||||
" in --ca-certificate option.")
|
" in --ca-certificate option.")
|
||||||
|
#define TEXT_NO_PROXY \
|
||||||
|
_(" --no-proxy=DOMAINS Specify comma separated hostnames or domains to\n"\
|
||||||
|
" which proxy should not be used.")
|
||||||
|
|
Loading…
Reference in New Issue