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