Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
qdbusintegrator.cpp File Reference
#include "qdbusintegrator_p.h"
#include <qcoreapplication.h>
#include <qelapsedtimer.h>
#include <qloggingcategory.h>
#include <qmetaobject.h>
#include <qobject.h>
#include <qsocketnotifier.h>
#include <qstringlist.h>
#include <qtimer.h>
#include <qthread.h>
#include <private/qlocking_p.h>
#include <QtCore/qset.h>
#include "qdbusargument.h"
#include "qdbusconnection_p.h"
#include "qdbusconnectionmanager_p.h"
#include "qdbusinterface_p.h"
#include "qdbusmessage.h"
#include "qdbusmetatype.h"
#include "qdbusmetatype_p.h"
#include "qdbusabstractadaptor.h"
#include "qdbusabstractadaptor_p.h"
#include "qdbusserver.h"
#include "qdbusutil_p.h"
#include "qdbusvirtualobject.h"
#include "qdbusmessage_p.h"
#include "qdbuscontext_p.h"
#include "qdbuspendingcall_p.h"
#include "qdbusthreaddebug_p.h"
#include <algorithm>
+ Include dependency graph for qdbusintegrator.cpp:

Go to the source code of this file.

Classes

class  QDBusBlockingCallWatcher
 

Macros

#define qDBusDebug   if (::isDebugging.loadRelaxed() == 0); else qDebug
 

Typedefs

typedef QVarLengthArray< QDBusSpyCallEvent::Hook, 4 > QDBusSpyHookList
 

Functions

static QDebug operator<< (QDebug dbg, const QThread *th)
 
static dbus_bool_t qDBusAddTimeout (DBusTimeout *timeout, void *data)
 
static void qDBusRemoveTimeout (DBusTimeout *timeout, void *data)
 
static void qDBusToggleTimeout (DBusTimeout *timeout, void *data)
 
static dbus_bool_t qDBusAddWatch (DBusWatch *watch, void *data)
 
static void qDBusRemoveWatch (DBusWatch *watch, void *data)
 
static void qDBusToggleWatch (DBusWatch *watch, void *data)
 
static void qDBusUpdateDispatchStatus (DBusConnection *connection, DBusDispatchStatus new_status, void *data)
 
static void qDBusNewConnection (DBusServer *server, DBusConnection *connection, void *data)
 
static QByteArray buildMatchRule (const QString &service, const QString &objectPath, const QString &interface, const QString &member, const QDBusConnectionPrivate::ArgMatchRules &argMatch, const QString &)
 
static bool findObject (const QDBusConnectionPrivate::ObjectTreeNode *root, const QString &fullpath, int &usedLength, QDBusConnectionPrivate::ObjectTreeNode &result)
 
static QObjectfindChildObject (const QDBusConnectionPrivate::ObjectTreeNode *root, const QString &fullpath, int start)
 
static QDBusConnectionPrivate::ArgMatchRules matchArgsForService (const QString &service, QDBusServiceWatcher::WatchMode mode)
 
Q_DBUS_EXPORT void qDBusAddSpyHook (QDBusSpyCallEvent::Hook)
 
static DBusHandlerResult qDBusSignalFilter (DBusConnection *connection, DBusMessage *message, void *data)
 
static void huntAndDestroy (QObject *needle, QDBusConnectionPrivate::ObjectTreeNode &haystack)
 
static void huntAndUnregister (const QList< QStringView > &pathComponents, int i, QDBusConnection::UnregisterMode mode, QDBusConnectionPrivate::ObjectTreeNode *node)
 
static void huntAndEmit (DBusConnection *connection, DBusMessage *msg, QObject *needle, const QDBusConnectionPrivate::ObjectTreeNode &haystack, bool isScriptable, bool isAdaptor, const QString &path=QString())
 
static int findSlot (const QMetaObject *mo, const QByteArray &name, int flags, const QString &signature_, QList< QMetaType > &metaTypes)
 
