X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/b4b5d092c4bca0ff33fdf384ed692b36f38d879e..46b0747592074017ff0ea4b33d4a7194235886e5:/projects/stargazer/plugin_runner.cpp diff --git a/projects/stargazer/plugin_runner.cpp b/projects/stargazer/plugin_runner.cpp deleted file mode 100644 index 0948987c..00000000 --- a/projects/stargazer/plugin_runner.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* - * 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 Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * Author : Boris Mikhailenko - */ - -/* - $Revision: 1.17 $ - $Date: 2010/09/13 05:52:46 $ - $Author: faust $ - */ - -#include -#include - -#include "stg/common.h" -#include "stg/traffcounter.h" -#include "plugin_runner.h" -#include "settings_impl.h" -#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, - const MODULE_SETTINGS & ms, - ADMINS_IMPL * a, - TARIFFS_IMPL * t, - USERS_IMPL * u, - SERVICES_IMPL * svc, - CORPORATIONS_IMPL * crp, - TRAFFCOUNTER * tc, - STORE * st, - const SETTINGS_IMPL * s) - : pluginFileName(pFileName), - pluginSettingFileName(), - plugin(NULL), - isPluginLoaded(false), - errorStr(), - libHandle(NULL), - isRunning(false), - admins(a), - tariffs(t), - users(u), - services(svc), - corps(crp), - store(st), - traffCnt(tc), - stgSettings(s), - modSettings(ms) -{ -} -//----------------------------------------------------------------------------- -PLUGIN_RUNNER::PLUGIN_RUNNER(const PLUGIN_RUNNER & rvalue) - : pluginFileName(rvalue.pluginFileName), - pluginSettingFileName(rvalue.pluginSettingFileName), - plugin(rvalue.plugin), - isPluginLoaded(rvalue.isPluginLoaded), - errorStr(rvalue.errorStr), - libHandle(rvalue.libHandle), - 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), - modSettings(rvalue.modSettings) -{ -} -//----------------------------------------------------------------------------- -PLUGIN_RUNNER & PLUGIN_RUNNER::operator=(const PLUGIN_RUNNER & rvalue) -{ -pluginFileName = rvalue.pluginFileName; -pluginSettingFileName = rvalue.pluginSettingFileName; -plugin = rvalue.plugin; -isPluginLoaded = rvalue.isPluginLoaded; -errorStr = rvalue.errorStr; -libHandle = rvalue.libHandle; -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; -modSettings = rvalue.modSettings; - -return *this; -} -//----------------------------------------------------------------------------- -PLUGIN_RUNNER::~PLUGIN_RUNNER() -{ -if (isPluginLoaded) - { - Unload(); - } - -isPluginLoaded = false; -} -//----------------------------------------------------------------------------- -PLUGIN * PLUGIN_RUNNER::GetPlugin() -{ -if (!isPluginLoaded) - { - errorStr = "Plugin '" + pluginFileName + "' is not loaded yet!"; - printfd(__FILE__, "PLUGIN_RUNNER::GetPlugin() - %s\n", errorStr.c_str()); - return NULL; - } - -return plugin; -} -//----------------------------------------------------------------------------- -int PLUGIN_RUNNER::Start() -{ -if (!isPluginLoaded) - if (Load()) - return -1; - -if (!plugin) - { - errorStr = "Plugin '" + pluginFileName + "' was not created!"; - 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); - -if (plugin->Start()) - { - errorStr = plugin->GetStrError(); - return -1; - } - -return 0; -} -//----------------------------------------------------------------------------- -int PLUGIN_RUNNER::Stop() -{ -if (!isPluginLoaded) - { - errorStr = "Plugin '" + pluginFileName + "' was not loaded yet!"; - printfd(__FILE__, "PLUGIN_RUNNER::Stop() - %s\n", errorStr.c_str()); - return -1; - } - -if (!plugin) - { - errorStr = "Plugin '" + pluginFileName + "' was not created!"; - printfd(__FILE__, "PLUGIN_RUNNER::Stop() - %s\n", errorStr.c_str()); - return -1; - } - -return plugin->Stop(); -} -//----------------------------------------------------------------------------- -int PLUGIN_RUNNER::Reload() -{ -if (!isPluginLoaded) - { - errorStr = "Plugin '" + pluginFileName + "' was not loaded yet!"; - printfd(__FILE__, "PLUGIN_RUNNER::Reload() - %s\n", errorStr.c_str()); - return -1; - } - -if (!plugin) - { - errorStr = "Plugin '" + pluginFileName + "' was not created!"; - printfd(__FILE__, "PLUGIN_RUNNER::Reload() - %s\n", errorStr.c_str()); - return -1; - } - -int res = plugin->Reload(); -errorStr = plugin->GetStrError(); -return res; -} -//----------------------------------------------------------------------------- -bool PLUGIN_RUNNER::IsRunning() -{ -if (!isPluginLoaded) - { - errorStr = "Plugin '" + pluginFileName + "' was not loaded yet!"; - printfd(__FILE__, "PLUGIN_RUNNER::IsRunning() - %s\n", errorStr.c_str()); - return false; - } - -if (!plugin) - { - errorStr = "Plugin '" + pluginFileName + "' was not created!"; - printfd(__FILE__, "PLUGIN_RUNNER::IsRunning() - %s\n", errorStr.c_str()); - return false; - } - -return plugin->IsRunning(); -} -//----------------------------------------------------------------------------- -int PLUGIN_RUNNER::Load() -{ -if (isPluginLoaded) - { - errorStr = "Plugin '" + pluginFileName + "' was already loaded!"; - printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str()); - return -1; - } - -if (pluginFileName.empty()) - { - errorStr = "Empty plugin file name!"; - printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str()); - return -1; - } - -libHandle = dlopen(pluginFileName.c_str(), RTLD_NOW); - -if (!libHandle) - { - errorStr = "Error loading plugin '" + pluginFileName + "': '" + dlerror() + "'"; - printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str()); - return -1; - } - -isPluginLoaded = true; - -PLUGIN * (*GetPlugin)(); -GetPlugin = (PLUGIN * (*)())dlsym(libHandle, "GetPlugin"); -if (!GetPlugin) - { - 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 = "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 '" + pluginFileName + "' is unable to parse settings. " + plugin->GetStrError(); - printfd(__FILE__, "PLUGIN_RUNNER::Load() - %s\n", errorStr.c_str()); - return -1; - } - -return 0; -} -//----------------------------------------------------------------------------- -int PLUGIN_RUNNER::Unload() -{ -if (isPluginLoaded) - { - if (dlclose(libHandle)) - { - errorStr = "Failed to unload plugin '" + pluginFileName + "': " + dlerror(); - printfd(__FILE__, "PLUGIN_RUNNER::Unload() - %s", errorStr.c_str()); - return -1; - } - plugin = NULL; - isPluginLoaded = false; - } -return 0; -} -//-----------------------------------------------------------------------------