diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-03 09:40:40 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-03 09:40:40 +0000 |
| commit | 1b98c35c37df247b5a5d1b4252834cf2521c5e32 (patch) | |
| tree | 481f066630912db83de25b3f11dd7e64e7867758 /src/QXmppServer.cpp | |
| parent | 59ec6cdc69c4087ae3e666730a0154364bc20b56 (diff) | |
| download | qxmpp-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.cpp | 18 |
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 |
