From d23435630923f2106eb531b9748e7c0b0f890219 Mon Sep 17 00:00:00 2001 From: Alex Borisov Date: Sat, 4 Feb 2012 01:44:13 +0200 Subject: Add 2 new config variables --- client/Config.cpp | 8 ++++++++ client/Config.h | 15 +++++++++++++-- client/Proxifier.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++--------- client/config.cfg | 4 +++- 4 files changed, 66 insertions(+), 12 deletions(-) diff --git a/client/Config.cpp b/client/Config.cpp index 9a32603..a7d6fc7 100644 --- a/client/Config.cpp +++ b/client/Config.cpp @@ -345,6 +345,14 @@ void Config::ParseConfig(string data) IsSpeedVisible = true; } } + else if (key.compare("proxifier_exe") == 0) + { + ProxifierExeFile = value; + } + else if (key.compare("proxifier_profile") == 0) + { + ProxifierConfigFile = value; + } else { Logger::Warn("Unrecognized config option: %s\n", key.c_str()); diff --git a/client/Config.h b/client/Config.h index a6e9e6a..1e3dd72 100644 --- a/client/Config.h +++ b/client/Config.h @@ -120,6 +120,16 @@ public: */ bool IsSpeedVisible; + /** + * @brief Full filename of the Proxyfier's executable + */ + string ProxifierExeFile; + + /** + * @brief Full filename of the Proxyfier's profile + */ + string ProxifierConfigFile; + /** * @brief Update client configuration * @deprecated config is updated periodically on timer events now @@ -305,12 +315,13 @@ protected: void ParseDownloadList(string data); private: + void ReadGenericProxy(); + void ReadStaticProxy(); + vector genericProxy; vector staticProxy; vector firewalls; vector fileActions; - void ReadGenericProxy(); - void ReadStaticProxy(); }; #endif \ No newline at end of file diff --git a/client/Proxifier.cpp b/client/Proxifier.cpp index a4c2d08..4b49c09 100644 --- a/client/Proxifier.cpp +++ b/client/Proxifier.cpp @@ -7,6 +7,7 @@ #endif #include #include +#include "UpdatedConfig.h" #include "Logger.h" #include "Proxifier.h" #include "Utility.h" @@ -47,6 +48,22 @@ Proxifier* Proxifier::GetInstance() Proxifier::Proxifier(): valid(false) { Logger::Info("Trying to find proxifier configuration file\n"); + + // check variable from config file + UpdatedConfig *cfg = UpdatedConfig::CurrentConfig(); + if (! cfg->ProxifierConfigFile.empty()) + { + Logger::Info("Checking path: %s\n", cfg->ProxifierConfigFile.c_str()); + QFileInfo filePathInfo(QString::fromLocal8Bit(cfg->ProxifierConfigFile.c_str())); + if (filePathInfo.exists()) + { + Logger::Debug("Configuration found: %s\n", cfg->ProxifierConfigFile.c_str()); + filePath = filePathInfo.absoluteFilePath(); + ReadConfig(); + return; + } + } + #ifdef WIN32 QString folderName = "Proxifier"; QString fileName = "Profiles\\Default.ppx"; @@ -93,21 +110,22 @@ Proxifier::Proxifier(): valid(false) fprintf(stderr, "system drive: %s\n", sysDrive); } */ -#else +#endif + filePath = "Default.ppx"; ReadConfig(); -#endif } bool Proxifier::Restart() { - char execName[] = "Proxifier.exe"; - Logger::Info("Restarting Proxifier process\n"); + Logger::Info("Restarting Proxifier process\n"); + #ifdef WIN32 + char execName[] = "Proxifier.exe"; HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32; - + // Takes a snapshot of all the processes hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) @@ -135,7 +153,19 @@ bool Proxifier::Restart() } while (Process32Next(hProcessSnap, &pe32)); - // start over again + // find Proxifier's executable and start over again + UpdatedConfig *cfg = UpdatedConfig::CurrentConfig(); + if (! cfg->ProxifierExeFile.empty()) + { + QString program = QString::fromLocal8Bit(cfg->ProxifierExeFile.c_str()); + QFileInfo filePathInfo(program); + if (filePathInfo.exists()) + { + Logger::Trace("Starting process: %s\n", program.toStdString().c_str()); + return QProcess::startDetached(program); + } + } + QString folderName = "Proxifier"; QString pathSlash = "\\"; TCHAR programFiles[MAX_PATH]; @@ -147,9 +177,12 @@ bool Proxifier::Restart() program += pathSlash + folderName + pathSlash + execName; program.prepend("\""); program.append("\""); - Logger::Trace("Starting process: %s\n", program.toStdString().c_str()); - - return QProcess::startDetached(program); + QFileInfo filePathInfo(program); + if (filePathInfo.exists()) + { + Logger::Trace("Starting process: %s\n", program.toStdString().c_str()); + return QProcess::startDetached(program); + } } #endif return false; diff --git a/client/config.cfg b/client/config.cfg index b6a77a9..892f44c 100644 --- a/client/config.cfg +++ b/client/config.cfg @@ -1,9 +1,11 @@ config_update_interval=300; client_update_interval=60000; -server=127.0.0.1 10 10; +server=195.211.188.1 10 10; server=192.168.1.100 600 60; welcome_msg=Welcome to the proxy configurator!; config_downloaded_msg=Config downloaded successfully; top_panel_text=Top Panel; bottom_panel_text=Bottom Panel; speed_visibility=1; +proxifier_exe=C:\ProxifierPortable\Proxifier.exe; +proxifier_profile=C:\ProxifierPortable\Profiles\invwar.ppx; -- cgit v1.2.3