summaryrefslogtreecommitdiffstats
path: root/qt/src/qdbusconnection.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago@kde.org>2006-06-05 18:13:07 +0000
committerThiago Macieira <thiago@kde.org>2006-06-05 18:13:07 +0000
commit517b8c2446029901e9062e858b723906cf20d7ef (patch)
tree61a02acb1f4769993c985d7a0aa91fab9c2694c7 /qt/src/qdbusconnection.cpp
parent54b762aa4c692596f70892f7fb3d7e495bd8268a (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.cpp43
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);
}