Merge branch 'v1-dev' into v1-issue-6471-retry-loop

This commit is contained in:
Jamie Newbon 2019-04-30 11:42:46 +01:00
commit e29ee68ff9
No known key found for this signature in database
GPG Key ID: 9618C9BB2FF44DB5
18 changed files with 353 additions and 25 deletions

62
.cirrus.yml Normal file
View File

@ -0,0 +1,62 @@
gcp_credentials: ENCRYPTED[d3110e2399b82e1d2adb6f9294917064a448a4d102c42c5023815723841db4ff7aa1d0df64a44281ed25b3adbeb08eff]
windows_task:
gce_instance:
image_project: buildcluster-237411
image_name: windows2019-vs2017-ramdisk
platform: windows
zone: us-central1-a
type: n1-highcpu-16
disk: 32
use_ssd: true
env:
BONJOUR_SDK_HOME: C:\Program Files\Bonjour SDK\
CMAKE_PREFIX_PATH: C:\Qt\5.9.5\msvc2017_64
CIRRUS_WORKING_DIR: D:\
build_script:
- .\CI\Windows\build.bat
ubuntu1604_task:
use_compute_credits: true
container:
dockerfile: CI/ubuntu1604.Dockerfile
build_script:
- pwd; ls -la
- chmod +x ./CI/build.sh
- ./CI/build.sh
ubuntu1804_task:
use_compute_credits: true
container:
dockerfile: CI/ubuntu1804.Dockerfile
build_script:
- pwd; ls -la
- chmod +x ./CI/build.sh
- ./CI/build.sh
ubuntu1904_task:
use_compute_credits: true
container:
dockerfile: CI/ubuntu1904.Dockerfile
build_script:
- pwd; ls -la
- chmod +x ./CI/build.sh
- ./CI/build.sh
macos_task:
use_compute_credits: true
osx_instance:
image: mojave-xcode-10.2
env:
PATH: /usr/local/opt/qt/bin:$PATH
install_script:
- brew install qt
build_script:
- mkdir build
- cd build
- cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -DCMAKE_CONFIGURATION_TYPES=$CMAKE_BUILD_TYPE ..
- make

56
CI/MacOS/qtifwsilent.qs Normal file
View File

@ -0,0 +1,56 @@
function Controller() {
installer.autoRejectMessageBoxes();
installer.installationFinished.connect(function() {
gui.clickButton(buttons.NextButton);
})
}
Controller.prototype.WelcomePageCallback = function() {
gui.clickButton(buttons.NextButton, 3000);
}
Controller.prototype.CredentialsPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.IntroductionPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.TargetDirectoryPageCallback = function()
{
gui.currentPageWidget().TargetDirectoryLineEdit.setText(installer.value("HomeDir") + "/Qt");
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.deselectAll();
widget.selectComponent("qt.595.clang_64")
gui.clickButton(buttons.NextButton);
}
Controller.prototype.LicenseAgreementPageCallback = function() {
gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.StartMenuDirectoryPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ReadyForInstallationPageCallback = function()
{
gui.clickButton(buttons.NextButton);
}
Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
checkBoxForm.launchQtCreatorCheckBox.checked = false;
}
gui.clickButton(buttons.FinishButton);
}

6
CI/Windows/build.bat Normal file
View File

@ -0,0 +1,6 @@
SET VS_INSTALL_PATH=C:\"Program Files (x86)"\"Microsoft Visual Studio"\2019\Community\
call %VS_INSTALL_PATH%Common7\Tools\VsDevCmd.bat
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Debug ..
msbuild synergy-core.sln /p:Platform="x64" /p:Configuration=Debug /m

54
CI/Windows/qtifwsilent.qs Normal file
View File

@ -0,0 +1,54 @@
function Controller() {
installer.autoRejectMessageBoxes();
installer.installationFinished.connect(function() {
gui.clickButton(buttons.NextButton);
})
}
Controller.prototype.WelcomePageCallback = function() {
gui.clickButton(buttons.NextButton, 3000);
}
Controller.prototype.CredentialsPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.IntroductionPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.TargetDirectoryPageCallback = function() {
gui.currentPageWidget().TargetDirectoryLineEdit.setText(installer.environmentVariable("QT_INSTALL_DIR"));
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.deselectAll();
widget.selectComponent("qt.595.win32_msvc2015");
widget.selectComponent("qt.595.win64_msvc2015_64");
widget.selectComponent("qt.595.qtscript");
widget.selectComponent("qt.tools.vcredist_msvc2015_x86");
widget.selectComponent("qt.tools.vcredist_msvc2015_x64");
gui.clickButton(buttons.NextButton);
}
Controller.prototype.LicenseAgreementPageCallback = function() {
gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.StartMenuDirectoryPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ReadyForInstallationPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm;
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox)
checkBoxForm.launchQtCreatorCheckBox.checked = false;
gui.clickButton(buttons.FinishButton);
}

