* Patch from Sven-Ola Tuecke to convert more plugins to the new interface.
authorBernd Petrovitsch <bernd@firmix.at>
Sat, 25 Aug 2007 19:48:42 +0000 (19:48 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Sat, 25 Aug 2007 19:48:42 +0000 (19:48 +0000)
14 files changed:
lib/arprefresh/version-script.txt
lib/dyn_gw_plain/version-script.txt
lib/httpinfo/src/olsrd_httpinfo.h
lib/httpinfo/src/olsrd_plugin.c
lib/nameservice/src/nameservice.c
lib/nameservice/src/olsrd_plugin.c
lib/nameservice/version-script.txt
lib/quagga/src/quagga.c
lib/quagga/src/quagga.h
lib/secure/src/olsrd_plugin.c
src/olsrd_plugin.h
src/plugin_loader.c
src/plugin_util.c
src/plugin_util.h

index 3d09da3..a145659 100644 (file)
@@ -2,8 +2,8 @@ VERS_1.0
 {
   global:
     olsrd_plugin_interface_version;
-    olsrd_plugin_register_param;
     olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
 
   local:
     *;
index 3d09da3..a145659 100644 (file)
@@ -2,8 +2,8 @@ VERS_1.0
 {
   global:
     olsrd_plugin_interface_version;
-    olsrd_plugin_register_param;
     olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
 
   local:
     *;
index 50e2230..445e737 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_httpinfo.h,v 1.31 2007/08/19 23:00:22 bernd67 Exp $
+ * $Id: olsrd_httpinfo.h,v 1.32 2007/08/25 19:48:42 bernd67 Exp $
  */
 
 /*
@@ -81,7 +81,6 @@ extern struct olsrd_config *olsr_cfg;
 /* Destructor function */
 void olsr_plugin_exit(void);
 void olsr_plugin_exit(void);
-void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size);
 
 #if 0
 extern int netsprintf(char *str, const char* format, ...);
index c34f58b..cd2760f 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: olsrd_plugin.c,v 1.17 2007/07/15 19:29:38 bernd67 Exp $
+ * $Id: olsrd_plugin.c,v 1.18 2007/08/25 19:48:42 bernd67 Exp $
  */
 
 /*
@@ -64,8 +64,8 @@ struct allowed_net *allowed_nets = NULL;
 static void my_init(void) __attribute__ ((constructor));
 static void my_fini(void) __attribute__ ((destructor));
 
-static int add_plugin_ipnet(const char *value, void *data);
-static int add_plugin_ipaddr(const char *value, void *data);
+static int add_plugin_ipnet(const char *value, void *data, unsigned int);
+static int add_plugin_ipaddr(const char *value, void *data, unsigned int);
 
 static int insert_plugin_ipnet(const char *sz_net, const char *sz_mask, struct allowed_net **allowed_nets);
 
@@ -140,9 +140,10 @@ static int insert_plugin_ipnet(const char *sz_net, const char *sz_mask, struct a
     return 0;
 }
 
-static int add_plugin_ipnet(const char *value, void *data)
+static int add_plugin_ipnet(const char *value, void *data, unsigned int addon)
 {
     char sz_net[100], sz_mask[100]; /* IPv6 in the future */
+    if (addon) {}
 
     if(sscanf(value, "%99s %99s", sz_net, sz_mask) != 2) {
         olsr_printf(1, "(HTTPINFO) Error parsing net param \"%s\"!\n", value);
@@ -151,8 +152,9 @@ static int add_plugin_ipnet(const char *value, void *data)
     return insert_plugin_ipnet(sz_net, sz_mask, data);
 }
 
-static int add_plugin_ipaddr(const char *value, void *data)
+static int add_plugin_ipaddr(const char *value, void *data, unsigned int addon)
 {
+    if (addon) {}
     return insert_plugin_ipnet(value, "255.255.255.255", data);
 }
 
index 058e0cd..932f94e 100644 (file)
@@ -2,6 +2,7 @@
  * Copyright (c) 2006, Jens Nachtigall <nachtigall@web.de>
  * Copyright (c) 2005, Bruno Randolf <bruno.randolf@4g-systems.biz>
  * Copyright (c) 2004, Andreas T√łnnesen(andreto-at-olsr.org)
+ * Copyright (c) 2007, Sven-Ola <sven-ola@gmx.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
@@ -30,7 +31,7 @@
  *
  */
 
-/* $Id: nameservice.c,v 1.25 2007/08/23 21:01:56 bernd67 Exp $ */
+/* $Id: nameservice.c,v 1.26 2007/08/25 19:48:42 bernd67 Exp $ */
 
 /*
  * Dynamic linked library for UniK OLSRd
@@ -56,6 +57,7 @@
 #include "mid_set.h"
 #include "link_set.h"
 
+#include "plugin_util.h"
 #include "nameservice.h"
 #include "olsrd_copy.h"
 #include "compat.h"
@@ -166,95 +168,104 @@ name_constructor(void)
 }
 
 
-/**
- * called for all plugin parameters
- */
-int
-olsrd_plugin_register_param(char *key, char *value)
+static int set_nameservice_server(const char *value, void *data, unsigned int addon)
 {
-       if(!strcmp(key, "interval")) {
-               my_interval = atoi(value);
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter interval: %d\n", my_interval);
+       union olsr_ip_addr ip;
+       struct name_entry **v = data;
+       if (0 == strlen(value))
+       {
+               *v = add_name_to_list(*v, "", addon, NULL);
+                OLSR_PRINTF(1, "%s got %s (main address)\n", "Got", value);
+               return 0;
        }
-       else if(!strcmp(key, "timeout")) {
-               my_timeout = atof(value);
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter timeout: %f\n", my_timeout);
-       } 
-       else if(!strcmp(key, "hosts-file")) {
-               strncpy( my_hosts_file, value, MAX_FILE );
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter filename: %s\n", my_hosts_file);
-       }
-       else if(!strcmp(key, "resolv-file")) {
-               strncpy(my_resolv_file, value, MAX_FILE);
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter resolv file: %s\n", my_resolv_file);
-       }
-       else if(!strcmp(key, "suffix")) {
-               strncpy(my_suffix, value, MAX_SUFFIX);
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter suffix: %s\n", my_suffix);
-       }
-       else if(!strcmp(key, "add-hosts")) {
-               strncpy(my_add_hosts, value, MAX_FILE);
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter additional host: %s\n", my_add_hosts);
-       }
-       else if(!strcmp(key, "services-file")) {
-               strncpy(my_services_file, value, MAX_FILE);
-               OLSR_PRINTF(1,"\nNAME PLUGIN: parameter services-file: %s", my_services_file);
-       }
-       else if(!strcmp(key, "lat")) {
-               my_lat = atof(value);
-               OLSR_PRINTF(1,"\nNAME PLUGIN: parameter lat: %f\n", my_lat);
-       }
-       else if(!strcmp(key, "lon")) {
-               my_lon = atof(value);
-               OLSR_PRINTF(1,"\nNAME PLUGIN: parameter lon: %f\n", my_lon);
-       }
-       else if(!strcmp(key, "latlon-file")) {
-               strncpy( my_latlon_file, value, MAX_FILE );
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter latlon-file: %s\n", my_latlon_file);
-       }
-       else if(!strcmp(key, "latlon-infile")) {
-               strncpy( latlon_in_file, value, MAX_FILE );
-               OLSR_PRINTF(1, "\nNAME PLUGIN: parameter latlon-infile: %s\n", latlon_in_file);
-       }
-       else if(!strcmp(key, "dns-server")) {
-               union olsr_ip_addr ip;
-               if (strlen(value) == 0) {
-                       my_forwarders = add_name_to_list(my_forwarders, "", NAME_FORWARDER, NULL);
-                       OLSR_PRINTF(1,"\nNAME PLUGIN: parameter dns-server: (main address)");
-               } else if (inet_pton(olsr_cnf->ip_version, value, &ip) > 0) {
-                       my_forwarders = add_name_to_list(my_forwarders, "", NAME_FORWARDER, &ip);
-                       OLSR_PRINTF(1,"\nNAME PLUGIN: parameter dns-server: (%s)", value);
-               } else {
-                       OLSR_PRINTF(1,"\nNAME PLUGIN: invalid parameter dns-server: %s ", value);
-               }
+       else if (0 < inet_pton(olsr_cnf->ip_version, value, &ip))
+       {
+               *v = add_name_to_list(*v, "", addon, &ip);
+                OLSR_PRINTF(1, "%s got %s\n", "Got", value);
+               return 0;
        }
-       else if(!strcmp(key, "name")) {
-               // name for main address
-               my_names = add_name_to_list(my_names, value, NAME_HOST, NULL);
-               OLSR_PRINTF(1,"\nNAME PLUGIN: parameter name: %s (main address)", value);
+       else
+       {
+                OLSR_PRINTF(0, "Illegal IP address \"%s\"", value);
        }
-       else if(!strcmp(key, "service")) {
-               // name for main address
-               my_services = add_name_to_list(my_services, value, NAME_SERVICE, NULL);
-               OLSR_PRINTF(1,"\nNAME PLUGIN: parameter service: %s (main address)", value);
+       return 1;
+}
+
+static int set_nameservice_name(const char *value, void *data, unsigned int addon)
+{
+       struct name_entry **v = data;
+       if (0 < strlen(value))
+       {
+               *v = add_name_to_list(*v, (char*)value, addon, NULL);
+                OLSR_PRINTF(1, "%s got %s (main address)\n", "Got", value);
+               return 0;
        }
-       else {
-               // assume this is an IP address and hostname
-               union olsr_ip_addr ip;
-               
-               if (inet_pton(olsr_cnf->ip_version, key, &ip) > 0) {
-                       // the IP is validated later
-                       my_names = add_name_to_list(my_names, value, NAME_HOST, &ip);
-                       OLSR_PRINTF(1,"\nNAME PLUGIN: parameter name %s (%s)", value, key);
-               } 
-               else {
-                       OLSR_PRINTF(1, "\nNAME PLUGIN: invalid IP %s for name %s!\n", key, value);
-               }
+       else
+       {
+                OLSR_PRINTF(0, "Illegal name \"%s\"", value);
        }
+       return 1;
+}
 
+static int set_nameservice_host(const char *value, void *data, unsigned int addon)
+{
+       union olsr_ip_addr ip;
+       struct name_entry **v = data;
+       if (0 < inet_pton(olsr_cnf->ip_version, (char*)addon, &ip))
+       {
+               // the IP is validated later
+               *v = add_name_to_list(*v, (char*)value, addon, &ip);
+                OLSR_PRINTF(1, "%s: %s got %s\n", "Got", (char*) addon, value);
+               return 0;
+       }
+       else
+       {
+                OLSR_PRINTF(0, "%s: Illegal IP address \"%s\"", (char*) addon, value);
+       }
        return 1;
 }
 
+static int set_nameservice_float(const char *value, void *data, unsigned int addon)
+{
+    const float thefloat = atof(value);
+    if (addon) {}
+    if (data != NULL)
+    {
+        float *v = data;
+        *v = thefloat;
+        OLSR_PRINTF(1, "%s float %f\n", "Got", thefloat);
+    }
+    else
+    {
+        OLSR_PRINTF(0, "%s float %f\n", "Ignored", thefloat);
+    }
+    return 0;
+}
+
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+    { .name = "interval",      .set_plugin_parameter = &set_plugin_int,         .data = &my_interval },
+    { .name = "timeout",       .set_plugin_parameter = &set_nameservice_float,  .data = &my_timeout },
+    { .name = "hosts-file",    .set_plugin_parameter = &set_plugin_string,      .data = &my_hosts_file,    .addon = sizeof(my_hosts_file) },
+    { .name = "resolv-file",   .set_plugin_parameter = &set_plugin_string,      .data = &my_resolv_file,   .addon = sizeof(my_resolv_file) },
+    { .name = "suffix",        .set_plugin_parameter = &set_plugin_string,      .data = &my_suffix,        .addon = sizeof(my_suffix) },
+    { .name = "add-hosts",     .set_plugin_parameter = &set_plugin_string,      .data = &my_add_hosts,     .addon = sizeof(my_add_hosts) },
+    { .name = "services-file", .set_plugin_parameter = &set_plugin_string,      .data = &my_services_file, .addon = sizeof(my_services_file) },
+    { .name = "lat",           .set_plugin_parameter = &set_nameservice_float,  .data = &my_lat },
+    { .name = "lon",           .set_plugin_parameter = &set_nameservice_float,  .data = &my_lon },
+    { .name = "latlon-file",   .set_plugin_parameter = &set_plugin_string,      .data = &my_latlon_file,   .addon = sizeof(my_latlon_file) },
+    { .name = "latlon-infile", .set_plugin_parameter = &set_plugin_string,      .data = &latlon_in_file,   .addon = sizeof(latlon_in_file) },
+    { .name = "dns-server",    .set_plugin_parameter = &set_nameservice_server, .data = &my_forwarders,    .addon = NAME_FORWARDER },
+    { .name = "name",          .set_plugin_parameter = &set_nameservice_name,   .data = &my_names,         .addon = NAME_HOST },
+    { .name = "service",       .set_plugin_parameter = &set_nameservice_name,   .data = &my_services,      .addon = NAME_SERVICE },
+    { .name = "",              .set_plugin_parameter = &set_nameservice_host,   .data = &my_names,         .addon = NAME_HOST },
+};
+
+void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
+{
+    *params = plugin_parameters;
+    *size = sizeof(plugin_parameters)/sizeof(*plugin_parameters);
+}
+
 
 /**
  * queue the name/forwarder/service given in value
index ea7506d..4986d43 100644 (file)
@@ -29,7 +29,7 @@
  *
  */
 
-/* $Id: olsrd_plugin.c,v 1.14 2007/07/15 17:41:33 bernd67 Exp $ */
+/* $Id: olsrd_plugin.c,v 1.15 2007/08/25 19:48:42 bernd67 Exp $ */
 
 /*
  * Dynamic linked library for olsr.org olsrd
@@ -45,7 +45,7 @@
 #define PLUGIN_VERSION "0.3"
 #define PLUGIN_AUTHOR   "Bruno Randolf, Jens Nachtigall, Sven-Ola"
 #define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION
-#define PLUGIN_INTERFACE_VERSION 4
+#define PLUGIN_INTERFACE_VERSION 5
 
 
 static void __attribute__ ((constructor)) 
index 3d09da3..a145659 100644 (file)
@@ -2,8 +2,8 @@ VERS_1.0
 {
   global:
     olsrd_plugin_interface_version;
-    olsrd_plugin_register_param;
     olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
 
   local:
     *;
index fac7061..e6a10f9 100644 (file)
@@ -60,8 +60,8 @@ static struct {
 
 
 /* prototypes intern */
-static char *try_read (ssize_t *);
-static char* zebra_route_packet (struct ipv4_route r, ssize_t *);
+static unsigned char *try_read (ssize_t *);
+static unsigned char* zebra_route_packet (struct ipv4_route r, ssize_t *);
 static int parse_interface_add (unsigned char *, size_t);
 static int parse_interface_delete (unsigned char *, size_t);
 static int parse_interface_up (unsigned char *, size_t);
@@ -241,7 +241,7 @@ static void zebra_connect (void) {
 /* Sends a command to zebra, command is 
    the command defined in zebra.h, options is the packet-payload, 
    optlen the length, of the payload */
-char zebra_send_command (unsigned char command, char * options, int optlen) {
+unsigned char zebra_send_command (unsigned char command, unsigned char * options, int optlen) {
 
 #ifdef ZEBRA_HEADER_MARKER
   char *p = olsr_malloc (optlen + 6, "zebra_send_command");
@@ -295,11 +295,11 @@ char zebra_send_command (unsigned char command, char * options, int optlen) {
 
 /* Creates a Route-Packet-Payload, needs address, netmask, nexthop, 
    distance, and a pointer of an size_t */
-static char* zebra_route_packet (struct ipv4_route r, ssize_t *optlen) {
+static unsigned char* zebra_route_packet (struct ipv4_route r, ssize_t *optlen) {
 
   int count;
 
-  char *cmdopt, *t;
+  unsigned char *cmdopt, *t;
   *optlen = 4; // first: type, flags, message, prefixlen
   *optlen += r.prefixlen / 8 + (r.prefixlen % 8 ? 1 : 0); // + prefix
   if (r.message & ZAPI_MESSAGE_NEXTHOP)
@@ -363,7 +363,7 @@ static char* zebra_route_packet (struct ipv4_route r, ssize_t *optlen) {
 /* adds a route to zebra-daemon */
 int zebra_add_v4_route (struct ipv4_route r) {
   
-  char *cmdopt;
+  unsigned char *cmdopt;
   ssize_t optlen;
   int retval;
 
@@ -378,7 +378,7 @@ int zebra_add_v4_route (struct ipv4_route r) {
 /* deletes a route from the zebra-daemon */
 int zebra_delete_v4_route (struct ipv4_route r) {
   
-  char *cmdopt;
+  unsigned char *cmdopt;
   ssize_t optlen;
   int retval;
 
@@ -394,7 +394,7 @@ int zebra_delete_v4_route (struct ipv4_route r) {
 
 /* Check wether there is data from zebra aviable */
 void zebra_check (void* foo) {
-  char *data, *f;
+  unsigned char *data, *f;
   ssize_t len, ret;
 
   if (!(zebra.status & STATUS_CONNECTED)) {
@@ -418,7 +418,7 @@ void zebra_check (void* foo) {
 
 // tries to read a packet from zebra_socket
 // if there is something to read - make sure to read whole packages
-static char *try_read (ssize_t *len) {
+static unsigned char *try_read (ssize_t *len) {
   unsigned char *buf = NULL;
   ssize_t ret = 0, bsize = 0;
   uint16_t length = 0, l = 0;
index 4bbe383..238e46d 100644 (file)
@@ -53,7 +53,7 @@ struct ipv4_route {
 
 void init_zebra (void);
 void zebra_cleanup (void);
-char zebra_send_command (unsigned char, char *, int );
+unsigned char zebra_send_command (unsigned char, unsigned char *, int );
 int zebra_add_v4_route (struct ipv4_route r);
 int zebra_delete_v4_route (struct ipv4_route r);
 void zebra_check (void*);
index ef846eb..4b6eba1 100644 (file)
@@ -33,7 +33,7 @@
  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  * POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: olsrd_plugin.c,v 1.13 2007/07/15 21:47:17 bernd67 Exp $
+ * $Id: olsrd_plugin.c,v 1.14 2007/08/25 19:48:42 bernd67 Exp $
  */
 
 
@@ -90,9 +90,10 @@ static void my_fini(void)
   secure_plugin_exit();
 }
 
-static int store_string(const char *value, void *data)
+static int store_string(const char *value, void *data, unsigned int addon)
 {
   char *str = data;
+  if (addon) {}
   snprintf(str, FILENAME_MAX+1, "%s", value);
   return 0;
 }
index 31066cc..fdd0be9 100644 (file)
@@ -29,7 +29,7 @@
  *
  */
 
-/* $Id: olsrd_plugin.h,v 1.3 2007/07/15 19:29:37 bernd67 Exp $ */
+/* $Id: olsrd_plugin.h,v 1.4 2007/08/25 19:48:42 bernd67 Exp $ */
 
 /*
  * Example plugin for olsrd.org OLSR daemon
@@ -78,12 +78,13 @@ int olsrd_plugin_register_param(char *key, char *value);
 
 /* Interface version 5 */
 
-typedef int (*set_plugin_parameter)(const char *value, void *data);
+typedef int (*set_plugin_parameter)(const char *value, void *data, unsigned int addon);
 
 struct olsrd_plugin_parameters {
     const char *name;
     set_plugin_parameter set_plugin_parameter;
     void *data;
+    unsigned int addon;
 };
 
 /**
index 383c372..702d508 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin_loader.c,v 1.29 2007/08/01 16:16:05 bernd67 Exp $
+ * $Id: plugin_loader.c,v 1.30 2007/08/25 19:48:42 bernd67 Exp $
  */
 
 #include "plugin_loader.h"
@@ -212,6 +212,7 @@ static int olsr_add_dl(struct olsr_plugin *plugin)
         plugin->register_param = dlsym(plugin->dlhandle, "olsrd_plugin_register_param");
         if(plugin->register_param == NULL) {
             OLSR_PRINTF(1, "FAILED: \"%s\"\n", dlerror());
+            return -1;
         } else {
             OLSR_PRINTF(1, "OK\n");
         }
@@ -248,9 +249,12 @@ static int init_olsr_plugin(struct olsr_plugin *entry)
             unsigned int i;
             int rc = 0;
             for (i = 0; i < entry->plugin_parameters_size; i++) {
-                if (strcasecmp(entry->plugin_parameters[i].name, params->key) == 0) {
+                if (0 == entry->plugin_parameters[i].name[0] ||
+                    0 == strcasecmp(entry->plugin_parameters[i].name, params->key))
+                {
                     /* we have found it! */
-                    rc = entry->plugin_parameters[i].set_plugin_parameter(params->value, entry->plugin_parameters[i].data);
+                    rc = entry->plugin_parameters[i].set_plugin_parameter(params->value, entry->plugin_parameters[i].data,
+                        0 == entry->plugin_parameters[i].name[0] ? (unsigned int)params->key : entry->plugin_parameters[i].addon);
                     if (rc != 0) {
                         fprintf(stderr, "\nFatal error in plugin parameter \"%s\"/\"%s\"\n", params->key, params->value);
                         rv = -1;
index 5d97215..d1362ed 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
  * Copyright (c) 2007, Bernd Petrovitsch <bernd@firmix.at>
+ * Copyright (c) 2007, Sven-Ola <sven-ola@gmx.de>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin_util.c,v 1.2 2007/07/20 12:25:56 bernd67 Exp $
+ * $Id: plugin_util.c,v 1.3 2007/08/25 19:48:42 bernd67 Exp $
  */
 
 #include "plugin_util.h"
 #include "olsr.h"
 #include "defs.h"
 
-int set_plugin_port(const char *value, void *data)
+int set_plugin_port(const char *value, void *data, unsigned int addon)
 {
     char *endptr;
     const unsigned int port = strtoul(value, &endptr, 0);
+    if (addon) {}
     if (*endptr != '\0' || endptr == value) {
         OLSR_PRINTF(0, "Illegal port number \"%s\"", value);
         return 1;
@@ -65,10 +67,11 @@ int set_plugin_port(const char *value, void *data)
     return 0;
 }
 
-int set_plugin_ipaddress(const char *value, void *data)
+int set_plugin_ipaddress(const char *value, void *data, unsigned int addon)
 {
     char buf[INET6_ADDRSTRLEN];
     union olsr_ip_addr ip_addr;
+    if (addon) {}
     if (inet_pton(olsr_cnf->ip_version, value, &ip_addr) <= 0) {
         OLSR_PRINTF(0, "Illegal IP address \"%s\"", value);
         return 1;
@@ -85,9 +88,10 @@ int set_plugin_ipaddress(const char *value, void *data)
 }
 
 
-int set_boolean(const char *value, void *data)
+int set_boolean(const char *value, void *data, unsigned int addon)
 {
     int *v = data;
+    if (addon) {}
     if (strcasecmp (value, "yes") == 0) {
         *v = 1;
     } else if (strcasecmp (value, "no") == 0) {
@@ -98,6 +102,41 @@ int set_boolean(const char *value, void *data)
     return 0;
 }
 
+int set_plugin_int(const char *value, void *data, unsigned int addon)
+{
+    char *endptr;
+    const int theint = strtol(value, &endptr, 0);
+    if (addon) {}
+    if (*endptr != '\0' || endptr == value) {
+        OLSR_PRINTF(0, "Illegal int \"%s\"", value);
+        return 1;
+    }
+    if (data != NULL) {
+        int *v = data;
+        *v = theint;
+        OLSR_PRINTF(1, "%s int %d\n", "Got", theint);
+    } else {
+        OLSR_PRINTF(0, "%s int %d\n", "Ignored", theint);
+    }
+    return 0;
+}
+
+int set_plugin_string(const char *value, void *data, unsigned int addon)
+{
+    if (data != NULL) {
+        char *v = data;
+        if (strlen(value) >= addon) {
+            OLSR_PRINTF(0, "String too long \"%s\"", value);
+            return 1;
+        }
+        strcpy(v, value);
+        OLSR_PRINTF(1, "%s string %s\n", "Got", value);
+    } else {
+        OLSR_PRINTF(0, "%s string %s\n", "Ignored", value);
+    }
+    return 0;
+}
+
 /*
  * Local Variables:
  * mode: c
index c7d1db4..383cd22 100644 (file)
@@ -28,7 +28,7 @@
  *
  */
 
-/* $Id: plugin_util.h,v 1.1 2007/07/15 17:46:46 bernd67 Exp $ */
+/* $Id: plugin_util.h,v 1.2 2007/08/25 19:48:42 bernd67 Exp $ */
 
 /*
  * Example plugin for olsrd.org OLSR daemon
 #define _OLSRD_PLUGIN_UTIL
 
 /* Common/utility functions for plugins */
-int set_plugin_port(const char *value, void *data);
-int set_plugin_ipaddress(const char *value, void *data);
-int set_boolean(const char *value, void *data);
+int set_plugin_port(const char *value, void *data, unsigned int);
+int set_plugin_ipaddress(const char *value, void *data, unsigned int);
+int set_boolean(const char *value, void *data, unsigned int);
+int set_plugin_int(const char *value, void *data, unsigned int);
+int set_plugin_string(const char *value, void *data, unsigned int);
 
 
 #endif