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; ...@@ -33,6 +33,7 @@ import org.jivesoftware.messenger.spi.SessionImpl;
import org.jivesoftware.messenger.spi.BasicServer; import org.jivesoftware.messenger.spi.BasicServer;
import org.jivesoftware.messenger.user.UserManager; import org.jivesoftware.messenger.user.UserManager;
import org.jivesoftware.messenger.user.UserNotFoundException; import org.jivesoftware.messenger.user.UserNotFoundException;
import org.jivesoftware.messenger.handler.PresenceUpdateHandler;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
...@@ -52,6 +53,7 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen ...@@ -52,6 +53,7 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen
private int sessionCount = 0; private int sessionCount = 0;
public static final int NEVER_KICK = -1; public static final int NEVER_KICK = -1;
private PresenceUpdateHandler presenceHandler;
private PacketRouter router; private PacketRouter router;
private String serverName; private String serverName;
private JID serverAddress; private JID serverAddress;
...@@ -898,6 +900,16 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen ...@@ -898,6 +900,16 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen
public void onConnectionClose(Object handback) { public void onConnectionClose(Object handback) {
try { try {
Session session = (Session)handback; 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); removeSession(session);
} }
catch (UnauthorizedException e) { catch (UnauthorizedException e) {
...@@ -911,6 +923,7 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen ...@@ -911,6 +923,7 @@ public class SessionManager extends BasicModule implements ConnectionCloseListen
public void initialize(XMPPServer server) { public void initialize(XMPPServer server) {
super.initialize(server); super.initialize(server);
presenceHandler = server.getPresenceUpdateHandler();
router = server.getPacketRouter(); router = server.getPacketRouter();
userManager = server.getUserManager(); userManager = server.getUserManager();
routingTable = server.getRoutingTable(); routingTable = server.getRoutingTable();
......
...@@ -18,7 +18,6 @@ import org.jivesoftware.messenger.forms.spi.XDataFormImpl; ...@@ -18,7 +18,6 @@ import org.jivesoftware.messenger.forms.spi.XDataFormImpl;
import org.jivesoftware.messenger.forms.spi.XFormFieldImpl; import org.jivesoftware.messenger.forms.spi.XFormFieldImpl;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.Permissions;
import org.jivesoftware.messenger.roster.RosterManager; import org.jivesoftware.messenger.roster.RosterManager;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.user.*; import org.jivesoftware.messenger.user.*;
...@@ -34,7 +33,6 @@ import org.dom4j.QName; ...@@ -34,7 +33,6 @@ import org.dom4j.QName;
import org.xmpp.packet.IQ; import org.xmpp.packet.IQ;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError; import org.xmpp.packet.PacketError;
import org.xmpp.packet.Presence;
/** /**
* Implements the TYPE_IQ jabber:iq:register protocol (plain only). Clients * Implements the TYPE_IQ jabber:iq:register protocol (plain only). Clients
...@@ -68,7 +66,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -68,7 +66,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
private UserManager userManager; private UserManager userManager;
private RosterManager rosterManager; private RosterManager rosterManager;
private PresenceUpdateHandler presenceHandler;
private SessionManager sessionManager; private SessionManager sessionManager;
private IQHandlerInfo info; private IQHandlerInfo info;
...@@ -86,7 +83,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -86,7 +83,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
super.initialize(server); super.initialize(server);
userManager = server.getUserManager(); userManager = server.getUserManager();
rosterManager = server.getRosterManager(); rosterManager = server.getRosterManager();
presenceHandler = server.getPresenceUpdateHandler();
sessionManager = server.getSessionManager(); sessionManager = server.getSessionManager();
if (probeResult == null) { if (probeResult == null) {
...@@ -204,13 +200,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -204,13 +200,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
Element iqElement = packet.getChildElement(); Element iqElement = packet.getChildElement();
if (iqElement.element("remove") != null) { if (iqElement.element("remove") != null) {
if (session.getStatus() == Session.STATUS_AUTHENTICATED) { 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 // Delete the user
userManager.deleteUser(userManager.getUser(session.getUsername())); userManager.deleteUser(userManager.getUser(session.getUsername()));
// Delete the roster of the user // 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