diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-03-13 01:09:24 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-03-13 02:11:14 +0100 |
| commit | 063d7fa9360899aa33b5891df15a2b9f4840f392 (patch) | |
| tree | 4cdb4d1308eb71d2acfeea1a8d47ed1e9b716bd1 /src | |
| parent | 00908fb3477c8e983bcd82dc33d3d1f380143b39 (diff) | |
| download | qxmpp-063d7fa9360899aa33b5891df15a2b9f4840f392.tar.gz | |
Fix possibly detaching containers
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppIq.cpp | 4 | ||||
| -rw-r--r-- | src/base/QXmppRpcIq.cpp | 4 | ||||
| -rw-r--r-- | src/base/QXmppSasl.cpp | 3 | ||||
| -rw-r--r-- | src/base/QXmppStun.cpp | 72 | ||||
| -rw-r--r-- | src/client/QXmppClient.cpp | 2 | ||||
| -rw-r--r-- | src/client/QXmppMucManager.cpp | 3 | ||||
| -rw-r--r-- | src/client/QXmppRemoteMethod.cpp | 3 | ||||
| -rw-r--r-- | src/client/QXmppUploadRequestManager.cpp | 3 | ||||
| -rw-r--r-- | src/server/QXmppServer.cpp | 15 |
9 files changed, 69 insertions, 40 deletions
diff --git a/src/base/QXmppIq.cpp b/src/base/QXmppIq.cpp index e0b5945f..efb35396 100644 --- a/src/base/QXmppIq.cpp +++ b/src/base/QXmppIq.cpp @@ -123,7 +123,9 @@ void QXmppIq::toXml(QXmlStreamWriter *xmlWriter) const void QXmppIq::toXmlElementFromChild(QXmlStreamWriter *writer) const { - for (const QXmppElement &extension : extensions()) + const auto exts = extensions(); + for (const QXmppElement &extension : exts) { extension.toXml(writer); + } } /// \endcond diff --git a/src/base/QXmppRpcIq.cpp b/src/base/QXmppRpcIq.cpp index d5e0003a..f2861ea5 100644 --- a/src/base/QXmppRpcIq.cpp +++ b/src/base/QXmppRpcIq.cpp @@ -43,8 +43,10 @@ void QXmppRpcMarshaller::marshall(QXmlStreamWriter *writer, const QVariant &valu case QVariant::List: { writer->writeStartElement(QStringLiteral("array")); writer->writeStartElement(QStringLiteral("data")); - for (const auto &item : value.toList()) + const auto list = value.toList(); + for (const auto &item : list) { marshall(writer, item); + } writer->writeEndElement(); writer->writeEndElement(); break; diff --git a/src/base/QXmppSasl.cpp b/src/base/QXmppSasl.cpp index 576d7755..317765aa 100644 --- a/src/base/QXmppSasl.cpp +++ b/src/base/QXmppSasl.cpp @@ -105,7 +105,8 @@ static QByteArray generateNonce() static QMap<char, QByteArray> parseGS2(const QByteArray &ba) { QMap<char, QByteArray> map; - for (const auto &keyValue : ba.split(',')) { + const auto keyValuePairs = ba.split(u','); + for (const auto &keyValue : keyValuePairs) { if (keyValue.size() >= 2 && keyValue[1] == '=') { map[keyValue[0]] = keyValue.mid(2); } diff --git a/src/base/QXmppStun.cpp b/src/base/QXmppStun.cpp index dd031a93..748ac799 100644 --- a/src/base/QXmppStun.cpp +++ b/src/base/QXmppStun.cpp @@ -1323,8 +1323,9 @@ void QXmppTurnAllocation::handleDatagram(const QByteArray &buffer, const QHostAd QXmppStunMessage message; QStringList errors; if (!message.decode(buffer, QByteArray(), &errors)) { - for (const auto &error : errors) + for (const auto &error : std::as_const(errors)) { warning(error); + } return; } @@ -1333,7 +1334,7 @@ void QXmppTurnAllocation::handleDatagram(const QByteArray &buffer, const QHostAd #endif // find transaction - for (auto *transaction : m_transactions) { + for (auto *transaction : std::as_const(m_transactions)) { if (transaction->request().id() == message.id() && transaction->request().messageMethod() == message.messageMethod()) { transaction->readStun(message); @@ -1801,12 +1802,13 @@ bool QXmppIceComponentPrivate::addRemoteCandidate(const QXmppJingleCandidate &ca candidate.host().protocol() != QAbstractSocket::IPv6Protocol)) return false; - for (const auto &c : remoteCandidates) + for (const auto &c : std::as_const(remoteCandidates)) { if (c.host() == candidate.host() && c.port() == candidate.port()) return false; + } remoteCandidates << candidate; - for (auto *transport : transports) { + for (auto *transport : std::as_const(transports)) { // only pair compatible addresses const QXmppJingleCandidate local = transport->localCandidate(component); if (!isCompatibleAddress(local.host(), candidate.host())) @@ -1828,7 +1830,7 @@ bool QXmppIceComponentPrivate::addRemoteCandidate(const QXmppJingleCandidate &ca CandidatePair *QXmppIceComponentPrivate::findPair(QXmppStunTransaction *transaction) { - for (auto *pair : pairs) { + for (auto *pair : std::as_const(pairs)) { if (pair->transaction == transaction) return pair; } @@ -1859,13 +1861,14 @@ void QXmppIceComponentPrivate::setSockets(QList<QUdpSocket *> sockets) // clear previous candidates and sockets localCandidates.clear(); qDeleteAll(pairs); - for (auto *transport : transports) + for (auto *transport : std::as_const(transports)) { if (transport != turnAllocation) delete transport; + } transports.clear(); // store candidates - for (auto *socket : sockets) { + for (auto *socket : std::as_const(sockets)) { socket->setParent(q); auto *transport = new QXmppUdpTransport(socket, q); @@ -1883,7 +1886,7 @@ void QXmppIceComponentPrivate::setSockets(QList<QUdpSocket *> sockets) for (auto &stunServer : config->stunServers) { QXmppStunMessage request; request.setType(QXmppStunMessage::Binding | QXmppStunMessage::Request); - for (auto *transport : transports) { + for (auto *transport : std::as_const(transports)) { const QXmppJingleCandidate local = transport->localCandidate(component); if (!isCompatibleAddress(local.host(), stunServer.first)) { continue; @@ -1986,7 +1989,7 @@ void QXmppIceComponent::checkCandidates() return; debug(QStringLiteral("Checking remote candidates")); - for (auto *pair : d->pairs) { + for (auto *pair : std::as_const(d->pairs)) { if (pair->state() == CandidatePair::WaitingState) { d->performCheck(pair, d->config->iceControlling); break; @@ -1999,8 +2002,9 @@ void QXmppIceComponent::checkCandidates() /// void QXmppIceComponent::close() { - for (auto *transport : d->transports) + for (auto *transport : std::as_const(d->transports)) { transport->disconnectFromHost(); + } d->turnAllocation->disconnectFromHost(); d->timer->stop(); d->activePair = nullptr; @@ -2046,7 +2050,7 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr quint16 messageType = QXmppStunMessage::peekType(buffer, messageCookie, messageId); if (!messageType || messageCookie != STUN_MAGIC) { // use this as an opportunity to flag a potential pair - for (auto *pair : d->pairs) { + for (auto *pair : std::as_const(d->pairs)) { if (pair->remote.host() == remoteHost && pair->remote.port() == remotePort) { d->fallbackPair = pair; @@ -2079,8 +2083,9 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr QXmppStunMessage message; QStringList errors; if (!message.decode(buffer, messagePassword.toUtf8(), &errors)) { - for (const auto &error : errors) + for (const auto &error : std::as_const(errors)) { warning(error); + } return; } #ifdef QXMPP_DEBUG_STUN @@ -2120,7 +2125,7 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr // find or create remote candidate QXmppJingleCandidate remoteCandidate; bool remoteCandidateFound = false; - for (const auto &c : d->remoteCandidates) { + for (const auto &c : std::as_const(d->remoteCandidates)) { if (c.host() == remoteHost && c.port() == remotePort) { remoteCandidate = c; remoteCandidateFound = true; @@ -2142,7 +2147,7 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr } // construct pair - for (auto *ptr : d->pairs) { + for (auto *ptr : std::as_const(d->pairs)) { if (ptr->transport == transport && ptr->remote.host() == remoteHost && ptr->remote.port() == remotePort) { pair = ptr; break; @@ -2178,7 +2183,7 @@ void QXmppIceComponent::handleDatagram(const QByteArray &buffer, const QHostAddr } else if (message.messageClass() == QXmppStunMessage::Response || message.messageClass() == QXmppStunMessage::Error) { // find the pair for this transaction - for (auto *ptr : d->pairs) { + for (auto *ptr : std::as_const(d->pairs)) { if (ptr->transaction && ptr->transaction->request().id() == message.id()) { pair = ptr; break; @@ -2261,7 +2266,7 @@ void QXmppIceComponent::transactionFinished() } // check whether this candidates is already known - for (const auto &candidate : d->localCandidates) { + for (const auto &candidate : std::as_const(d->localCandidates)) { if (candidate.host() == reflexiveHost && candidate.port() == reflexivePort && candidate.type() == QXmppJingleCandidate::ServerReflexiveType) @@ -2329,12 +2334,14 @@ static QList<QUdpSocket *> reservePort(const QList<QHostAddress> &addresses, qui QList<QHostAddress> QXmppIceComponent::discoverAddresses() { QList<QHostAddress> addresses; - for (const auto &interface : QNetworkInterface::allInterfaces()) { + const auto interfaces = QNetworkInterface::allInterfaces(); + for (const auto &interface : interfaces) { if (!(interface.flags() & QNetworkInterface::IsRunning) || interface.flags() & QNetworkInterface::IsLoopBack) continue; - for (const auto &entry : interface.addressEntries()) { + const auto addressEntries = interface.addressEntries(); + for (const auto &entry : addressEntries) { QHostAddress ip = entry.ip(); if ((ip.protocol() != QAbstractSocket::IPv4Protocol && ip.protocol() != QAbstractSocket::IPv6Protocol) || @@ -2588,8 +2595,9 @@ bool QXmppIceConnection::bind(const QList<QHostAddress> &addresses) void QXmppIceConnection::close() { d->connectTimer->stop(); - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { socket->close(); + } } /// @@ -2600,8 +2608,9 @@ void QXmppIceConnection::connectToHost() if (isConnected() || d->connectTimer->isActive()) return; - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { socket->connectToHost(); + } d->connectTimer->start(); } @@ -2610,9 +2619,10 @@ void QXmppIceConnection::connectToHost() /// bool QXmppIceConnection::isConnected() const { - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { if (!socket->isConnected()) return false; + } return true; } @@ -2639,8 +2649,9 @@ void QXmppIceConnection::setIceControlling(bool controlling) QList<QXmppJingleCandidate> QXmppIceConnection::localCandidates() const { QList<QXmppJingleCandidate> candidates; - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { candidates += socket->localCandidates(); + } return candidates; } @@ -2722,8 +2733,9 @@ void QXmppIceConnection::setTurnServer(const QHostAddress &host, quint16 port) { d->turnHost = host; d->turnPort = port; - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { socket->d->setTurnServer(host, port); + } } /// @@ -2736,8 +2748,9 @@ void QXmppIceConnection::setTurnServer(const QHostAddress &host, quint16 port) void QXmppIceConnection::setTurnUser(const QString &user) { d->turnUser = user; - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { socket->d->setTurnUser(user); + } } /// @@ -2750,15 +2763,17 @@ void QXmppIceConnection::setTurnUser(const QString &user) void QXmppIceConnection::setTurnPassword(const QString &password) { d->turnPassword = password; - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { socket->d->setTurnPassword(password); + } } void QXmppIceConnection::slotConnected() { - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { if (!socket->isConnected()) return; + } info(QStringLiteral("ICE negotiation completed")); d->connectTimer->stop(); emit connected(); @@ -2769,7 +2784,7 @@ void QXmppIceConnection::slotGatheringStateChanged() GatheringState newGatheringState; bool allComplete = true; bool allNew = true; - for (auto *socket : d->components.values()) { + for (auto *socket : std::as_const(d->components)) { if (socket->d->gatheringState != CompleteGatheringState) allComplete = false; if (socket->d->gatheringState != NewGatheringState) @@ -2792,8 +2807,9 @@ void QXmppIceConnection::slotGatheringStateChanged() void QXmppIceConnection::slotTimeout() { warning(QStringLiteral("ICE negotiation timed out")); - for (auto *socket : d->components.values()) + for (auto *socket : std::as_const(d->components)) { socket->close(); + } emit disconnected(); } diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp index 9787f4b5..6f993a46 100644 --- a/src/client/QXmppClient.cpp +++ b/src/client/QXmppClient.cpp @@ -753,7 +753,7 @@ QXmppVersionManager &QXmppClient::versionManager() void QXmppClient::_q_elementReceived(const QDomElement &element, bool &handled) { - for (auto *extension : d->extensions) { + for (auto *extension : std::as_const(d->extensions)) { if (extension->handleStanza(element)) { handled = true; return; diff --git a/src/client/QXmppMucManager.cpp b/src/client/QXmppMucManager.cpp index cee37e94..71a5d436 100644 --- a/src/client/QXmppMucManager.cpp +++ b/src/client/QXmppMucManager.cpp @@ -96,7 +96,8 @@ bool QXmppMucManager::handleStanza(const QDomElement &element) QXmppMucRoom *room = d->rooms.value(iq.from()); if (room && iq.type() == QXmppIq::Result && room->d->permissionsQueue.remove(iq.id())) { - for (const auto &item : iq.items()) { + const auto items = iq.items(); + for (const auto &item : items) { const QString jid = item.jid(); if (!room->d->permissions.contains(jid)) room->d->permissions.insert(jid, item); diff --git a/src/client/QXmppRemoteMethod.cpp b/src/client/QXmppRemoteMethod.cpp index 76ec1ea1..71a48bdd 100644 --- a/src/client/QXmppRemoteMethod.cpp +++ b/src/client/QXmppRemoteMethod.cpp @@ -48,7 +48,8 @@ void QXmppRemoteMethod::gotResult(const QXmppRpcResponseIq &iq) if (iq.id() == m_payload.id()) { m_result.hasError = false; // FIXME: we don't handle multiple responses - m_result.result = iq.values().first(); + const auto values = iq.values(); + m_result.result = values.first(); emit callDone(); } } diff --git a/src/client/QXmppUploadRequestManager.cpp b/src/client/QXmppUploadRequestManager.cpp index d9c5caae..113003b8 100644 --- a/src/client/QXmppUploadRequestManager.cpp +++ b/src/client/QXmppUploadRequestManager.cpp @@ -288,7 +288,8 @@ void QXmppUploadRequestManager::handleDiscoInfo(const QXmppDiscoveryIq &iq) if (!iq.features().contains(ns_http_upload)) return; - for (const QXmppDiscoveryIq::Identity &identity : iq.identities()) { + const auto identities = iq.identities(); + for (const QXmppDiscoveryIq::Identity &identity : identities) { if (identity.category() == QStringLiteral("store") && identity.type() == QStringLiteral("file")) { QXmppUploadService service; diff --git a/src/server/QXmppServer.cpp b/src/server/QXmppServer.cpp index bb579eeb..848905de 100644 --- a/src/server/QXmppServer.cpp +++ b/src/server/QXmppServer.cpp @@ -126,8 +126,9 @@ bool QXmppServerPrivate::routeData(const QString &to, const QByteArray &data) } // send data - for (auto *conn : found) + for (auto *conn : std::as_const(found)) { QMetaObject::invokeMethod(conn, "sendData", Q_ARG(QByteArray, data)); + } return !found.isEmpty(); } else if (!serversForServers.isEmpty()) { @@ -240,7 +241,8 @@ void QXmppServerPrivate::warning(const QString &message) void QXmppServerPrivate::loadExtensions(QXmppServer *server) { if (!loaded) { - for (auto *object : QPluginLoader::staticInstances()) { + const auto pluginLoaders = QPluginLoader::staticInstances(); + for (auto *object : pluginLoaders) { auto *plugin = qobject_cast<QXmppServerPlugin *>(object); if (!plugin) continue; @@ -258,9 +260,10 @@ void QXmppServerPrivate::loadExtensions(QXmppServer *server) void QXmppServerPrivate::startExtensions() { if (!started) { - for (auto *extension : extensions) + for (auto *extension : std::as_const(extensions)) { if (!extension->start()) warning(QString("Could not start extension %1").arg(extension->extensionName())); + } started = true; } } @@ -567,10 +570,12 @@ void QXmppServer::close() QSetIterator<QXmppIncomingClient *> itr(d->incomingClients); while (itr.hasNext()) itr.next()->disconnectFromHost(); - for (auto *stream : d->incomingServers) + for (auto *stream : std::as_const(d->incomingServers)) { stream->disconnectFromHost(); - for (auto *stream : d->outgoingServers) + } + for (auto *stream : std::as_const(d->outgoingServers)) { stream->disconnectFromHost(); + } } /// Listen for incoming XMPP server connections. |
