aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Woodhouse <David.Woodhouse@intel.com>2016-08-16 17:01:34 +0100
committerPatrik Flykt <patrik.flykt@linux.intel.com>2016-08-19 10:10:29 +0300
commitd37b07a40813cdc8541fe6449739679bf3818b97 (patch)
treeb602e26eb442e209375716b9ee484916e086d085
parent90031662d2b84ed3f5cc536fa589d4c7b30d8729 (diff)
downloadpacrunner-d37b07a40813cdc8541fe6449739679bf3818b97.tar.gz
js: add __pacrunner_js_getipaddr() function
Remove the duplicate definitions from mozjs and v8 plugins
-rw-r--r--plugins/mozjs.c36
-rw-r--r--plugins/v8.cc35
-rw-r--r--src/js.h2
-rw-r--r--src/js_funcs.c44
4 files changed, 48 insertions, 69 deletions
diff --git a/plugins/mozjs.c b/plugins/mozjs.c
index b980d9d..2720cac 100644
--- a/plugins/mozjs.c
+++ b/plugins/mozjs.c
@@ -26,12 +26,9 @@
#include <errno.h>
#include <unistd.h>
#include <string.h>
-#include <sys/ioctl.h>
#include <pthread.h>
#include <netdb.h>
-#include <arpa/inet.h>
-#include <linux/if_arp.h>
#pragma GCC diagnostic ignored "-Wredundant-decls"
#include <jsapi.h>
@@ -48,32 +45,6 @@ struct pacrunner_mozjs {
JSObject *jsobj;
};
-static int getaddr(const char *node, char *host, size_t hostlen)
-{
- struct sockaddr_in addr;
- struct ifreq ifr;
- int sk, err;
-
- sk = socket(PF_INET, SOCK_DGRAM, 0);
- if (sk < 0)
- return -EIO;
-
- memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_name, node, sizeof(ifr.ifr_name));
-
- err = ioctl(sk, SIOCGIFADDR, &ifr);
-
- close(sk);
-
- if (err < 0)
- return -EIO;
-
- memcpy(&addr, &ifr.ifr_addr, sizeof(addr));
- snprintf(host, hostlen, "%s", inet_ntoa(addr.sin_addr));
-
- return 0;
-}
-
static int resolve(const char *node, char *host, size_t hostlen)
{
struct addrinfo *info;
@@ -96,7 +67,6 @@ static int resolve(const char *node, char *host, size_t hostlen)
static JSBool myipaddress(JSContext *jsctx, uintN argc, jsval *vp)
{
struct pacrunner_mozjs *ctx = JS_GetContextPrivate(jsctx);
- const char *interface;
char address[NI_MAXHOST];
DBG("");
@@ -106,11 +76,7 @@ static JSBool myipaddress(JSContext *jsctx, uintN argc, jsval *vp)
if (!ctx)
return JS_TRUE;
- interface = pacrunner_proxy_get_interface(ctx->proxy);
- if (!interface)
- return JS_TRUE;
-
- if (getaddr(interface, address, sizeof(address)) < 0)
+ if (__pacrunner_js_getipaddr(ctx->proxy, address, sizeof(address)) < 0)
return JS_TRUE;
DBG("address %s", address);
diff --git a/plugins/v8.cc b/plugins/v8.cc
index ebb88a6..954239d 100644
--- a/plugins/v8.cc
+++ b/plugins/v8.cc
@@ -27,11 +27,8 @@
#include <errno.h>
#include <unistd.h>
#include <string.h>
-#include <sys/ioctl.h>
#include <netdb.h>
-#include <arpa/inet.h>
-#include <linux/if_arp.h>
#include <v8.h>
@@ -51,32 +48,6 @@ static gboolean v8_gc(gpointer user_data)
return !v8::V8::IdleNotification();
}
-static int getaddr(const char *node, char *host, size_t hostlen)
-{
- struct sockaddr_in addr;
- struct ifreq ifr;
- int sk, err;
-
- sk = socket(PF_INET, SOCK_DGRAM, 0);
- if (sk < 0)
- return -EIO;
-
- memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_name, node, sizeof(ifr.ifr_name));
-
- err = ioctl(sk, SIOCGIFADDR, &ifr);
-
- close(sk);
-
- if (err < 0)
- return -EIO;
-
- memcpy(&addr, &ifr.ifr_addr, sizeof(addr));
- snprintf(host, hostlen, "%s", inet_ntoa(addr.sin_addr));
-
- return 0;
-}
-
static int resolve(const char *node, char *host, size_t hostlen)
{
struct addrinfo *info;
@@ -106,11 +77,7 @@ static v8::Handle<v8::Value> myipaddress(const v8::Arguments& args)
if (current_proxy == NULL)
return v8::ThrowException(v8::String::New("No current proxy"));
- interface = pacrunner_proxy_get_interface(current_proxy);
- if (interface == NULL)
- return v8::ThrowException(v8::String::New("Error fetching interface"));
-
- if (getaddr(interface, address, sizeof(address)) < 0)
+ if (__pacrunner_js_getipaddr(current_proxy, address, sizeof(address)) < 0)
return v8::ThrowException(v8::String::New("Error fetching IP address"));
DBG("address %s", address);
diff --git a/src/js.h b/src/js.h
index f14e796..9941a0b 100644
--- a/src/js.h
+++ b/src/js.h
@@ -36,4 +36,6 @@ int pacrunner_js_driver_register(struct pacrunner_js_driver *driver);
void pacrunner_js_driver_unregister(struct pacrunner_js_driver *driver);
/* Common functions for JS plugins */
+int __pacrunner_js_getipaddr(struct pacrunner_proxy *proxy, char *host,
+ size_t hostlen);
extern const char __pacrunner_js_routines[];
diff --git a/src/js_funcs.c b/src/js_funcs.c
index 6e9cf1e..d8204e5 100644
--- a/src/js_funcs.c
+++ b/src/js_funcs.c
@@ -23,6 +23,50 @@
#include <config.h>
#endif
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+
+#include <arpa/inet.h>
+#include <linux/if_arp.h>
+
+#include "pacrunner.h"
+#include "js.h"
+
+int __pacrunner_js_getipaddr(struct pacrunner_proxy *proxy, char *host,
+ size_t hostlen)
+{
+ const char *interface;
+ struct sockaddr_in addr;
+ struct ifreq ifr;
+ int sk, err;
+
+ interface = pacrunner_proxy_get_interface(proxy);
+ if (!interface)
+ return -EINVAL;
+
+ sk = socket(PF_INET, SOCK_DGRAM, 0);
+ if (sk < 0)
+ return -EIO;
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name));
+
+ err = ioctl(sk, SIOCGIFADDR, &ifr);
+
+ close(sk);
+
+ if (err < 0)
+ return -EIO;
+
+ memcpy(&addr, &ifr.ifr_addr, sizeof(addr));
+ snprintf(host, hostlen, "%s", inet_ntoa(addr.sin_addr));
+
+ return 0;
+}
+
const char __pacrunner_js_routines[] =
"function dnsDomainIs(host, domain) {\n" \
" return (host.length >= domain.length &&\n" \