diff options
author | unknown <b0ris@b0ris-satellite.(none)> | 2012-01-16 02:21:03 +0200 |
---|---|---|
committer | unknown <b0ris@b0ris-satellite.(none)> | 2012-01-16 02:21:03 +0200 |
commit | d3f5a1e20f159287764d3090ad0024ef42812709 (patch) | |
tree | 8ba8415256c2c5dd8f62378b177fb5303b4497e6 | |
parent | 0822cf0b82aff2e265a78f61fcb976c300c44ace (diff) |
Proxifier's config lookup
-rw-r--r-- | client/Proxifier.cpp | 89 | ||||
-rw-r--r-- | client/Proxifier.h | 2 | ||||
-rw-r--r-- | client/Utility.cpp | 26 | ||||
-rw-r--r-- | client/Utility.h | 18 | ||||
-rw-r--r-- | client/main.cpp | 7 |
5 files changed, 117 insertions, 25 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"); diff --git a/client/Proxifier.h b/client/Proxifier.h index 0a7b1cf..a6862db 100644 --- a/client/Proxifier.h +++ b/client/Proxifier.h @@ -153,7 +153,7 @@ private: /** * @brief XML file name to read data from */ - QString filename; + QString filePath; /** * @brief indicates whether config valid or not */ diff --git a/client/Utility.cpp b/client/Utility.cpp index 2faed74..547a56a 100644 --- a/client/Utility.cpp +++ b/client/Utility.cpp @@ -27,3 +27,29 @@ QByteArray md5_sum(QString &filename) Logger::Debug("MD5 sum for %s is: %s\n", filename.toStdString().c_str(), res.data()); return res; } + +#ifdef WIN32 + +int wstrlen(_TCHAR * wstr) +{ + int l_idx = 0; + while (((char*)wstr)[l_idx]!=0) l_idx+=2; + return l_idx; +} + +char* wstrdup(_TCHAR* wSrc) +{ + int l_idx=0; + int l_len = wstrlen(wSrc); + char * l_nstr = (char*)malloc(l_len); + if (l_nstr) { + do { + l_nstr[l_idx] = (char)wSrc[l_idx]; + l_idx++; + } while ((char)wSrc[l_idx]!=0); + } + l_nstr[l_idx] = 0; + return l_nstr; +} + +#endif
\ No newline at end of file diff --git a/client/Utility.h b/client/Utility.h index fef395b..8cdecaf 100644 --- a/client/Utility.h +++ b/client/Utility.h @@ -11,4 +11,22 @@ */ QByteArray md5_sum(QString &filename); + +#ifdef WIN32 + +#include <shlobj.h> + +/** + * @brief returns number of TCHARs in string + */ +int wstrlen(_TCHAR * wstr); + +/** + * @brief Allocate char string and copy TCHAR->char->string + */ +char* wstrdup(_TCHAR* wSrc); + +#endif + + #endif
\ No newline at end of file diff --git a/client/main.cpp b/client/main.cpp index f7da59e..7c8be32 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -20,7 +20,6 @@ ProxyClientApp *this_app; int main(int argc, char *argv[]) { Logger::Info("Starting client application\n"); - string path = argv[0]; QString dir; size_t p = path.find_last_of(PathSlash); @@ -34,6 +33,7 @@ int main(int argc, char *argv[]) } // check if client should be update + fprintf(stderr, "%s\n", dir.toStdString().c_str()); QFileInfo newClient(dir + PathSlash + "client.bin.latest"); if (newClient.exists()) { @@ -49,14 +49,9 @@ int main(int argc, char *argv[]) Logger::Error("Can't launch updater to update client app\n"); } } - // check if initial config exists (config.cfg) // without it application is useless QFileInfo configInfo(dir + PathSlash + "config.cfg"); - - fprintf(stderr, "%s\n", configInfo.fileName().toStdString().c_str()); - - if (! configInfo.exists()) { Logger::Fatal("Initial configuration file (config.cfg) do not exist!\n"); |