From 1b98c35c37df247b5a5d1b4252834cf2521c5e32 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Fri, 3 Sep 2010 09:40:40 +0000 Subject: * 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 --- src/QXmppServer.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'src/QXmppServer.cpp') 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 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(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 -- cgit v1.2.3