summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2017-02-03 09:38:14 +0100
committerOliver Wolff <oliver.wolff@qt.io>2017-02-03 11:06:26 +0000
commitbcf6ef95b8304c6cf7a1b79337d7d9b151dfe492 (patch)
treeb3c1a31ce77e548131b376de16eb2c0164e8719c
parentf07c94c0037a2e9a51b8177edb757063206e00cc (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.cpp2
-rw-r--r--src/bluetooth/qbluetoothsocket_p.h5
-rw-r--r--src/bluetooth/qbluetoothsocket_winrt.cpp20
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)