From 9b8b6c7db834fe36f9effdac466decb3cf4a71b7 Mon Sep 17 00:00:00 2001 From: Alberto Mardegan Date: Mon, 15 Jul 2013 12:12:08 +0300 Subject: Fix QDBusAbstractInterface::isValid() for peer connections Do not attempt to lookup the service owner on peer connections (it will fail). Make QDBusAbstractInterface::isValid() return a sensible result on peer connections, instead of always returning false. Task-number: QTBUG-32374 Change-Id: I1b02feaffb3b255188f8d63306f89f5034a32f22 Reviewed-by: Thiago Macieira --- src/dbus/qdbusabstractinterface.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/dbus/qdbusabstractinterface.cpp') diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp index 53def1beb6..0b584963ee 100644 --- a/src/dbus/qdbusabstractinterface.cpp +++ b/src/dbus/qdbusabstractinterface.cpp @@ -288,7 +288,8 @@ QDBusAbstractInterface::QDBusAbstractInterface(QDBusAbstractInterfacePrivate &d, if (d.isValid && d.connection.isConnected() && !d.service.isEmpty() - && !d.service.startsWith(QLatin1Char(':'))) + && !d.service.startsWith(QLatin1Char(':')) + && d.connectionPrivate()->mode != QDBusConnectionPrivate::PeerMode) d_func()->connection.connect(QLatin1String(DBUS_SERVICE_DBUS), // service QString(), // path QLatin1String(DBUS_INTERFACE_DBUS), // interface @@ -313,7 +314,8 @@ QDBusAbstractInterface::QDBusAbstractInterface(const QString &service, const QSt if (d_func()->isValid && d_func()->connection.isConnected() && !service.isEmpty() - && !service.startsWith(QLatin1Char(':'))) + && !service.startsWith(QLatin1Char(':')) + && d_func()->connectionPrivate()->mode != QDBusConnectionPrivate::PeerMode) d_func()->connection.connect(QLatin1String(DBUS_SERVICE_DBUS), // service QString(), // path QLatin1String(DBUS_INTERFACE_DBUS), // interface @@ -340,7 +342,13 @@ QDBusAbstractInterface::~QDBusAbstractInterface() */ bool QDBusAbstractInterface::isValid() const { - return !d_func()->currentOwner.isEmpty(); + Q_D(const QDBusAbstractInterface); + /* We don't retrieve the owner name for peer connections */ + if (d->connectionPrivate() && d->connectionPrivate()->mode == QDBusConnectionPrivate::PeerMode) { + return d->isValid; + } else { + return !d->currentOwner.isEmpty(); + } } /*! -- cgit v1.2.3