File indexing completed on 2024-05-05 04:58:42
0001 /** 0002 * SPDX-FileCopyrightText: 2016 Saikrishna Arcot <saiarcot895@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #ifndef BLUETOOTHLINKPROVIDER_H 0008 #define BLUETOOTHLINKPROVIDER_H 0009 0010 #include <QBluetoothAddress> 0011 #include <QBluetoothDeviceDiscoveryAgent> 0012 #include <QBluetoothLocalDevice> 0013 #include <QBluetoothServer> 0014 #include <QBluetoothServiceDiscoveryAgent> 0015 #include <QBluetoothSocket> 0016 #include <QBluetoothUuid> 0017 #include <QObject> 0018 #include <QPointer> 0019 #include <QTimer> 0020 0021 #include "../linkprovider.h" 0022 0023 class BluetoothDeviceLink; 0024 class ConnectionMultiplexer; 0025 class MultiplexChannel; 0026 0027 class KDECONNECTCORE_EXPORT BluetoothLinkProvider : public LinkProvider 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 BluetoothLinkProvider(); 0033 virtual ~BluetoothLinkProvider(); 0034 0035 QString name() override 0036 { 0037 return QStringLiteral("BluetoothLinkProvider"); 0038 } 0039 0040 int priority() override 0041 { 0042 return 10; 0043 } 0044 0045 public Q_SLOTS: 0046 virtual void onNetworkChange() override; 0047 virtual void onStart() override; 0048 virtual void onStop() override; 0049 virtual void onLinkDestroyed(const QString &deviceId, DeviceLink *oldPtr) override; 0050 void connectError(); 0051 0052 private Q_SLOTS: 0053 void socketDisconnected(const QBluetoothAddress &peerAddress, MultiplexChannel *socket); 0054 0055 void serverNewConnection(); 0056 void serverDataReceived(const QBluetoothAddress &peerAddress, QSharedPointer<MultiplexChannel> socket); 0057 void clientConnected(QPointer<QBluetoothSocket> socket); 0058 void clientIdentityReceived(const QBluetoothAddress &peerAddress, QSharedPointer<MultiplexChannel> socket); 0059 0060 void serviceDiscovered(const QBluetoothServiceInfo &info); 0061 0062 private: 0063 void addLink(BluetoothDeviceLink *deviceLink, const QString &deviceId); 0064 QList<QBluetoothAddress> getPairedDevices(); 0065 0066 QBluetoothUuid mServiceUuid; 0067 QPointer<QBluetoothServer> mBluetoothServer; 0068 QBluetoothServiceInfo mKdeconnectService; 0069 QBluetoothServiceDiscoveryAgent *mServiceDiscoveryAgent; 0070 QTimer *connectTimer; 0071 0072 QMap<QString, DeviceLink *> mLinks; 0073 0074 QMap<QBluetoothAddress, ConnectionMultiplexer *> mSockets; 0075 }; 0076 0077 #endif