diff options
author | David Woodhouse <dwmw2@infradead.org> | 2016-06-20 14:24:49 +0100 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2016-06-23 10:11:53 +0300 |
commit | fb65047202369fa5544ddbff2d3ba1af89c67e20 (patch) | |
tree | 753b1e1466c69b7730c56fb6f20653f50b482fc1 | |
parent | c57a6d3985944edbb0579187273f0051676eee3b (diff) | |
download | pacrunner-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.c | 8 | ||||
-rw-r--r-- | plugins/v8.cc | 10 | ||||
-rw-r--r-- | src/js.c | 5 | ||||
-rw-r--r-- | src/js.h | 3 | ||||
-rw-r--r-- | src/pacrunner.h | 3 | ||||
-rw-r--r-- | src/proxy.c | 2 | ||||
-rw-r--r-- | unit/test-mozjs.c | 16 |
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; @@ -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; @@ -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); } |