1#if defined(HAVE_CONFIG_H)
19#define RESIPROCATE_SUBSYSTEM resip::Subsystem::NONE
24 const Data& defaultDirectory,
25 const Data& symbolName,
26 const int pluginApiVersion)
27 : mConfigParse(configParse),
28 mDefaultDirectory(defaultDirectory),
29 mSymbolName(symbolName),
30 mPluginApiVersion(pluginApiVersion)
42 if(pluginNames.empty())
44 DebugLog(<<
"LoadPlugins not specified, not attempting to load any plugins");
48 const Data& pluginDirectory = mConfigParse.
getConfigData(
"PluginDirectory", mDefaultDirectory,
true);
49 if(pluginDirectory.
empty())
51 ErrLog(<<
"LoadPlugins specified but PluginDirectory not specified, can't load plugins");
54 for(
auto pluginName : pluginNames)
62 Data name = pluginDirectory +
'/' +
"lib" + pluginName +
".so";
63 dlib = dlopen(name.
c_str(), RTLD_NOW | RTLD_GLOBAL);
66 ErrLog(<<
"Failed to load plugin " << pluginName <<
" (" << name <<
"): " << dlerror());
72 ErrLog(<<
"Failed to find " << mSymbolName <<
" in plugin " << pluginName <<
" (" << name <<
"): " << dlerror());
77 ErrLog(<<
"Failed to load plugin " << pluginName <<
" (" << name <<
"): found version " << desc->
mPluginApiVersion <<
", expecting version " << mPluginApiVersion);
79 DebugLog(<<
"Trying to instantiate plugin " << pluginName);
81 std::shared_ptr<resip::Plugin> plugin = desc->
creationFunc();
84 ErrLog(<<
"Failed to instantiate plugin " << pluginName <<
" (" << name <<
")");
88 mPlugins.push_back(plugin);
92 if(!pluginNames.empty())
94 ErrLog(<<
"LoadPlugins specified but repro not compiled with plugin DSO support");
97 DebugLog(<<
"Not compiled with plugin DSO support");
106 for(
auto plugin : mPlugins)
resip::Data getConfigData(const resip::Data &name, const resip::Data &defaultValue, bool useDefaultIfEmpty=false) const
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
const char * c_str() const
Returns a null-terminated string representing.
bool empty() const noexcept
Checks whether the Data is empty.
virtual bool onPluginLoaded(std::shared_ptr< Plugin > plugin)=0
PluginManager(const ConfigParse &configParse, const Data &defaultDirectory, const Data &symbolName, const int pluginApiVersion)
virtual bool loadPlugins(const std::vector< Data > &pluginNames)
dcm! – add UnusedChecking(_enum) below;
PluginCreationFunc creationFunc