6
CI/build.sh Normal file
View File

@ -0,0 +1,6 @@
pwd
ls -la
mkdir build
cd build
cmake ..
make

12
CI/package.sh Normal file
View File

@ -0,0 +1,12 @@
cd ${CIRRUS_WORKING_DIR}
source ./build/version
SYNERGY_VERSION="$SYNERGY_VERSION_MAJOR.$SYNERGY_VERSION_MINOR.$SYNERGY_VERSION_PATCH"
SYNERGY_REVISION=`git rev-parse --short=8 HEAD`
SYNERGY_DEB_VERSION="${SYNERGY_VERSION}.${SYNERGY_VERSION_STAGE}~b${BUILD_NUMBER}+${SYNERGY_REVISION}"
dch --create --package "synergy" --controlmaint --distribution unstable --newversion $SYNERGY_DEB_VERSION "Initial release"
export DEB_BUILD_OPTIONS="parallel=4"
debuild --preserve-envvar SYNERGY_* --preserve-envvar GIT_COMMIT --preserve-envvar BUILD_NUMBER

24
CI/ubuntu1604.Dockerfile Normal file
View File

@ -0,0 +1,24 @@
#
# Ubuntu Dockerfile
#
# https://github.com/dockerfile/ubuntu
#
# Pull base image.
FROM ubuntu:16.04
# Install.
RUN \
sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
apt-get update && \
apt-get install -y git cmake qtbase5-dev build-essential libx11-dev libxtst-dev libgl1-mesa-dev libssl-dev libavahi-compat-libdnssd-dev && \
apt-get install -y debhelper devscripts
# Set environment variables.
ENV HOME /root
# Define working directory.
WORKDIR /root
# Define default command.
CMD ["bash"]

24
CI/ubuntu1804.Dockerfile Normal file
View File

@ -0,0 +1,24 @@
#
# Ubuntu Dockerfile
#
# https://github.com/dockerfile/ubuntu
#
# Pull base image.
FROM ubuntu:18.04
# Install.
RUN \
sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
apt-get update && \
apt-get install -y git cmake qtbase5-dev build-essential libx11-dev libxtst-dev libgl1-mesa-dev libssl-dev libavahi-compat-libdnssd-dev && \
apt-get install -y debhelper devscripts
# Set environment variables.
ENV HOME /root
# Define working directory.
WORKDIR /root
# Define default command.
CMD ["bash"]

24
CI/ubuntu1904.Dockerfile Normal file
View File

@ -0,0 +1,24 @@
#
# Ubuntu Dockerfile
#
# https://github.com/dockerfile/ubuntu
#
# Pull base image.
FROM ubuntu:19.04
# Install.
RUN \
sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
apt-get update && \
apt-get install -y git cmake qtbase5-dev build-essential libx11-dev libxtst-dev libgl1-mesa-dev libssl-dev libavahi-compat-libdnssd-dev && \
apt-get install -y debhelper devscripts
# Set environment variables.
ENV HOME /root
# Define working directory.
WORKDIR /root
# Define default command.
CMD ["bash"]

View File

