summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qnativesocketengine_winrt.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-07-01 11:05:26 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-07-01 11:05:26 +0200
commit0aa2d318b1524cdab42ab9988270779ddcc1922a (patch)
tree695c70702763ba2c66eb398ae9d545fc712a9e2d /src/network/socket/qnativesocketengine_winrt.cpp
parent6251d4dafc86bcbec09d1962050af9924249d419 (diff)
parent49049d90470eb3e94bda77d19ab7f7c57a0bd57f (diff)
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts: src/corelib/global/qglobal.cpp src/corelib/global/qglobal.h src/corelib/global/qsysinfo.h src/corelib/global/qsystemdetection.h src/corelib/kernel/qobjectdefs.h src/plugins/plugins.pro tests/auto/widgets/itemviews/qlistview/qlistview.pro Change-Id: Ib55aa79d707c4c1453fb9d697f6cf92211ed665c
Diffstat (limited to 'src/network/socket/qnativesocketengine_winrt.cpp')
-rw-r--r--src/network/socket/qnativesocketengine_winrt.cpp53
1 files changed, 26 insertions, 27 deletions
diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp
index 5c615034fc..5e58ee3895 100644
--- a/src/network/socket/qnativesocketengine_winrt.cpp
+++ b/src/network/socket/qnativesocketengine_winrt.cpp
@@ -285,11 +285,23 @@ bool QNativeSocketEngine::connectToHostByName(const QString &name, quint16 port)
return false;
}
d->socketState = QAbstractSocket::ConnectingState;
- hr = d->connectOp->put_Completed(Callback<IAsyncActionCompletedHandler>(
- d, &QNativeSocketEnginePrivate::handleConnectToHost).Get());
- Q_ASSERT_SUCCEEDED(hr);
+ hr = QWinRTFunctions::await(d->connectOp);
+ RETURN_FALSE_IF_FAILED("Connection could not be established");
+ bool connectionErrors = false;
+ d->handleConnectionErrors(d->connectOp.Get(), &connectionErrors);
+ if (connectionErrors)
+ return false;
+ d->connectOp.Reset();
+
+ d->socketState = QAbstractSocket::ConnectedState;
+ emit connectionReady();
- return d->socketState == QAbstractSocket::ConnectedState;
+ // Delay the reader so that the SSL socket can upgrade
+ if (d->sslSocket)
+ connect(d->sslSocket, SIGNAL(encrypted()), SLOT(establishRead()));
+ else
+ establishRead();
+ return true;
}
bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port)
@@ -1104,47 +1116,34 @@ HRESULT QNativeSocketEnginePrivate::handleClientConnection(IStreamSocketListener
return S_OK;
}
-HRESULT QNativeSocketEnginePrivate::handleConnectToHost(IAsyncAction *action, AsyncStatus)
+void QNativeSocketEnginePrivate::handleConnectionErrors(IAsyncAction *connectAction, bool *errorsOccured)
{
- Q_Q(QNativeSocketEngine);
-
- HRESULT hr = action->GetResults();
- if (wasDeleted || !connectOp) // Protect against a late callback
- return S_OK;
-
- connectOp.Reset();
+ bool error = true;
+ HRESULT hr = connectAction->GetResults();
switch (hr) {
case 0x8007274c: // A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
setError(QAbstractSocket::NetworkError, ConnectionTimeOutErrorString);
socketState = QAbstractSocket::UnconnectedState;
- return S_OK;
+ break;
case 0x80072751: // A socket operation was attempted to an unreachable host.
setError(QAbstractSocket::HostNotFoundError, HostUnreachableErrorString);
socketState = QAbstractSocket::UnconnectedState;
- return S_OK;
+ break;
case 0x8007274d: // No connection could be made because the target machine actively refused it.
setError(QAbstractSocket::ConnectionRefusedError, ConnectionRefusedErrorString);
socketState = QAbstractSocket::UnconnectedState;
- return S_OK;
+ break;
default:
if (FAILED(hr)) {
setError(QAbstractSocket::UnknownSocketError, UnknownSocketErrorString);
socketState = QAbstractSocket::UnconnectedState;
- return S_OK;
+ } else {
+ error = false;
}
break;
}
-
- socketState = QAbstractSocket::ConnectedState;
- emit q->connectionReady();
-
- // Delay the reader so that the SSL socket can upgrade
- if (sslSocket)
- q->connect(sslSocket, SIGNAL(encrypted()), SLOT(establishRead()));
- else
- q->establishRead();
-
- return S_OK;
+ if (errorsOccured)
+ *errorsOccured = error;
}
HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *asyncInfo, AsyncStatus status)