]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugin_runner.cpp
Proper checks for libs.
[stg.git] / projects / stargazer / plugin_runner.cpp
index b93d6d0a45d3cd1d67d75c60ccade79e4d26a92e..0948987c9dfbe8b7bd46294c3e5a243f2f9009d6 100644 (file)
@@ -34,6 +34,8 @@
 #include "admins_impl.h"
 #include "tariffs_impl.h"
 #include "users_impl.h"
+#include "services_impl.h"
+#include "corps_impl.h"
 
 //-----------------------------------------------------------------------------
 PLUGIN_RUNNER::PLUGIN_RUNNER(const std::string & pFileName,
@@ -41,6 +43,8 @@ PLUGIN_RUNNER::PLUGIN_RUNNER(const std::string & pFileName,
                              ADMINS_IMPL * a,
                              TARIFFS_IMPL * t,
                              USERS_IMPL * u,
+                             SERVICES_IMPL * svc,
+                             CORPORATIONS_IMPL * crp,
                              TRAFFCOUNTER * tc,
                              STORE * st,
                              const SETTINGS_IMPL * s)
@@ -54,6 +58,8 @@ PLUGIN_RUNNER::PLUGIN_RUNNER(const std::string & pFileName,
       admins(a),
       tariffs(t),
       users(u),
+      services(svc),
+      corps(crp),
       store(st),
       traffCnt(tc),
       stgSettings(s),
@@ -72,6 +78,8 @@ PLUGIN_RUNNER::PLUGIN_RUNNER(const PLUGIN_RUNNER & rvalue)
       admins(rvalue.admins),
       tariffs(rvalue.tariffs),
       users(rvalue.users),
+      services(rvalue.services),
+      corps(rvalue.corps),
       store(rvalue.store),
       traffCnt(rvalue.traffCnt),
       stgSettings(rvalue.stgSettings),
@@ -91,6 +99,8 @@ isRunning = rvalue.isRunning;
 admins = rvalue.admins;
 tariffs = rvalue.tariffs;
 users = rvalue.users;
+services = rvalue.services;
+corps = rvalue.corps;
 store = rvalue.store;
 traffCnt = rvalue.traffCnt;
 stgSettings = rvalue.stgSettings;
@@ -114,7 +124,7 @@ PLUGIN * PLUGIN_RUNNER::GetPlugin()
 if (!isPluginLoaded)
     {
     errorStr = "Plugin '" + pluginFileName + "' is not loaded yet!";
-    printfd(__FILE__, "PLUGIN_LOADER::GetPlugin() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::GetPlugin() - %s\n", errorStr.c_str());
     return NULL;
     }
 
@@ -130,13 +140,15 @@ if (!isPluginLoaded)
 if (!plugin)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not created!";
-    printfd(__FILE__, "PLUGIN_LOADER::Start() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Start() - %s\n", errorStr.c_str());
     return -1;
     }
 
 plugin->SetTariffs(tariffs);
 plugin->SetAdmins(admins);
 plugin->SetUsers(users);
+plugin->SetServices(services);
+plugin->SetCorporations(corps);
 plugin->SetTraffcounter(traffCnt);
 plugin->SetStore(store);
 plugin->SetStgSettings(stgSettings);
@@ -155,20 +167,18 @@ int PLUGIN_RUNNER::Stop()
 if (!isPluginLoaded)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not loaded yet!";
-    printfd(__FILE__, "PLUGIN_LOADER::Stop() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Stop() - %s\n", errorStr.c_str());
     return -1;
     }
 
 if (!plugin)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not created!";
-    printfd(__FILE__, "PLUGIN_LOADER::Stop() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Stop() - %s\n", errorStr.c_str());
     return -1;
     }
 
-plugin->Stop();
-
-return 0;
+return plugin->Stop();
 }
 //-----------------------------------------------------------------------------
 int PLUGIN_RUNNER::Reload()
@@ -176,14 +186,14 @@ int PLUGIN_RUNNER::Reload()
 if (!isPluginLoaded)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not loaded yet!";
