From 8a6d9c307851f3492ddc597f5f03e80f236a7857 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 15 Jul 2019 12:57:40 +0200 Subject: Fix compilation with C++20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implicit capture of 'this' in [=] is deprecated in C++20. Fix by using explicit capture. Change-Id: I96132d83d87ae61986ba1b1ea3f9cf8e50059f1f Reviewed-by: MÃ¥rten Nordheim --- src/bluetooth/qlowenergycontroller_bluezdbus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bluetooth/qlowenergycontroller_bluezdbus.cpp b/src/bluetooth/qlowenergycontroller_bluezdbus.cpp index f019d9c2..26ceefb0 100644 --- a/src/bluetooth/qlowenergycontroller_bluezdbus.cpp +++ b/src/bluetooth/qlowenergycontroller_bluezdbus.cpp @@ -336,7 +336,7 @@ void QLowEnergyControllerPrivateBluezDBus::connectToDevice() QDBusPendingReply<> reply = device->Connect(); QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(reply, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, - [=](QDBusPendingCallWatcher* call) { + [this](QDBusPendingCallWatcher* call) { QDBusPendingReply<> reply = *call; if (reply.isError()) { qCDebug(QT_BT_BLUEZ) << "BTLE_DBUS::connect() failed" @@ -358,7 +358,7 @@ void QLowEnergyControllerPrivateBluezDBus::disconnectFromDevice() QDBusPendingReply<> reply = device->Disconnect(); QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(reply, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, - [=](QDBusPendingCallWatcher* call) { + [this](QDBusPendingCallWatcher* call) { QDBusPendingReply<> reply = *call; if (reply.isError()) { qCDebug(QT_BT_BLUEZ) << "BTLE_DBUS::disconnect() failed" -- cgit v1.2.3 From 4ac755bb6e51891881b7477702be8ca917b60c8a Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Tue, 16 Jul 2019 13:03:01 +0200 Subject: winrt: Do not try to delete nullptr worker When calling QBluetoothDeviceDiscoveryAgentPrivate::stop the worker pointer is cleared in disconnectAndClearWorker so there is no need to call deleteLater (which will just result in a warning). Change-Id: I2713474833b61a12018ecfa6f9eb11618ed025a7 Task-number: QTBUG-75089 Reviewed-by: Timur Pocheptsov Reviewed-by: Alex Blasche --- src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp b/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp index ef2a69b1..b2554558 100644 --- a/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp +++ b/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp @@ -606,10 +606,8 @@ void QBluetoothDeviceDiscoveryAgentPrivate::stop() disconnectAndClearWorker(); emit q->canceled(); } - if (leScanTimer) { + if (leScanTimer) leScanTimer->stop(); - worker->deleteLater(); - } } void QBluetoothDeviceDiscoveryAgentPrivate::registerDevice(const QBluetoothDeviceInfo &info) -- cgit v1.2.3 From 263fc5186325a7dd59a7533b98b3bf1296ea0d16 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Tue, 16 Jul 2019 11:17:28 +0200 Subject: Do not handle PAIRING_VARIANT_PIN The user has to enter a pin in such cases. Since QBluetoothLocalDevice does not have an API to return a pin it makes no sense for QtBluetooth to handle this type of request. Android will provide its own fall back form. This patch is mostly a revert of f8c0572ddcd. Fixes: QTBUG-76565 Task-number: QTBUG-70295 Change-Id: I61062ac84ce508f3b82c7359a60d5c9c5bba86a4 Reviewed-by: Timur Pocheptsov Reviewed-by: Oliver Wolff --- src/bluetooth/android/localdevicebroadcastreceiver.cpp | 12 +++++++++++- src/bluetooth/qbluetoothlocaldevice_android.cpp | 11 ----------- src/bluetooth/qbluetoothlocaldevice_p.h | 1 - 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/bluetooth/android/localdevicebroadcastreceiver.cpp b/src/bluetooth/android/localdevicebroadcastreceiver.cpp index e3b01987..78aecc12 100644 --- a/src/bluetooth/android/localdevicebroadcastreceiver.cpp +++ b/src/bluetooth/android/localdevicebroadcastreceiver.cpp @@ -189,6 +189,14 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje return; case 0: //BluetoothDevice.PAIRING_VARIANT_PIN { + qCDebug(QT_BT_ANDROID) << "Pairing : PAIRING_VARIANT_PIN -> use Android default handling"; + + // The section below is disabled because this Android pairing variant + // requires the user to enter a pin. Since QBluetoothLocalDevice does + // not have a setPin() equivalent which might be used to return the user's value. + // For now we ignore this request. If an app ignores such requests, + // Android shows a "fall-back" pin code entry form. + /* //generate a random key const QString pin = QStringLiteral("%1").arg(QRandomGenerator::global()->bounded(1000000), 6, 10, QLatin1Char('0')); @@ -225,10 +233,12 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje } const QBluetoothAddress address(bluetoothDevice.callObjectMethod("getAddress").toString()); - emit pairingDisplayPinCode(address, pin); + emit pairingDisplayPinCode(address, pin);*/ + break; } case 2: //BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION { + qCDebug(QT_BT_ANDROID) << "Pairing : PAIRING_VARIANT_PASSKEY_CONFIRMATION"; keyExtra = valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ExtraPairingKey); key = intentObject.callMethod("getIntExtra", diff --git a/src/bluetooth/qbluetoothlocaldevice_android.cpp b/src/bluetooth/qbluetoothlocaldevice_android.cpp index 40e4c2d4..2995d368 100644 --- a/src/bluetooth/qbluetoothlocaldevice_android.cpp +++ b/src/bluetooth/qbluetoothlocaldevice_android.cpp @@ -69,8 +69,6 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate( this, &QBluetoothLocalDevicePrivate::processConnectDeviceChanges); connect(receiver, &LocalDeviceBroadcastReceiver::pairingDisplayConfirmation, this, &QBluetoothLocalDevicePrivate::processDisplayConfirmation); - connect(receiver, &LocalDeviceBroadcastReceiver::pairingDisplayPinCode, - this, &QBluetoothLocalDevicePrivate::processDisplayPinCode); } QBluetoothLocalDevicePrivate::~QBluetoothLocalDevicePrivate() @@ -206,15 +204,6 @@ void QBluetoothLocalDevicePrivate::processDisplayConfirmation(const QBluetoothAd return; emit q_ptr->pairingDisplayConfirmation(address, pin); -} - -void QBluetoothLocalDevicePrivate::processDisplayPinCode(const QBluetoothAddress &address, const QString &pin) -{ - // only send pairing notification for pairing requests issued by - // this QBluetoothLocalDevice instance - if (pendingPairing(address) == -1) - return; - emit q_ptr->pairingDisplayPinCode(address, pin); } diff --git a/src/bluetooth/qbluetoothlocaldevice_p.h b/src/bluetooth/qbluetoothlocaldevice_p.h index 98c62151..1f99f27e 100644 --- a/src/bluetooth/qbluetoothlocaldevice_p.h +++ b/src/bluetooth/qbluetoothlocaldevice_p.h @@ -113,7 +113,6 @@ private slots: QBluetoothLocalDevice::Pairing pairing); void processConnectDeviceChanges(const QBluetoothAddress &address, bool isConnectEvent); void processDisplayConfirmation(const QBluetoothAddress &address, const QString &pin); - void processDisplayPinCode(const QBluetoothAddress &address, const QString &pin); private: QBluetoothLocalDevice *q_ptr; -- cgit v1.2.3 From 8110fdd4c6d80d05934768fa808a4cb187212fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= Date: Fri, 19 Jul 2019 11:06:59 +0200 Subject: Core/IO/Bluetooth - fix ambiguous conversions for macOS This is a sibling of QTBUG-76847 on macOS instead of iOS. Change-Id: I3df6e28d65b9835f5f54e92d462d23423c48d835 Reviewed-by: Timur Pocheptsov --- .../qbluetoothdevicediscoveryagent_osx.mm | 6 ++--- src/bluetooth/qbluetoothlocaldevice_osx.mm | 2 +- src/bluetooth/qbluetoothserver_osx.mm | 6 ++--- src/bluetooth/qbluetoothserviceinfo_osx.mm | 2 +- src/bluetooth/qbluetoothsocket_osx.mm | 26 +++++++++++----------- src/bluetooth/qbluetoothtransferreply_osx.mm | 10 ++++----- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm b/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm index 4657da82..bdc3c85e 100644 --- a/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm +++ b/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm @@ -181,7 +181,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate() { - if (inquiryLE && agentState != NonActive) { + if (inquiryLE.data() && agentState != NonActive) { // We want the LE scan to stop as soon as possible. if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) { // Local variable to be retained ... @@ -195,7 +195,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate() bool QBluetoothDeviceDiscoveryAgentPrivate::isValid() const { - return hostController && [hostController powerState] == kBluetoothHCIPowerStateON; + return hostController.data() && [hostController powerState] == kBluetoothHCIPowerStateON; } bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const @@ -292,7 +292,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startLE() // Check queue and create scanner: inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]); - if (inquiryLE) + if (inquiryLE.data()) notifier.take(); // Whatever happens next, inquiryLE is already the owner ... dispatch_queue_t leQueue(qt_LE_queue()); diff --git a/src/bluetooth/qbluetoothlocaldevice_osx.mm b/src/bluetooth/qbluetoothlocaldevice_osx.mm index 52b7bba8..e7dd9906 100644 --- a/src/bluetooth/qbluetoothlocaldevice_osx.mm +++ b/src/bluetooth/qbluetoothlocaldevice_osx.mm @@ -149,7 +149,7 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice bool QBluetoothLocalDevicePrivate::isValid() const { - return hostController; + return hostController.data(); } void QBluetoothLocalDevicePrivate::requestPairing(const QBluetoothAddress &address, Pairing pairing) diff --git a/src/bluetooth/qbluetoothserver_osx.mm b/src/bluetooth/qbluetoothserver_osx.mm index eefaf4da..5d3b8fc4 100644 --- a/src/bluetooth/qbluetoothserver_osx.mm +++ b/src/bluetooth/qbluetoothserver_osx.mm @@ -142,7 +142,7 @@ void QBluetoothServerPrivate::stopListener() void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel) { - Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)"); + Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)"); Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)"); Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)"); @@ -154,7 +154,7 @@ void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel) void QBluetoothServerPrivate::openNotify(IOBluetoothL2CAPChannel *channel) { - Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)"); + Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)"); Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)"); Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)"); @@ -293,7 +293,7 @@ bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port) OSXBluetooth::qt_test_iobluetooth_runloop(); - if (d_ptr->listener) { + if (d_ptr->listener.data()) { qCWarning(QT_BT_OSX) << "already in listen mode, close server first"; return false; } diff --git a/src/bluetooth/qbluetoothserviceinfo_osx.mm b/src/bluetooth/qbluetoothserviceinfo_osx.mm index 34de4695..7ce4c645 100644 --- a/src/bluetooth/qbluetoothserviceinfo_osx.mm +++ b/src/bluetooth/qbluetoothserviceinfo_osx.mm @@ -152,7 +152,7 @@ bool QBluetoothServiceInfoPrivate::unregisterService() if (!registered) return false; - Q_ASSERT_X(serviceRecord, Q_FUNC_INFO, "service registered, but serviceRecord is nil"); + Q_ASSERT_X(serviceRecord.data(), Q_FUNC_INFO, "service registered, but serviceRecord is nil"); [serviceRecord removeServiceRecord]; serviceRecord.reset(nil); diff --git a/src/bluetooth/qbluetoothsocket_osx.mm b/src/bluetooth/qbluetoothsocket_osx.mm index 7f630146..2a856092 100644 --- a/src/bluetooth/qbluetoothsocket_osx.mm +++ b/src/bluetooth/qbluetoothsocket_osx.mm @@ -101,13 +101,13 @@ void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address, if (socketType == QBluetoothServiceInfo::RfcommProtocol) { rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this]); - if (rfcommChannel) + if (rfcommChannel.data()) status = [rfcommChannel connectAsyncToDevice:address withChannelID:port]; else status = kIOReturnNoMemory; } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this]); - if (l2capChannel) + if (l2capChannel.data()) status = [l2capChannel connectAsyncToDevice:address withPSM:port]; else status = kIOReturnNoMemory; @@ -181,10 +181,10 @@ QString QBluetoothSocketPrivate::peerName() const NSString *nsName = nil; if (socketType == QBluetoothServiceInfo::RfcommProtocol) { - if (rfcommChannel) + if (rfcommChannel.data()) nsName = [rfcommChannel peerName]; } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { - if (l2capChannel) + if (l2capChannel.data()) nsName = [l2capChannel peerName]; } @@ -198,10 +198,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const { BluetoothDeviceAddress addr = {}; if (socketType == QBluetoothServiceInfo::RfcommProtocol) { - if (rfcommChannel) + if (rfcommChannel.data()) addr = [rfcommChannel peerAddress]; } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { - if (l2capChannel) + if (l2capChannel.data()) addr = [l2capChannel peerAddress]; } @@ -211,10 +211,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const quint16 QBluetoothSocketPrivate::peerPort() const { if (socketType == QBluetoothServiceInfo::RfcommProtocol) { - if (rfcommChannel) + if (rfcommChannel.data()) return [rfcommChannel getChannelID]; } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { - if (l2capChannel) + if (l2capChannel.data()) return [l2capChannel getPSM]; } @@ -231,7 +231,7 @@ void QBluetoothSocketPrivate::_q_writeNotify() Q_ASSERT_X(socketType == QBluetoothServiceInfo::L2capProtocol || socketType == QBluetoothServiceInfo::RfcommProtocol, Q_FUNC_INFO, "invalid socket type"); - Q_ASSERT_X(l2capChannel || rfcommChannel, Q_FUNC_INFO, + Q_ASSERT_X(l2capChannel.data() || rfcommChannel.data(), Q_FUNC_INFO, "invalid socket (no open channel)"); Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)"); @@ -275,13 +275,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothRFCOMMChannel *channel) openMode = QIODevice::ReadWrite; rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this channel:channel]); - if (rfcommChannel) {// We do not handle errors, up to an external user. + if (rfcommChannel.data()) {// We do not handle errors, up to an external user. q_ptr->setOpenMode(QIODevice::ReadWrite); state = QBluetoothSocket::ConnectedState; socketType = QBluetoothServiceInfo::RfcommProtocol; } - return rfcommChannel; + return rfcommChannel.data(); } bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel) @@ -299,13 +299,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel) openMode = QIODevice::ReadWrite; l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this channel:channel]); - if (l2capChannel) {// We do not handle errors, up to an external user. + if (l2capChannel.data()) {// We do not handle errors, up to an external user. q_ptr->setOpenMode(QIODevice::ReadWrite); state = QBluetoothSocket::ConnectedState; socketType = QBluetoothServiceInfo::L2capProtocol; } - return l2capChannel; + return l2capChannel.data(); } diff --git a/src/bluetooth/qbluetoothtransferreply_osx.mm b/src/bluetooth/qbluetoothtransferreply_osx.mm index 65c8f82d..40a747f8 100644 --- a/src/bluetooth/qbluetoothtransferreply_osx.mm +++ b/src/bluetooth/qbluetoothtransferreply_osx.mm @@ -136,13 +136,13 @@ QBluetoothTransferReplyOSXPrivate::~QBluetoothTransferReplyOSXPrivate() // The OBEX session will be closed then. If // somehow IOBluetooth/OBEX still has a reference to our // session, it will not call any of delegate's callbacks. - if (session) + if (session.data()) [session closeSession]; } bool QBluetoothTransferReplyOSXPrivate::isActive() const { - return agent || (session && [session hasActiveRequest]); + return agent.data() || (session.data() && [session hasActiveRequest]); } bool QBluetoothTransferReplyOSXPrivate::startOPP(const QBluetoothAddress &device) @@ -218,7 +218,7 @@ void QBluetoothTransferReplyOSXPrivate::sendConnect(const QBluetoothAddress &dev void QBluetoothTransferReplyOSXPrivate::sendPut() { Q_ASSERT_X(inputStream, Q_FUNC_INFO, "invalid input stream (null)"); - Q_ASSERT_X(session, Q_FUNC_INFO, "invalid OBEX session (nil)"); + Q_ASSERT_X(session.data(), Q_FUNC_INFO, "invalid OBEX session (nil)"); Q_ASSERT_X([session isConnected], Q_FUNC_INFO, "not connected"); Q_ASSERT_X(![session hasActiveRequest], Q_FUNC_INFO, "session already has an active request"); @@ -268,7 +268,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB Q_UNUSED(errorCode) Q_UNUSED(response) - if (session) { + if (session.data()) { setReplyError(QBluetoothTransferReply::SessionError, QCoreApplication::translate(TRANSFER_REPLY, TR_CONNECT_FAILED)); } else { @@ -283,7 +283,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB void QBluetoothTransferReplyOSXPrivate::OBEXConnectSuccess() { // Now that OBEX connect succeeded, we can send an OBEX put request. - if (!session) { + if (!session.data()) { // We're still in OBEXConnect(), it'll take care of next steps. return; } -- cgit v1.2.3