static QDBusConnection::ConnectionCapabilities connectionCapabilities (DBusConnection *connection)
 
static void qDBusResultReceived (DBusPendingCall *pending, void *user_data)
 

Variables

static dbus_int32_t server_slot = -1
 
static Q_CONSTINIT QBasicAtomicInt isDebugging = Q_BASIC_ATOMIC_INITIALIZER(-1)
 
static QDBusCallDeliveryEvent *const DIRECT_DELIVERY = (QDBusCallDeliveryEvent *)1
 

Macro Definition Documentation

◆ qDBusDebug

#define qDBusDebug   if (::isDebugging.loadRelaxed() == 0); else qDebug

Definition at line 56 of file qdbusintegrator.cpp.

Typedef Documentation

◆ QDBusSpyHookList

Function Documentation

◆ buildMatchRule()

static QByteArray buildMatchRule ( const QString service,
const QString objectPath,
const QString interface,
const QString member,
const QDBusConnectionPrivate::ArgMatchRules argMatch,
const QString  
)
static

Definition at line 308 of file qdbusintegrator.cpp.

References QString::arg(), QDBusConnectionPrivate::ArgMatchRules::arg0namespace, QDBusConnectionPrivate::ArgMatchRules::args, QString::chop(), i, interface, and QString::isEmpty().

Referenced by QDBusConnectionPrivate::prepareHook().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ connectionCapabilities()

static QDBusConnection::ConnectionCapabilities connectionCapabilities ( DBusConnection connection)
static

Definition at line 1737 of file qdbusintegrator.cpp.

References QDBusConnectionPrivate::connection, DBUS_TYPE_UNIX_FD, qdbus_resolve_conditionally, and QDBusConnection::UnixFileDescriptorPassing.

Referenced by QDBusConnectionPrivate::relaySignal().

+ Here is the caller graph for this function:

◆ findChildObject()

static QObject * findChildObject ( const QDBusConnectionPrivate::ObjectTreeNode root,
const QString fullpath,
int  start 
)
static

Definition at line 389 of file qdbusintegrator.cpp.

References child, QDBusConnection::ExportChildObjects, QDBusConnectionPrivate::ObjectTreeNode::flags, QString::indexOf(), QString::mid(), next, QDBusConnectionPrivate::ObjectTreeNode::obj, pos, and QString::size().

+ Here is the call graph for this function:

◆ findObject()

static bool findObject ( const QDBusConnectionPrivate::ObjectTreeNode root,
const QString fullpath,
int &  usedLength,
QDBusConnectionPrivate::ObjectTreeNode result 
)
static

◆ findSlot()

◆ huntAndDestroy()

static void huntAndDestroy ( QObject needle,
QDBusConnectionPrivate::ObjectTreeNode haystack 
)
static

Definition at line 555 of file qdbusintegrator.cpp.

References QDBusConnectionPrivate::ObjectTreeNode::children, QDBusConnectionPrivate::ObjectTreeNode::flags, huntAndDestroy(), QDBusConnectionPrivate::ObjectTreeNode::obj, and QList< T >::removeIf().

Referenced by huntAndDestroy(), and QDBusConnectionPrivate::objectDestroyed().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ huntAndEmit()

static void huntAndEmit ( DBusConnection connection,
DBusMessage *  msg,
QObject needle,
const QDBusConnectionPrivate::ObjectTreeNode haystack,
bool  isScriptable,
bool  isAdaptor,
const QString path = QString() 
)
static

Definition at line 597 of file qdbusintegrator.cpp.

References QDBusConnectionPrivate::ObjectTreeNode::children, connection, QThread::currentThread(), QDBusConnection::ExportAdaptors, QDBusConnection::ExportNonScriptableSignals, QDBusConnection::ExportScriptableSignals, QDBusConnectionPrivate::ObjectTreeNode::flags, huntAndEmit(), QDBusConnectionPrivate::ObjectTreeNode::obj, and qDBusDebug.

