File indexing completed on 2024-04-28 15:17:55
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 "pendingcall.h" 0016 #include "utils.h" 0017 0018 #include <QDBusServiceWatcher> 0019 0020 namespace BluezQt 0021 { 0022 ObexManager::ObexManager(QObject *parent) 0023 : QObject(parent) 0024 , d(new ObexManagerPrivate(this)) 0025 { 0026 Instance::setObexManager(this); 0027 } 0028 0029 ObexManager::~ObexManager() 0030 { 0031 delete d; 0032 } 0033 0034 InitObexManagerJob *ObexManager::init() 0035 { 0036 return new InitObexManagerJob(this); 0037 } 0038 0039 bool ObexManager::isInitialized() const 0040 { 0041 return d->m_initialized; 0042 } 0043 0044 bool ObexManager::isOperational() const 0045 { 0046 return d->m_initialized && d->m_obexRunning && d->m_loaded; 0047 } 0048 0049 QList<ObexSessionPtr> ObexManager::sessions() const 0050 { 0051 return d->m_sessions.values(); 0052 } 0053 0054 ObexSessionPtr ObexManager::sessionForPath(const QDBusObjectPath &path) const 0055 { 0056 for (ObexSessionPtr session : std::as_const(d->m_sessions)) { 0057 if (path.path().startsWith(session->objectPath().path())) { 0058 return session; 0059 } 0060 } 0061 0062 return ObexSessionPtr(); 0063 } 0064 0065 PendingCall *ObexManager::startService() 0066 { 0067 QDBusMessage msg = QDBusMessage::createMethodCall(Strings::orgFreedesktopDBus(), 0068 QStringLiteral("/org/freedesktop/DBus"), 0069 Strings::orgFreedesktopDBus(), 0070 QStringLiteral("StartServiceByName")); 0071 msg << Strings::orgBluezObex(); 0072 msg << quint32(0); 0073 0074 return new PendingCall(DBusConnection::orgBluezObex().asyncCall(msg), PendingCall::ReturnUint32); 0075 } 0076 0077 PendingCall *ObexManager::registerAgent(ObexAgent *agent) 0078 { 0079 Q_ASSERT(agent); 0080 0081 if (!d->m_obexAgentManager) { 0082 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0083 } 0084 0085 new ObexAgentAdaptor(agent, this); 0086 0087 if (!DBusConnection::orgBluezObex().registerObject(agent->objectPath().path(), agent)) { 0088 qCDebug(BLUEZQT) << "Cannot register object" << agent->objectPath().path(); 0089 } 0090 0091 return new PendingCall(d->m_obexAgentManager->RegisterAgent(agent->objectPath()), PendingCall::ReturnVoid, this); 0092 } 0093 0094 PendingCall *ObexManager::unregisterAgent(ObexAgent *agent) 0095 { 0096 Q_ASSERT(agent); 0097 0098 if (!d->m_obexAgentManager) { 0099 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0100 } 0101 0102 DBusConnection::orgBluezObex().unregisterObject(agent->objectPath().path()); 0103 0104 return new PendingCall(d->m_obexAgentManager->UnregisterAgent(agent->objectPath()), PendingCall::ReturnVoid, this); 0105 } 0106 0107 PendingCall *ObexManager::createSession(const QString &destination, const QVariantMap &args) 0108 { 0109 if (!d->m_obexClient) { 0110 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0111 } 0112 0113 return new PendingCall(d->m_obexClient->CreateSession(destination, args), PendingCall::ReturnObjectPath, this); 0114 } 0115 0116 PendingCall *ObexManager::removeSession(const QDBusObjectPath &session) 0117 { 0118 if (!d->m_obexClient) { 0119 return new PendingCall(PendingCall::InternalError, QStringLiteral("ObexManager not operational!")); 0120 } 0121 0122 return new PendingCall(d->m_obexClient->RemoveSession(session), PendingCall::ReturnVoid, this); 0123 } 0124 0125 } // namespace BluezQt 0126 0127 #include "moc_obexmanager.cpp"