QHttpNetworkConnection: Change assert to early return and handle Http2
When using a http proxy (and presumably other proxies) we might have failed/aborted (aka "finished") the request and _then_ receive a "proxy authentication required" message from the proxy. In this case there is no spdy/http2 reply in the queue, so asserting is wrong. Change-Id: Id9b76b580299f6a6cd6efad62d6aaf63183816fb Fixes: QTBUG-76426 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
parent
e211697962
commit
89655525ae
@ -1528,19 +1528,21 @@ void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpN
|
||||
// dialog is displaying
|
||||
pauseConnection();
|
||||
QHttpNetworkReply *reply;
|
||||
#ifndef QT_NO_SSL
|
||||
if (connectionType == QHttpNetworkConnection::ConnectionTypeSPDY) {
|
||||
if (connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2
|
||||
|| connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct
|
||||
#if QT_CONFIG(ssl)
|
||||
|| connectionType == QHttpNetworkConnection::ConnectionTypeSPDY
|
||||
#endif
|
||||
) {
|
||||
|
||||
// we choose the reply to emit the proxyAuth signal from somewhat arbitrarily,
|
||||
// but that does not matter because the signal will ultimately be emitted
|
||||
// by the QNetworkAccessManager.
|
||||
Q_ASSERT(chan->spdyRequestsToSend.count() > 0);
|
||||
reply = chan->spdyRequestsToSend.cbegin().value().second;
|
||||
} else { // HTTP
|
||||
#endif // QT_NO_SSL
|
||||
reply = chan->reply;
|
||||
#ifndef QT_NO_SSL
|
||||
}
|
||||
#endif // QT_NO_SSL
|
||||
|
||||
Q_ASSERT(reply);
|
||||
emit reply->proxyAuthenticationRequired(proxy, auth);
|
||||
|
@ -1115,11 +1115,13 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
|
||||
void QHttpNetworkConnectionChannel::_q_proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator* auth)
|
||||
{
|
||||
if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2
|
||||
|| connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct
|
||||
#ifndef QT_NO_SSL
|
||||
|| connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY
|
||||
#endif
|
||||
) {
|
||||
connection->d_func()->emitProxyAuthenticationRequired(this, proxy, auth);
|
||||
if (spdyRequestsToSend.count() > 0)
|
||||
connection->d_func()->emitProxyAuthenticationRequired(this, proxy, auth);
|
||||
} else { // HTTP
|
||||
// Need to dequeue the request before we can emit the error.
|
||||
if (!reply)
|
||||
|
Loading…
Reference in New Issue
Block a user