1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QDBUSMESSAGE_H
6#define QDBUSMESSAGE_H
7
8#include <QtDBus/qtdbusglobal.h>
9#include <QtDBus/qdbuserror.h>
10#include <QtCore/qlist.h>
11#include <QtCore/qvariant.h>
12
13#if !defined(QT_NO_DBUS) && !defined(QT_BOOTSTRAPPED)
14
15#if defined(Q_OS_WIN) && defined(interface)
16# undef interface
17#endif
18
19QT_BEGIN_NAMESPACE
20
21class QDBusMessagePrivate;
22class Q_DBUS_EXPORT QDBusMessage
23{
24public:
25 enum MessageType {
26 InvalidMessage,
27 MethodCallMessage,
28 ReplyMessage,
29 ErrorMessage,
30 SignalMessage
31 };
32
33 QDBusMessage();
34 QDBusMessage(const QDBusMessage &other);
35 QDBusMessage &operator=(QDBusMessage &&other) noexcept { swap(other); return *this; }
36 QDBusMessage &operator=(const QDBusMessage &other);
37 ~QDBusMessage();
38
39 void swap(QDBusMessage &other) noexcept { qt_ptr_swap(lhs&: d_ptr, rhs&: other.d_ptr); }
40
41 static QDBusMessage createSignal(const QString &path, const QString &interface,
42 const QString &name);
43 static QDBusMessage createTargetedSignal(const QString &service, const QString &path,
44 const QString &interface, const QString &name);
45 static QDBusMessage createMethodCall(const QString &destination, const QString &path,
46 const QString &interface, const QString &method);
47 static QDBusMessage createError(const QString &name, const QString &msg);
48 static inline QDBusMessage createError(const QDBusError &err)
49 { return createError(name: err.name(), msg: err.message()); }
50 static inline QDBusMessage createError(QDBusError::ErrorType type, const QString &msg)
51 { return createError(name: QDBusError::errorString(error: type), msg); }
52
53 QDBusMessage createReply(const QList<QVariant> &arguments = QList<QVariant>()) const;
54 QDBusMessage createReply(const QVariant &argument) const;
55
56 QDBusMessage createErrorReply(const QString &name, const QString &msg) const;
57 inline QDBusMessage createErrorReply(const QDBusError &err) const
58 { return createErrorReply(name: err.name(), msg: err.message()); }
59 QDBusMessage createErrorReply(QDBusError::ErrorType type, const QString &msg) const;
60
61 // there are no setters; if this changes, see qdbusmessage_p.h
62 QString service() const;
63 QString path() const;
64 QString interface() const;
65 QString member() const;
66 QString errorName() const;
67 QString errorMessage() const;
68 MessageType type() const;
69 QString signature() const;
70
71 bool isReplyRequired() const;
72
73 void setDelayedReply(bool enable) const;
74 bool isDelayedReply() const;
75
76 void setAutoStartService(bool enable);
77 bool autoStartService() const;
78
79 void setInteractiveAuthorizationAllowed(bool enable);
80 bool isInteractiveAuthorizationAllowed() const;
81
82 void setArguments(const QList<QVariant> &arguments);
83 QList<QVariant> arguments() const;
84
85 QDBusMessage &operator<<(const QVariant &arg);
86
87private:
88 explicit QDBusMessage(QDBusMessagePrivate &dd);
89 friend class QDBusMessagePrivate;
90 QDBusMessagePrivate *d_ptr;
91};
92Q_DECLARE_SHARED(QDBusMessage)
93
94#ifndef QT_NO_DEBUG_STREAM
95Q_DBUS_EXPORT QDebug operator<<(QDebug, const QDBusMessage &);
96#endif
97
98QT_END_NAMESPACE
99
100QT_DECL_METATYPE_EXTERN(QDBusMessage, Q_DBUS_EXPORT)
101
102#else
103class Q_DBUS_EXPORT QDBusMessage {}; // dummy class for moc
104#endif // QT_NO_DBUS
105#endif
106
107

source code of qtbase/src/dbus/qdbusmessage.h