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