aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppIncomingServer.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-01-19 09:43:30 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-01-19 09:43:30 +0000
commitfeff43672b073068fec43e13a980bcc498e1851a (patch)
tree6ee241741e02b920bf71ea51c0421c732e6adae8 /src/QXmppIncomingServer.cpp
parent4ab4c9ec4152106dbd02c1b9e7899da9254f5569 (diff)
downloadqxmpp-feff43672b073068fec43e13a980bcc498e1851a.tar.gz
allow incoming s2s streams to authenticate for multiple domains (e.g. google.com hosted domains)
Diffstat (limited to 'src/QXmppIncomingServer.cpp')
-rw-r--r--src/QXmppIncomingServer.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/QXmppIncomingServer.cpp b/src/QXmppIncomingServer.cpp
index 1f11d119..ef126c1e 100644
--- a/src/QXmppIncomingServer.cpp
+++ b/src/QXmppIncomingServer.cpp
@@ -35,7 +35,7 @@
class QXmppIncomingServerPrivate
{
public:
- QString authenticated;
+ QSet<QString> authenticated;
QString domain;
QString localStreamId;
};
@@ -146,13 +146,13 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza)
}
}
- else if (!d->authenticated.isEmpty() &&
- jidToDomain(stanza.attribute("from")) == d->authenticated)
+ else if (d->authenticated.contains(jidToDomain(stanza.attribute("from"))))
{
// relay stanza if the remote party is authenticated
emit elementReceived(stanza);
} else {
- warning("Received an element, but remote party is not authenticated");
+ warning(QString("Received an element from unverified domain %1").arg(jidToDomain(stanza.attribute("from"))));
+ disconnectFromHost();
}
}
@@ -190,10 +190,13 @@ void QXmppIncomingServer::slotDialbackResponseReceived(const QXmppDialback &dial
// check for success
if (response.type() == "valid")
{
- info("Incoming stream is ready");
- d->authenticated = dialback.from();
- emit connected();
+ info(QString("Verified incoming domain %1").arg(dialback.from()));
+ const bool wasConnected = !d->authenticated.isEmpty();
+ d->authenticated.insert(dialback.from());
+ if (!wasConnected)
+ emit connected();
} else {
+ warning(QString("Failed to verify incoming domain %1").arg(dialback.from()));
disconnectFromHost();
}