diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2017-02-03 09:38:14 +0100 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2017-02-03 11:06:26 +0000 |
commit | bcf6ef95b8304c6cf7a1b79337d7d9b151dfe492 (patch) | |
tree | b3c1a31ce77e548131b376de16eb2c0164e8719c | |
parent | f07c94c0037a2e9a51b8177edb757063206e00cc (diff) |
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 <maurice.kalinowski@qt.io>
-rw-r--r-- | src/bluetooth/qbluetoothserver_winrt.cpp | 2 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_p.h | 5 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_winrt.cpp | 20 |
3 files changed, 19 insertions, 8 deletions
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<IStreamSocket> 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<ABI::Windows::Networking::Sockets::IStreamSocket> 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 @@ -539,16 +539,22 @@ 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<IStreamSocket> 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<IStreamSocket *>(qintptr(socketDescriptor)); - if (!m_socketObject) - return false; + m_socketObject = socketPtr; socket = qintptr(m_socketObject.Get()); m_worker->setSocket(m_socketObject); if (socketState == QBluetoothSocket::ConnectedState) |