summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/Proxifier.cpp89
-rw-r--r--client/Proxifier.h2
-rw-r--r--client/Utility.cpp26
-rw-r--r--client/Utility.h18
-rw-r--r--client/main.cpp7
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");