Commit 7a6e9f40 authored by Matt Tucker's avatar Matt Tucker Committed by matt

Refactoring work.


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@589 b35dd754-fafc-0310-a699-88a17e54d16e
parent 9b91fa9c
...@@ -51,7 +51,7 @@ import org.xmpp.packet.Presence; ...@@ -51,7 +51,7 @@ import org.xmpp.packet.Presence;
*/ */
public class SessionManager implements ConnectionCloseListener { public class SessionManager implements ConnectionCloseListener {
private int sessionCount = 0; private int sessionCount = 0;
final int NEVER_KICK = -1; public static final int NEVER_KICK = -1;
public XMPPServer server; public XMPPServer server;
public PacketRouter router; public PacketRouter router;
......
...@@ -76,7 +76,7 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -76,7 +76,7 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
public synchronized IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException { public synchronized IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException {
try { try {
Session session = packet.getOriginatingSession(); Session session = SessionManager.getInstance().getSession(packet.getFrom());
IQ response = null; IQ response = null;
try { try {
Element iq = packet.getElement(); Element iq = packet.getElement();
......
...@@ -64,7 +64,7 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler { ...@@ -64,7 +64,7 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler {
try { try {
IQ response = IQ.createResultIQ(iq); IQ response = IQ.createResultIQ(iq);
response.setError(PacketError.Condition.not_authorized); response.setError(PacketError.Condition.not_authorized);
Session session = iq.getOriginatingSession(); Session session = SessionManager.getInstance().getSession(iq.getFrom());
if (!session.getConnection().isClosed()) { if (!session.getConnection().isClosed()) {
session.getConnection().deliver(response); session.getConnection().deliver(response);
} }
...@@ -72,9 +72,9 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler { ...@@ -72,9 +72,9 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler {
catch (Exception de) { catch (Exception de) {
Log.error(LocaleUtils.getLocalizedString("admin.error"), de); Log.error(LocaleUtils.getLocalizedString("admin.error"), de);
try { try {
iq.getOriginatingSession().getConnection().close(); SessionManager.getInstance().getSession(iq.getFrom()).getConnection().close();
} }
catch (UnauthorizedException e1) { catch (SessionNotFoundException se) {
// do nothing // do nothing
} }
} }
......
...@@ -18,10 +18,9 @@ import org.jivesoftware.util.Log; ...@@ -18,10 +18,9 @@ import org.jivesoftware.util.Log;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.user.*; import org.jivesoftware.messenger.user.*;
import org.jivesoftware.messenger.user.Roster;
import org.jivesoftware.messenger.user.spi.IQRosterItemImpl; import org.jivesoftware.messenger.user.spi.IQRosterItemImpl;
import org.xmpp.packet.Packet; import org.xmpp.packet.*;
import org.xmpp.packet.JID;
import org.xmpp.packet.IQ;
import org.dom4j.Element; import org.dom4j.Element;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
...@@ -127,8 +126,8 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -127,8 +126,8 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
item.setSubStatus(RosterItem.SUB_REMOVE); item.setSubStatus(RosterItem.SUB_REMOVE);
item.setSubStatus(RosterItem.SUB_NONE); item.setSubStatus(RosterItem.SUB_NONE);
Packet itemPacket = (Packet)packet.createDeepCopy(); Packet itemPacket = packet.createCopy();
sessionManager.userBroadcast(recipientJID.getName().toLowerCase(), itemPacket); sessionManager.userBroadcast(recipientJID.getNode(), itemPacket);
} }
} }
} }
...@@ -149,30 +148,38 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -149,30 +148,38 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
private IQ manageRoster(IQRoster packet) throws UnauthorizedException, UserAlreadyExistsException, XMLStreamException { private IQ manageRoster(IQRoster packet) throws UnauthorizedException, UserAlreadyExistsException, XMLStreamException {
IQ returnPacket = null; IQ returnPacket = null;
Session session = packet.getOriginatingSession(); Session session = null;
try {
SessionManager.getInstance().getSession(packet.getFrom());
}
catch (Exception e) {
IQ error = IQ.createResultIQ(packet);
error.setError(PacketError.Condition.internal_server_error);
return error;
}
XMPPPacket.Type type = packet.getType(); IQ.Type type = packet.getType();
try { try {
User sessionUser = userManager.getUser(session.getUsername()); User sessionUser = userManager.getUser(session.getUsername());
CachedRoster cachedRoster = (CachedRoster)sessionUser.getRoster(); CachedRoster cachedRoster = (CachedRoster)sessionUser.getRoster();
if (IQ.GET == type) { if (IQ.Type.get == type) {
returnPacket = cachedRoster.getReset(); returnPacket = cachedRoster.getReset();
returnPacket.setType(IQ.RESULT); returnPacket.setType(IQ.Type.result);
returnPacket.setRecipient(session.getAddress()); returnPacket.setTo(session.getAddress());
returnPacket.setID(packet.getID()); returnPacket.setID(packet.getID());
// Force delivery of the response because we need to trigger // Force delivery of the response because we need to trigger
// a presence probe from all contacts // a presence probe from all contacts
deliverer.deliver(returnPacket); deliverer.deliver(returnPacket);
returnPacket = null; returnPacket = null;
} }
else if (IQ.SET == type) { else if (IQ.Type.set == type) {
Iterator itemIter = packet.getRosterItems(); Iterator itemIter = packet.getRosterItems();
while (itemIter.hasNext()) { while (itemIter.hasNext()) {
RosterItem item = (RosterItem)itemIter.next(); RosterItem item = (RosterItem)itemIter.next();
if (item.getSubStatus() == RosterItem.SUB_REMOVE) { if (item.getSubStatus() == RosterItem.SUB_REMOVE) {
removeItem(cachedRoster, packet.getSender(), item); removeItem(cachedRoster, packet.getFrom(), item);
} }
else { else {
if (cachedRoster.isRosterItem(item.getJid())) { if (cachedRoster.isRosterItem(item.getJid())) {
...@@ -187,7 +194,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -187,7 +194,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
} }
} }
} }
returnPacket = packet.createResult(); returnPacket = IQ.createResultIQ(packet);
} }
} }
catch (UserNotFoundException e) { catch (UserNotFoundException e) {
...@@ -207,7 +214,8 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -207,7 +214,8 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
* @param item The removal item element * @param item The removal item element
*/ */
private void removeItem(Roster roster, JID sender, RosterItem item) private void removeItem(Roster roster, JID sender, RosterItem item)
throws UnauthorizedException, XMLStreamException { throws UnauthorizedException
{
JID recipient = item.getJid(); JID recipient = item.getJid();
// Remove recipient from the sender's roster // Remove recipient from the sender's roster
...@@ -215,7 +223,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -215,7 +223,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
// Forward set packet to the subscriber // Forward set packet to the subscriber
if (localServer.isLocal(recipient)) { // Recipient is local so let's handle it here if (localServer.isLocal(recipient)) { // Recipient is local so let's handle it here
try { try {
CachedRoster recipientRoster = userManager.getUser(recipient.getName()).getRoster(); CachedRoster recipientRoster = userManager.getUser(recipient.getNode()).getRoster();
recipientRoster.deleteRosterItem(sender); recipientRoster.deleteRosterItem(sender);
} }
catch (UserNotFoundException e) { catch (UserNotFoundException e) {
...@@ -223,8 +231,8 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -223,8 +231,8 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
} }
else { // Recipient is remote so we just forward the packet to them else { // Recipient is remote so we just forward the packet to them
XMPPPacket removePacket = createRemoveForward(sender, recipient); Packet removePacket = createRemoveForward(sender, recipient);
transporter.deliver(removePacket); router.route(removePacket);
} }
} }
...@@ -246,7 +254,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -246,7 +254,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
IQRosterItem responseItem = new IQRosterItemImpl(from); IQRosterItem responseItem = new IQRosterItemImpl(from);
responseItem.setSubStatus(RosterItem.SUB_REMOVE); responseItem.setSubStatus(RosterItem.SUB_REMOVE);
query.addFragment(responseItem); query.add(responseItem.asXMLElement());
return response; return response;
} }
...@@ -255,7 +263,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -255,7 +263,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
public XMPPServer localServer; public XMPPServer localServer;
public SessionManager sessionManager; public SessionManager sessionManager;
public PresenceManager presenceManager; public PresenceManager presenceManager;
public PacketTransporter transporter; public PacketRouter router;
public PacketFactory packetFactory; public PacketFactory packetFactory;
public RoutingTable routingTable; public RoutingTable routingTable;
...@@ -266,7 +274,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -266,7 +274,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer"); trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
trackInfo.getTrackerClasses().put(SessionManager.class, "sessionManager"); trackInfo.getTrackerClasses().put(SessionManager.class, "sessionManager");
trackInfo.getTrackerClasses().put(PresenceManager.class, "presenceManager"); trackInfo.getTrackerClasses().put(PresenceManager.class, "presenceManager");
trackInfo.getTrackerClasses().put(PacketTransporter.class, "transporter"); trackInfo.getTrackerClasses().put(PacketRouter.class, "router");
trackInfo.getTrackerClasses().put(PacketFactory.class, "packetFactory"); trackInfo.getTrackerClasses().put(PacketFactory.class, "packetFactory");
return trackInfo; return trackInfo;
} }
...@@ -280,4 +288,4 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -280,4 +288,4 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
features.add("jabber:iq:roster"); features.add("jabber:iq:roster");
return features.iterator(); return features.iterator();
} }
} }
\ No newline at end of file
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.IQ;
import org.jivesoftware.messenger.IQHandlerInfo; import org.jivesoftware.messenger.IQHandlerInfo;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -23,6 +22,7 @@ import java.util.TimeZone; ...@@ -23,6 +22,7 @@ import java.util.TimeZone;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.QName; import org.dom4j.QName;
import org.xmpp.packet.IQ;
/** /**
* Implements the TYPE_IQ jabber:iq:time protocol (time info). Allows * Implements the TYPE_IQ jabber:iq:time protocol (time info). Allows
...@@ -62,7 +62,7 @@ public class IQTimeHandler extends IQHandler implements ServerFeaturesProvider { ...@@ -62,7 +62,7 @@ public class IQTimeHandler extends IQHandler implements ServerFeaturesProvider {
buildResponse(); buildResponse();
response = packet.createResult(responseElement); response = IQ.createResultIQ(packet);
return response; return response;
} }
......
...@@ -13,7 +13,6 @@ package org.jivesoftware.messenger.handler; ...@@ -13,7 +13,6 @@ package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo; import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.IQ;
import org.jivesoftware.messenger.IQHandlerInfo; import org.jivesoftware.messenger.IQHandlerInfo;
import org.jivesoftware.messenger.PacketException; import org.jivesoftware.messenger.PacketException;
import org.jivesoftware.messenger.XMPPServer; import org.jivesoftware.messenger.XMPPServer;
...@@ -22,6 +21,7 @@ import java.util.Iterator; ...@@ -22,6 +21,7 @@ import java.util.Iterator;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.QName; import org.dom4j.QName;
import org.xmpp.packet.IQ;
/** /**
* Implements the TYPE_IQ jabber:iq:version protocol (version info). Allows * Implements the TYPE_IQ jabber:iq:version protocol (version info). Allows
...@@ -65,7 +65,8 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide ...@@ -65,7 +65,8 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide
// Could cache this information for every server we see // Could cache this information for every server we see
versionElement.setText(localServer.getServerInfo().getVersion().getVersionString()); versionElement.setText(localServer.getServerInfo().getVersion().getVersionString());
IQ result = null; IQ result = null;
result = packet.createResult(bodyElement); result = IQ.createResultIQ(packet);
result.setChildElement(bodyElement.createCopy());
return result; return result;
} }
......
...@@ -23,6 +23,9 @@ import java.util.List; ...@@ -23,6 +23,9 @@ import java.util.List;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.QName; import org.dom4j.QName;
import org.xmpp.packet.IQ;
import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError;
/** /**
* Implements the TYPE_IQ vcard-temp protocol. Clients * Implements the TYPE_IQ vcard-temp protocol. Clients
...@@ -68,25 +71,24 @@ public class IQvCardHandler extends IQHandler { ...@@ -68,25 +71,24 @@ public class IQvCardHandler extends IQHandler {
public synchronized IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException { public synchronized IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException {
IQ result = null; IQ result = null;
try { try {
XMPPAddress recipient = packet.getRecipient(); JID recipient = packet.getTo();
XMPPPacket.Type type = packet.getType(); IQ.Type type = packet.getType();
if (type.equals(IQ.SET)) { if (type.equals(IQ.Type.set)) {
User user = userManager.getUser(packet.getOriginatingSession().getUsername()); User user = userManager.getUser(packet.getFrom().getNode());
// Proper format // Proper format
Element vcard = ((XMPPDOMFragment)packet.getChildFragment()).getRootElement(); Element vcard = packet.getChildElement();
if (vcard != null) { if (vcard != null) {
List nameStack = new ArrayList(5); List nameStack = new ArrayList(5);
readVCard(vcard, nameStack, user); readVCard(vcard, nameStack, user);
} }
result = packet.createResult(); result = IQ.createResultIQ(packet);
} }
else if (type.equals(IQ.GET)) { else if (type.equals(IQ.Type.get)) {
User user = userManager.getUser(recipient.getName()); User user = userManager.getUser(recipient.getNode());
result = packet.createResult(); result = IQ.createResultIQ(packet);
Element vcard = DocumentHelper.createElement(QName.get("VCARD", "vcard-temp")); Element vcard = DocumentHelper.createElement(QName.get("VCARD", "vcard-temp"));
XMPPDOMFragment frag = new XMPPDOMFragment(vcard); result.setChildElement(vcard);
result.setChildFragment(frag);
Iterator names = user.getVCardPropertyNames(); Iterator names = user.getVCardPropertyNames();
while (names.hasNext()) { while (names.hasNext()) {
...@@ -97,13 +99,13 @@ public class IQvCardHandler extends IQHandler { ...@@ -97,13 +99,13 @@ public class IQvCardHandler extends IQHandler {
} }
} }
else { else {
result = packet.createResult(); result = IQ.createResultIQ(packet);
result.setError(XMPPError.Code.NOT_ACCEPTABLE); result.setError(PacketError.Condition.not_acceptable);
} }
} }
catch (UserNotFoundException e) { catch (UserNotFoundException e) {
result = packet.createResult(); result = IQ.createResultIQ(packet);
result.setError(XMPPError.Code.NOT_FOUND); result.setError(PacketError.Condition.item_not_found);
} }
return result; return result;
} }
......
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