diff options
Diffstat (limited to 'client/Proxifier.cpp')
-rw-r--r-- | client/Proxifier.cpp | 89 |
1 files changed, 71 insertions, 18 deletions
diff --git a/client/Proxifier.cpp b/client/Proxifier.cpp index cff907c..28964af 100644 --- a/client/Proxifier.cpp +++ b/client/Proxifier.cpp @@ -1,9 +1,13 @@ #include <algorithm> +#ifdef WIN32 + #include <shlobj.h> +#endif #include <QtCore> #include <QtXml> #include "Logger.h" #include "Proxifier.h" +#include "Utility.h" // static field initialization string Proxifier::defaultChain = "Client"; @@ -40,8 +44,57 @@ Proxifier* Proxifier::GetInstance() Proxifier::Proxifier(): valid(false) { - filename = "Default.ppx"; + Logger::Info("Trying to find proxifier configuration file\n"); +#ifdef WIN32 + QString folderName = "Proxifier"; + QString fileName = "Profiles\\Default.ppx"; + QString pathSlash = "\\"; + + // check in %USERPROFILE%\AppData\Roaming + TCHAR dataPath[MAX_PATH]; + if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, dataPath) != S_FALSE) + { + char* str = wstrdup(dataPath); + QString file = str; + file += pathSlash + folderName + pathSlash + fileName; + Logger::Info("Checking path: %s\n", file.toStdString().c_str()); + QFileInfo filePathInfo(file); + if (filePathInfo.exists()) + { + Logger::Debug("Configuration found: %s\n", file.toStdString().c_str()); + filePath = filePathInfo.absoluteFilePath(); + ReadConfig(); + return; + } + } + if (SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, dataPath) != S_FALSE) + { + // check in %ProgramFiles(x86)% + char* str = wstrdup(dataPath); + QString file = str; + file += pathSlash + folderName + pathSlash + fileName; + QFileInfo filePathInfo(file); + Logger::Info("Checking path: %s\n",file.toStdString().c_str()); + if (filePathInfo.exists()) + { + filePath = filePathInfo.absoluteFilePath(); + ReadConfig(); + return; + } + } + + filePath = fileName; + /* + // check in %ProgramFiles% (x86) + char *sysDrive = getenv ("SystemDrive"); + if (sysDrive != NULL) { + fprintf(stderr, "system drive: %s\n", sysDrive); + } + */ +#else + filePath = "Default.ppx"; ReadConfig(); +#endif } bool Proxifier::IsValid() @@ -258,7 +311,7 @@ void Proxifier::ReadConfig() { valid = false; QDomDocument configDom("config"); - QFile config(filename); + QFile config(filePath); if (!config.open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier config file\n"); @@ -560,7 +613,7 @@ bool Proxifier::AddProxy(ProxifierProxy& proxy, int* id) Logger::Trace("Adding new proxy to Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier config file for reading\n"); @@ -638,7 +691,7 @@ bool Proxifier::AddProxy(ProxifierProxy& proxy, int* id) ReadProxyList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -655,7 +708,7 @@ bool Proxifier::RemoveProxy(int proxyId) Logger::Trace("Adding new proxy to Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier config file for reading\n"); @@ -710,7 +763,7 @@ bool Proxifier::RemoveProxy(int proxyId) ReadProxyList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -727,7 +780,7 @@ bool Proxifier::AddChain(string& name, int *id) Logger::Trace("Adding new chain to Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier config file\n"); @@ -770,7 +823,7 @@ bool Proxifier::AddChain(string& name, int *id) ReadChainList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -787,7 +840,7 @@ bool Proxifier::AddProxyToChain(int proxyId, int chainId) Logger::Trace("Adding proxy to chain in Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier config file\n"); @@ -848,7 +901,7 @@ bool Proxifier::AddProxyToChain(int proxyId, int chainId) ReadChainList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -865,7 +918,7 @@ bool Proxifier::RemoveProxyFromChain(int proxyId, int chainId) Logger::Trace("Removing proxy from chain in Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier configuration file\n"); @@ -934,7 +987,7 @@ bool Proxifier::RemoveProxyFromChain(int proxyId, int chainId) ReadChainList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -952,7 +1005,7 @@ bool Proxifier::AddRule(Rule& rule) Logger::Trace("Adding rules to Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadOnly)) { Logger::Error("Can't open Proxifier config file\n"); @@ -1036,7 +1089,7 @@ bool Proxifier::AddRule(Rule& rule) ReadRuleList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -1054,7 +1107,7 @@ bool Proxifier::SetRuleAction(string& name, string& action, int actId) Logger::Trace("Setting rule action in Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadWrite)) { Logger::Error("Can't open Proxifier configuration file\n"); @@ -1110,7 +1163,7 @@ bool Proxifier::SetRuleAction(string& name, string& action, int actId) ReadRuleList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); @@ -1128,7 +1181,7 @@ bool Proxifier::RemoveRule(string& name) Logger::Trace("Removing rule from Proxifier config\n"); // read XML DOM structure QDomDocument configDom("config"); - QFile* config = new QFile(filename); + QFile* config = new QFile(filePath); if (!config->open(QIODevice::ReadWrite)) { Logger::Error("Can't open Proxifier configuration file\n"); @@ -1171,7 +1224,7 @@ bool Proxifier::RemoveRule(string& name) ReadRuleList(root); // save new DOM to file - config = new QFile(filename); + config = new QFile(filePath); if (!config->open(QIODevice::WriteOnly)) { Logger::Error("Can't open Proxifier config file for writing\n"); |