1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Copyright (C) 2016 Intel Corporation. 5 ** Contact: https://www.qt.io/licensing/ 6 ** 7 ** This file is part of the QtDBus module of the Qt Toolkit. 8 ** 9 ** $QT_BEGIN_LICENSE:LGPL$ 10 ** Commercial License Usage 11 ** Licensees holding valid commercial Qt licenses may use this file in 12 ** accordance with the commercial license agreement provided with the 13 ** Software or, alternatively, in accordance with the terms contained in 14 ** a written agreement between you and The Qt Company. For licensing terms 15 ** and conditions see https://www.qt.io/terms-conditions. For further 16 ** information use the contact form at https://www.qt.io/contact-us. 17 ** 18 ** GNU Lesser General Public License Usage 19 ** Alternatively, this file may be used under the terms of the GNU Lesser 20 ** General Public License version 3 as published by the Free Software 21 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 22 ** packaging of this file. Please review the following information to 23 ** ensure the GNU Lesser General Public License version 3 requirements 24 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 25 ** 26 ** GNU General Public License Usage 27 ** Alternatively, this file may be used under the terms of the GNU 28 ** General Public License version 2.0 or (at your option) the GNU General 29 ** Public license version 3 or any later version approved by the KDE Free 30 ** Qt Foundation. The licenses are as published by the Free Software 31 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 32 ** included in the packaging of this file. Please review the following 33 ** information to ensure the GNU General Public License requirements will 34 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 35 ** https://www.gnu.org/licenses/gpl-3.0.html. 36 ** 37 ** $QT_END_LICENSE$ 38 ** 39 ****************************************************************************/ 40 41 #ifndef QDBUSCONNECTION_H 42 #define QDBUSCONNECTION_H 43 44 #include <QtDBus/qtdbusglobal.h> 45 #include <QtCore/qobjectdefs.h> 46 #include <QtCore/qstring.h> 47 48 #ifndef QT_NO_DBUS 49 50 #ifdef interface 51 # undef interface 52 #endif 53 54 QT_BEGIN_NAMESPACE 55 56 57 namespace QDBus 58 { 59 enum CallMode { 60 NoBlock, 61 Block, 62 BlockWithGui, 63 AutoDetect 64 }; 65 } 66 67 class QDBusAbstractInterfacePrivate; 68 class QDBusInterface; 69 class QDBusError; 70 class QDBusMessage; 71 class QDBusPendingCall; 72 class QDBusConnectionInterface; 73 class QDBusVirtualObject; 74 class QObject; 75 76 class QDBusConnectionPrivate; 77 class Q_DBUS_EXPORT QDBusConnection 78 { 79 Q_GADGET 80 public: 81 enum BusType { SessionBus, SystemBus, ActivationBus }; 82 Q_ENUM(BusType) 83 enum RegisterOption { 84 ExportAdaptors = 0x01, 85 86 ExportScriptableSlots = 0x10, 87 ExportScriptableSignals = 0x20, 88 ExportScriptableProperties = 0x40, 89 ExportScriptableInvokables = 0x80, 90 ExportScriptableContents = 0xf0, 91 92 ExportNonScriptableSlots = 0x100, 93 ExportNonScriptableSignals = 0x200, 94 ExportNonScriptableProperties = 0x400, 95 ExportNonScriptableInvokables = 0x800, 96 ExportNonScriptableContents = 0xf00, 97 98 ExportAllSlots = ExportScriptableSlots|ExportNonScriptableSlots, 99 ExportAllSignals = ExportScriptableSignals|ExportNonScriptableSignals, 100 ExportAllProperties = ExportScriptableProperties|ExportNonScriptableProperties, 101 ExportAllInvokables = ExportScriptableInvokables|ExportNonScriptableInvokables, 102 ExportAllContents = ExportScriptableContents|ExportNonScriptableContents, 103 104 #ifndef Q_QDOC 105 // Qt 4.2 had a misspelling here 106 ExportAllSignal = ExportAllSignals, 107 #endif 108 ExportChildObjects = 0x1000 109 // Reserved = 0xff000000 110 }; 111 Q_DECLARE_FLAGS(RegisterOptions, RegisterOption) 112 Q_FLAG(RegisterOptions) 113 114 enum UnregisterMode { 115 UnregisterNode, 116 UnregisterTree 117 }; 118 Q_ENUM(UnregisterMode) 119 120 enum VirtualObjectRegisterOption { 121 SingleNode = 0x0, 122 SubPath = 0x1 123 // Reserved = 0xff000000 124 }; 125 Q_DECLARE_FLAGS(VirtualObjectRegisterOptions, VirtualObjectRegisterOption) 126 127 enum ConnectionCapability { 128 UnixFileDescriptorPassing = 0x0001 129 }; 130 Q_DECLARE_FLAGS(ConnectionCapabilities, ConnectionCapability) 131 132 explicit QDBusConnection(const QString &name); 133 QDBusConnection(const QDBusConnection &other); QDBusConnection(QDBusConnection && other)134 QDBusConnection(QDBusConnection &&other) noexcept : d(other.d) { other.d = nullptr; } 135 QDBusConnection &operator=(QDBusConnection &&other) noexcept { swap(other); return *this; } 136 QDBusConnection &operator=(const QDBusConnection &other); 137 ~QDBusConnection(); 138 swap(QDBusConnection & other)139 void swap(QDBusConnection &other) noexcept { qSwap(d, other.d); } 140 141 bool isConnected() const; 142 QString baseService() const; 143 QDBusError lastError() const; 144 QString name() const; 145 ConnectionCapabilities connectionCapabilities() const; 146 147 bool send(const QDBusMessage &message) const; 148 bool callWithCallback(const QDBusMessage &message, QObject *receiver, 149 const char *returnMethod, const char *errorMethod, 150 int timeout = -1) const; 151 bool callWithCallback(const QDBusMessage &message, QObject *receiver, 152 const char *slot, int timeout = -1) const; 153 QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, 154 int timeout = -1) const; 155 QDBusPendingCall asyncCall(const QDBusMessage &message, int timeout = -1) const; 156 157 bool connect(const QString &service, const QString &path, const QString &interface, 158 const QString &name, QObject *receiver, const char *slot); 159 bool connect(const QString &service, const QString &path, const QString &interface, 160 const QString &name, const QString& signature, 161 QObject *receiver, const char *slot); 162 bool connect(const QString &service, const QString &path, const QString &interface, 163 const QString &name, const QStringList &argumentMatch, const QString& signature, 164 QObject *receiver, const char *slot); 165 166 bool disconnect(const QString &service, const QString &path, const QString &interface, 167 const QString &name, QObject *receiver, const char *slot); 168 bool disconnect(const QString &service, const QString &path, const QString &interface, 169 const QString &name, const QString& signature, 170 QObject *receiver, const char *slot); 171 bool disconnect(const QString &service, const QString &path, const QString &interface, 172 const QString &name, const QStringList &argumentMatch, const QString& signature, 173 QObject *receiver, const char *slot); 174 175 bool registerObject(const QString &path, QObject *object, 176 RegisterOptions options = ExportAdaptors); 177 bool registerObject(const QString &path, const QString &interface, QObject *object, 178 RegisterOptions options = ExportAdaptors); 179 void unregisterObject(const QString &path, UnregisterMode mode = UnregisterNode); 180 QObject *objectRegisteredAt(const QString &path) const; 181 182 bool registerVirtualObject(const QString &path, QDBusVirtualObject *object, 183 VirtualObjectRegisterOption options = SingleNode); 184 185 bool registerService(const QString &serviceName); 186 bool unregisterService(const QString &serviceName); 187 188 QDBusConnectionInterface *interface() const; 189 190 void *internalPointer() const; 191 192 static QDBusConnection connectToBus(BusType type, const QString &name); 193 static QDBusConnection connectToBus(const QString &address, const QString &name); 194 static QDBusConnection connectToPeer(const QString &address, const QString &name); 195 static void disconnectFromBus(const QString &name); 196 static void disconnectFromPeer(const QString &name); 197 198 static QByteArray localMachineId(); 199 200 static QDBusConnection sessionBus(); 201 static QDBusConnection systemBus(); 202 203 #if QT_DEPRECATED_SINCE(5,5) 204 static QT_DEPRECATED_X("This function no longer works, use QDBusContext instead") 205 QDBusConnection sender(); 206 #endif 207 208 protected: 209 explicit QDBusConnection(QDBusConnectionPrivate *dd); 210 211 private: 212 friend class QDBusConnectionPrivate; 213 QDBusConnectionPrivate *d; 214 }; 215 Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusConnection) 216 217 Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::RegisterOptions) 218 Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::VirtualObjectRegisterOptions) 219 Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::ConnectionCapabilities) 220 221 QT_END_NAMESPACE 222 223 #endif // QT_NO_DBUS 224 #endif 225