From bcf6ef95b8304c6cf7a1b79337d7d9b151dfe492 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 3 Feb 2017 09:38:14 +0100 Subject: winrt: Use custom setSocketDescriptor function We have to use a similar approach to the one that is used on android as the ComPtr cannot reliably passed as an int. Change-Id: Ia52c78d4725fb3240eafa62fcb55531a282c0cd3 Reviewed-by: Maurice Kalinowski --- src/bluetooth/qbluetoothserver_winrt.cpp | 2 +- src/bluetooth/qbluetoothsocket_p.h | 5 +++++ src/bluetooth/qbluetoothsocket_winrt.cpp | 20 +++++++++++++------- 3 files changed, 19 insertions(+), 8 deletions(-) (limited to 'src/bluetooth') diff --git a/src/bluetooth/qbluetoothserver_winrt.cpp b/src/bluetooth/qbluetoothserver_winrt.cpp index d37fc9e3..61134c1f 100644 --- a/src/bluetooth/qbluetoothserver_winrt.cpp +++ b/src/bluetooth/qbluetoothserver_winrt.cpp @@ -221,7 +221,7 @@ QBluetoothSocket *QBluetoothServer::nextPendingConnection() ComPtr socket = d->pendingConnections.takeFirst(); QBluetoothSocket *newSocket = new QBluetoothSocket(); - bool success = newSocket->d_ptr->setSocketDescriptor(qintptr(socket.Get()), d->serverType); + bool success = newSocket->d_ptr->setSocketDescriptor(socket, d->serverType); if (!success) { delete newSocket; newSocket = 0; diff --git a/src/bluetooth/qbluetoothsocket_p.h b/src/bluetooth/qbluetoothsocket_p.h index 991a60d7..0be07b5f 100644 --- a/src/bluetooth/qbluetoothsocket_p.h +++ b/src/bluetooth/qbluetoothsocket_p.h @@ -154,6 +154,11 @@ public: bool setSocketDescriptor(const QAndroidJniObject &socket, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = QBluetoothSocket::ConnectedState, QBluetoothSocket::OpenMode openMode = QBluetoothSocket::ReadWrite); +#elif defined(QT_WINRT_BLUETOOTH) + bool setSocketDescriptor(Microsoft::WRL::ComPtr socket, + QBluetoothServiceInfo::Protocol socketType, + QBluetoothSocket::SocketState socketState = QBluetoothSocket::ConnectedState, + QBluetoothSocket::OpenMode openMode = QBluetoothSocket::ReadWrite); #endif bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = QBluetoothSocket::ConnectedState, diff --git a/src/bluetooth/qbluetoothsocket_winrt.cpp b/src/bluetooth/qbluetoothsocket_winrt.cpp index fb0587cc..323200cd 100644 --- a/src/bluetooth/qbluetoothsocket_winrt.cpp +++ b/src/bluetooth/qbluetoothsocket_winrt.cpp @@ -538,17 +538,23 @@ void QBluetoothSocketPrivate::close() bool QBluetoothSocketPrivate::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState, QBluetoothSocket::OpenMode openMode) +{ + Q_UNUSED(socketDescriptor); + Q_UNUSED(socketType) + Q_UNUSED(socketState); + Q_UNUSED(openMode); + qCWarning(QT_BT_WINRT) << "No socket descriptor support on WinRT."; + return false; +} + +bool QBluetoothSocketPrivate::setSocketDescriptor(ComPtr socketPtr, QBluetoothServiceInfo::Protocol socketType, + QBluetoothSocket::SocketState socketState, QBluetoothSocket::OpenMode openMode) { Q_Q(QBluetoothSocket); - if (socketType != QBluetoothServiceInfo::RfcommProtocol) + if (socketType != QBluetoothServiceInfo::RfcommProtocol || !socketPtr) return false; - m_socketObject = nullptr; - socket = -1; - - m_socketObject = reinterpret_cast(qintptr(socketDescriptor)); - if (!m_socketObject) - return false; + m_socketObject = socketPtr; socket = qintptr(m_socketObject.Get()); m_worker->setSocket(m_socketObject); if (socketState == QBluetoothSocket::ConnectedState) -- cgit v1.2.3