Referenced by huntAndEmit(), and QDBusConnectionPrivate::relaySignal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ huntAndUnregister()

static void huntAndUnregister ( const QList< QStringView > &  pathComponents,
int  i,
QDBusConnection::UnregisterMode  mode,
QDBusConnectionPrivate::ObjectTreeNode node 
)
static

Definition at line 569 of file qdbusintegrator.cpp.

References QList< T >::at(), QList< T >::begin(), QDBusConnectionPrivate::ObjectTreeNode::children, QList< T >::clear(), QList< T >::end(), QList< T >::erase(), QDBusConnectionPrivate::ObjectTreeNode::flags, huntAndUnregister(), i, it, QDBusConnectionPrivate::ObjectTreeNode::obj, QList< T >::size(), and QDBusConnection::UnregisterTree.

Referenced by huntAndUnregister().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ matchArgsForService()

static QDBusConnectionPrivate::ArgMatchRules matchArgsForService ( const QString service,
QDBusServiceWatcher::WatchMode  mode 
)
static

Definition at line 429 of file qdbusintegrator.cpp.

References QDBusConnectionPrivate::ArgMatchRules::arg0namespace, QDBusConnectionPrivate::ArgMatchRules::args, QString::fromLatin1(), QDBusServiceWatcher::WatchForOwnerChange, QDBusServiceWatcher::WatchForRegistration, and QDBusServiceWatcher::WatchForUnregistration.

+ Here is the call graph for this function:

◆ operator<<()

static QDebug operator<< ( QDebug  dbg,
const QThread th 
)
inlinestatic

Definition at line 58 of file qdbusintegrator.cpp.

References QString::isEmpty(), and QObject::objectName.

+ Here is the call graph for this function:

◆ qDBusAddSpyHook()

void qDBusAddSpyHook ( QDBusSpyCallEvent::Hook  hook)

Definition at line 456 of file qdbusintegrator.cpp.

◆ qDBusAddTimeout()

static dbus_bool_t qDBusAddTimeout ( DBusTimeout *  timeout,
void data 
)
static

Definition at line 111 of file qdbusintegrator.cpp.

References QThread::currentThread(), d, Q_ASSERT, Q_ASSERT_X, and Q_UNLIKELY.

Referenced by qDBusToggleTimeout(), QDBusConnectionPrivate::setConnection(), QDBusConnectionPrivate::setPeer(), and QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusAddWatch()

static dbus_bool_t qDBusAddWatch ( DBusWatch *  watch,
void data 
)
static

Definition at line 169 of file qdbusintegrator.cpp.

References QSocketNotifier::activated(), QThread::currentThread(), d, DBUS_WATCH_READABLE, DBUS_WATCH_WRITABLE, Q_ASSERT, QSocketNotifier::Read, QDBusConnectionPrivate::socketRead(), QDBusConnectionPrivate::socketWrite(), watch, watcher, and QSocketNotifier::Write.

Referenced by QDBusConnectionPrivate::setConnection(), QDBusConnectionPrivate::setPeer(), and QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusNewConnection()

static void qDBusNewConnection ( DBusServer *  server,
DBusConnection connection,
void data 
)
static

Definition at line 260 of file qdbusintegrator.cpp.

References QDBusConnectionPrivate::anonymousAuthenticationAllowed, connection, emit, QDBusConnectionPrivate::enableDispatchDelayed(), error, QDBusConnectionManager::instance(), QDBusConnectionPrivate::lock, mutex, QDBusConnectionPrivate::name, QDBusConnectionPrivate::newServerConnection(), QString::number(), QObject::parent(), Q_ASSERT, Q_UNUSED, server, QDBusConnectionPrivate::serverConnectionNames, QDBusConnectionPrivate::serverObject, QDBusConnectionManager::setConnection(), QDBusConnectionPrivate::setDispatchEnabled(), and QDBusConnectionPrivate::setPeer().

Referenced by QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusRemoveTimeout()

