jsoninfo: wrap generic info plugin configuration in a struct
authorFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 2 Dec 2015 10:48:43 +0000 (11:48 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 2 Dec 2015 17:41:15 +0000 (18:41 +0100)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/jsoninfo/src/olsrd_jsoninfo.c
lib/jsoninfo/src/olsrd_jsoninfo.h
lib/jsoninfo/src/olsrd_plugin.c

index 8255514..8f27a4a 100644 (file)
@@ -46,7 +46,6 @@
 #include <arpa/inet.h>
 #include <string.h>
 #include <unistd.h>
-#include <stddef.h>
 
 #include "ipcalc.h"
 #include "olsr.h"
@@ -54,7 +53,6 @@
 #include "../../info/http_headers.h"
 #include "../../info/info_types.h"
 #include "jsoninfo_printers.h"
-#include "olsrd_jsoninfo_helpers.h"
 #include "olsrd_jsoninfo.h"
 
 #ifdef _WIN32
@@ -63,9 +61,6 @@
 
 /* defines to make txtinfo and jsoninfo look alike */
 #define PLUGIN_NAME "JSONINFO"
-#define info_accept_ip jsoninfo_accept_ip
-#define info_listen_ip jsoninfo_listen_ip
-#define info_ipv6_only jsoninfo_ipv6_only
 
 static int ipc_socket;
 
@@ -209,7 +204,7 @@ static int plugin_ipc_init(void) {
     }
 #endif /* (defined __FreeBSD__ || defined __FreeBSD_kernel__) && defined SO_NOSIGPIPE */
 #if defined linux && defined IPV6_V6ONLY
-    if (info_ipv6_only && olsr_cnf->ip_version == AF_INET6) {
+    if (info_plugin_config.ipv6_only && olsr_cnf->ip_version == AF_INET6) {
       if (setsockopt(ipc_socket, IPPROTO_IPV6, IPV6_V6ONLY, (char *) &yes, sizeof(yes)) < 0) {
         perror("IPV6_V6ONLY failed");
         return 0;
@@ -226,16 +221,16 @@ static int plugin_ipc_init(void) {
 #ifdef SIN6_LEN
       sst.in4.sin_len = addrlen;
 #endif /* SIN6_LEN */
-      sst.in4.sin_addr.s_addr = info_listen_ip.v4.s_addr;
-      sst.in4.sin_port = htons(ipc_port);
+      sst.in4.sin_addr.s_addr = info_plugin_config.listen_ip.v4.s_addr;
+      sst.in4.sin_port = htons(info_plugin_config.ipc_port);
     } else {
       sst.in6.sin6_family = AF_INET6;
       addrlen = sizeof(struct sockaddr_in6);
 #ifdef SIN6_LEN
       sst.in6.sin6_len = addrlen;
 #endif /* SIN6_LEN */
-      sst.in6.sin6_addr = info_listen_ip.v6;
-      sst.in6.sin6_port = htons(ipc_port);
+      sst.in6.sin6_addr = info_plugin_config.listen_ip.v6;
+      sst.in6.sin6_port = htons(info_plugin_config.ipc_port);
     }
 
     /* bind the socket to the port number */
@@ -258,7 +253,7 @@ static int plugin_ipc_init(void) {
     add_olsr_socket(ipc_socket, &ipc_action, NULL, NULL, SP_PR_READ);
 
 #ifndef NODEBUG
-    olsr_printf(2, "("PLUGIN_NAME") listening on port %d\n", ipc_port);
+    olsr_printf(2, "("PLUGIN_NAME") listening on port %d\n", info_plugin_config.ipc_port);
 #endif /* NODEBUG */
   }
   return 1;
@@ -290,8 +285,8 @@ static void ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int
   if (olsr_cnf->ip_version == AF_INET) {
     if (inet_ntop(olsr_cnf->ip_version, &pin.in4.sin_addr, addr, INET6_ADDRSTRLEN) == NULL)
       addr[0] = '\0';
-    if (!ip4equal(&pin.in4.sin_addr, &info_accept_ip.v4) && info_accept_ip.v4.s_addr != INADDR_ANY) {
-      if (!allow_localhost || ntohl(pin.in4.sin_addr.s_addr) != INADDR_LOOPBACK) {
+    if (!ip4equal(&pin.in4.sin_addr, &info_plugin_config.accept_ip.v4) && info_plugin_config.accept_ip.v4.s_addr != INADDR_ANY) {
+      if (!info_plugin_config.allow_localhost || ntohl(pin.in4.sin_addr.s_addr) != INADDR_LOOPBACK) {
         olsr_printf(1, "("PLUGIN_NAME") From host(%s) not allowed!\n", addr);
         close(ipc_connection);
         return;
@@ -301,7 +296,7 @@ static void ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int
     if (inet_ntop(olsr_cnf->ip_version, &pin.in6.sin6_addr, addr, INET6_ADDRSTRLEN) == NULL)
       addr[0] = '\0';
     /* Use in6addr_any (::) in olsr.conf to allow anybody. */
-    if (!ip6equal(&in6addr_any, &info_accept_ip.v6) && !ip6equal(&pin.in6.sin6_addr, &info_accept_ip.v6)) {
+    if (!ip6equal(&in6addr_any, &info_plugin_config.accept_ip.v6) && !ip6equal(&pin.in6.sin6_addr, &info_plugin_config.accept_ip.v6)) {
       olsr_printf(1, "("PLUGIN_NAME") From host(%s) not allowed!\n", addr);
       close(ipc_connection);
       return;
@@ -400,7 +395,7 @@ static void send_info(unsigned int send_what, int the_socket) {
 
   abuf_init(&abuf, 2 * 4096);
 
-  if (http_headers) {
+  if (info_plugin_config.http_headers) {
     build_http_header(PLUGIN_NAME, HTTP_200, content_type, &abuf, &contentLengthPlaceholderStart);
     headerLength = abuf.len;
   }
@@ -444,7 +439,7 @@ static void send_info(unsigned int send_what, int the_socket) {
     (*printer_functions.olsrd_conf)(&abuf);
   }
 
-  if (http_headers) {
+  if (info_plugin_config.http_headers) {
     http_header_adjust_content_length(&abuf, contentLengthPlaceholderStart, abuf.len - headerLength);
   }
 
index 0381154..dde9bc6 100644 (file)
 #include "olsr_types.h"
 #include "olsrd_plugin.h"
 #include "plugin_util.h"
+#include "../../info/info_types.h"
 
-extern union olsr_ip_addr jsoninfo_accept_ip;
-extern union olsr_ip_addr jsoninfo_listen_ip;
-extern int ipc_port;
-extern int nompr;
-extern bool http_headers;
-extern bool allow_localhost;
-extern int jsoninfo_ipv6_only;
+extern info_plugin_config_t info_plugin_config;
 
 int olsrd_plugin_interface_version(void);
 int olsrd_plugin_init(void);
index f62e6c3..7794a0c 100644 (file)
@@ -52,6 +52,7 @@
 #include "olsrd_plugin.h"
 #include "olsrd_jsoninfo.h"
 #include "defs.h"
+#include "../../info/info_types.h"
 
 #define PLUGIN_NAME    "OLSRD jsoninfo plugin"
 #define PLUGIN_VERSION "0.0"
 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
 #define PLUGIN_INTERFACE_VERSION 5
 
-union olsr_ip_addr jsoninfo_accept_ip;
-union olsr_ip_addr jsoninfo_listen_ip;
-int ipc_port;
-int nompr;
-bool http_headers;
-bool allow_localhost;
-int jsoninfo_ipv6_only;
+info_plugin_config_t info_plugin_config;
 char uuidfile[FILENAME_MAX];
 
 static void my_init(void) __attribute__ ((constructor));
@@ -79,21 +74,21 @@ static void my_init(void) {
   printf("%s\n", MOD_DESC);
 
   /* defaults for parameters */
-  ipc_port = 9090;
-  http_headers = true;
-  allow_localhost = false;
-  jsoninfo_ipv6_only = false;
+  info_plugin_config.ipc_port = 9090;
+  info_plugin_config.http_headers = true;
+  info_plugin_config.allow_localhost = false;
+  info_plugin_config.ipv6_only = false;
 
   if (olsr_cnf->ip_version == AF_INET) {
-    jsoninfo_accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
-    jsoninfo_listen_ip.v4.s_addr = htonl(INADDR_ANY);
+    info_plugin_config.accept_ip.v4.s_addr = htonl(INADDR_LOOPBACK);
+    info_plugin_config.listen_ip.v4.s_addr = htonl(INADDR_ANY);
   } else {
-    jsoninfo_accept_ip.v6 = in6addr_loopback;
-    jsoninfo_listen_ip.v6 = in6addr_any;
+    info_plugin_config.accept_ip.v6 = in6addr_loopback;
+    info_plugin_config.listen_ip.v6 = in6addr_any;
   }
 
   /* highlite neighbours by default */
-  nompr = 0;
+  info_plugin_config.nompr = 0;
 
   memset(uuidfile, 0, sizeof(uuidfile));
 }
@@ -117,12 +112,12 @@ int olsrd_plugin_interface_version(void) {
 
 static const struct olsrd_plugin_parameters plugin_parameters[] = { //
     //
-        { .name = "port", .set_plugin_parameter = &set_plugin_port, .data = &ipc_port }, //
-        { .name = "accept", .set_plugin_parameter = &set_plugin_ipaddress, .data = &jsoninfo_accept_ip }, //
-        { .name = "listen", .set_plugin_parameter = &set_plugin_ipaddress, .data = &jsoninfo_listen_ip }, //
-        { .name = "httpheaders", .set_plugin_parameter = &set_plugin_boolean, .data = &http_headers }, //
-        { .name = "allowlocalhost", .set_plugin_parameter = &set_plugin_boolean, .data = &allow_localhost }, //
-        { .name = "ipv6only", .set_plugin_parameter = &set_plugin_boolean, .data = &jsoninfo_ipv6_only }, //
+        { .name = "port", .set_plugin_parameter = &set_plugin_port, .data = &info_plugin_config.ipc_port }, //
+        { .name = "accept", .set_plugin_parameter = &set_plugin_ipaddress, .data = &info_plugin_config.accept_ip }, //
+        { .name = "listen", .set_plugin_parameter = &set_plugin_ipaddress, .data = &info_plugin_config.listen_ip }, //
+        { .name = "httpheaders", .set_plugin_parameter = &set_plugin_boolean, .data = &info_plugin_config.http_headers }, //
+        { .name = "allowlocalhost", .set_plugin_parameter = &set_plugin_boolean, .data = &info_plugin_config.allow_localhost }, //
+        { .name = "ipv6only", .set_plugin_parameter = &set_plugin_boolean, .data = &info_plugin_config.ipv6_only }, //
         { .name = "uuidfile", .set_plugin_parameter = &set_plugin_string, .data = uuidfile, .addon = { .ui = FILENAME_MAX - 1 } } //
     };