diff options
author | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-02-17 03:36:12 +0000 |
---|---|---|
committer | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-02-17 03:36:12 +0000 |
commit | 1dc9d1defb395a67eb3d54fdefdb7a44bccd7196 (patch) | |
tree | 2fe1010164ad526b347fc63c73273443d920f885 /libproxy/proxy.cpp | |
parent | 44af1240a23d39558cac290ba47713d96ce72b70 (diff) | |
download | libproxy-1dc9d1defb395a67eb3d54fdefdb7a44bccd7196.tar.gz |
add support in core libproxy for inverting ignore strings
git-svn-id: http://libproxy.googlecode.com/svn/trunk@557 c587cffe-e639-0410-9787-d7902ae8ed56
Diffstat (limited to 'libproxy/proxy.cpp')
-rw-r--r-- | libproxy/proxy.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libproxy/proxy.cpp b/libproxy/proxy.cpp index b639b73..adce533 100644 --- a/libproxy/proxy.cpp +++ b/libproxy/proxy.cpp @@ -149,6 +149,7 @@ proxy_factory::~proxy_factory() { vector<string> proxy_factory::get_proxies(string __url) { url* realurl = NULL; url confurl("direct://"); + bool ignored = false, invign = false; string confign; config_extension* config; vector<network_extension*> networks; @@ -210,13 +211,17 @@ vector<string> proxy_factory::get_proxies(string __url) { /* Check our ignore patterns */ ignores = this->mm.get_extensions<ignore_extension>(); - for (size_t i=0 ; i < confign.size() && i != string::npos ; i=confign.substr(i).find(',')) { + invign = confign[0] == '-'; + if (invign) confign = confign.substr(1); + for (size_t i=0 ; i < confign.size() && i != string::npos && !ignored; i=confign.substr(i).find(',')) { while (i < confign.size() && confign[i] == ',') i++; - for (vector<ignore_extension*>::iterator it=ignores.begin() ; it != ignores.end() ; it++) + for (vector<ignore_extension*>::iterator it=ignores.begin() ; it != ignores.end() && !ignored ; it++) if ((*it)->ignore(*realurl, confign.substr(i, confign.find(',')))) - goto do_return; + ignored = true; } + if (!ignored && invign) goto do_return; + if (ignored && !invign) goto do_return; /* If we have a wpad config */ if (confurl.get_scheme() == "wpad") { |