From aca0e939b35053db96391629783d991a2e930b4f Mon Sep 17 00:00:00 2001 From: kh1 Date: Thu, 19 Jun 2014 13:10:57 +0200 Subject: Initialize both client and server with default values. Change-Id: I51934b0de77b1062153f5f60be44d4bcf4be5ee5 Reviewed-by: Kai Koehne --- src/libs/installer/packagemanagercore_p.cpp | 5 +++-- src/libs/installer/protocol.h | 15 ++++++++++++++- src/libs/installer/remoteclient.cpp | 16 ++++++---------- src/libs/installer/remoteclient.h | 17 +++++------------ src/libs/installer/remoteclient_p.h | 27 +++++++++++++++------------ src/libs/installer/remoteserver.cpp | 8 ++------ src/libs/installer/remoteserver.h | 8 ++------ src/libs/installer/remoteserver_p.h | 7 ++++++- src/sdk/installerbase.cpp | 2 +- 9 files changed, 54 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index f929b5fa3..0ea6884fd 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -54,6 +54,7 @@ #include "packagemanagercore.h" #include "progresscoordinator.h" #include "qprocesswrapper.h" +#include "protocol.h" #include "qsettingswrapper.h" #include "remoteclient.h" @@ -230,10 +231,10 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core, q // Creates and initializes a remote client, makes us get admin rights for QFile, QSettings // and QProcess operations. int port = 30000 + qrand() % 1000; - RemoteClient::instance().init(port, QHostAddress::LocalHost, RemoteClient::Release); + RemoteClient::instance().init(port, QHostAddress::LocalHost, Protocol::Mode::Release); RemoteClient::instance().setStartServerCommand(QCoreApplication::applicationFilePath(), QStringList() << QLatin1String("--startserver") << QString::number(port) - << RemoteClient::instance().authorizationKey(), RemoteClient::Administrator); + << RemoteClient::instance().authorizationKey(), Protocol::StartAs::SuperUser); connect(this, SIGNAL(installationStarted()), m_core, SIGNAL(installationStarted())); connect(this, SIGNAL(installationFinished()), m_core, SIGNAL(installationFinished())); diff --git a/src/libs/installer/protocol.h b/src/libs/installer/protocol.h index cc084c221..8279cc640 100644 --- a/src/libs/installer/protocol.h +++ b/src/libs/installer/protocol.h @@ -45,11 +45,24 @@ namespace QInstaller { namespace Protocol { +enum struct Mode { + Debug, + Release +}; + +enum struct StartAs { + User, + SuperUser +}; + +const unsigned short DefaultPort = 39999; +const int DefaultHostAddress = 2; // QHostAddress::LocalHost +const char DefaultAuthorizationKey[] = "DefaultAuthorizationKey"; + const char Create[] = "Create"; const char Destroy[] = "Destroy"; const char Shutdown[] = "Shutdown"; const char Authorize[] = "Authorize"; -const char DebugAuthorizationKey[] = "DebugAuthorizationKey"; // QProcessWrapper const char QProcess[] = "QProcess"; diff --git a/src/libs/installer/remoteclient.cpp b/src/libs/installer/remoteclient.cpp index 8bab64999..94fbc43da 100644 --- a/src/libs/installer/remoteclient.cpp +++ b/src/libs/installer/remoteclient.cpp @@ -40,12 +40,9 @@ **************************************************************************/ #include "remoteclient.h" - -#include "protocol.h" #include "remoteclient_p.h" #include -#include namespace QInstaller { @@ -60,8 +57,6 @@ static RemoteClientGuard *gGuard = remoteClientGuard(); RemoteClient::RemoteClient() : d_ptr(new RemoteClientPrivate(this)) { - Q_D(RemoteClient); - d->m_key = QUuid::createUuid().toString(); } RemoteClient::~RemoteClient() @@ -89,7 +84,7 @@ void RemoteClient::setAuthorizationKey(const QString &key) d->m_key = key; } -void RemoteClient::init(quint16 port, const QHostAddress &address, Mode mode) +void RemoteClient::init(quint16 port, const QHostAddress &address, Protocol::Mode mode) { Q_D(RemoteClient); d->init(port, address, mode); @@ -110,7 +105,8 @@ bool RemoteClient::connect(QTcpSocket *socket) const while ((socket->state() == QAbstractSocket::ConnectingState) && (stopWatch.elapsed() < 10000) && (!d->m_quit)) { --tries; - qApp->processEvents(); + if (!QCoreApplication::closingDown()) + qApp->processEvents(); continue; } if ((socket->state() != QAbstractSocket::ConnectedState) || d->m_quit) @@ -148,19 +144,19 @@ void RemoteClient::setActive(bool active) } } -void RemoteClient::setStartServerCommand(const QString &command, StartAs startAs) +void RemoteClient::setStartServerCommand(const QString &command, Protocol::StartAs startAs) { setStartServerCommand(command, QStringList(), startAs); } void RemoteClient::setStartServerCommand(const QString &command, const QStringList &arguments, - StartAs startAs) + Protocol::StartAs startAs) { Q_D(RemoteClient); d->maybeStopServer(); d->m_serverCommand = command; d->m_serverArguments = arguments; - d->m_startServerAsAdmin = startAs; + d->m_startServerAs = startAs; } } // namespace QInstaller diff --git a/src/libs/installer/remoteclient.h b/src/libs/installer/remoteclient.h index 84def80da..1c3b2f2ce 100644 --- a/src/libs/installer/remoteclient.h +++ b/src/libs/installer/remoteclient.h @@ -43,6 +43,7 @@ #define REMOTECLIENT_H #include "installer_global.h" +#include "protocol.h" #include @@ -63,19 +64,10 @@ class INSTALLER_EXPORT RemoteClient : public QObject friend class RemoteClientGuard; public: - enum Mode { - Debug, - Release - }; - - enum StartAs { - User, - Administrator - }; static RemoteClient &instance(); bool connect(QTcpSocket *socket) const; - void init(quint16 port, const QHostAddress &address, Mode mode); + void init(quint16 port, const QHostAddress &address, Protocol::Mode mode); QString authorizationKey() const; void setAuthorizationKey(const QString &key); @@ -83,8 +75,9 @@ public: bool isActive() const; void setActive(bool active); - void setStartServerCommand(const QString &command, StartAs startAs); - void setStartServerCommand(const QString &command, const QStringList &arguments, StartAs start); + void setStartServerCommand(const QString &command, Protocol::StartAs startAs); + void setStartServerCommand(const QString &command, const QStringList &arguments, + Protocol::StartAs start); private: RemoteClient(); diff --git a/src/libs/installer/remoteclient_p.h b/src/libs/installer/remoteclient_p.h index 454864d62..d2aebdb5d 100644 --- a/src/libs/installer/remoteclient_p.h +++ b/src/libs/installer/remoteclient_p.h @@ -56,6 +56,7 @@ #include #include #include +#include namespace QInstaller { @@ -114,12 +115,15 @@ public: RemoteClientPrivate(RemoteClient *parent) : q_ptr(parent) , m_mutex(QMutex::Recursive) - , m_port(0) - , m_startServerAsAdmin(false) + , m_address(Protocol::DefaultHostAddress) + , m_port(Protocol::DefaultPort) + , m_startServerAs(Protocol::StartAs::User) , m_serverStarted(false) , m_serverStarting(false) , m_active(false) + , m_key(QLatin1String(Protocol::DefaultAuthorizationKey)) , m_thread(new KeepAliveThread(parent)) + , m_mode(Protocol::Mode::Debug) , m_quit(false) { m_thread->moveToThread(m_thread); @@ -127,20 +131,20 @@ public: ~RemoteClientPrivate() { - QMetaObject::invokeMethod(m_thread, "quit"); + QMetaObject::invokeMethod(m_thread, "quit", Qt::QueuedConnection); } - void init(quint16 port, const QHostAddress &address, RemoteClient::Mode mode) + void init(quint16 port, const QHostAddress &address, Protocol::Mode mode) { m_port = port; m_mode = mode; m_address = address; - if (mode == RemoteClient::Debug) { + if (mode == Protocol::Mode::Debug) { m_active = true; m_serverStarted = true; - m_key = QLatin1String(Protocol::DebugAuthorizationKey); - } else if (m_mode == RemoteClient::Release) { + } else if (m_mode == Protocol::Mode::Release) { + m_key = QUuid::createUuid().toString(); m_thread->start(); } else { Q_ASSERT_X(false, Q_FUNC_INFO, "RemoteClient mode not set properly."); @@ -156,9 +160,8 @@ public: return; m_serverStarting = true; - - if (m_startServerAsAdmin) { - m_serverStarted = AdminAuthorization::execute(0, m_serverCommand, m_serverArguments); + if (m_startServerAs == Protocol::StartAs::SuperUser) { + m_serverStarted = AdminAuthorization::execute(0, m_serverCommand, m_serverArguments); if (!m_serverStarted) { // something went wrong with authorizing, either user pressed cancel or entered @@ -223,7 +226,7 @@ private: QHostAddress m_address; quint16 m_port; QString m_socket; - bool m_startServerAsAdmin; + Protocol::StartAs m_startServerAs; bool m_serverStarted; bool m_serverStarting; bool m_active; @@ -231,7 +234,7 @@ private: QStringList m_serverArguments; QString m_key; QThread *m_thread; - RemoteClient::Mode m_mode; + Protocol::Mode m_mode; volatile bool m_quit; }; diff --git a/src/libs/installer/remoteserver.cpp b/src/libs/installer/remoteserver.cpp index 2bd74c03a..3233e92ca 100644 --- a/src/libs/installer/remoteserver.cpp +++ b/src/libs/installer/remoteserver.cpp @@ -40,8 +40,6 @@ **************************************************************************/ #include "remoteserver.h" - -#include "protocol.h" #include "remoteserver_p.h" namespace QInstaller { @@ -75,11 +73,9 @@ void RemoteServer::start() connect (d->m_tcpServer, SIGNAL(newIncommingConnection()), this, SLOT(restartWatchdog())); d->m_thread.start(); - if (d->m_mode == RemoteServer::Release) { + if (d->m_mode == Protocol::Mode::Release) { connect(d->m_watchdog.data(), SIGNAL(timeout()), this, SLOT(deleteLater())); d->m_watchdog->start(); - } else { - setAuthorizationKey(QLatin1String(Protocol::DebugAuthorizationKey)); } } @@ -101,7 +97,7 @@ void RemoteServer::setAuthorizationKey(const QString &authorizationKey) d->m_key = authorizationKey; } -void RemoteServer::init(quint16 port, const QHostAddress &address, Mode mode) +void RemoteServer::init(quint16 port, const QHostAddress &address, Protocol::Mode mode) { Q_D(RemoteServer); d->m_port = port; diff --git a/src/libs/installer/remoteserver.h b/src/libs/installer/remoteserver.h index e1158dd68..ca884d9b1 100644 --- a/src/libs/installer/remoteserver.h +++ b/src/libs/installer/remoteserver.h @@ -43,6 +43,7 @@ #define REMOTESERVER_H #include "installer_global.h" +#include "protocol.h" #include @@ -61,16 +62,11 @@ class INSTALLER_EXPORT RemoteServer : public QObject Q_DECLARE_PRIVATE(RemoteServer) public: - enum Mode { - Debug, - Release - }; - explicit RemoteServer(QObject *parent = 0); ~RemoteServer(); void start(); - void init(quint16 port, const QHostAddress &address, Mode mode); + void init(quint16 port, const QHostAddress &address, Protocol::Mode mode); QString authorizationKey() const; void setAuthorizationKey(const QString &key); diff --git a/src/libs/installer/remoteserver_p.h b/src/libs/installer/remoteserver_p.h index 72ee0267c..5ce24ca67 100644 --- a/src/libs/installer/remoteserver_p.h +++ b/src/libs/installer/remoteserver_p.h @@ -42,6 +42,7 @@ #ifndef REMOTESERVER_P_H #define REMOTESERVER_P_H +#include "protocol.h" #include "remoteserver.h" #include "remoteserverconnection.h" @@ -100,6 +101,10 @@ public: explicit RemoteServerPrivate(RemoteServer *server) : q_ptr(server) , m_tcpServer(0) + , m_key(QLatin1String(Protocol::DefaultAuthorizationKey)) + , m_port(Protocol::DefaultPort) + , m_address(Protocol::DefaultHostAddress) + , m_mode(Protocol::Mode::Debug) , m_watchdog(new QTimer) { m_watchdog->setInterval(30000); @@ -114,7 +119,7 @@ private: quint16 m_port; QThread m_thread; QHostAddress m_address; - RemoteServer::Mode m_mode; + Protocol::Mode m_mode; QScopedPointer m_watchdog; }; diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp index e02ccfa86..590a3e1fb 100644 --- a/src/sdk/installerbase.cpp +++ b/src/sdk/installerbase.cpp @@ -165,7 +165,7 @@ int main(int argc, char *argv[]) SDKApp app(argc, argv); RemoteServer *const server = new RemoteServer(); QObject::connect(server, SIGNAL(destroyed()), &app, SLOT(quit())); - server->init(args[2].toInt(), QHostAddress::LocalHost, RemoteServer::Release); + server->init(args[2].toInt(), QHostAddress::LocalHost, Protocol::Mode::Release); if (args.count() >= 4) server->setAuthorizationKey(args[3]); server->start(); -- cgit v1.2.3