diff options
author | Thiago Macieira <thiago@kde.org> | 2006-06-05 18:13:07 +0000 |
---|---|---|
committer | Thiago Macieira <thiago@kde.org> | 2006-06-05 18:13:07 +0000 |
commit | 517b8c2446029901e9062e858b723906cf20d7ef (patch) | |
tree | 61a02acb1f4769993c985d7a0aa91fab9c2694c7 /qt/src/qdbusconnection.cpp | |
parent | 54b762aa4c692596f70892f7fb3d7e495bd8268a (diff) |
* qt/dbus: Add directory. I had forgotten to add this
yesterday after the move...
* qt/examples/Makefile.am:
* qt/examples/dbus.cpp: Moved to qt/tools/dbus.cpp.
* qt/tools/Makefile.am:
* qt/tools/dbus.cpp: Moved from qt/examples/dbus.cpp.
Added feature to get and set properties.
Added validation of service, object path and interface names.
* qt/tools/dbusidl2cpp.cpp: Two new features:
1) Allow specifying both the header and the source file names,
by separating them with a colon.
2) Don't write an interface output if the -p switch wasn't
given, but the -a was.
* qt/src/*: Fix usage of Iterators and ConstIterators.
Fix shadowing of variables by other variables (-Wshadow).
Fix keyword-cleanliness in headers.
Fix ASCII-cast (QLatin1String, QLatin1Char).
Fix validation of member names.
Add extra checking of introspection data during XML parsing.
Various bug fixes.
Diffstat (limited to 'qt/src/qdbusconnection.cpp')
-rw-r--r-- | qt/src/qdbusconnection.cpp | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/qt/src/qdbusconnection.cpp b/qt/src/qdbusconnection.cpp index 6cd733cb..7049857d 100644 --- a/qt/src/qdbusconnection.cpp +++ b/qt/src/qdbusconnection.cpp @@ -294,7 +294,7 @@ QDBusConnection QDBusConnection::addConnection(BusType type, const QString &name QDBusAbstractInterfacePrivate *p; p = retval.findInterface_helper(QLatin1String(DBUS_SERVICE_DBUS), QLatin1String(DBUS_PATH_DBUS), - QLatin1String(DBUS_INTERFACE_DBUS)); + DBUS_INTERFACE_DBUS); if (p) { d->busService = new QDBusBusService(p); d->busService->setParent(d); // auto-deletion @@ -330,7 +330,7 @@ QDBusConnection QDBusConnection::addConnection(const QString &address, QDBusAbstractInterfacePrivate *p; p = retval.findInterface_helper(QLatin1String(DBUS_SERVICE_DBUS), QLatin1String(DBUS_PATH_DBUS), - QLatin1String(DBUS_INTERFACE_DBUS)); + DBUS_INTERFACE_DBUS); if (p) { d->busService = new QDBusBusService(p); d->busService->setParent(d); // auto-deletion @@ -451,7 +451,7 @@ bool QDBusConnection::connect(const QString &service, const QString &path, const // avoid duplicating: QWriteLocker locker(&d->lock); QDBusConnectionPrivate::SignalHookHash::ConstIterator it = d->signalHooks.find(key); - for ( ; it != d->signalHooks.end() && it.key() == key; ++it) { + for ( ; it != d->signalHooks.constEnd() && it.key() == key; ++it) { const QDBusConnectionPrivate::SignalHook &entry = it.value(); if (entry.sender == hook.sender && entry.path == hook.path && @@ -481,6 +481,8 @@ bool QDBusConnection::connect(const QString &service, const QString &path, const */ bool QDBusConnection::registerObject(const QString &path, QObject *object, RegisterOptions options) { + Q_ASSERT_X(QDBusUtil::isValidObjectPath(path), "QDBusConnection::registerObject", + "Invalid object path given"); if (!d || !d->connection || !object || !options || !QDBusUtil::isValidObjectPath(path)) return false; @@ -601,6 +603,12 @@ void QDBusConnection::unregisterObject(const QString &path, UnregisterMode mode) QDBusInterface *QDBusConnection::findInterface(const QString& service, const QString& path, const QString& interface) { + Q_ASSERT_X(QDBusUtil::isValidBusName(service), + "QDBusConnection::findInterface", "Invalid service name"); + Q_ASSERT_X(QDBusUtil::isValidObjectPath(path), + "QDBusConnection::findInterface", "Invalid object path given"); + Q_ASSERT_X(interface.isEmpty() || QDBusUtil::isValidInterfaceName(interface), + "QDBusConnection::findInterface", "Invalid interface name"); if (!d) return 0; @@ -636,24 +644,31 @@ QDBusBusService *QDBusConnection::busService() const QDBusAbstractInterfacePrivate * QDBusConnection::findInterface_helper(const QString &service, const QString &path, - const QString &interface) + const char *iface) { + QString interface = QLatin1String(iface); + // service and path can be empty here, but interface can't + Q_ASSERT_X(service.isEmpty() || QDBusUtil::isValidBusName(service), + "QDBusConnection::findInterface", "Invalid service name"); + Q_ASSERT_X(path.isEmpty() || QDBusUtil::isValidObjectPath(path), + "QDBusConnection::findInterface", "Invalid object path given"); + Q_ASSERT_X(QDBusUtil::isValidInterfaceName(interface), + "QDBusConnection::findInterface", "Invalid interface class!"); if (!d) return 0; - if (!interface.isEmpty() && !QDBusUtil::isValidInterfaceName(interface)) - return 0; - + QString owner; if (!service.isEmpty()) { - if (!QDBusUtil::isValidObjectPath(path)) - return 0; - // check if it's there first -- FIXME: add binding mode owner = d->getNameOwner(service); - if (owner.isEmpty()) - return 0; - } else if (!path.isEmpty()) - return 0; + if (owner.isEmpty()) { + QDBusAbstractInterfacePrivate *p; + p = new QDBusAbstractInterfacePrivate(*this, d, service, path, interface); + p->isValid = false; + p->lastError = d->lastError; + return p; + } + } return new QDBusAbstractInterfacePrivate(*this, d, owner, path, interface); } |