Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdbusintegrator_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2016 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6//
7// W A R N I N G
8// -------------
9//
10// This file is not part of the public API. This header file may
11// change from version to version without notice, or even be
12// removed.
13//
14// We mean it.
15//
16//
17
18#ifndef QDBUSINTEGRATOR_P_H
19#define QDBUSINTEGRATOR_P_H
20
21#include <QtDBus/private/qtdbusglobal_p.h>
23
24#include "qcoreevent.h"
25#include "qeventloop.h"
26#include "qobject.h"
27#include "private/qobject_p.h"
28#include "qlist.h"
29#include "qpointer.h"
30#include "qsemaphore.h"
31
33#include "qdbusmessage.h"
35
36#ifndef QT_NO_DBUS
37
39
40class QDBusConnectionPrivate;
41class QDBusMessage;
42
43// Really private structs used by qdbusintegrator.cpp
44// Things that aren't used by any other file
45
47{
48 struct Data
49 {
52
53 void swap(Data &other) noexcept
54 {
55 std::swap(slotIdx, other.slotIdx);
56 metaTypes.swap(other.metaTypes);
57 }
58 };
59
60 struct Key
61 {
64
65 friend bool operator==(const Key &lhs, const Key &rhs) noexcept
66 {
67 return lhs.memberWithSignature == rhs.memberWithSignature && lhs.flags == rhs.flags;
68 }
69
70 friend size_t qHash(const QDBusSlotCache::Key &key, size_t seed = 0) noexcept
71 {
72 return qHashMulti(seed, key.memberWithSignature, key.flags);
73 }
74 };
75
76 using Hash = QHash<Key, Data>;
77
79
80 void swap(QDBusSlotCache &other) noexcept { hash.swap(other.hash); }
81};
82Q_DECLARE_SHARED(QDBusSlotCache::Data)
83Q_DECLARE_SHARED(QDBusSlotCache)
84
85class QDBusCallDeliveryEvent: public QAbstractMetaCallEvent
86{
87public:
88 QDBusCallDeliveryEvent(const QDBusConnection &c, int id, QObject *sender,
89 const QDBusMessage &msg, const QList<QMetaType> &types)
90 : QAbstractMetaCallEvent(sender, -1), connection(c), message(msg), metaTypes(types), id(id)
91 {
92 }
93
94 void placeMetaCall(QObject *object) override
95 {
96 QDBusConnectionPrivate::d(connection)->deliverCall(object, message, metaTypes, id);
97 }
98
99private:
100 QDBusConnection connection; // just for refcounting
101 QDBusMessage message;
102 QList<QMetaType> metaTypes;
103 int id;
104};
105
107{
108public:
109 QDBusActivateObjectEvent(const QDBusConnection &c, QObject *sender,
110 const QDBusConnectionPrivate::ObjectTreeNode &n,
111 int p, const QDBusMessage &m, QLatch *l = nullptr)
113 pathStartPos(p), message(m), handled(false)
114 { }
116
117 void placeMetaCall(QObject *) override;
118
119private:
120 QDBusConnection connection; // just for refcounting
121 QDBusConnectionPrivate::ObjectTreeNode node;
122 int pathStartPos;
123 QDBusMessage message;
124 bool handled;
125};
126
128{
129public:
130 typedef void (*Hook)(const QDBusMessage&);
131 QDBusSpyCallEvent(QDBusConnectionPrivate *cp, const QDBusConnection &c, const QDBusMessage &msg)
133 {}
135 void placeMetaCall(QObject *) override;
136 static inline void invokeSpyHooks(const QDBusMessage &msg);
137
138 QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up
139 QDBusMessage msg;
140};
141
142QT_END_NAMESPACE
143
144QT_DECL_METATYPE_EXTERN(QDBusSlotCache, Q_DBUS_EXPORT)
145
146#endif // QT_NO_DBUS
147#endif
QDBusActivateObjectEvent(const QDBusConnection &c, QObject *sender, const QDBusConnectionPrivate::ObjectTreeNode &n, int p, const QDBusMessage &m, QLatch *l=nullptr)
void placeMetaCall(QObject *) override
static QDBusConnectionManager * instance()
QDBusConnection conn
~QDBusSpyCallEvent() override
QDBusSpyCallEvent(QDBusConnectionPrivate *cp, const QDBusConnection &c, const QDBusMessage &msg)
void placeMetaCall(QObject *) override
static void invokeSpyHooks(const QDBusMessage &msg)
void(* Hook)(const QDBusMessage &)
void add(QDBusSpyCallEvent::Hook hook)
void invoke(const QDBusMessage &msg)
Definition qlist.h:80
#define DBUS_TYPE_UNIX_FD
#define DBUS_INTERFACE_LOCAL
#define DBUS_INTERFACE_DBUS
#define qApp
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return dbus_watch_get_unix_fd
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return dbus_connection_send
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction dbus_timeout_get_enabled
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return dbus_message_unref
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return dbus_message_copy
static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, void *data)
#define qDBusDebug
static QDBusConnectionPrivate::ArgMatchRules matchArgsForService(const QString &service, QDBusServiceWatcher::WatchMode mode)
static bool findObject(const QDBusConnectionPrivate::ObjectTreeNode *root, const QString &fullpath, int &usedLength, QDBusConnectionPrivate::ObjectTreeNode &result)
static void qDBusUpdateDispatchStatus(DBusConnection *connection, DBusDispatchStatus new_status, void *data)
static void qDBusRemoveWatch(DBusWatch *watch, void *data)
static dbus_int32_t server_slot
static void qDBusResultReceived(DBusPendingCall *pending, void *user_data)
static void qDBusToggleTimeout(DBusTimeout *timeout, void *data)
static void huntAndUnregister(const QList< QStringView > &pathComponents, int i, QDBusConnection::UnregisterMode mode, QDBusConnectionPrivate::ObjectTreeNode *node)
static dbus_bool_t qDBusAddWatch(DBusWatch *watch, void *data)
static QDBusConnection::ConnectionCapabilities connectionCapabilities(DBusConnection *connection)
static dbus_bool_t qDBusAddTimeout(DBusTimeout *timeout, void *data)
static QObject * findChildObject(const QDBusConnectionPrivate::ObjectTreeNode *root, const QString &fullpath, int start)
Q_DBUS_EXPORT void qDBusAddSpyHook(QDBusSpyCallEvent::Hook)
static QDBusCallDeliveryEvent *const DIRECT_DELIVERY
static void huntAndEmit(DBusConnection *connection, DBusMessage *msg, QObject *needle, const QDBusConnectionPrivate::ObjectTreeNode &haystack, bool isScriptable, bool isAdaptor, const QString &path=QString())
static void qDBusRemoveTimeout(DBusTimeout *timeout, void *data)
static QByteArray buildMatchRule(const QString &service, const QString &objectPath, const QString &interface, const QString &member, const QDBusConnectionPrivate::ArgMatchRules &argMatch, const QString &)
static DBusHandlerResult qDBusSignalFilter(DBusConnection *connection, DBusMessage *message, void *data)
static void qDBusToggleWatch(DBusWatch *watch, void *data)
static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags, const QString &signature_, QList< QMetaType > &metaTypes)
static void huntAndDestroy(QObject *needle, QDBusConnectionPrivate::ObjectTreeNode &haystack)
@ HandleObjectCallPostEventAction
#define qCWarning(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
QMutex QBasicMutex
Definition qmutex.h:360
#define qPrintable(string)
Definition qstring.h:1685
#define QStringLiteral(str)
Definition qstring.h:1826
#define qUtf16Printable(string)
Definition qstring.h:1697
static void reportThreadAction(int, int, QDBusConnectionPrivate *)
void swap(Data &other) noexcept
QList< QMetaType > metaTypes
friend bool operator==(const Key &lhs, const Key &rhs) noexcept
QDBusConnection::RegisterOptions flags
friend size_t qHash(const QDBusSlotCache::Key &key, size_t seed=0) noexcept
void swap(QDBusSlotCache &other) noexcept