From 4eb5b11af789ad30f9e20b0527562d73825e6f33 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 23 Apr 2006 19:04:53 +0000 Subject: * qt/qdbusconnection_p.h: * qt/qdbusmetaobject.cpp: * qt/qdbusmetaobject_p.h: * qt/qdbusintegrator.cpp: Use the new merged-interface mode for the dynamic meta object. No need to guess which interface to call. * qt/qdbusabstractinterface_p.h: * qt/qdbusconnection.cpp: * qt/qdbusintegrator.cpp: * qt/qdbusinterface.cpp: * qt/qdbusinterface.h: Make findInterface always return a non-null pointer. Add a QDBusRef that looks and behaves like DCOPRef. --- qt/qdbusintegrator.cpp | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'qt/qdbusintegrator.cpp') diff --git a/qt/qdbusintegrator.cpp b/qt/qdbusintegrator.cpp index 4a72d197..4dabd435 100644 --- a/qt/qdbusintegrator.cpp +++ b/qt/qdbusintegrator.cpp @@ -1474,27 +1474,44 @@ QDBusConnectionPrivate::findInterface(const QString &service, const QString &path, const QString &interface) { - - if (!connection || !QDBusUtil::isValidObjectPath(path)) - return 0; - if (!interface.isEmpty() && !QDBusUtil::isValidInterfaceName(interface)) - return 0; - // check if it's there first -- FIXME: add binding mode + QDBusMetaObject *mo = 0; QString owner = getNameOwner(service); - if (owner.isEmpty()) - return 0; + if (connection && !owner.isEmpty() && QDBusUtil::isValidObjectPath(path) && + (interface.isEmpty() || QDBusUtil::isValidInterfaceName(interface))) + mo = findMetaObject(owner, path, interface); + + QDBusInterfacePrivate *p = new QDBusInterfacePrivate(QDBusConnection(name), this, owner, path, interface, mo); + + if (!mo) { + // invalid object + p->isValid = false; + p->lastError = lastError; + if (!lastError.isValid()) { + // try to determine why we couldn't get the data + if (!connection) + p->lastError = QDBusError(QDBusError::Disconnected, + QLatin1String("Not connected to D-Bus server")); + else if (owner.isEmpty()) + p->lastError = QDBusError(QDBusError::ServiceUnknown, + QString(QLatin1String("Service %1 is unknown")).arg(service)); + else if (!QDBusUtil::isValidObjectPath(path)) + p->lastError = QDBusError(QDBusError::InvalidArgs, + QString(QLatin1String("Object path %1 is invalid")).arg(path)); + else if (!interface.isEmpty() && !QDBusUtil::isValidInterfaceName(interface)) + p->lastError = QDBusError(QDBusError::InvalidArgs, + QString(QLatin1String("Interface %1 is invalid")).arg(interface)); + else + p->lastError = QDBusError(QDBusError::Other, QLatin1String("Unknown error")); + } + } - QString tmp(interface); - QDBusMetaObject *mo = findMetaObject(owner, path, tmp); - if (mo) - return new QDBusInterfacePrivate(QDBusConnection(name), this, owner, path, tmp, mo); - return 0; // error has been set + return p; } QDBusMetaObject * QDBusConnectionPrivate::findMetaObject(const QString &service, const QString &path, - QString &interface) + const QString &interface) { if (!interface.isEmpty()) { QReadLocker locker(&lock); -- cgit