static void qDBusRemoveTimeout ( DBusTimeout *  timeout,
void data 
)
static

Definition at line 136 of file qdbusintegrator.cpp.

References QThread::currentThread(), d, it, QHash< int, DBusTimeout * >::iterator, and Q_ASSERT.

Referenced by qDBusToggleTimeout(), QDBusConnectionPrivate::setConnection(), QDBusConnectionPrivate::setPeer(), and QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusRemoveWatch()

static void qDBusRemoveWatch ( DBusWatch *  watch,
void data 
)
static

Definition at line 201 of file qdbusintegrator.cpp.

References QThread::currentThread(), d, i, QMultiHash< qintptr, Watcher >::iterator, Q_ASSERT, and watch.

Referenced by QDBusConnectionPrivate::setConnection(), QDBusConnectionPrivate::setPeer(), and QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusResultReceived()

static void qDBusResultReceived ( DBusPendingCall *  pending,
void user_data 
)
static

Definition at line 1826 of file qdbusintegrator.cpp.

References pending, QDBusPendingCallPrivate::pending, QDBusConnectionPrivate::processFinishedCall(), Q_ASSERT, Q_UNUSED, and user_data.

+ Here is the call graph for this function:

◆ qDBusSignalFilter()

static DBusHandlerResult qDBusSignalFilter ( DBusConnection connection,
DBusMessage *  message,
void data 
)
static

Definition at line 485 of file qdbusintegrator.cpp.

References connection, d, DBUS_HANDLER_RESULT_HANDLED, DBUS_HANDLER_RESULT_NOT_YET_HANDLED, QDBusMessagePrivate::fromDBusMessage(), QDBusConnectionPrivate::InvalidMode, Q_ASSERT, Q_UNUSED, and qDBusDebug.

Referenced by QDBusConnectionPrivate::setConnection(), and QDBusConnectionPrivate::setPeer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusToggleTimeout()

static void qDBusToggleTimeout ( DBusTimeout *  timeout,
void data 
)
static

Definition at line 158 of file qdbusintegrator.cpp.

References Q_ASSERT, qDBusAddTimeout(), and qDBusRemoveTimeout().

Referenced by QDBusConnectionPrivate::setConnection(), QDBusConnectionPrivate::setPeer(), and QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusToggleWatch()

static void qDBusToggleWatch ( DBusWatch *  watch,
void data 
)
static

Definition at line 224 of file qdbusintegrator.cpp.

References QThread::currentThread(), d, DBUS_WATCH_READABLE, DBUS_WATCH_WRITABLE, i, QMultiHash< qintptr, Watcher >::iterator, Q_ASSERT, and watch.

Referenced by QDBusConnectionPrivate::setConnection(), QDBusConnectionPrivate::setPeer(), and QDBusConnectionPrivate::setServer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qDBusUpdateDispatchStatus()

static void qDBusUpdateDispatchStatus ( DBusConnection connection,
DBusDispatchStatus  new_status,
void data 
)
static

Definition at line 251 of file qdbusintegrator.cpp.

References connection, d, DBUS_DISPATCH_DATA_REMAINS, emit, Q_ASSERT, and Q_UNUSED.

Referenced by QDBusConnectionPrivate::setConnection(), and QDBusConnectionPrivate::setPeer().

+ Here is the caller graph for this function:

Variable Documentation

◆ DIRECT_DELIVERY

QDBusCallDeliveryEvent* const DIRECT_DELIVERY = (QDBusCallDeliveryEvent *)1
static

Definition at line 741 of file qdbusintegrator.cpp.

Referenced by QDBusConnectionPrivate::prepareReply().

◆ isDebugging

Q_CONSTINIT QBasicAtomicInt isDebugging = Q_BASIC_ATOMIC_INITIALIZER(-1)
static

Definition at line 55 of file qdbusintegrator.cpp.

Referenced by QDBusConnectionPrivate::QDBusConnectionPrivate().

◆ server_slot

dbus_int32_t server_slot = -1
static