@ -336,6 +336,23 @@ macro (configure_files srcDir destDir)
endforeach (templateFile) endforeach (templateFile)
endmacro (configure_files) endmacro (configure_files)
macro(generate_versionfile)
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux")
FILE(WRITE ${CMAKE_BINARY_DIR}/version
"export SYNERGY_VERSION_MAJOR=\"${SYNERGY_VERSION_MAJOR}\"\n"
"export SYNERGY_VERSION_MINOR=\"${SYNERGY_VERSION_MINOR}\"\n"
"export SYNERGY_VERSION_PATCH=\"${SYNERGY_VERSION_PATCH}\"\n"
"export SYNERGY_VERSION_STAGE=\"${SYNERGY_VERSION_STAGE}\"\n")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
FILE(WRITE ${CMAKE_BINARY_DIR}/version
"$env:SYNERGY_VERSION_MAJOR=\"${SYNERGY_VERSION_MAJOR}\"\n"
"$env:SYNERGY_VERSION_MINOR=\"${SYNERGY_VERSION_MINOR}\"\n"
"$env:SYNERGY_VERSION_PATCH=\"${SYNERGY_VERSION_PATCH}\"\n"
"$env:SYNERGY_VERSION_STAGE=\"${SYNERGY_VERSION_STAGE}\"\n")
endif()
endmacro(generate_versionfile)
if (${SYNERGY_BUILD_LEGACY_INSTALLER}) if (${SYNERGY_BUILD_LEGACY_INSTALLER})
# #
# macOS app Bundle # macOS app Bundle
@ -347,6 +364,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set (SYNERGY_BUNDLE_APP_DIR ${SYNERGY_BUNDLE_DIR}/Synergy.app) set (SYNERGY_BUNDLE_APP_DIR ${SYNERGY_BUNDLE_DIR}/Synergy.app)
set (SYNERGY_BUNDLE_BINARY_DIR ${SYNERGY_BUNDLE_APP_DIR}/Contents/MacOS) set (SYNERGY_BUNDLE_BINARY_DIR ${SYNERGY_BUNDLE_APP_DIR}/Contents/MacOS)
generate_versionfile()
configure_files (${SYNERGY_BUNDLE_SOURCE_DIR} ${SYNERGY_BUNDLE_DIR}) configure_files (${SYNERGY_BUNDLE_SOURCE_DIR} ${SYNERGY_BUNDLE_DIR})
endif() endif()
@ -356,6 +374,7 @@ endif()
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
message (STATUS "Configuring the v1 installer") message (STATUS "Configuring the v1 installer")
configure_files (${CMAKE_CURRENT_SOURCE_DIR}/dist/wix ${CMAKE_BINARY_DIR}/installer) configure_files (${CMAKE_CURRENT_SOURCE_DIR}/dist/wix ${CMAKE_BINARY_DIR}/installer)
generate_versionfile()
endif() endif()
# #
@ -369,6 +388,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
else() else()
install(FILES res/synergy.desktop DESTINATION share/applications) install(FILES res/synergy.desktop DESTINATION share/applications)
endif() endif()
generate_versionfile()
endif() endif()
else() else()

View File

@ -25,6 +25,7 @@
#include <QtCore> #include <QtCore>
#include <QtGui> #include <QtGui>
#include <qbuttongroup.h>
ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action) : ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),

View File

