* ISO8859-* -> UTF_8
[olsrd.git] / lib / nameservice / src / olsrd_plugin.c
index 6d00159..f4cc7c2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2005, Bruno Randolf <bruno.randolf@4g-systems.biz>
- * Copyright (c) 2004, Andreas Tønnesen(andreto-at-olsr.org)
+ * Copyright (c) 2004, Andreas Tønnesen(andreto-at-olsr.org)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without 
  *
  */
 
-/* $Id: olsrd_plugin.c,v 1.5 2005/02/25 22:43:21 kattemat Exp $ */
-
+/* $Id: olsrd_plugin.c,v 1.16 2007/11/29 18:09:10 bernd67 Exp $ */
 
 /*
- * Dynamic linked library example for UniK OLSRd
+ * Dynamic linked library for olsr.org olsrd
  */
 
 #include <stdio.h>
 
 #include "olsrd_plugin.h"
 #include "nameservice.h"
-#include "plugin_loader.h"
-
-int
-register_olsr_param(char *, char *);
-
-#ifdef WIN32
-
-static char *inet_ntop4(const unsigned char *src, char *dst, int size)
-{
-  static const char fmt[] = "%u.%u.%u.%u";
-  char tmp[sizeof "255.255.255.255"];
-
-  if (sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) > size)
-    return (NULL);
-
-  return strcpy(dst, tmp);
-}
-
-char *inet_ntop(int af, void *src, char *dst, int size)
-{
-  switch (af)
-  {
-  case AF_INET:
-    return (inet_ntop4(src, dst, size));
 
-  default:
-    return (NULL);
-  }
-}
-
-#endif
-
-#ifndef linux
-
-#include <stdlib.h>
-
-/* strndup() is a GNU extention */
-char *
-strndup(const char *ptr, size_t size)
-{
-  int len = strlen(ptr);
-  char *ret = NULL;
-
-  if(!len)
-    return NULL;
-
-  if(len > size)
-    len = size;
-
-  ret = malloc(len + 1);
-  
-  if(!ret)
-    return NULL;
+#define PLUGIN_NAME    "OLSRD nameservice plugin"
+#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 5
 
-  strncpy(ret, ptr, len);
-  ret[len] = '\0';
 
-  return ret;
-}
-
-#endif
-
-void __attribute__ ((constructor)) 
+static void __attribute__ ((constructor)) 
 my_init(void);
 
-void __attribute__ ((destructor)) 
+static void __attribute__ ((destructor)) 
 my_fini(void);
 
-int
-register_olsr_data(struct olsr_plugin_data *);
-
-int
-fetch_olsrd_data(void);
-
-/*
- * Returns the version of the plugin interface that is used
- * THIS IS NOT THE VERSION OF YOUR PLUGIN!
- */
 int 
-get_plugin_interface_version()
-{
-  return PLUGIN_INTERFACE_VERSION;
-}
-
-/**
- *Constructor
- */
-void
-my_init()
-{
-  /* Print plugin info to stdout */
-  printf("%s\n", MOD_DESC);
-
-  ifs = NULL;
-
-  return;
-}
-
-/**
- *Destructor
- */
-void
-my_fini()
-{
-
-  /* Calls the destruction function
-   * olsr_plugin_exit()
-   * This function should be present in your
-   * sourcefile and all data destruction
-   * should happen there - NOT HERE!
-   */
-  olsr_plugin_exit();
-
-  return;
-}
-
-/* Mulitpurpose funtion */
-int
-plugin_io(int cmd, void *data, size_t size)
+olsrd_plugin_interface_version(void)
 {
-
-  switch(cmd)
-    {
-    default:
-      return 0;
-    }
-  
-  return 1;
+       return PLUGIN_INTERFACE_VERSION;
 }
 
 int
-register_olsr_param(char *key, char *value)
+olsrd_plugin_init(void)
 {
-       if(!strcmp(key, "name")) {
-               my_name = strndup( value, MAX_NAME );
-               my_name_len = strlen( my_name );
-               printf("(NAME) name: %s\n", my_name);
-       }       
-       
-       if(!strcmp(key, "filename")) {
-               my_filename = strndup( value, MAX_FILE );
-               printf("(NAME) filename: %s\n", my_filename);
-       }
-       
-       return 1;
+       return name_init();
 }
 
 
-/**
- *Register needed functions and pointers
- *
- *This function should not be changed!
- *
- */
-int
-register_olsr_data(struct olsr_plugin_data *data)
+static void
+my_init(void)
 {
-  /* IPversion */
-  ipversion = data->ipversion;
-  /* Main address */
-  main_addr = data->main_addr;
+       /* Print plugin info to stdout */
+       printf("%s\n", MOD_DESC);
 
-  /* Multi-purpose function */
-  olsr_plugin_io = data->olsr_plugin_io;
-
-  /* Set size of IP address */
-  if(ipversion == AF_INET)
-    {
-      ipsize = sizeof(olsr_u32_t);
-    }
-  else
-    {
-      ipsize = sizeof(struct in6_addr);
-    }
-
-  if(!fetch_olsrd_data())
-    {
-      fprintf(stderr, "Could not fetch the neccessary functions from olsrd!\n");
-      return 0;
-    }
-
-  /* Calls the initialization function
-   * olsr_plugin_init()
-   * This function should be present in your
-   * sourcefile and all data initialization
-   * should happen there - NOT HERE!
-   */
-  if(!olsr_plugin_init())
-    {
-      fprintf(stderr, "Could not initialize plugin!\n");
-      return 0;
-    }
-
-  return 1;
+       name_constructor();
+  
+       return;
 }
 
 
-
-int
-fetch_olsrd_data()
+static void
+my_fini(void)
 {
-  int retval = 1;
-
-
-  /* Packet buffer */
-  if(!olsr_plugin_io(GETF__NET_OUTBUFFER_PUSH, &net_outbuffer_push, sizeof(net_outbuffer_push)))
-  {
-    net_outbuffer_push = NULL;
-    retval = 0;
-  }
-
-  /* Olsr debug output function */
-  if(!olsr_plugin_io(GETF__OLSR_PRINTF, 
-                    &olsr_printf, 
-                    sizeof(olsr_printf)))
-  {
-    olsr_printf = NULL;
-    retval = 0;
-  }
-
-
-  /* Olsr malloc wrapper */
-  if(!olsr_plugin_io(GETF__OLSR_MALLOC, 
-                    &olsr_malloc, 
-                    sizeof(olsr_malloc)))
-  {
-    olsr_malloc = NULL;
-    retval = 0;
-  }
-
-  /* Parser registration */
-  if(!olsr_plugin_io(GETF__OLSR_PARSER_ADD_FUNCTION, 
-                    &olsr_parser_add_function, 
-                    sizeof(olsr_parser_add_function)))
-  {
-    olsr_parser_add_function = NULL;
-    retval = 0;
-  }
-
-  /* Scheduler timeout registration */
-  if(!olsr_plugin_io(GETF__OLSR_REGISTER_TIMEOUT_FUNCTION, 
-                    &olsr_register_timeout_function, 
-                    sizeof(olsr_register_timeout_function)))
-  {
-    olsr_register_timeout_function = NULL;
-    retval = 0;
-  }
-
-  /* Scheduler event registration */
-  if(!olsr_plugin_io(GETF__OLSR_REGISTER_SCHEDULER_EVENT, 
-                    &olsr_register_scheduler_event, 
-                    sizeof(olsr_register_scheduler_event)))
-  {
-    olsr_register_scheduler_event = NULL;
-    retval = 0;
-  }
-
-  /* Double to mantissa/exponent */
-  if(!olsr_plugin_io(GETF__DOUBLE_TO_ME, 
-                    &double_to_me, 
-                    sizeof(double_to_me)))
-  {
-    double_to_me = NULL;
-    retval = 0;
-  }
-
-
-
-  /* Mantissa/exponent to double conversion */
-  if(!olsr_plugin_io(GETF__ME_TO_DOUBLE, 
-                    &me_to_double, 
-                    sizeof(me_to_double)))
-  {
-    me_to_double = NULL;
-    retval = 0;
-  }
-
-
-  /* Interface list */
-  if(!olsr_plugin_io(GETD__IFNET, &ifs, sizeof(ifs)))
-  {
-    ifs = NULL;
-    retval = 0;
-  }
-
-  /* Messageseqno fetch function */
-  if(!olsr_plugin_io(GETF__GET_MSG_SEQNO, &get_msg_seqno, sizeof(get_msg_seqno)))
-  {
-    get_msg_seqno = NULL;
-    retval = 0;
-  }
-
-  /* Scheduler maintained timestamp */
-  if(!olsr_plugin_io(GETD__NOW, &now, sizeof(now)))
-  {
-    now = NULL;
-    retval = 0;
-  }
-
-  /* Output function */
-  if(!olsr_plugin_io(GETF__NET_OUTPUT, &net_output, sizeof(net_output)))
-  {
-    net_output = NULL;
-    retval = 0;
-  }
-
-  /* Duplicate check (for processing) */
-  if(!olsr_plugin_io(GETF__OLSR_CHECK_DUP_TABLE_PROC, &check_dup_proc, sizeof(check_dup_proc)))
-  {
-    check_dup_proc = NULL;
-    retval = 0;
-  }
-
-  /* Default forward function */
-  if(!olsr_plugin_io(GETF__OLSR_FORWARD_MESSAGE, &default_fwd, sizeof(default_fwd)))
-  {
-    default_fwd = NULL;
-    retval = 0;
-  }
-
-
-  /* Add socket to OLSR select function */
-  if(!olsr_plugin_io(GETF__ADD_OLSR_SOCKET, &add_olsr_socket, sizeof(add_olsr_socket)))
-  {
-    add_olsr_socket = NULL;
-    retval = 0;
-  }
-
-  /* Neighbor link status lookup */
-  if(!olsr_plugin_io(GETF__CHECK_NEIGHBOR_LINK, &check_neighbor_link, sizeof(check_neighbor_link)))
-  {
-    check_neighbor_link = NULL;
-    retval = 0;
-  }
-
-  return retval;
+       name_destructor();
 }