solaris-fixes branch: Applied the swap-patch by Christophe Kalt.
[collectd.git] / src / plugin.c
index ce4c943..2f52157 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * collectd - src/plugin.c
- * Copyright (C) 2005  Florian octo Forster
+ * Copyright (C) 2005,2006  Florian octo Forster
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -25,7 +25,8 @@
 #include <ltdl.h>
 
 #include "plugin.h"
-#include "multicast.h"
+#include "network.h"
+#include "utils_debug.h"
 
 typedef struct plugin
 {
@@ -38,9 +39,7 @@ typedef struct plugin
 
 static plugin_t *first_plugin = NULL;
 
-#ifdef HAVE_LIBRRD
 extern int operating_mode;
-#endif
 
 static char *plugindir = NULL;
 
@@ -52,7 +51,7 @@ char *plugin_get_dir (void)
                return (plugindir);
 }
 
-void plugin_set_dir (char *dir)
+void plugin_set_dir (const char *dir)
 {
        if (plugindir != NULL)
                free (plugindir);
@@ -116,13 +115,21 @@ int plugin_load_file (char *file)
        lt_dlhandle dlh;
        void (*reg_handle) (void);
 
+       DBG ("file = %s", file);
+
        lt_dlinit ();
        lt_dlerror (); /* clear errors */
 
        if ((dlh = lt_dlopen (file)) == NULL)
+       {
+               const char *error = lt_dlerror ();
+
+               syslog (LOG_ERR, "lt_dlopen failed: %s", error);
+               DBG ("lt_dlopen failed: %s", error);
                return (1);
+       }
 
-       if ((reg_handle = lt_dlsym (dlh, "module_register")) == NULL)
+       if ((reg_handle = (void (*) (void)) lt_dlsym (dlh, "module_register")) == NULL)
        {
                syslog (LOG_WARNING, "Couldn't find symbol ``module_register'' in ``%s'': %s\n",
                                file, lt_dlerror ());
@@ -147,6 +154,8 @@ int plugin_load (const char *type)
        struct stat    statbuf;
        struct dirent *de;
 
+       DBG ("type = %s", type);
+
        dir = plugin_get_dir ();
        ret = 1;
 
@@ -290,9 +299,9 @@ void plugin_register (char *type,
                return;
 
 #ifdef HAVE_LIBRRD
-       if ((operating_mode == MODE_LOCAL) || (operating_mode == MODE_CLIENT))
+       if (operating_mode != MODE_SERVER)
 #endif
-               if (read == NULL)
+               if ((init != NULL) && (read == NULL))
                        syslog (LOG_NOTICE, "Plugin `%s' doesn't provide a read function.", type);
 
        if ((p = (plugin_t *) malloc (sizeof (plugin_t))) == NULL)
@@ -316,7 +325,6 @@ void plugin_register (char *type,
  * Send received data back to the plugin/module which will append DS
  * definitions and pass it on to ``rrd_update_file''.
  */
-#ifdef HAVE_LIBRRD
 void plugin_write (char *host, char *type, char *inst, char *val)
 {
        plugin_t *p;
@@ -329,23 +337,16 @@ void plugin_write (char *host, char *type, char *inst, char *val)
 
        (*p->write) (host, inst, val);
 }
-#endif /* HAVE_LIBRRD */
 
 /*
  * Receive data from the plugin/module and get it somehow to ``plugin_write'':
- * Either using ``multicast_send'' (when in network/client mode) or call it
+ * Either using ``network_send'' (when in network/client mode) or call it
  * directly (in local mode).
  */
 void plugin_submit (char *type, char *inst, char *val)
 {
-#ifdef HAVE_LIBRRD
-       if (operating_mode == MODE_LOCAL)
+        if (operating_mode == MODE_CLIENT)
+               network_send (type, inst, val);
+       else
                plugin_write (NULL, type, inst, val);
-       else if (operating_mode == MODE_CLIENT)
-               multicast_send (type, inst, val);
-       else /* operating_mode == MODE_SERVER */
-               syslog (LOG_ERR, "WTF is the server doing in ``plugin_submit''?!?\n");
-#else
-       multicast_send (type, inst, val);
-#endif
 }