diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 8561eb4e..7d826227 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -55,7 +55,7 @@ SOURCES += src/main.cpp \
src/WebClient.cpp \
src/PluginWizardPage.cpp \
src/PluginManager.cpp \
- src/DirectoryManager.cpp
+ src/CoreInterface.cpp
HEADERS += src/MainWindow.h \
src/AboutDialog.h \
src/ServerConfig.h \
@@ -97,7 +97,7 @@ HEADERS += src/MainWindow.h \
src/PluginWizardPage.h \
src/ProcessorArch.h \
src/PluginManager.h \
- src/DirectoryManager.h
+ src/CoreInterface.h
RESOURCES += res/Synergy.qrc
RC_FILE = res/win/Synergy.rc
macx {
diff --git a/src/gui/res/SettingsDialogBase.ui b/src/gui/res/SettingsDialogBase.ui
index db7161d4..837838a6 100644
--- a/src/gui/res/SettingsDialogBase.ui
+++ b/src/gui/res/SettingsDialogBase.ui
@@ -145,7 +145,7 @@
-
- Enable OpenSSL (unique certificate)
+ Use &OpenSSL encryption (unique certificate)
diff --git a/src/gui/src/CoreInterface.cpp b/src/gui/src/CoreInterface.cpp
new file mode 100644
index 00000000..6bec6bfa
--- /dev/null
+++ b/src/gui/src/CoreInterface.cpp
@@ -0,0 +1,86 @@
+/*
+ * synergy -- mouse and keyboard sharing utility
+ * Copyright (C) 2015 Synergy Si Ltd.
+ *
+ * This package is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * found in the file COPYING that should have accompanied this file.
+ *
+ * This package is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "CoreInterface.h"
+
+#include
+#include
+#include
+
+static const char kCoreBinary[] = "syntool";
+
+CoreInterface::CoreInterface()
+{
+}
+
+QString CoreInterface::getPluginDir()
+{
+ QStringList args("--get-plugin-dir");
+ return run(args);
+}
+
+QString CoreInterface::getProfileDir()
+{
+ QStringList args("--get-profile-dir");
+ return run(args);
+}
+
+QString CoreInterface::getArch()
+{
+ QStringList args("--get-arch");
+ return run(args);
+}
+
+QString CoreInterface::run(const QStringList& args, const QString& input)
+{
+ QString program(
+ QCoreApplication::applicationDirPath()
+ + "/" + kCoreBinary);
+
+ QProcess process;
+ process.setReadChannel(QProcess::StandardOutput);
+ process.start(program, args);
+ bool success = process.waitForStarted();
+
+ QString output, error;
+ if (success)
+ {
+ if (!input.isEmpty()) {
+ process.write(input.toStdString().c_str());
+ }
+
+ if (process.waitForFinished()) {
+ output = process.readAllStandardOutput();
+ error = process.readAllStandardError();
+ }
+ }
+
+ output = output.trimmed();
+ error = error.trimmed();
+
+ int code = process.exitCode();
+ if (!error.isEmpty() || !success || code != 0)
+ {
+ throw std::runtime_error(
+ QString("Code: %1\nError: %2")
+ .arg(process.exitCode())
+ .arg(error.isEmpty() ? "Unknown" : error)
+ .toStdString());
+ }
+
+ return output;
+}
diff --git a/src/gui/src/DirectoryManager.h b/src/gui/src/CoreInterface.h
similarity index 69%
rename from src/gui/src/DirectoryManager.h
rename to src/gui/src/CoreInterface.h
index f07d64c9..8deb5480 100644
--- a/src/gui/src/DirectoryManager.h
+++ b/src/gui/src/CoreInterface.h
@@ -1,36 +1,31 @@
-/*
- * synergy -- mouse and keyboard sharing utility
- * Copyright (C) 2015 Synergy Si Ltd.
- *
- * This package is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * found in the file COPYING that should have accompanied this file.
- *
- * This package is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#ifndef DIRECTORYMANAGER_H
-#define DIRECTORYMANAGER_H
-
-#include
-#include
-
-class DirectoryManager
-{
-public:
- DirectoryManager();
-
-static QString getPluginDir();
-static QString getProfileDir();
-
-private:
-static QString getDirViaSyntool(QStringList& args);
-};
-
-#endif // DIRECTORYMANAGER_H
+/*
+ * synergy -- mouse and keyboard sharing utility
+ * Copyright (C) 2015 Synergy Si Ltd.
+ *
+ * This package is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * found in the file COPYING that should have accompanied this file.
+ *
+ * This package is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include
+
+class CoreInterface
+{
+public:
+ CoreInterface();
+
+ QString getPluginDir();
+ QString getProfileDir();
+ QString getArch();
+ QString run(const QStringList& args, const QString& input = "");
+};
diff --git a/src/gui/src/DirectoryManager.cpp b/src/gui/src/DirectoryManager.cpp
deleted file mode 100644
index b416ca9b..00000000
--- a/src/gui/src/DirectoryManager.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * synergy -- mouse and keyboard sharing utility
- * Copyright (C) 2015 Synergy Si Ltd.
- *
- * This package is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * found in the file COPYING that should have accompanied this file.
- *
- * This package is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include "DirectoryManager.h"
-
-#include
-#include
-#include
-#include
-
-static const char kGetPluginDirArg[] = "--get-plugin-dir";
-static const char kGetProfileDirArg[] = "--get-profile-dir";
-
-DirectoryManager::DirectoryManager()
-{
-}
-
-QString DirectoryManager::getPluginDir()
-{
- QStringList args(kGetPluginDirArg);
- return getDirViaSyntool(args);
-}
-
-QString DirectoryManager::getProfileDir()
-{
- QStringList args(kGetProfileDirArg);
- return getDirViaSyntool(args);
-}
-
-QString DirectoryManager::getDirViaSyntool(QStringList& args)
-{
- QString program(QCoreApplication::applicationDirPath() + "/syntool");
-
- QProcess process;
- process.setReadChannel(QProcess::StandardOutput);
- process.start(program, args);
- bool success = process.waitForStarted();
-
- QString out, error;
- if (success)
- {
- if (process.waitForFinished()) {
- out = process.readAllStandardOutput();
- error = process.readAllStandardError();
- }
- }
-
- out = out.trimmed();
- error = error.trimmed();
-
- if (out.isEmpty() ||
- !error.isEmpty() ||
- !success ||
- process.exitCode() != 0)
- {
- QMessageBox::critical(
- NULL, QObject::tr("Synergy"),
- QObject::tr("An error occured while calling syntool "
- "with the first arg %1. Code: %2\nError: %3")
- .arg(args.at(0))
- .arg(process.exitCode())
- .arg(error.isEmpty() ? "Unknown" : error));
- return "";
- }
-
- return out;
-}
diff --git a/src/gui/src/PluginManager.cpp b/src/gui/src/PluginManager.cpp
index 9da0dd9e..25903628 100644
--- a/src/gui/src/PluginManager.cpp
+++ b/src/gui/src/PluginManager.cpp
@@ -17,7 +17,7 @@
#include "PluginManager.h"
-#include "DirectoryManager.h"
+#include "CoreInterface.h"
#include "CommandProcess.h"
#include "DataDownloader.h"
#include "QUtility.h"
@@ -57,12 +57,12 @@ PluginManager::PluginManager(QStringList pluginList) :
m_DownloadIndex(-1),
m_pPluginDownloader(NULL)
{
- m_PluginDir = DirectoryManager::getPluginDir();
+ m_PluginDir = m_CoreInterface.getPluginDir();
if (m_PluginDir.isEmpty()) {
emit error(tr("Failed to get plugin directory."));
}
- m_ProfileDir = DirectoryManager::getProfileDir();
+ m_ProfileDir = m_CoreInterface.getProfileDir();
if (m_ProfileDir.isEmpty()) {
emit error(tr("Failed to get profile directory."));
}
@@ -173,37 +173,53 @@ void PluginManager::savePlugin()
QString PluginManager::getPluginUrl(const QString& pluginName)
{
- QString result;
- result = kPluginsBaseUrl.append(pluginName).append("/1.0/");
+ QString archName;
- int arch = checkProcessorArch();
- if (arch == Win_x86) {
- result.append(kWinProcessorArch32);
+#if defined(Q_OS_WIN)
+
+ try {
+ QString coreArch = m_CoreInterface.getArch();
+ if (coreArch.startsWith("x86")) {
+ archName = kWinProcessorArch32;
+ }
+ else if (coreArch.startsWith("x64")) {
+ archName = kWinProcessorArch64;
+ }
}
- else if (arch == Win_x64) {
- result.append(kWinProcessorArch64);
- }
- else if (arch == Mac_i386) {
- result.append(kMacProcessorArch);
- }
- else if (arch == Linux_rpm_i686) {
- result.append(kLinuxProcessorArchRpm32);
- }
- else if (arch == Linux_rpm_x86_64) {
- result.append(kLinuxProcessorArchRpm64);
- }
- else if (arch == Linux_deb_i686) {
- result.append(kLinuxProcessorArchDeb32);
- }
- else if (arch == Linux_deb_x86_64) {
- result.append(kLinuxProcessorArchDeb64);
- }
- else {
- emit error(
- tr("Failed to get the url of plugin %1 .")
- .arg(pluginName));
+ catch (...) {
+ emit error(tr("Could not get Windows architecture type."));
return "";
}
+
+#elif defined(Q_OS_MAC)
+
+ archName = kMacProcessorArch;
+
+#else
+
+ int arch = checkProcessorArch();
+ if (arch == Linux_rpm_i686) {
+ archName = kLinuxProcessorArchRpm32;
+ }
+ else if (arch == Linux_rpm_x86_64) {
+ archName = kLinuxProcessorArchRpm64;
+ }
+ else if (arch == Linux_deb_i686) {
+ archName = kLinuxProcessorArchDeb32;
+ }
+ else if (arch == Linux_deb_x86_64) {
+ archName = kLinuxProcessorArchDeb64;
+ }
+ else {
+ emit error(tr("Could not get Linux architecture type."));
+ return "";
+ }
+
+#endif
+
+ QString result;
+ result = kPluginsBaseUrl.append(pluginName).append("/1.0/");
+ result.append(archName);
result.append("/");
result.append(getPluginOSSpecificName(pluginName));
diff --git a/src/gui/src/PluginManager.h b/src/gui/src/PluginManager.h
index 63c09aeb..1c93340f 100644
--- a/src/gui/src/PluginManager.h
+++ b/src/gui/src/PluginManager.h
@@ -22,9 +22,11 @@
#include
#include
+#include "CoreInterface.h"
+
class DataDownloader;
-class PluginManager: public QObject
+class PluginManager : public QObject
{
Q_OBJECT
@@ -61,6 +63,7 @@ private:
QString m_ProfileDir;
int m_DownloadIndex;
DataDownloader* m_pPluginDownloader;
+ CoreInterface m_CoreInterface;
};
#endif // PLUGINMANAGER_H
diff --git a/src/gui/src/PluginWizardPage.cpp b/src/gui/src/PluginWizardPage.cpp
index 92160a7d..1ac21bd2 100644
--- a/src/gui/src/PluginWizardPage.cpp
+++ b/src/gui/src/PluginWizardPage.cpp
@@ -63,7 +63,7 @@ void PluginWizardPage::changeEvent(QEvent *e)
void PluginWizardPage::showError(QString error)
{
- updateStatus(error);
+ updateStatus(tr("Error: %1").arg(error));
showFinished();
}
diff --git a/src/gui/src/SettingsDialog.cpp b/src/gui/src/SettingsDialog.cpp
index 5625457f..7f6318a5 100644
--- a/src/gui/src/SettingsDialog.cpp
+++ b/src/gui/src/SettingsDialog.cpp
@@ -18,7 +18,7 @@
#include "SettingsDialog.h"
-#include "DirectoryManager.h"
+#include "CoreInterface.h"
#include "SynergyLocale.h"
#include "QSynergyApplication.h"
#include "QUtility.h"
@@ -57,7 +57,7 @@ SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) :
m_pCheckBoxElevateMode->hide();
#endif
- QString pluginDir = DirectoryManager::getPluginDir();
+ QString pluginDir = m_CoreInterface.getPluginDir();
QDir dir(pluginDir);
int fileNum = dir.entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count();
if (fileNum == 0) {
diff --git a/src/gui/src/SettingsDialog.h b/src/gui/src/SettingsDialog.h
index f8bfb68d..30fb5d5e 100644
--- a/src/gui/src/SettingsDialog.h
+++ b/src/gui/src/SettingsDialog.h
@@ -23,6 +23,7 @@
#include
#include "ui_SettingsDialogBase.h"
#include "SynergyLocale.h"
+#include "CoreInterface.h"
class AppConfig;
@@ -44,6 +45,7 @@ class SettingsDialog : public QDialog, public Ui::SettingsDialogBase
private:
AppConfig& m_AppConfig;
SynergyLocale m_Locale;
+ CoreInterface m_CoreInterface;
bool m_SuppressElevateWarning;
private slots:
diff --git a/src/gui/src/WebClient.cpp b/src/gui/src/WebClient.cpp
index e7325e28..e283372a 100644
--- a/src/gui/src/WebClient.cpp
+++ b/src/gui/src/WebClient.cpp
@@ -140,44 +140,11 @@ void WebClient::queryPluginList()
}
QString WebClient::request(
- const QString& email,
- const QString& password,
- QStringList& args)
+ const QString& email,
+ const QString& password,
+ QStringList& args)
{
- QString program(QCoreApplication::applicationDirPath() + "/syntool");
-
- QProcess process;
- process.setReadChannel(QProcess::StandardOutput);
- process.start(program, args);
- bool success = process.waitForStarted();
-
- QString out, error;
- if (success)
- {
- // hash password in case it contains interesting chars.
- QString credentials(email + ":" + hash(password) + "\n");
- process.write(credentials.toStdString().c_str());
-
- if (process.waitForFinished()) {
- out = process.readAllStandardOutput();
- error = process.readAllStandardError();
- }
- }
-
- out = out.trimmed();
- error = error.trimmed();
-
- if (out.isEmpty() ||
- !error.isEmpty() ||
- !success ||
- process.exitCode() != 0)
- {
- throw std::runtime_error(
- QString("Code: %1\nError: %2")
- .arg(process.exitCode())
- .arg(error.isEmpty() ? "Unknown" : error)
- .toStdString());
- }
-
- return out;
+ // hash password in case it contains interesting chars.
+ QString credentials(email + ":" + hash(password) + "\n");
+ return m_CoreInterface.run(args, credentials);
}
diff --git a/src/gui/src/WebClient.h b/src/gui/src/WebClient.h
index e39fa552..c2775193 100644
--- a/src/gui/src/WebClient.h
+++ b/src/gui/src/WebClient.h
@@ -22,6 +22,8 @@
#include
#include
+#include "CoreInterface.h"
+
class QMessageBox;
class QWidget;
class QStringList;
@@ -55,6 +57,7 @@ private:
QString m_Email;
QString m_Password;
QStringList m_PluginList;
+ CoreInterface m_CoreInterface;
};
#endif // WEBCLIENT_H
diff --git a/src/lib/arch/unix/ArchPluginUnix.cpp b/src/lib/arch/unix/ArchPluginUnix.cpp
index adf705da..f47f8079 100644
--- a/src/lib/arch/unix/ArchPluginUnix.cpp
+++ b/src/lib/arch/unix/ArchPluginUnix.cpp
@@ -64,7 +64,6 @@ ArchPluginUnix::load()
while ((de = readdir(dir)) != NULL) {
// ignore hidden files and diretories like .. and .
if (de->d_name[0] != '.') {
- LOG((CLOG_DEBUG "load plugin %s", de->d_name));
plugins.push_back(de->d_name);
}
}
@@ -77,11 +76,13 @@ ArchPluginUnix::load()
void* library = dlopen(path.c_str(), RTLD_LAZY);
if (library == NULL) {
+ LOG((CLOG_ERR "failed to load plugin: %s", (*it).c_str()));
throw XArch(dlerror());
}
String filename = synergy::string::removeFileExt(*it);
m_pluginTable.insert(std::make_pair(filename, library));
+ LOG((CLOG_ERR "loaded plugin: %s", (*it).c_str()));
}
}
diff --git a/src/lib/arch/win32/ArchPluginWindows.cpp b/src/lib/arch/win32/ArchPluginWindows.cpp
index 7bbbe1a6..cb2abb90 100644
--- a/src/lib/arch/win32/ArchPluginWindows.cpp
+++ b/src/lib/arch/win32/ArchPluginWindows.cpp
@@ -56,16 +56,19 @@ ArchPluginWindows::load()
std::vector::iterator it;
for (it = plugins.begin(); it != plugins.end(); ++it) {
LOG((CLOG_DEBUG "loading plugin: %s", (*it).c_str()));
- String path = String(getPluginsDir()).append("\\").append(*it);
+ String path = String(dir).append("\\").append(*it);
HINSTANCE library = LoadLibrary(path.c_str());
if (library == NULL) {
+ LOG((CLOG_ERR "failed to load plugin: %s %d", (*it).c_str(), GetLastError()));
throw XArch(new XArchEvalWindows);
}
void* lib = reinterpret_cast(library);
String filename = synergy::string::removeFileExt(*it);
m_pluginTable.insert(std::make_pair(filename, lib));
+
+ LOG((CLOG_ERR "loaded plugin: %s", (*it).c_str()));
}
}
diff --git a/src/lib/plugin/ns/CMakeLists.txt b/src/lib/plugin/ns/CMakeLists.txt
index 06cd7d85..8a9baab4 100644
--- a/src/lib/plugin/ns/CMakeLists.txt
+++ b/src/lib/plugin/ns/CMakeLists.txt
@@ -65,6 +65,20 @@ if (WIN32)
..\\..\\..\\..\\..\\lib\\${CMAKE_CFG_INTDIR}\\ns.dll
..\\..\\..\\..\\..\\bin\\${CMAKE_CFG_INTDIR}\\plugins\\
)
+ add_custom_command(
+ TARGET ns
+ POST_BUILD
+ COMMAND xcopy /Y /Q
+ ..\\..\\..\\..\\..\\ext\\openssl\\out32dll\\libeay32.dll
+ ..\\..\\..\\..\\..\\bin\\${CMAKE_CFG_INTDIR}
+ )
+ add_custom_command(
+ TARGET ns
+ POST_BUILD
+ COMMAND xcopy /Y /Q
+ ..\\..\\..\\..\\..\\ext\\openssl\\out32dll\\ssleay32.dll
+ ..\\..\\..\\..\\..\\bin\\${CMAKE_CFG_INTDIR}
+ )
else()
if (APPLE)
add_custom_command(
diff --git a/src/lib/synergy/ArgParser.cpp b/src/lib/synergy/ArgParser.cpp
index c634cd26..c5830d54 100644
--- a/src/lib/synergy/ArgParser.cpp
+++ b/src/lib/synergy/ArgParser.cpp
@@ -169,18 +169,22 @@ ArgParser::parseToolArgs(ToolArgs& args, int argc, const char* const* argv)
args.m_loginAuthenticate = true;
return true;
}
- if (isArg(i, argc, argv, NULL, "--get-plugin-list", 0)) {
+ else if (isArg(i, argc, argv, NULL, "--get-plugin-list", 0)) {
args.m_getPluginList = true;
return true;
}
- if (isArg(i, argc, argv, NULL, "--get-plugin-dir", 0)) {
+ else if (isArg(i, argc, argv, NULL, "--get-plugin-dir", 0)) {
args.m_getPluginDir = true;
return true;
}
- if (isArg(i, argc, argv, NULL, "--get-profile-dir", 0)) {
+ else if (isArg(i, argc, argv, NULL, "--get-profile-dir", 0)) {
args.m_getProfileDir = true;
return true;
}
+ else if (isArg(i, argc, argv, NULL, "--get-arch", 0)) {
+ args.m_getArch = true;
+ return true;
+ }
else {
return false;
}
diff --git a/src/lib/synergy/ToolApp.cpp b/src/lib/synergy/ToolApp.cpp
index fac45e39..4fd9518f 100644
--- a/src/lib/synergy/ToolApp.cpp
+++ b/src/lib/synergy/ToolApp.cpp
@@ -79,6 +79,9 @@ ToolApp::run(int argc, char** argv)
else if (m_args.m_getProfileDir) {
std::cout << ARCH->getProfileDirectory() << std::endl;
}
+ else if (m_args.m_getArch) {
+ std::cout << ARCH->getPlatformName() << std::endl;
+ }
else {
throw XSynergy("Nothing to do");
}
diff --git a/src/lib/synergy/ToolArgs.h b/src/lib/synergy/ToolArgs.h
index 1ad05513..695fe0a0 100644
--- a/src/lib/synergy/ToolArgs.h
+++ b/src/lib/synergy/ToolArgs.h
@@ -29,4 +29,5 @@ public:
bool m_getPluginList;
bool m_getPluginDir;
bool m_getProfileDir;
+ bool m_getArch;
};
diff --git a/src/setup/win32/Product.wxs b/src/setup/win32/Product.wxs
index 1f4e9beb..df61f862 100644
--- a/src/setup/win32/Product.wxs
+++ b/src/setup/win32/Product.wxs
@@ -90,6 +90,8 @@
+
+