Commit 895d6cef authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gaston

Modified to send an unavailable presence whenever a connection gets closed and...

Modified to send an unavailable presence whenever a connection gets closed and the user's presence is still available.


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@695 b35dd754-fafc-0310-a699-88a17e54d16e
parent 1db1bb04
......@@ -33,6 +33,7 @@ import org.jivesoftware.messenger.spi.SessionImpl;
import org.jivesoftware.messenger.spi.BasicServer;
import org.jivesoftware.messenger.user.UserManager;
import org.jivesoftware.messenger.user.UserNotFoundException;
import org.jivesoftware.messenger.handler.PresenceUpdateHandler;
import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log;
import org.xmpp.packet.JID;
......@@ -52,6 +53,7 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen
private int sessionCount = 0;
public static final int NEVER_KICK = -1;
private PresenceUpdateHandler presenceHandler;
private PacketRouter router;
private String serverName;
private JID serverAddress;
......@@ -898,6 +900,16 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen
public void onConnectionClose(Object handback) {
try {
Session session = (Session)handback;
if (session.getPresence().isAvailable()) {
// Send an unavailable presence to the user's subscribers
// Note: This gives us a chance to send an unavailable presence to the
// entities that the user sent directed presences
Presence presence = new Presence();
presence.setType(Presence.Type.unavailable);
presence.setFrom(session.getAddress());
presenceHandler.process(presence);
}
// Remove the session
removeSession(session);
}
catch (UnauthorizedException e) {
......@@ -911,6 +923,7 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen
public void initialize(XMPPServer server) {
super.initialize(server);
presenceHandler = server.getPresenceUpdateHandler();
router = server.getPacketRouter();
userManager = server.getUserManager();
routingTable = server.getRoutingTable();
......
......@@ -18,7 +18,6 @@ import org.jivesoftware.messenger.forms.spi.XDataFormImpl;
import org.jivesoftware.messenger.forms.spi.XFormFieldImpl;
import org.jivesoftware.util.Log;
import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.Permissions;
import org.jivesoftware.messenger.roster.RosterManager;
import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.user.*;
......@@ -34,7 +33,6 @@ import org.dom4j.QName;
import org.xmpp.packet.IQ;
import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError;
import org.xmpp.packet.Presence;
/**
* Implements the TYPE_IQ jabber:iq:register protocol (plain only). Clients
......@@ -68,7 +66,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
private UserManager userManager;
private RosterManager rosterManager;
private PresenceUpdateHandler presenceHandler;
private SessionManager sessionManager;
private IQHandlerInfo info;
......@@ -86,7 +83,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
super.initialize(server);
userManager = server.getUserManager();
rosterManager = server.getRosterManager();
presenceHandler = server.getPresenceUpdateHandler();
sessionManager = server.getSessionManager();
if (probeResult == null) {
......@@ -204,13 +200,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
Element iqElement = packet.getChildElement();
if (iqElement.element("remove") != null) {
if (session.getStatus() == Session.STATUS_AUTHENTICATED) {
// Send an unavailable presence to the user's subscribers
// Note: This gives us a chance to send an unavailable presence to the
// entities that the user sent directed presences
Presence presence = new Presence();
presence.setType(Presence.Type.unavailable);
presence.setFrom(packet.getFrom());
presenceHandler.process(presence);
// Delete the user
userManager.deleteUser(userManager.getUser(session.getUsername()));
// Delete the roster of the user
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment