Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

pluginhandling.cpp File Reference

#include <stdio.h>
#include <dlfcn.h>
#include <string>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include "plugin.h"
#include "pluginhandling.h"
#include "../common/config.h"
#include "../common/options.h"

Go to the source code of this file.

Functions

bool add_plugin (char* filename)
void get_plugins ( char *dirname )
void LoadAllPlugins ( void )
 Loads all available plugins. More...


Variables

FEPListFEPhead
APListAPhead


Function Documentation

void LoadAllPlugins ( void)

Loads all available plugins.

Definition at line 156 of file pluginhandling.cpp.

00157 {
00158     get_plugins (SERVER_PLUGIN_DIR);
00159     }

bool add_plugin ( char * filename)

Definition at line 39 of file pluginhandling.cpp.

00040 {
00041     typedef void *(*pfnPlugIn)(void);
00042     pfnPlugIn  getPlugIn;
00043     void      *handler;
00044 
00045 
00046 #ifdef DEBUG
00047     fprintf ( stderr, "\nloading shared library" );
00048 #endif
00049     if ( ( handler = dlopen (filename, RTLD_NOW ) ) != NULL ) // dynamic loading of the plugin
00050         {
00051         if ( ( getPlugIn = (pfnPlugIn)dlsym ( handler, "GetFrontEndPlugin" ) ) != NULL ) // search for the function
00052             {
00053             FEPList* tmp;
00054 
00055             if (FEPhead == NULL)
00056                 {
00057                 FEPhead     = new FEPList;
00058                 tmp         = FEPhead;
00059                 }
00060             else
00061                 {
00062                 tmp = FEPhead;
00063 
00064                 while (tmp->next != NULL) tmp = tmp->next;
00065 
00066                 tmp->next       = new FEPList;
00067                 tmp             = tmp->next;
00068                 }
00069 
00070             tmp->plug   = (FrontEndPlugin *) getPlugIn ();
00071             tmp->id     = tmp->plug->id;
00072             tmp->active = true; //this _has_ to be false in near future, when the plugins can be
00073                                 //selected using a frontend. Then the default _has_ to be false, and
00074                                 //LoadAllPlugins() looks into the config file to decide which plugins
00075                                 //will be turned on., xandi
00076             tmp->next   = NULL;
00077             }
00078 
00079         else if ( ( getPlugIn = (pfnPlugIn)dlsym ( handler, "GetAuthenticationPlugin" ) ) != NULL )
00080             {
00081 
00082 
00083             }
00084         else
00085             {
00086             dlclose ( handler );
00087             return false;
00088             }
00089 
00090         return true;
00091         }
00092     else
00093         {
00094 #ifdef DEBUG
00095         fprintf ( stderr, "- failed!\n");
00096         fprintf ( stderr, "Error: %s\n", dlerror() );
00097 #endif
00098         return false;
00099         }
00100     }

void get_plugins ( char * dirname)

Definition at line 112 of file pluginhandling.cpp.

00113 {
00114     string filename;
00115 
00116     DIR *dir;
00117 
00118     struct dirent *dent;
00119     struct stat statbuf;
00120 
00121     dir = opendir(dirname);
00122 
00123     if (dir)
00124         {
00125         while ( ( dent = readdir ( dir ) ) != NULL )
00126             {
00127             filename = dirname;
00128             filename += "/";
00129             filename += dent->d_name;
00130 
00131             if ( !stat ( filename.c_str (), &statbuf ) )
00132                 {
00133                 if ( S_ISREG ( statbuf.st_mode ) ) {
00134                     if (filename.rfind (".so") != string::npos )
00135                         add_plugin (const_cast<char*>(filename.c_str()));
00136                     }
00137                 }
00138             }
00139         }
00140     }

Variable Documentation

APList * APhead

Definition at line 26 of file pluginhandling.cpp.

FEPList * FEPhead

Definition at line 25 of file pluginhandling.cpp.


Generated at Sat May 13 13:50:22 2000 for 3Dsia by doxygen 1.1.2 written by Dimitri van Heesch, © 1997-2000