@ -56,7 +56,8 @@ AppConfig::AppConfig(QSettings* settings) :
m_ElevateMode(defaultElevateMode), m_ElevateMode(defaultElevateMode),
m_CryptoEnabled(false), m_CryptoEnabled(false),
m_AutoHide(false), m_AutoHide(false),
m_LastExpiringWarningTime(0) m_LastExpiringWarningTime(0),
m_AutoConfigServer()
{ {
Q_ASSERT(m_pSettings); Q_ASSERT(m_pSettings);
@ -128,6 +129,8 @@ bool AppConfig::startedBefore() const { return m_StartedBefore; }
bool AppConfig::autoConfig() const { return m_AutoConfig; } bool AppConfig::autoConfig() const { return m_AutoConfig; }
QString AppConfig::autoConfigServer() const { return m_AutoConfigServer; }
void AppConfig::loadSettings() void AppConfig::loadSettings()
{ {
m_ScreenName = settings().value("screenName", QHostInfo::localHostName()).toString(); m_ScreenName = settings().value("screenName", QHostInfo::localHostName()).toString();
@ -140,6 +143,7 @@ void AppConfig::loadSettings()
m_Language = settings().value("language", QLocale::system().name()).toString(); m_Language = settings().value("language", QLocale::system().name()).toString();
m_StartedBefore = settings().value("startedBefore", false).toBool(); m_StartedBefore = settings().value("startedBefore", false).toBool();
m_AutoConfig = settings().value("autoConfig", false).toBool(); m_AutoConfig = settings().value("autoConfig", false).toBool();
m_AutoConfigServer = settings().value("autoConfigServer", "").toString();
QVariant elevateMode = settings().value("elevateModeEnum"); QVariant elevateMode = settings().value("elevateModeEnum");
if (!elevateMode.isValid()) { if (!elevateMode.isValid()) {
elevateMode = settings().value ("elevateMode", elevateMode = settings().value ("elevateMode",
@ -168,6 +172,7 @@ void AppConfig::saveSettings()
settings().setValue("language", m_Language); settings().setValue("language", m_Language);
settings().setValue("startedBefore", m_StartedBefore); settings().setValue("startedBefore", m_StartedBefore);
settings().setValue("autoConfig", m_AutoConfig); settings().setValue("autoConfig", m_AutoConfig);
settings().setValue("autoConfigServer", m_AutoConfigServer);
// Refer to enum ElevateMode declaration for insight in to why this // Refer to enum ElevateMode declaration for insight in to why this
// flag is mapped this way // flag is mapped this way
settings().setValue("elevateMode", m_ElevateMode == ElevateAlways); settings().setValue("elevateMode", m_ElevateMode == ElevateAlways);
@ -231,6 +236,11 @@ void AppConfig::setAutoConfig(bool autoConfig)
m_AutoConfig = autoConfig; m_AutoConfig = autoConfig;
} }
void AppConfig::setAutoConfigServer(QString autoConfigServer)
{
m_AutoConfigServer = autoConfigServer;
}
#ifndef SYNERGY_ENTERPRISE #ifndef SYNERGY_ENTERPRISE
void AppConfig::setEdition(Edition e) { void AppConfig::setEdition(Edition e) {
m_Edition = e; m_Edition = e;

View File

@ -77,6 +77,8 @@ class AppConfig: public QObject
bool startedBefore() const; bool startedBefore() const;
bool autoConfig() const; bool autoConfig() const;
void setAutoConfig(bool autoConfig); void setAutoConfig(bool autoConfig);
QString autoConfigServer() const;
void setAutoConfigServer(QString autoConfigServer);
#ifndef SYNERGY_ENTERPRISE #ifndef SYNERGY_ENTERPRISE
void setEdition(Edition); void setEdition(Edition);
Edition edition() const; Edition edition() const;
@ -138,6 +140,7 @@ protected:
QString m_Language; QString m_Language;
bool m_StartedBefore; bool m_StartedBefore;
bool m_AutoConfig; bool m_AutoConfig;
QString m_AutoConfigServer;
ElevateMode m_ElevateMode; ElevateMode m_ElevateMode;
Edition m_Edition; Edition m_Edition;
QString m_ActivateEmail; QString m_ActivateEmail;

View File

@ -180,6 +180,8 @@ MainWindow::MainWindow (QSettings& settings, AppConfig& appConfig,
#ifndef SYNERGY_ENTERPRISE #ifndef SYNERGY_ENTERPRISE
updateZeroconfService(); updateZeroconfService();
updateAutoConfigWidgets(); updateAutoConfigWidgets();
addZeroconfServer(m_AppConfig->autoConfigServer());
#endif #endif
} }
@ -751,17 +753,37 @@ bool MainWindow::clientArgs(QStringList& args, QString& app)
args << serverIp + ":" + QString::number(appConfig().port()); args << serverIp + ":" + QString::number(appConfig().port());
return true; return true;
} }
else {
show();
QMessageBox::warning(
this, tr("No server selected"),
tr("No auto config server was selected, try manual mode instead."));
return false;
}
} }
#endif #endif
if (m_pLineEditHostname->text().isEmpty()) { if (m_pLineEditHostname->text().isEmpty())
show(); {
QMessageBox::warning( #ifndef SYNERGY_ENTERPRISE
this, tr("Hostname is empty"), //check if autoconfig mode is enabled
tr("Please fill in a hostname for the synergy client to connect to.")); if (!appConfig().autoConfig())
return false; {
} #endif
show();
QMessageBox::warning(
this, tr("Hostname is empty"),
tr("Please fill in a hostname for the synergy client to connect to."));
return false;
#ifndef SYNERGY_ENTERPRISE
}
else
{
return false;
}
#endif
}
args << m_pLineEditHostname->text() + ":" + QString::number(appConfig().port()); args << m_pLineEditHostname->text() + ":" + QString::number(appConfig().port());
return true; return true;
} }
@ -1072,13 +1094,8 @@ void MainWindow::changeEvent(QEvent* event)
} }
} }
void MainWindow::zeroconfServerDetected(const QString name) void MainWindow::addZeroconfServer(const QString name)
{ {
// don't add to the server combo box if not in client mode.
if (synergyType() != synergyClient) {
return;
}
// don't add yourself to the server list. // don't add yourself to the server list.
if (getIPAddresses().contains(name)) { if (getIPAddresses().contains(name)) {
return; return;
@ -1087,10 +1104,6 @@ void MainWindow::zeroconfServerDetected(const QString name)
if (m_pComboServerList->findText(name) == -1) { if (m_pComboServerList->findText(name) == -1) {
m_pComboServerList->addItem(name); m_pComboServerList->addItem(name);
} }
if (m_pComboServerList->count() > 1) {
m_pComboServerList->show();
}
} }
void MainWindow::setEdition(Edition edition) void MainWindow::setEdition(Edition edition)
@ -1411,3 +1424,9 @@ void MainWindow::on_m_pLabelAutoConfig_linkActivated(const QString &)
{ {
m_pActionSettings->trigger(); m_pActionSettings->trigger();
} }
void MainWindow::on_m_pComboServerList_currentIndexChanged(const QString &server)
{
appConfig().setAutoConfigServer(server);
appConfig().saveSettings();
}

View File

@ -118,7 +118,7 @@ class MainWindow : public QMainWindow, public Ui::MainWindowBase
void showConfigureServer(const QString& message); void showConfigureServer(const QString& message);
void showConfigureServer() { showConfigureServer(""); } void showConfigureServer() { showConfigureServer(""); }
void autoAddScreen(const QString name); void autoAddScreen(const QString name);
void zeroconfServerDetected(const QString name); void addZeroconfServer(const QString name);
void updateLocalFingerprint(); void updateLocalFingerprint();
Zeroconf& zeroconf() { return *m_pZeroconf; } Zeroconf& zeroconf() { return *m_pZeroconf; }
#ifndef SYNERGY_ENTERPRISE #ifndef SYNERGY_ENTERPRISE
@ -240,6 +240,8 @@ private slots:
void on_m_pLabelAutoConfig_linkActivated(const QString &link); void on_m_pLabelAutoConfig_linkActivated(const QString &link);
void on_m_pComboServerList_currentIndexChanged(const QString &arg1);
signals: signals:
void windowShown(); void windowShown();
}; };

