aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppServer.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-03 09:40:40 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-03 09:40:40 +0000
commit1b98c35c37df247b5a5d1b4252834cf2521c5e32 (patch)
tree481f066630912db83de25b3f11dd7e64e7867758 /src/QXmppServer.cpp
parent59ec6cdc69c4087ae3e666730a0154364bc20b56 (diff)
downloadqxmpp-1b98c35c37df247b5a5d1b4252834cf2521c5e32.tar.gz
* only establish outgoing S2S if we are listening for S2S
* when a client disconnects, fake the reception of an unavailable QXmppPresence instead of dispatching it manually
Diffstat (limited to 'src/QXmppServer.cpp')
-rw-r--r--src/QXmppServer.cpp18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/QXmppServer.cpp b/src/QXmppServer.cpp
index 65b1d6d9..7e8ef266 100644
--- a/src/QXmppServer.cpp
+++ b/src/QXmppServer.cpp
@@ -411,7 +411,7 @@ QList<QXmppStream*> QXmppServer::getStreams(const QString &to)
// if we did not find an outgoing server,
// we need to establish the S2S connection
- if (found.isEmpty())
+ if (found.isEmpty() && d->serverForServers->isListening())
found << connectToDomain(toDomain);
}
return found;
@@ -701,17 +701,15 @@ void QXmppServer::slotStreamDisconnected()
QXmppIncomingClient *stream = qobject_cast<QXmppIncomingClient *>(sender());
if (stream && d->incomingClients.contains(stream))
{
- // notify subscribed peers of disconnection
+ // synthesis a received unavailable presence
if (!stream->jid().isEmpty())
{
- foreach (QString subscriber, subscribers(stream->jid()))
- {
- QXmppPresence presence;
- presence.setFrom(stream->jid());
- presence.setTo(subscriber);
- presence.setType(QXmppPresence::Unavailable);
- sendPacket(presence);
- }
+ QDomElement presence;
+ presence.setTagName("presence");
+ presence.setAttribute("from", stream->jid());
+ presence.setAttribute("to", d->domain);
+ presence.setAttribute("type", "unavailable");
+ handleStanza(stream, presence);
}
// remove stream