aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2016-06-20 14:24:49 +0100
committerPatrik Flykt <patrik.flykt@linux.intel.com>2016-06-23 10:11:53 +0300
commitfb65047202369fa5544ddbff2d3ba1af89c67e20 (patch)
tree753b1e1466c69b7730c56fb6f20653f50b482fc1
parentc57a6d3985944edbb0579187273f0051676eee3b (diff)
downloadpacrunner-fb65047202369fa5544ddbff2d3ba1af89c67e20.tar.gz
js: Add proxy argument to JS execute() methods.
For now, just make the back ends automatically switch over, if they're being invoked on a different context to the last invocation. We'll fix them shortly to support multiple contexts.
-rw-r--r--plugins/mozjs.c8
-rw-r--r--plugins/v8.cc10
-rw-r--r--src/js.c5
-rw-r--r--src/js.h3
-rw-r--r--src/pacrunner.h3
-rw-r--r--src/proxy.c2
-rw-r--r--unit/test-mozjs.c16
7 files changed, 31 insertions, 16 deletions
diff --git a/plugins/mozjs.c b/plugins/mozjs.c
index af91fea..77a0c13 100644
--- a/plugins/mozjs.c
+++ b/plugins/mozjs.c
@@ -222,17 +222,21 @@ static int mozjs_set_proxy(struct pacrunner_proxy *proxy)
return 0;
}
-static char * mozjs_execute(const char *url, const char *host)
+static char * mozjs_execute(struct pacrunner_proxy *proxy, const char *url,
+ const char *host)
{
JSBool result;
jsval rval, args[2];
char *answer, *g_answer;
- DBG("url %s host %s", url, host);
+ DBG("proxy %p url %s host %s", proxy, url, host);
if (!jsctx)
return NULL;
+ if (proxy != current_proxy && mozjs_set_proxy(proxy))
+ return NULL;
+
pthread_mutex_lock(&mozjs_mutex);
JS_BeginRequest(jsctx);
diff --git a/plugins/v8.cc b/plugins/v8.cc
index 6cb28ca..e947bed 100644
--- a/plugins/v8.cc
+++ b/plugins/v8.cc
@@ -251,11 +251,15 @@ static int v8_set_proxy(struct pacrunner_proxy *proxy)
}
-static char *v8_execute(const char *url, const char *host)
+static char *v8_execute(struct pacrunner_proxy *proxy, const char *url,
+ const char *host)
{
- v8::Locker lck;
+ DBG("proxy %p url %s host %s", proxy, url, host);
+
+ if (current_proxy != proxy && v8_set_proxy(proxy))
+ return NULL;
- DBG("url %s host %s", url, host);
+ v8::Locker lck;
if (jsctx.IsEmpty() || jsfn.IsEmpty())
return NULL;
diff --git a/src/js.c b/src/js.c
index 84b8ada..ff08cee 100644
--- a/src/js.c
+++ b/src/js.c
@@ -69,7 +69,8 @@ int __pacrunner_js_set_proxy(struct pacrunner_proxy *proxy)
return -ENXIO;
}
-char *__pacrunner_js_execute(const char *url, const char *host)
+char *__pacrunner_js_execute(struct pacrunner_proxy *proxy, const char *url,
+ const char *host)
{
GSList *list;
@@ -77,7 +78,7 @@ char *__pacrunner_js_execute(const char *url, const char *host)
struct pacrunner_js_driver *driver = list->data;
if (driver->execute)
- return driver->execute(url, host);
+ return driver->execute(proxy, url, host);
}
return NULL;
diff --git a/src/js.h b/src/js.h
index 91143d1..ea76849 100644
--- a/src/js.h
+++ b/src/js.h
@@ -27,7 +27,8 @@ struct pacrunner_js_driver {
const char *name;
int priority;
int (*set_proxy) (struct pacrunner_proxy *proxy);
- char *(*execute)(const char *url, const char *host);
+ char *(*execute)(struct pacrunner_proxy *proxy, const char *url,
+ const char *host);
};
int pacrunner_js_driver_register(struct pacrunner_js_driver *driver);
diff --git a/src/pacrunner.h b/src/pacrunner.h
index db534cf..71913bb 100644
--- a/src/pacrunner.h
+++ b/src/pacrunner.h
@@ -110,4 +110,5 @@ char *__pacrunner_mozjs_execute(const char *url, const char *host);
int __pacrunner_js_init(void);
void __pacrunner_js_cleanup(void);
int __pacrunner_js_set_proxy(struct pacrunner_proxy *proxy);
-char *__pacrunner_js_execute(const char *url, const char *host);
+char *__pacrunner_js_execute(struct pacrunner_proxy *proxy, const char *url,
+ const char *host);
diff --git a/src/proxy.c b/src/proxy.c
index 536345f..e913a3a 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -565,7 +565,7 @@ found:
selected_proxy->servers,
selected_proxy->excludes);
case PACRUNNER_PROXY_METHOD_AUTO:
- return __pacrunner_js_execute(url, host);
+ return __pacrunner_js_execute(selected_proxy, url, host);
}
return NULL;
diff --git a/unit/test-mozjs.c b/unit/test-mozjs.c
index 8ac9741..7ccdee9 100644
--- a/unit/test-mozjs.c
+++ b/unit/test-mozjs.c
@@ -97,7 +97,7 @@ static void test_single_execute_without_pac(void)
g_assert(mozjs_init() == 0);
- result = __pacrunner_js_execute(EXAMPLE_URL, EXAMPLE_HOST);
+ result = __pacrunner_js_execute(proxy, EXAMPLE_URL, EXAMPLE_HOST);
g_test_message("result: %s", result);
mozjs_exit();
@@ -111,7 +111,8 @@ static void test_multiple_execute_without_pac(void)
g_assert(mozjs_init() == 0);
for (i = 0; i < MULTIPLE_COUNT; i++) {
- result = __pacrunner_js_execute(EXAMPLE_URL, EXAMPLE_HOST);
+ result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
+ EXAMPLE_HOST);
g_test_message("result %d: %s", i, result);
}
@@ -126,7 +127,7 @@ static void test_single_execute_with_direct_pac(void)
g_assert(pacrunner_proxy_set_auto(proxy, NULL, DIRECT_PAC) == 0);
- result = __pacrunner_js_execute(EXAMPLE_URL, EXAMPLE_HOST);
+ result = __pacrunner_js_execute(proxy, EXAMPLE_URL, EXAMPLE_HOST);
g_test_message("result: %s", result);
pacrunner_proxy_disable(proxy);
@@ -144,7 +145,8 @@ static void test_multiple_execute_with_direct_pac(void)
g_assert(pacrunner_proxy_set_auto(proxy, NULL, DIRECT_PAC) == 0);
for (i = 0; i < MULTIPLE_COUNT; i++) {
- result = __pacrunner_js_execute(EXAMPLE_URL, EXAMPLE_HOST);
+ result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
+ EXAMPLE_HOST);
g_test_message("result %d: %s", i, result);
}
@@ -163,7 +165,8 @@ static void test_massive_execute_with_direct_pac(void)
g_assert(pacrunner_proxy_set_auto(proxy, NULL, DIRECT_PAC) == 0);
for (i = 0; i < MASSIVE_COUNT; i++) {
- result = __pacrunner_js_execute(EXAMPLE_URL, EXAMPLE_HOST);
+ result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
+ EXAMPLE_HOST);
g_test_message("result %d: %s", i, result);
}
@@ -182,7 +185,8 @@ static void test_multiple_execute_with_example_pac(void)
g_assert(pacrunner_proxy_set_auto(proxy, NULL, EXAMPLE_PAC) == 0);
for (i = 0; i < MULTIPLE_COUNT; i++) {
- result = __pacrunner_js_execute(EXAMPLE_URL, EXAMPLE_HOST);
+ result = __pacrunner_js_execute(proxy, EXAMPLE_URL,
+ EXAMPLE_HOST);
g_test_message("result %d: %s", i, result);
}