summaryrefslogtreecommitdiff
path: root/client/Proxifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/Proxifier.cpp')
-rw-r--r--client/Proxifier.cpp89
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");