QtNetwork: optimize container usage
Don't perform lookup twice. Just cache iterator or position. Change-Id: I454fd292614dee62167ff248fc3ddec0f79435b0 Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>bb10
parent
37d89fd8fb
commit
089ed1525e
|
|
@ -731,10 +731,11 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq
|
|||
|
||||
QList<QByteArray> headers = newHttpRequest.rawHeaderList();
|
||||
if (resumeOffset != 0) {
|
||||
if (headers.contains("Range")) {
|
||||
const int rangeIndex = headers.indexOf("Range");
|
||||
if (rangeIndex != -1) {
|
||||
// Need to adjust resume offset for user specified range
|
||||
|
||||
headers.removeOne("Range");
|
||||
headers.removeAt(rangeIndex);
|
||||
|
||||
// We've already verified that requestRange starts with "bytes=", see canResume.
|
||||
QByteArray requestRange = newHttpRequest.rawHeader("Range").mid(6);
|
||||
|
|
@ -2145,15 +2146,18 @@ void QNetworkReplyHttpImplPrivate::_q_metaDataChanged()
|
|||
Q_Q(QNetworkReplyHttpImpl);
|
||||
// 1. do we have cookies?
|
||||
// 2. are we allowed to set them?
|
||||
if (cookedHeaders.contains(QNetworkRequest::SetCookieHeader) && manager
|
||||
&& (static_cast<QNetworkRequest::LoadControl>
|
||||
(request.attribute(QNetworkRequest::CookieSaveControlAttribute,
|
||||
QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Automatic)) {
|
||||
QList<QNetworkCookie> cookies =
|
||||
qvariant_cast<QList<QNetworkCookie> >(cookedHeaders.value(QNetworkRequest::SetCookieHeader));
|
||||
QNetworkCookieJar *jar = manager->cookieJar();
|
||||
if (jar)
|
||||
jar->setCookiesFromUrl(cookies, url);
|
||||
if (manager) {
|
||||
const auto it = cookedHeaders.constFind(QNetworkRequest::SetCookieHeader);
|
||||
if (it != cookedHeaders.cend()
|
||||
&& request.attribute(QNetworkRequest::CookieSaveControlAttribute,
|
||||
QNetworkRequest::Automatic).toInt() == QNetworkRequest::Automatic) {
|
||||
QNetworkCookieJar *jar = manager->cookieJar();
|
||||
if (jar) {
|
||||
QList<QNetworkCookie> cookies =
|
||||
qvariant_cast<QList<QNetworkCookie> >(it.value());
|
||||
jar->setCookiesFromUrl(cookies, url);
|
||||
}
|
||||
}
|
||||
}
|
||||
emit q->metaDataChanged();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -871,16 +871,20 @@ void QNetworkReplyImplPrivate::metaDataChanged()
|
|||
Q_Q(QNetworkReplyImpl);
|
||||
// 1. do we have cookies?
|
||||
// 2. are we allowed to set them?
|
||||
if (cookedHeaders.contains(QNetworkRequest::SetCookieHeader) && !manager.isNull()
|
||||
&& (static_cast<QNetworkRequest::LoadControl>
|
||||
(request.attribute(QNetworkRequest::CookieSaveControlAttribute,
|
||||
QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Automatic)) {
|
||||
QList<QNetworkCookie> cookies =
|
||||
qvariant_cast<QList<QNetworkCookie> >(cookedHeaders.value(QNetworkRequest::SetCookieHeader));
|
||||
QNetworkCookieJar *jar = manager->cookieJar();
|
||||
if (jar)
|
||||
jar->setCookiesFromUrl(cookies, url);
|
||||
if (!manager.isNull()) {
|
||||
const auto it = cookedHeaders.constFind(QNetworkRequest::SetCookieHeader);
|
||||
if (it != cookedHeaders.cend()
|
||||
&& request.attribute(QNetworkRequest::CookieSaveControlAttribute,
|
||||
QNetworkRequest::Automatic).toInt() == QNetworkRequest::Automatic) {
|
||||
QNetworkCookieJar *jar = manager->cookieJar();
|
||||
if (jar) {
|
||||
QList<QNetworkCookie> cookies =
|
||||
qvariant_cast<QList<QNetworkCookie> >(it.value());
|
||||
jar->setCookiesFromUrl(cookies, url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
emit q->metaDataChanged();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -872,7 +872,8 @@ void QSpdyProtocolHandler::handleSYN_REPLY(char flags, quint32 /*length*/, const
|
|||
void QSpdyProtocolHandler::parseHttpHeaders(char flags, const QByteArray &frameData)
|
||||
{
|
||||
qint32 streamID = getStreamID(frameData.constData());
|
||||
if (!m_inFlightStreams.contains(streamID)) {
|
||||
const auto it = m_inFlightStreams.constFind(streamID);
|
||||
if (it == m_inFlightStreams.cend()) {
|
||||
sendRST_STREAM(streamID, RST_STREAM_INVALID_STREAM);
|
||||
return;
|
||||
}
|
||||
|
|
@ -882,7 +883,7 @@ void QSpdyProtocolHandler::parseHttpHeaders(char flags, const QByteArray &frameD
|
|||
|
||||
QByteArray headerValuePairs = frameData.mid(4);
|
||||
|
||||
HttpMessagePair pair = m_inFlightStreams.value(streamID);
|
||||
HttpMessagePair pair = it.value();
|
||||
QHttpNetworkReply *httpReply = pair.second;
|
||||
Q_ASSERT(httpReply != 0);
|
||||
|
||||
|
|
@ -1152,12 +1153,13 @@ void QSpdyProtocolHandler::handleWINDOW_UPDATE(char /*flags*/, quint32 /*length*
|
|||
qint32 streamID = getStreamID(frameData.constData());
|
||||
qint32 deltaWindowSize = fourBytesToInt(frameData.constData() + 4);
|
||||
|
||||
if (!m_inFlightStreams.contains(streamID)) {
|
||||
const auto it = m_inFlightStreams.constFind(streamID);
|
||||
if (it == m_inFlightStreams.cend()) {
|
||||
sendRST_STREAM(streamID, RST_STREAM_INVALID_STREAM);
|
||||
return;
|
||||
}
|
||||
|
||||
QHttpNetworkReply *reply = m_inFlightStreams.value(streamID).second;
|
||||
QHttpNetworkReply *reply = it.value().second;
|
||||
Q_ASSERT(reply);
|
||||
QHttpNetworkReplyPrivate *replyPrivate = reply->d_func();
|
||||
Q_ASSERT(replyPrivate);
|
||||
|
|
@ -1176,7 +1178,8 @@ void QSpdyProtocolHandler::handleDataFrame(const QByteArray &frameHeaders)
|
|||
Q_ASSERT(frameHeaders.count() >= 8);
|
||||
|
||||
qint32 streamID = getStreamID(frameHeaders.constData());
|
||||
if (!m_inFlightStreams.contains(streamID)) {
|
||||
const auto it = m_inFlightStreams.constFind(streamID);
|
||||
if (it == m_inFlightStreams.cend()) {
|
||||
sendRST_STREAM(streamID, RST_STREAM_INVALID_STREAM);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1198,7 +1201,7 @@ void QSpdyProtocolHandler::handleDataFrame(const QByteArray &frameHeaders)
|
|||
m_waitingForCompleteStream = false;
|
||||
}
|
||||
|
||||
HttpMessagePair pair = m_inFlightStreams.value(streamID);
|
||||
HttpMessagePair pair = it.value();
|
||||
QHttpNetworkRequest httpRequest = pair.first;
|
||||
QHttpNetworkReply *httpReply = pair.second;
|
||||
Q_ASSERT(httpReply != 0);
|
||||
|
|
|
|||
|
|
@ -52,6 +52,8 @@
|
|||
#include <QtCore/qbytearray.h>
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include <utility>
|
||||
|
||||
|
||||
#ifndef QT_NO_BEARERMANAGEMENT
|
||||
|
||||
|
|
@ -263,17 +265,18 @@ QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIden
|
|||
|
||||
foreach (QBearerEngine *engine, sessionEngines) {
|
||||
QMutexLocker locker(&engine->mutex);
|
||||
|
||||
if (engine->accessPointConfigurations.contains(identifier))
|
||||
item.d = engine->accessPointConfigurations[identifier];
|
||||
else if (engine->snapConfigurations.contains(identifier))
|
||||
item.d = engine->snapConfigurations[identifier];
|
||||
else if (engine->userChoiceConfigurations.contains(identifier))
|
||||
item.d = engine->userChoiceConfigurations[identifier];
|
||||
else
|
||||
continue;
|
||||
|
||||
return item;
|
||||
if (auto ptr = engine->accessPointConfigurations.value(identifier)) {
|
||||
item.d = std::move(ptr);
|
||||
break;
|
||||
}
|
||||
if (auto ptr = engine->snapConfigurations.value(identifier)) {
|
||||
item.d = std::move(ptr);
|
||||
break;
|
||||
}
|
||||
if (auto ptr = engine->userChoiceConfigurations.value(identifier)) {
|
||||
item.d = std::move(ptr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return item;
|
||||
|
|
|
|||
|
|
@ -65,9 +65,10 @@ static void doDeleteLater(QObject* obj)
|
|||
QSharedPointer<QNetworkSession> QSharedNetworkSessionManager::getSession(const QNetworkConfiguration &config)
|
||||
{
|
||||
QSharedNetworkSessionManager *m(sharedNetworkSessionManager());
|
||||
const auto it = m->sessions.constFind(config);
|
||||
//if already have a session, return it
|
||||
if (m->sessions.contains(config)) {
|
||||
QSharedPointer<QNetworkSession> p = m->sessions.value(config).toStrongRef();
|
||||
if (it != m->sessions.cend()) {
|
||||
QSharedPointer<QNetworkSession> p = it.value().toStrongRef();
|
||||
if (!p.isNull())
|
||||
return p;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -370,9 +370,11 @@ bool QSocks5BindStore::contains(qintptr socketDescriptor)
|
|||
QSocks5BindData *QSocks5BindStore::retrieve(qintptr socketDescriptor)
|
||||
{
|
||||
QMutexLocker lock(&mutex);
|
||||
if (!store.contains(socketDescriptor))
|
||||
const auto it = store.constFind(socketDescriptor);
|
||||
if (it == store.cend())
|
||||
return 0;
|
||||
QSocks5BindData *bindData = store.take(socketDescriptor);
|
||||
QSocks5BindData *bindData = it.value();
|
||||
store.erase(it);
|
||||
if (bindData) {
|
||||
if (bindData->controlSocket->thread() != QThread::currentThread()) {
|
||||
qWarning("Can not access socks5 bind data from different thread");
|
||||
|
|
|
|||
|
|
@ -482,8 +482,9 @@ QList<QSslCertificate> QSslCertificate::fromPath(const QString &path,
|
|||
if (pos != -1) {
|
||||
// there was a special char in the path so cut of the part containing that char.
|
||||
pathPrefix = pathPrefix.left(pos);
|
||||
if (pathPrefix.contains(QLatin1Char('/')))
|
||||
pathPrefix = pathPrefix.left(pathPrefix.lastIndexOf(QLatin1Char('/')));
|
||||
const int lastIndexOfSlash = pathPrefix.lastIndexOf(QLatin1Char('/'));
|
||||
if (lastIndexOfSlash != -1)
|
||||
pathPrefix = pathPrefix.left(lastIndexOfSlash);
|
||||
else
|
||||
pathPrefix.clear();
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue