File indexing completed on 2025-01-19 06:44:38
0001 /* 0002 * BluezQt - Asynchronous Bluez wrapper library 0003 * 0004 * SPDX-FileCopyrightText: 2014 David Rosca <nowrep@gmail.com> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "obexmanager.h" 0010 #include "debug.h" 0011 #include "initobexmanagerjob.h" 0012 #include "obexagent.h" 0013 #include "obexagentadaptor.h" 0014 #include "obexmanager_p.h" 0015 #include "obexsession.h" 0016 #include "pendingcall.h" 0017 #include "utils.h" 0018 0019 #include <QDBusServiceWatcher> 0020 0021 namespace BluezQt 0022 { 0023 ObexManager::ObexManager(QObject *parent) 0024 : QObject(parent) 0025 , d(new ObexManagerPrivate(this)) 0026 { 0027 Instance::setObexManager(this); 0028 } 0029 0030 ObexManager::~ObexManager() = default; 0031 0032 InitObexManagerJob *ObexManager::init() 0033 { 0034 return new InitObexManagerJob(this); 0035 } 0036 0037 bool ObexManager::isInitialized() const 0038 { 0039 return d->m_initialized; 0040 } 0041 0042 bool ObexManager::isOperational() const 0043 { 0044 return d->m_initialized && d->m_obexRunning && d->m_loaded; 0045 } 0046 0047 QList<ObexSessionPtr> ObexManager::sessions() const 0048 { 0049 return d->m_sessions.values(); 0050 } 0051 0052 ObexSessionPtr ObexManager::sessionForPath(const QDBusObjectPath &path) const 0053 { 0054 for (ObexSessionPtr session : std::as_const(d->m_sessions)) { 0055 if (path.path().startsWith(session->objectPath().path())) { 0056 return session; 0057 } 0058 } 0059 0060 return ObexSessionPtr(); 0061 } 0062 0063 PendingCall *ObexManager::startService() 0064 { 0065 QDBusMessage msg = QDBusMessage::createMethodCall(Strings::orgFreedesktopDBus(), 0066 QStringLiteral("/org/freedesktop/DBus"), 0067 Strings::orgFreedesktopDBus(), 0068 QStringLiteral("StartServiceByName")); 0069 msg << Strings::orgBluezObex(); 0070 msg << quint32(0); 0071 0072 return new PendingCall(DBusConnection::orgBluezObex().asyncCall(msg), PendingCall::ReturnUint32); 0073 } 0074 0075 PendingCall *ObexManager::registerAgent(ObexAgent *agent) 0076 { 0077 Q_ASSERT(agent); 0078 0079 if (!d->m_obexAgentManager) { 0080 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0081 } 0082 0083 new ObexAgentAdaptor(agent, this); 0084 0085 if (!DBusConnection::orgBluezObex().registerObject(agent->objectPath().path(), agent)) { 0086 qCDebug(BLUEZQT) << "Cannot register object" << agent->objectPath().path(); 0087 } 0088 0089 return new PendingCall(d->m_obexAgentManager->RegisterAgent(agent->objectPath()), PendingCall::ReturnVoid, this); 0090 } 0091 0092 PendingCall *ObexManager::unregisterAgent(ObexAgent *agent) 0093 { 0094 Q_ASSERT(agent); 0095 0096 if (!d->m_obexAgentManager) { 0097 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0098 } 0099 0100 DBusConnection::orgBluezObex().unregisterObject(agent->objectPath().path()); 0101 0102 return new PendingCall(d->m_obexAgentManager->UnregisterAgent(agent->objectPath()), PendingCall::ReturnVoid, this); 0103 } 0104 0105 PendingCall *ObexManager::createSession(const QString &destination, const QVariantMap &args) 0106 { 0107 if (!d->m_obexClient) { 0108 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0109 } 0110 0111 return new PendingCall(d->m_obexClient->CreateSession(destination, args), PendingCall::ReturnObjectPath, this); 0112 } 0113 0114 PendingCall *ObexManager::removeSession(const QDBusObjectPath &session) 0115 { 0116 if (!d->m_obexClient) { 0117 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0118 } 0119 0120 return new PendingCall(d->m_obexClient->RemoveSession(session), PendingCall::ReturnVoid, this); 0121 } 0122 0123 } // namespace BluezQt 0124 0125 #include "moc_obexmanager.cpp"