start plugin infrastructure

This commit is contained in:
Ron Pedde 2006-04-19 08:32:18 +00:00
parent b60b439102
commit fd0d5cbbd9
7 changed files with 58 additions and 4 deletions

View File

@ -49,7 +49,7 @@ mtd_update_SOURCES = mtd-update.c conf.c conf.h ll.c ll.h \
db-sql.c db-sql.h db-generic.c db-generic.h smart-parser.c \
smart-parser.h err.c err.h os-unix.c os.h xml-rpc.c xml-rpc.h \
restart.c restart.h uici.c uici.h ssc.c ssc.h \
webserver.c webserver.h compat.c compat.h \
webserver.c webserver.h compat.c compat.h plugin.c plugin.h \
$(PRENDSRC) $(ORENDSRC) $(HRENDSRC) \
$(SQLITEDB) $(SQLITE3DB)
@ -64,7 +64,7 @@ mt_daapd_SOURCES = main.c daapd.h rend.h uici.c uici.h webserver.c \
scan-xml.c scan-wma.c scan-aac.c scan-aac.h scan-wav.c scan-url.c \
smart-parser.c smart-parser.h xml-rpc.c xml-rpc.h \
os.h ll.c ll.h conf.c conf.h compat.c compat.h \
os-unix.h os-unix.c os.h \
os-unix.h os-unix.c os.h plugin.c plugin.h \
$(PRENDSRC) $(ORENDSRC) $(HRENDSRC) $(OGGVORBISSRC) $(FLACSRC) \
$(MUSEPACKSRC) $(SQLITEDB) $(SQLITE3DB) $(SQLDB) $(GDBM)

View File

@ -113,6 +113,8 @@ static CONF_ELEMENTS conf_elements[] = {
{ 0, 0, CONF_T_STRING,"general","password" },
{ 0, 0, CONF_T_MULTICOMMA,"general","compdirs" },
{ 0, 0, CONF_T_STRING,"general","logfile" },
{ 0, 0, CONF_T_EXISTPATH,"plugins","plugin_dir" },
{ 0, 0, CONF_T_MULTICOMMA,"plugins","plugins" },
{ 0, 0, CONF_T_INT, NULL, NULL }
};

View File

@ -60,7 +60,7 @@ static unsigned int err_debugmask=0xFFFFFFFF; /**< modules to debug, see \ref lo
/** text list of modules to match for setting debug mask */
static char *err_categorylist[] = {
"config","webserver","database","scan","query","index","browse",
"playlist","art","daap","main","rend","xml","parse",NULL
"playlist","art","daap","main","rend","xml","parse","plugin",NULL
};
/*

View File

@ -56,6 +56,7 @@
#define L_REND 0x00000800 /**< rendezvous -- rend-unix.c, rend-posix.c, etc */
#define L_XML 0x00001000 /**< xml - xml-rpc.c */
#define L_PARSE 0x00002000 /**< smart playlist parser */
#define L_PLUG 0x00004000 /**< plugins */
#define L_MISC 0x80000000 /**< anything else */
#ifndef TRUE

View File

@ -81,6 +81,7 @@
#include "dynamic-art.h"
#include "db-generic.h"
#include "os.h"
#include "plugin.h"
#ifdef HAVE_GETOPT_H
# include "getopt.h"
@ -188,9 +189,14 @@ int main(int argc, char *argv[]) {
char *logfile,*db_type,*db_parms,*web_root,*runas;
char **mp3_dir_array;
char *servername,*iface;
int index;
char txtrecord[255];
char *plugindir;
char plugin[PATH_MAX];
char **pluginarray;
int err;
char *perr=NULL;
@ -296,6 +302,26 @@ int main(int argc, char *argv[]) {
}
}
/* load plugins before we drop privs? Maybe... let the
* plugins do stuff they might need to */
if((plugindir=conf_alloc_string("plugins","plugin_dir",NULL)) != NULL) {
if(conf_get_array("plugins","plugins",&pluginarray)==TRUE) {
index = 0;
while(pluginarray[index]) {
sprintf(plugin,"%s/%s",plugindir,pluginarray[index]);
if(plugin_load(&perr,plugin) != PLUGIN_E_SUCCESS) {
DPRINTF(E_LOG,L_MAIN,"Error loading plugin %s: %s\n",
plugin, perr);
free(perr);
perr = NULL;
}
index++;
}
} else {
free(plugindir);
}
}
runas = conf_alloc_string("general","runas","nobody");
#ifndef WITHOUT_MDNS

View File

@ -23,6 +23,7 @@
# include "config.h"
#endif
#include <dlfcn.h>
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
@ -420,3 +421,22 @@ int _os_start_signal_handler(pthread_t *handler_tid) {
_os_pidfile = file;
}
/**
* load a shared library
*
* @param
*/
void *os_loadlib(char *path) {
return dlopen(path,RTLD_LAZY);
}
void *os_libfunc(void *handle, char *function) {
return dlsym(handle,function);
}
int *os_unload(void *handle) {
return dlclose(handle);
}

View File

@ -33,6 +33,11 @@ extern int os_closesyslog(void);
extern int os_syslog(int level, char *msg);
extern int os_chown(char *path, char *user);
/* library loading functions */
extern void *os_loadlib(char *path);
extern void *os_libfunc(void *handle, char *function);
extern void *os_unload(void *handle);
#ifdef WIN32
# include "os-win32.h"
#else