summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2020-12-17 12:47:02 +0100
committerTimur Pocheptsov <timur.pocheptsov@qt.io>2021-01-27 16:54:46 +0100
commit7687e2a4295fedd844c46f921b78f21102d26685 (patch)
tree8c39e852e33421ef7654e87d865a2665f3c6bd01
parent061254ed1252eab63e8aca886b6229740cfd27c1 (diff)
Port QLocalServer to the new property system
Task-number: QTBUG-85520 Change-Id: Iee43a2e9e2d4847dad3b8be345d562af9aa3b690 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
-rw-r--r--src/network/socket/qlocalserver.cpp6
-rw-r--r--src/network/socket/qlocalserver.h5
-rw-r--r--src/network/socket/qlocalserver_p.h3
-rw-r--r--src/network/socket/qlocalserver_unix.cpp13
-rw-r--r--src/network/socket/qlocalserver_win.cpp8
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp16
6 files changed, 39 insertions, 12 deletions
diff --git a/src/network/socket/qlocalserver.cpp b/src/network/socket/qlocalserver.cpp
index bce5b9a1a4..16dc907149 100644
--- a/src/network/socket/qlocalserver.cpp
+++ b/src/network/socket/qlocalserver.cpp
@@ -185,6 +185,12 @@ QLocalServer::SocketOptions QLocalServer::socketOptions() const
return d->socketOptions;
}
+QBindable<QLocalServer::SocketOptions> QLocalServer::bindableSocketOptions()
+{
+ Q_D(QLocalServer);
+ return &d->socketOptions;
+}
+
/*!
\since 5.10
Returns the native socket descriptor the server uses to listen
diff --git a/src/network/socket/qlocalserver.h b/src/network/socket/qlocalserver.h
index 211aa94d85..22b99d3e67 100644
--- a/src/network/socket/qlocalserver.h
+++ b/src/network/socket/qlocalserver.h
@@ -43,6 +43,8 @@
#include <QtNetwork/qtnetworkglobal.h>
#include <QtNetwork/qabstractsocket.h>
+#include <QtCore/qproperty.h>
+
QT_REQUIRE_CONFIG(localserver);
QT_BEGIN_NAMESPACE
@@ -54,7 +56,7 @@ class Q_NETWORK_EXPORT QLocalServer : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QLocalServer)
- Q_PROPERTY(SocketOptions socketOptions READ socketOptions WRITE setSocketOptions)
+ Q_PROPERTY(SocketOptions socketOptions READ socketOptions WRITE setSocketOptions BINDABLE bindableSocketOptions)
Q_SIGNALS:
void newConnection();
@@ -91,6 +93,7 @@ public:
void setSocketOptions(SocketOptions options);
SocketOptions socketOptions() const;
+ QBindable<SocketOptions> bindableSocketOptions();
qintptr socketDescriptor() const;
diff --git a/src/network/socket/qlocalserver_p.h b/src/network/socket/qlocalserver_p.h
index f331a3f10d..5907874b60 100644
--- a/src/network/socket/qlocalserver_p.h
+++ b/src/network/socket/qlocalserver_p.h
@@ -126,7 +126,8 @@ public:
QQueue<QLocalSocket*> pendingConnections;
QString errorString;
QAbstractSocket::SocketError error;
- QLocalServer::SocketOptions socketOptions;
+
+ Q_OBJECT_BINDABLE_PROPERTY(QLocalServerPrivate, QLocalServer::SocketOptions, socketOptions)
};
QT_END_NAMESPACE
diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp
index ea7e8e1e0e..45fdc6dd74 100644
--- a/src/network/socket/qlocalserver_unix.cpp
+++ b/src/network/socket/qlocalserver_unix.cpp
@@ -94,7 +94,8 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName)
QScopedPointer<QTemporaryDir> tempDir;
// Check any of the flags
- if (socketOptions & QLocalServer::WorldAccessOption) {
+ const auto options = socketOptions.value();
+ if (options & QLocalServer::WorldAccessOption) {
QFileInfo serverNameFileInfo(fullServerName);
tempDir.reset(new QTemporaryDir(serverNameFileInfo.absolutePath() + QLatin1Char('/')));
if (!tempDir->isValid()) {
@@ -121,7 +122,7 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName)
return false;
}
- if (socketOptions & QLocalServer::WorldAccessOption) {
+ if (options & QLocalServer::WorldAccessOption) {
if (sizeof(addr.sun_path) < (uint)encodedTempPath.size() + 1) {
setError(QLatin1String("QLocalServer::listen"));
closeServer();
@@ -157,16 +158,16 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName)
return false;
}
- if (socketOptions & QLocalServer::WorldAccessOption) {
+ if (options & QLocalServer::WorldAccessOption) {
mode_t mode = 000;
- if (socketOptions & QLocalServer::UserAccessOption)
+ if (options & QLocalServer::UserAccessOption)
mode |= S_IRWXU;
- if (socketOptions & QLocalServer::GroupAccessOption)
+ if (options & QLocalServer::GroupAccessOption)
mode |= S_IRWXG;
- if (socketOptions & QLocalServer::OtherAccessOption)
+ if (options & QLocalServer::OtherAccessOption)
mode |= S_IRWXO;
if (::chmod(encodedTempPath.constData(), mode) == -1) {
diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp
index 6d92ebe93a..a05722987c 100644
--- a/src/network/socket/qlocalserver_win.cpp
+++ b/src/network/socket/qlocalserver_win.cpp
@@ -77,7 +77,7 @@ bool QLocalServerPrivate::addListener()
QByteArray tokenGroupBuffer;
// create security descriptor if access options were specified
- if ((socketOptions & QLocalServer::WorldAccessOption)) {
+ if ((socketOptions.value() & QLocalServer::WorldAccessOption)) {
pSD.reset(new SECURITY_DESCRIPTOR);
if (!InitializeSecurityDescriptor(pSD.data(), SECURITY_DESCRIPTOR_REVISION)) {
setError(QLatin1String("QLocalServerPrivate::addListener"));
@@ -143,21 +143,21 @@ bool QLocalServerPrivate::addListener()
auto acl = reinterpret_cast<PACL>(aclBuffer.data());
InitializeAcl(acl, aclSize, ACL_REVISION_DS);
- if (socketOptions & QLocalServer::UserAccessOption) {
+ if (socketOptions.value() & QLocalServer::UserAccessOption) {
if (!AddAccessAllowedAce(acl, ACL_REVISION, FILE_ALL_ACCESS, pTokenUser->User.Sid)) {
setError(QLatin1String("QLocalServerPrivate::addListener"));
FreeSid(worldSID);
return false;
}
}
- if (socketOptions & QLocalServer::GroupAccessOption) {
+ if (socketOptions.value() & QLocalServer::GroupAccessOption) {
if (!AddAccessAllowedAce(acl, ACL_REVISION, FILE_ALL_ACCESS, pTokenGroup->PrimaryGroup)) {
setError(QLatin1String("QLocalServerPrivate::addListener"));
FreeSid(worldSID);
return false;
}
}
- if (socketOptions & QLocalServer::OtherAccessOption) {
+ if (socketOptions.value() & QLocalServer::OtherAccessOption) {
if (!AddAccessAllowedAce(acl, ACL_REVISION, FILE_ALL_ACCESS, worldSID)) {
setError(QLatin1String("QLocalServerPrivate::addListener"));
FreeSid(worldSID);
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 4a0f0a27ed..a5559cab70 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -38,6 +38,7 @@
#include <qtextstream.h>
#include <qdatastream.h>
#include <qelapsedtimer.h>
+#include <qproperty.h>
#include <QtNetwork/qlocalsocket.h>
#include <QtNetwork/qlocalserver.h>
@@ -126,6 +127,7 @@ private slots:
void verifyListenWithDescriptor();
void verifyListenWithDescriptor_data();
+ void serverBindingsAndProperties();
};
tst_QLocalSocket::tst_QLocalSocket()
@@ -1426,6 +1428,20 @@ void tst_QLocalSocket::verifyListenWithDescriptor_data()
}
+void tst_QLocalSocket::serverBindingsAndProperties()
+{
+ QLocalServer server;
+
+ QProperty<QLocalServer::SocketOptions> sockOpts;
+ server.bindableSocketOptions().setBinding(Qt::makePropertyBinding(sockOpts));
+ sockOpts = QLocalServer::GroupAccessOption | QLocalServer::UserAccessOption;
+ QCOMPARE(server.socketOptions(), sockOpts.value());
+
+ sockOpts.setBinding(server.bindableSocketOptions().makeBinding());
+ server.setSocketOptions(QLocalServer::OtherAccessOption);
+ QCOMPARE(sockOpts.value(), QLocalServer::OtherAccessOption);
+}
+
QTEST_MAIN(tst_QLocalSocket)
#include "tst_qlocalsocket.moc"