View File

@ -22,6 +22,7 @@
#include <QtCore> #include <QtCore>
#include <QtGui> #include <QtGui>
#include <qheaderview.h>
ScreenSetupView::ScreenSetupView(QWidget* parent) : ScreenSetupView::ScreenSetupView(QWidget* parent) :
QTableView(parent) QTableView(parent)

View File

@ -81,7 +81,7 @@ void ZeroconfService::serverDetected(const QList<ZeroconfRecord>& list)
registerService(false); registerService(false);
m_pMainWindow->appendLogInfo(tr("zeroconf server detected: %1").arg( m_pMainWindow->appendLogInfo(tr("zeroconf server detected: %1").arg(
record.serviceName)); record.serviceName));
m_pMainWindow->zeroconfServerDetected(record.serviceName); m_pMainWindow->addZeroconfServer(record.serviceName);
} }
} }

View File

@ -199,6 +199,7 @@ SecureSocket::doWrite()
{ {
static bool s_retry = false; static bool s_retry = false;
static int s_retrySize = 0; static int s_retrySize = 0;
static int s_staticBufferSize = 0;
static void* s_staticBuffer = NULL; static void* s_staticBuffer = NULL;
// write data // write data
@ -211,8 +212,13 @@ SecureSocket::doWrite()
} }
else { else {
bufferSize = m_outputBuffer.getSize(); bufferSize = m_outputBuffer.getSize();
s_staticBuffer = malloc(bufferSize); if (bufferSize != 0) {
memcpy(s_staticBuffer, m_outputBuffer.peek(bufferSize), bufferSize); if (bufferSize > s_staticBufferSize) {
s_staticBuffer = realloc(s_staticBuffer, bufferSize);
s_staticBufferSize = bufferSize;
}
memcpy(s_staticBuffer, m_outputBuffer.peek(bufferSize), bufferSize);
}
} }
if (bufferSize == 0) { if (bufferSize == 0) {
@ -224,8 +230,6 @@ SecureSocket::doWrite()
if (status > 0) { if (status > 0) {
s_retry = false; s_retry = false;
bufferSize = 0; bufferSize = 0;
free(s_staticBuffer);
s_staticBuffer = NULL;
} }
else if (status < 0) { else if (status < 0) {
return kBreak; return kBreak;