aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-03-13 01:09:24 +0100
committerLinus Jahn <lnj@kaidan.im>2022-03-13 02:11:14 +0100
commit063d7fa9360899aa33b5891df15a2b9f4840f392 (patch)
tree4cdb4d1308eb71d2acfeea1a8d47ed1e9b716bd1 /src
parent00908fb3477c8e983bcd82dc33d3d1f380143b39 (diff)
downloadqxmpp-063d7fa9360899aa33b5891df15a2b9f4840f392.tar.gz
Fix possibly detaching containers
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppIq.cpp4
-rw-r--r--src/base/QXmppRpcIq.cpp4
-rw-r--r--src/base/QXmppSasl.cpp3
-rw-r--r--src/base/QXmppStun.cpp72
-rw-r--r--src/client/QXmppClient.cpp2
-rw-r--r--src/client/QXmppMucManager.cpp3
-rw-r--r--src/client/QXmppRemoteMethod.cpp3
-rw-r--r--src/client/QXmppUploadRequestManager.cpp3
-rw-r--r--src/server/QXmppServer.cpp15
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.