summaryrefslogtreecommitdiff
path: root/libproxy/proxy.cpp
diff options
context:
space:
mode:
authornpmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56>2010-02-17 03:36:12 +0000
committernpmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56>2010-02-17 03:36:12 +0000
commit1dc9d1defb395a67eb3d54fdefdb7a44bccd7196 (patch)
tree2fe1010164ad526b347fc63c73273443d920f885 /libproxy/proxy.cpp
parent44af1240a23d39558cac290ba47713d96ce72b70 (diff)
downloadlibproxy-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.cpp11
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") {