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/base | |
| parent | 00908fb3477c8e983bcd82dc33d3d1f380143b39 (diff) | |
| download | qxmpp-063d7fa9360899aa33b5891df15a2b9f4840f392.tar.gz | |
Fix possibly detaching containers
Diffstat (limited to 'src/base')
| -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 |
4 files changed, 52 insertions, 31 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(); } |
