BluezQt

request.cpp
1/*
2 * BluezQt - Asynchronous Bluez wrapper library
3 *
4 * SPDX-FileCopyrightText: 2014 David Rosca <nowrep@gmail.com>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8
9#include "request.h"
10#include "debug.h"
11#include "utils.h"
12
13#include <QDBusConnection>
14#include <QDBusMessage>
15
16namespace BluezQt
17{
18class RequestPrivate
19{
20public:
21 RequestOriginatingType m_type;
22 QDBusMessage m_message;
23
24 bool sendMessage(const QDBusMessage &msg);
25 QString interfaceName();
26 QString serviceName();
27
28 void acceptRequest(const QVariant &val);
29 void rejectRequest();
30 void cancelRequest();
31};
32
33bool RequestPrivate::sendMessage(const QDBusMessage &msg)
34{
35 switch (m_type) {
36 case OrgBluezAgent:
37 case OrgBluezProfile:
38 return DBusConnection::orgBluez().send(msg);
39 case OrgBluezObexAgent:
40 return DBusConnection::orgBluezObex().send(msg);
41
42 default:
43 return false;
44 }
45}
46
47QString RequestPrivate::interfaceName()
48{
49 switch (m_type) {
50 case OrgBluezAgent:
51 return QStringLiteral("org.bluez.Agent1");
52 case OrgBluezProfile:
53 return QStringLiteral("org.bluez.Profile1");
54 case OrgBluezObexAgent:
55 return QStringLiteral("org.bluez.obex.Agent1");
56 default:
57 return QString();
58 }
59}
60
61QString RequestPrivate::serviceName()
62{
63 switch (m_type) {
64 case OrgBluezObexAgent:
65 return QStringLiteral("org.bluez.obex");
66 default:
67 return QStringLiteral("org.bluez");
68 }
69}
70
71void RequestPrivate::acceptRequest(const QVariant &val)
72{
73 QDBusMessage reply;
74 if (val.isValid()) {
75 reply = m_message.createReply(val);
76 } else {
77 reply = m_message.createReply();
78 }
79
80 if (!sendMessage(reply)) {
81 qCWarning(BLUEZQT) << "Request: Failed to put reply on DBus queue";
82 }
83}
85void RequestPrivate::rejectRequest()
86{
87 const QDBusMessage &reply = m_message.createErrorReply(serviceName() % QStringLiteral(".Error.Rejected"), QStringLiteral("Rejected"));
88 if (!sendMessage(reply)) {
89 qCWarning(BLUEZQT) << "Request: Failed to put reply on DBus queue";
90 }
91}
93void RequestPrivate::cancelRequest()
94{
95 const QDBusMessage &reply = m_message.createErrorReply(serviceName() % QStringLiteral(".Error.Canceled"), QStringLiteral("Canceled"));
96 if (!sendMessage(reply)) {
97 qCWarning(BLUEZQT) << "Request: Failed to put reply on DBus queue";
98 }
99}
100
101// T
102template<typename T>
104 : d(new RequestPrivate)
105{
106}
107
108template<typename T>
109Request<T>::Request(RequestOriginatingType type, const QDBusMessage &message)
110 : d(new RequestPrivate)
111{
112 d->m_type = type;
113 d->m_message = message;
114}
115
116template<typename T>
120
121template<typename T>
123 : d(other.d)
124{
125}
126
127template<typename T>
129{
130 if (d != other.d) {
131 d = other.d;
132 }
133 return *this;
134}
135
136template<typename T>
137void Request<T>::accept(T returnValue) const
138{
139 d->acceptRequest(returnValue);
140}
141
142template<typename T>
144{
145 d->rejectRequest();
146}
147
148template<typename T>
150{
151 d->cancelRequest();
152}
153
154// void
156 : d(new RequestPrivate)
157{
158}
159
160Request<void>::Request(RequestOriginatingType type, const QDBusMessage &message)
161 : d(new RequestPrivate)
162{
163 d->m_type = type;
164 d->m_message = message;
165}
166
168{
169}
170
172 : d(other.d)
173{
174}
175
177{
178 if (d != other.d) {
179 d = other.d;
180 }
181 return *this;
182}
183
184void Request<void>::accept() const
185{
186 d->acceptRequest(QVariant());
187}
188
189void Request<void>::reject() const
190{
191 d->rejectRequest();
192}
193
194void Request<void>::cancel() const
195{
196 d->cancelRequest();
197}
198
199// Generate classes
200template class Request<void>;
201template class Request<quint32>;
202template class Request<QString>;
203template class Request<QByteArray>;
204
205} // namespace BluezQt
D-Bus request.
Definition request.h:39
void accept(T returnValue) const
Accepts the request.
Definition request.cpp:137
Request & operator=(const Request &other)
Copy assignment operator.
Definition request.cpp:128
void cancel() const
Cancels the request.
Definition request.cpp:149
void reject() const
Rejects the request.
Definition request.cpp:143
virtual ~Request()
Destroys a Request object.
Definition request.cpp:117
Request()
Creates a new Request object.
Definition request.cpp:103
QDBusMessage createErrorReply(QDBusError::ErrorType type, const QString &msg) const const
QDBusMessage createReply(const QList< QVariant > &arguments) const const
bool isValid() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Mar 7 2025 11:57:47 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.