-    printfd(__FILE__, "PLUGIN_LOADER::Reload() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Reload() - %s\n", errorStr.c_str());
     return -1;
     }
 
 if (!plugin)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not created!";
-    printfd(__FILE__, "PLUGIN_LOADER::Reload() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Reload() - %s\n", errorStr.c_str());
     return -1;
     }
 
@@ -197,14 +207,14 @@ bool PLUGIN_RUNNER::IsRunning()
 if (!isPluginLoaded)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not loaded yet!";
-    printfd(__FILE__, "PLUGIN_LOADER::IsRunning() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::IsRunning() - %s\n", errorStr.c_str());
     return false;
     }
 
 if (!plugin)
     {
     errorStr = "Plugin '" + pluginFileName + "' was not created!";
-    printfd(__FILE__, "PLUGIN_LOADER::IsRunning() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::IsRunning() - %s\n", errorStr.c_str());
     return false;
     }
 
@@ -216,14 +226,14 @@ int PLUGIN_RUNNER::Load()
 if (isPluginLoaded)
     {
     errorStr = "Plugin '" + pluginFileName + "' was already loaded!";
-    printfd(__FILE__, "PLUGIN_LOADER::Load() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str());
     return -1;
     }
 
 if (pluginFileName.empty())
     {
     errorStr = "Empty plugin file name!";
-    printfd(__FILE__, "PLUGIN_LOADER::Load() - %s\n", errorStr.c_str());
+    printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str());
     return -1;
     }
 
@@ -231,9 +241,8 @@ libHandle = dlopen(pluginFileName.c_str(), RTLD_NOW);
 
 if (!libHandle)
     {
-    errorStr = "Error loading plugin '"
-        + pluginFileName + "': '" + dlerror() + "'";
-    printfd(__FILE__, "PLUGIN_LOADER::Load() - %s\n", errorStr.c_str());
+    errorStr = "Error loading plugin '" + pluginFileName + "': '" + dlerror() + "'";
+    printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str());
     return -1;
     }
 
@@ -243,24 +252,24 @@ PLUGIN * (*GetPlugin)();
 GetPlugin = (PLUGIN * (*)())dlsym(libHandle, "GetPlugin");
 if (!GetPlugin)
     {
-    errorStr = std::string("GetPlugin() not found. ") + dlerror();
-    printfd(__FILE__, "PLUGIN_LOADER::Load() - %s\n", errorStr.c_str());
+    errorStr = "Plugin '" + pluginFileName + "' does not have GetPlugin() function. " + dlerror();
+    printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str());
     return -1;
     }
 plugin = GetPlugin();
 
 if (!plugin)
     {
-    errorStr = "Plugin was not created!";
-    printfd(__FILE__, "PLUGIN_LOADER::Load() - %s\n", errorStr.c_str());
+    errorStr = "Failed to create an instance of plugin '" + pluginFileName + "'.";
+    printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str());
     return -1;
     }
 
 plugin->SetSettings(modSettings);
 if (plugin->ParseSettings())
     {
-    errorStr = plugin->GetStrError();
-    printfd(__FILE__, "PLUGIN_LOADER::Load() - Failed to parse settings. Plugin reports: '%s'\n", errorStr.c_str());
+    errorStr = "Plugin '" + pluginFileName + "' is unable to parse settings. " + plugin->GetStrError();
+    printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str());
     return -1;
     }
 
@@ -273,10 +282,8 @@ if (isPluginLoaded)
     {
     if (dlclose(libHandle))
         {
-        errorStr = "Failed to unload plugin '";
-        errorStr += pluginFileName + "': ";
-        errorStr += dlerror();
-        printfd(__FILE__, "PLUGIN_LOADER::Unload() - %s", errorStr.c_str());
+        errorStr = "Failed to unload plugin '" + pluginFileName + "': " + dlerror();
+        printfd(__FILE__, "PLUGIN_RUNNER::Unload() - %s", errorStr.c_str());
         return -1;
         }
     plugin = NULL;