Commit 82b0d989 authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gaston

Refactoring to remove trackinfo logic.


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@624 b35dd754-fafc-0310-a699-88a17e54d16e
parent 3678f041
...@@ -14,6 +14,7 @@ package org.jivesoftware.messenger; ...@@ -14,6 +14,7 @@ package org.jivesoftware.messenger;
import org.jivesoftware.database.SequenceManager; import org.jivesoftware.database.SequenceManager;
import org.jivesoftware.database.DbConnectionManager; import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.util.*; import org.jivesoftware.util.*;
import org.jivesoftware.messenger.container.BasicModule;
import org.xmpp.packet.Message; import org.xmpp.packet.Message;
import org.dom4j.io.SAXReader; import org.dom4j.io.SAXReader;
import org.dom4j.DocumentFactory; import org.dom4j.DocumentFactory;
...@@ -31,7 +32,7 @@ import java.sql.Connection; ...@@ -31,7 +32,7 @@ import java.sql.Connection;
* *
* @author Iain Shigeoka * @author Iain Shigeoka
*/ */
public class OfflineMessageStore { public class OfflineMessageStore extends BasicModule {
private static final String INSERT_OFFLINE = private static final String INSERT_OFFLINE =
"INSERT INTO jiveOffline (username, messageID, creationDate, messageSize, message) " + "INSERT INTO jiveOffline (username, messageID, creationDate, messageSize, message) " +
...@@ -43,7 +44,7 @@ public class OfflineMessageStore { ...@@ -43,7 +44,7 @@ public class OfflineMessageStore {
private static final String DELETE_OFFLINE = private static final String DELETE_OFFLINE =
"DELETE FROM jiveOffline WHERE username=?"; "DELETE FROM jiveOffline WHERE username=?";
private static OfflineMessageStore instance = new OfflineMessageStore(); private static OfflineMessageStore instance;
/** /**
* Returns a singleton instance of OfflineMessageStore. * Returns a singleton instance of OfflineMessageStore.
...@@ -57,8 +58,9 @@ public class OfflineMessageStore { ...@@ -57,8 +58,9 @@ public class OfflineMessageStore {
private SAXReader saxReader = new SAXReader(); private SAXReader saxReader = new SAXReader();
private DocumentFactory docFactory = new DocumentFactory(); private DocumentFactory docFactory = new DocumentFactory();
private OfflineMessageStore() { public OfflineMessageStore() {
super("Offline Message Store");
instance = this;
} }
/** /**
......
...@@ -13,8 +13,6 @@ package org.jivesoftware.messenger; ...@@ -13,8 +13,6 @@ package org.jivesoftware.messenger;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.Container;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.user.UserNotFoundException; import org.jivesoftware.messenger.user.UserNotFoundException;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
...@@ -32,14 +30,11 @@ public class OfflineMessageStrategy extends BasicModule { ...@@ -32,14 +30,11 @@ public class OfflineMessageStrategy extends BasicModule {
private static Type type = Type.store; private static Type type = Type.store;
private SessionManager sessionManager; private SessionManager sessionManager;
public XMPPServer xmppServer; private XMPPServer xmppServer;
public PacketDeliverer deliverer; private OfflineMessageStore messageStore;
public OfflineMessageStore messageStore;
public OfflineMessageStrategy() { public OfflineMessageStrategy() {
super("Offline Message Strategy"); super("Offline Message Strategy");
sessionManager = SessionManager.getInstance();
} }
public int getQuota() { public int getQuota() {
...@@ -107,18 +102,6 @@ public class OfflineMessageStrategy extends BasicModule { ...@@ -107,18 +102,6 @@ public class OfflineMessageStrategy extends BasicModule {
messageStore.addMessage(message); messageStore.addMessage(message);
} }
public void initialize(Container container) {
super.initialize(container);
String quota = JiveGlobals.getProperty("xmpp.offline.quota");
if (quota != null && quota.length() > 0) {
OfflineMessageStrategy.quota = Integer.parseInt(quota);
}
String type = JiveGlobals.getProperty("xmpp.offline.type");
if (type != null && type.length() > 0) {
OfflineMessageStrategy.type = Type.valueOf(type);
}
}
private void bounce(Message message) { private void bounce(Message message) {
// Generate a rejection response to the sender // Generate a rejection response to the sender
try { try {
...@@ -141,13 +124,20 @@ public class OfflineMessageStrategy extends BasicModule { ...@@ -141,13 +124,20 @@ public class OfflineMessageStrategy extends BasicModule {
} }
} }
public void initialize(XMPPServer server) {
super.initialize(server);
xmppServer = server;
messageStore = server.getOfflineMessageStore();
sessionManager = server.getSessionManager();
public TrackInfo getTrackInfo() { String quota = JiveGlobals.getProperty("xmpp.offline.quota");
TrackInfo trackInfo = new TrackInfo(); if (quota != null && quota.length() > 0) {
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer"); OfflineMessageStrategy.quota = Integer.parseInt(quota);
trackInfo.getTrackerClasses().put(XMPPServer.class, "xmppServer"); }
trackInfo.getTrackerClasses().put(OfflineMessageStore.class, "messageStore"); String type = JiveGlobals.getProperty("xmpp.offline.type");
return trackInfo; if (type != null && type.length() > 0) {
OfflineMessageStrategy.type = Type.valueOf(type);
}
} }
/** /**
......
...@@ -22,7 +22,6 @@ import org.dom4j.io.SAXReader; ...@@ -22,7 +22,6 @@ import org.dom4j.io.SAXReader;
import java.sql.*; import java.sql.*;
import java.sql.Connection; import java.sql.Connection;
import java.io.StringWriter; import java.io.StringWriter;
import java.io.StringReader;
/** /**
* Private storage for user accounts (JEP-0049). It is used by some XMPP systems * Private storage for user accounts (JEP-0049). It is used by some XMPP systems
......
...@@ -27,10 +27,8 @@ import java.util.concurrent.locks.ReadWriteLock; ...@@ -27,10 +27,8 @@ import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.jivesoftware.messenger.audit.AuditStreamIDFactory; import org.jivesoftware.messenger.audit.AuditStreamIDFactory;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.Container; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.spi.BasicStreamIDFactory; import org.jivesoftware.messenger.spi.BasicStreamIDFactory;
import org.jivesoftware.messenger.spi.PacketTransporterImpl;
import org.jivesoftware.messenger.spi.SessionImpl; import org.jivesoftware.messenger.spi.SessionImpl;
import org.jivesoftware.messenger.user.UserManager; import org.jivesoftware.messenger.user.UserManager;
import org.jivesoftware.messenger.user.UserNotFoundException; import org.jivesoftware.messenger.user.UserNotFoundException;
...@@ -49,16 +47,14 @@ import org.xmlpull.v1.XmlPullParserException; ...@@ -49,16 +47,14 @@ import org.xmlpull.v1.XmlPullParserException;
* *
* @author Derek DeMoro * @author Derek DeMoro
*/ */
public class SessionManager implements ConnectionCloseListener { public class SessionManager extends BasicModule implements ConnectionCloseListener {
private int sessionCount = 0; private int sessionCount = 0;
public static final int NEVER_KICK = -1; public static final int NEVER_KICK = -1;
public XMPPServer server; private PacketRouter router;
public PacketRouter router;
public PacketTransporterImpl transporter;
private String serverName; private String serverName;
private JID serverAddress; private JID serverAddress;
public UserManager userManager; private UserManager userManager;
private int conflictLimit; private int conflictLimit;
private Random randomResource = new Random(); private Random randomResource = new Random();
...@@ -87,7 +83,12 @@ public class SessionManager implements ConnectionCloseListener { ...@@ -87,7 +83,12 @@ public class SessionManager implements ConnectionCloseListener {
return singleton; return singleton;
} }
private SessionManager() { public SessionManager() {
super("Session Manager");
if (singleton != null) {
throw new IllegalStateException();
}
singleton = this;
if (JiveGlobals.getBooleanProperty("xmpp.audit.active")) { if (JiveGlobals.getBooleanProperty("xmpp.audit.active")) {
streamIDFactory = new AuditStreamIDFactory(); streamIDFactory = new AuditStreamIDFactory();
} }
...@@ -127,7 +128,7 @@ public class SessionManager implements ConnectionCloseListener { ...@@ -127,7 +128,7 @@ public class SessionManager implements ConnectionCloseListener {
* <p>Session manager must maintain the routing table as sessions are added and * <p>Session manager must maintain the routing table as sessions are added and
* removed.</p> * removed.</p>
*/ */
public RoutingTable routingTable; private RoutingTable routingTable;
/** /**
* The standard Jive reader/writer lock to synchronize access to * The standard Jive reader/writer lock to synchronize access to
...@@ -903,29 +904,14 @@ public class SessionManager implements ConnectionCloseListener { ...@@ -903,29 +904,14 @@ public class SessionManager implements ConnectionCloseListener {
} }
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(XMPPServer.class, "server"); router = server.getPacketRouter();
trackInfo.getTrackerClasses().put(PacketRouter.class, "router"); userManager = server.getUserManager();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager"); routingTable = server.getRoutingTable();
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable"); serverName = server.getServerInfo().getName();
return trackInfo; serverAddress = new JID(serverName);
}
public void serviceAdded(Object service) {
if (service instanceof XMPPServer && server != null) {
serverName = server.getServerInfo().getName();
serverAddress = new JID(serverName);
}
}
public void serviceRemoved(Object service) {
if (server == null) {
serverName = null;
}
}
public void initialize(Container container) {
if (JiveGlobals.getBooleanProperty("xmpp.audit.active")) { if (JiveGlobals.getBooleanProperty("xmpp.audit.active")) {
streamIDFactory = new AuditStreamIDFactory(); streamIDFactory = new AuditStreamIDFactory();
} }
...@@ -986,6 +972,7 @@ public class SessionManager implements ConnectionCloseListener { ...@@ -986,6 +972,7 @@ public class SessionManager implements ConnectionCloseListener {
} }
public void stop() { public void stop() {
serverName = null;
sendServerMessage(null, LocaleUtils.getLocalizedString("admin.shutdown.now")); sendServerMessage(null, LocaleUtils.getLocalizedString("admin.shutdown.now"));
try { try {
for (Session session : getSessions()) { for (Session session : getSessions()) {
......
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.messenger;
import org.jivesoftware.messenger.audit.spi.AuditManagerImpl;
import org.jivesoftware.messenger.container.spi.BootstrapContainer;
import org.jivesoftware.messenger.disco.IQDiscoInfoHandler;
import org.jivesoftware.messenger.disco.IQDiscoItemsHandler;
import org.jivesoftware.messenger.handler.IQAuthHandler;
import org.jivesoftware.messenger.handler.IQPrivateHandler;
import org.jivesoftware.messenger.handler.IQRegisterHandler;
import org.jivesoftware.messenger.handler.IQRosterHandler;
import org.jivesoftware.messenger.handler.IQTimeHandler;
import org.jivesoftware.messenger.handler.IQVersionHandler;
import org.jivesoftware.messenger.handler.IQvCardHandler;
import org.jivesoftware.messenger.handler.PresenceSubscribeHandler;
import org.jivesoftware.messenger.handler.PresenceUpdateHandler;
import org.jivesoftware.messenger.muc.spi.MultiUserChatServerImpl;
import org.jivesoftware.messenger.spi.BasicServer;
import org.jivesoftware.messenger.spi.ConnectionManagerImpl;
import org.jivesoftware.messenger.spi.IQRouterImpl;
import org.jivesoftware.messenger.spi.MessageRouterImpl;
import org.jivesoftware.messenger.spi.PacketDelivererImpl;
import org.jivesoftware.messenger.spi.PacketRouterImpl;
import org.jivesoftware.messenger.spi.PacketTransporterImpl;
import org.jivesoftware.messenger.spi.PresenceManagerImpl;
import org.jivesoftware.messenger.spi.PresenceRouterImpl;
import org.jivesoftware.messenger.spi.RoutingTableImpl;
import org.jivesoftware.messenger.transport.TransportHandler;
import org.jivesoftware.messenger.user.spi.RosterManagerImpl;
import org.jivesoftware.messenger.user.spi.UserManagerImpl;
/**
* A bootstrap container to launch the Messenger XMPP server. This
* container knows what classes must be loaded to create a functional
* Jive Messenger deployment.
*
* @author Iain Shigeoka
*/
public class XMPPBootContainer extends BootstrapContainer {
protected String[] getSetupModuleNames() {
return new String[]{BasicServer.class.getName()};
}
protected String[] getBootModuleNames() {
return new String[]{
BasicServer.class.getName(),
RoutingTableImpl.class.getName(),
AuditManagerImpl.class.getName(),
UserManagerImpl.class.getName(),
RosterManagerImpl.class.getName(),
PrivateStorage.class.getName()};
}
protected String[] getCoreModuleNames() {
return new String[]{
ConnectionManagerImpl.class.getName(),
PresenceManagerImpl.class.getName(),
PacketRouterImpl.class.getName(),
IQRouterImpl.class.getName(),
MessageRouterImpl.class.getName(),
PresenceRouterImpl.class.getName(),
PacketTransporterImpl.class.getName(),
PacketDelivererImpl.class.getName(),
TransportHandler.class.getName(),
OfflineMessageStrategy.class.getName()};
}
protected String[] getStandardModuleNames() {
return new String[]{
IQAuthHandler.class.getName(),
IQPrivateHandler.class.getName(),
IQRegisterHandler.class.getName(),
IQRosterHandler.class.getName(),
IQTimeHandler.class.getName(),
IQvCardHandler.class.getName(),
IQVersionHandler.class.getName(),
PresenceSubscribeHandler.class.getName(),
PresenceUpdateHandler.class.getName(),
IQDiscoInfoHandler.class.getName(),
IQDiscoItemsHandler.class.getName(),
MultiUserChatServerImpl.class.getName()};
}
}
\ No newline at end of file
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
package org.jivesoftware.messenger; package org.jivesoftware.messenger;
import org.jivesoftware.messenger.spi.BasicServer;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
...@@ -19,14 +21,14 @@ import javax.servlet.http.HttpServlet; ...@@ -19,14 +21,14 @@ import javax.servlet.http.HttpServlet;
public class XMPPBootServlet extends HttpServlet { public class XMPPBootServlet extends HttpServlet {
private XMPPBootContainer container; private XMPPServer server;
private Object containerLock = new Object(); private Object serverLock = new Object();
public void init(ServletConfig servletConfig) throws ServletException { public void init(ServletConfig servletConfig) throws ServletException {
if (container == null) { if (server == null) {
synchronized (containerLock) { synchronized (serverLock) {
if (container == null) { if (server == null) {
container = new XMPPBootContainer(); server = new BasicServer();
} }
} }
} }
......
...@@ -11,8 +11,20 @@ ...@@ -11,8 +11,20 @@
package org.jivesoftware.messenger; package org.jivesoftware.messenger;
import org.jivesoftware.messenger.container.Module;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
import org.jivesoftware.messenger.user.RosterManager;
import org.jivesoftware.messenger.user.UserManager;
import org.jivesoftware.messenger.handler.IQRegisterHandler;
import org.jivesoftware.messenger.handler.PresenceUpdateHandler;
import org.jivesoftware.messenger.handler.PresenceSubscribeHandler;
import org.jivesoftware.messenger.handler.IQHandler;
import org.jivesoftware.messenger.transport.TransportHandler;
import org.jivesoftware.messenger.audit.AuditManager;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.disco.ServerItemsProvider;
import org.jivesoftware.messenger.disco.IQDiscoInfoHandler;
import java.util.List;
/** /**
* The XMPP server definition. An interface allows us to implement the * The XMPP server definition. An interface allows us to implement the
...@@ -28,7 +40,7 @@ import org.xmpp.packet.JID; ...@@ -28,7 +40,7 @@ import org.xmpp.packet.JID;
* *
* @author Iain Shigeoka * @author Iain Shigeoka
*/ */
public interface XMPPServer extends Module { public interface XMPPServer {
/** /**
* Obtain a snapshot of the server's status. * Obtain a snapshot of the server's status.
...@@ -53,4 +65,49 @@ public interface XMPPServer extends Module { ...@@ -53,4 +65,49 @@ public interface XMPPServer extends Module {
*/ */
public JID createJID(String username, String resource); public JID createJID(String username, String resource);
public ConnectionManager getConnectionManager();
public RoutingTable getRoutingTable();
public PacketDeliverer getPacketDeliverer();
public RosterManager getRosterManager();
public PresenceManager getPresenceManager();
public OfflineMessageStore getOfflineMessageStore();
public OfflineMessageStrategy getOfflineMessageStrategy();
public PacketRouter getPacketRouter();
public IQRegisterHandler getIQRegisterHandler();
public List<IQHandler> getIQHandlers();
public SessionManager getSessionManager();
public TransportHandler getTransportHandler();
public PresenceUpdateHandler getPresenceUpdateHandler();
public PresenceSubscribeHandler getPresenceSubscribeHandler();
public IQRouter getIQRouter();
public MessageRouter getMessageRouter();
public PresenceRouter getPresenceRouter();
public UserManager getUserManager();
public AuditManager getAuditManager();
public List<ServerFeaturesProvider> getServerFeaturesProviders();
public List<ServerItemsProvider> getServerItemsProviders();
public IQDiscoInfoHandler getIQDiscoInfoHandler();
public PrivateStorage getPrivateStorage();
} }
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
package org.jivesoftware.messenger.audit.spi; package org.jivesoftware.messenger.audit.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.Container;
import org.jivesoftware.messenger.audit.AuditManager; import org.jivesoftware.messenger.audit.AuditManager;
import org.jivesoftware.messenger.audit.Auditor; import org.jivesoftware.messenger.audit.Auditor;
import org.jivesoftware.messenger.JiveGlobals; import org.jivesoftware.messenger.JiveGlobals;
import org.jivesoftware.messenger.XMPPServer;
import java.util.*; import java.util.*;
...@@ -145,8 +145,8 @@ public class AuditManagerImpl extends BasicModule implements AuditManager { ...@@ -145,8 +145,8 @@ public class AuditManagerImpl extends BasicModule implements AuditManager {
// Basic module methods // Basic module methods
// ######################################################################### // #########################################################################
public void initialize(Container container) { public void initialize(XMPPServer server) {
super.initialize(container); super.initialize(server);
enabled = JiveGlobals.getBooleanProperty("xmpp.audit.active"); enabled = JiveGlobals.getBooleanProperty("xmpp.audit.active");
auditMessage = JiveGlobals.getBooleanProperty("xmpp.audit.message"); auditMessage = JiveGlobals.getBooleanProperty("xmpp.audit.message");
auditPresence = JiveGlobals.getBooleanProperty("xmpp.audit.presence"); auditPresence = JiveGlobals.getBooleanProperty("xmpp.audit.presence");
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
package org.jivesoftware.messenger.container; package org.jivesoftware.messenger.container;
import org.jivesoftware.messenger.XMPPServer;
/** /**
* Logical, server-managed entities must implement this interface. A module * Logical, server-managed entities must implement this interface. A module
* represents an operational unit and may contain zero or more services * represents an operational unit and may contain zero or more services
...@@ -52,9 +54,9 @@ public interface Module { ...@@ -52,9 +54,9 @@ public interface Module {
* Modules may be initialized and never started, so modules * Modules may be initialized and never started, so modules
* should be prepared for a call to destroy() to follow initialize(). * should be prepared for a call to destroy() to follow initialize().
* *
* @param container the container hosting this module. * @param server the server hosting this module.
*/ */
void initialize(Container container); void initialize(XMPPServer server);
/** /**
* Start the module (must return quickly). Any long running * Start the module (must return quickly). Any long running
......
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.messenger.container.spi;
import org.jivesoftware.messenger.container.EventListener;
import org.jivesoftware.messenger.container.EventRegistration;
/**
* A simple registration event for services.
*
* @author Iain Shigeoka
*/
public class ServiceEventRegistrationImpl extends EventRegistration {
/**
* The listener for this registration.
*/
private EventListener listener;
/**
* Create an event registration with listener and lookup
*
* @param serviceLookup the lookup that generated the registration.
* @param eventListener the listener for the registration event.
* @param eventID the event ID to associate with this event.
* @param sequenceNo the sequence number this event will use
*/
public ServiceEventRegistrationImpl(ServiceLookupImpl serviceLookup,
EventListener eventListener,
long eventID,
long sequenceNo) {
super(eventID, serviceLookup, sequenceNo);
this.listener = eventListener;
}
public void cancel() {
((ServiceLookupImpl)this.getSource()).remove(listener);
}
}
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.messenger.container.spi;
import org.jivesoftware.messenger.container.*;
import org.jivesoftware.messenger.container.EventListener;
import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log;
import java.util.*;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* <p>Simple classs to track and manage service
* registrations and respond to service lookups.</p>
*
* @author Iain Shigeoka
*/
public class ServiceLookupImpl implements ServiceLookup {
private ServiceID id;
private Map idTable = new HashMap();
/**
* Simple constructor
*/
public ServiceLookupImpl() {
id = new ServiceID();
}
public ServiceID getServiceID() {
return id;
}
public Class[] getServiceTypes(ServiceTemplate tmpl, String prefix) {
throw new UnsupportedOperationException();
}
public Object lookup(Class type) {
ServiceTemplate tmpl = new ServiceTemplate();
tmpl.types = new Class[]{type};
return lookup(tmpl);
}
public Object lookup(ServiceTemplate tmpl) {
Object found = null;
try {
matchLock.readLock().lock();
Iterator itemItr;
// Add all matching service IDs to the items list
if (tmpl.serviceID == null) {
itemItr = idTable.values().iterator();
}
else {
LinkedList items = new LinkedList();
items.add(idTable.get(tmpl.serviceID));
itemItr = items.iterator();
}
// Now check each item for a match against attributes
while (itemItr.hasNext()) {
ServiceItem item = (ServiceItem)itemItr.next();
if (isMatch(tmpl, item)) {
found = item.service;
break;
}
}
}
finally {
matchLock.readLock().unlock();
}
return found;
}
private boolean isMatch(ServiceTemplate tmpl, ServiceItem item) {
boolean isMatch = true;
if (tmpl.attributes != null) {
for (int i = 0; i < tmpl.attributes.length; i++) {
boolean hasAttribute = false;
for (int j = 0; j < item.attributes.length; j++) {
if (item.attributes[j].equals(tmpl.attributes[i])) {
hasAttribute = true;
}
}
if (!hasAttribute) {
isMatch = false;
item = null;
}
}
}
if (item != null && tmpl.types != null) {
for (int i = 0; i < tmpl.types.length; i++) {
if (!tmpl.types[i].isInstance(item.service)) {
isMatch = false;
item = null;
break;
}
}
}
return isMatch;
}
public ServiceMatches lookup(ServiceTemplate tmpl, int maxMatches) {
throw new UnsupportedOperationException();
}
//private long eventID = 101;
private static final long EVENT_ID = 101;
private long sequenceID = 0;
private ReadWriteLock matchLock = new ReentrantReadWriteLock();
private HashMap matchMatchListeners = new HashMap();
private HashMap matchNoMatchListeners = new HashMap();
private HashMap noMatchMatchListeners = new HashMap();
private HashMap listeners = new HashMap();
public EventRegistration notifyRegister(ServiceTemplate tmpl,
int transitions,
EventListener listener) {
try {
matchLock.writeLock().lock();
if ((transitions & TRANSITION_MATCH_MATCH) != 0) {
matchMatchListeners.put(tmpl, listener);
}
if ((transitions & TRANSITION_MATCH_NOMATCH) != 0) {
matchNoMatchListeners.put(tmpl, listener);
}
if ((transitions & TRANSITION_NOMATCH_MATCH) != 0) {
noMatchMatchListeners.put(tmpl, listener);
}
List templates = (List)listeners.get(listener);
if (templates == null) {
templates = new LinkedList();
listeners.put(listener, templates);
}
templates.add(tmpl);
return new ServiceEventRegistrationImpl(this, listener, EVENT_ID, sequenceID);
}
finally {
matchLock.writeLock().unlock();
}
}
public ServiceRegistration register(ServiceItem item) {
// Generate a service id if needed
if (item.serviceID == null) {
item.serviceID = new ServiceID();
}
// Register the service
Object result = null;
try {
matchLock.writeLock().lock();
result = idTable.put(item.serviceID, item);
}
finally {
matchLock.writeLock().unlock();
}
// Handle transition notifications
// This can trigger a nomatch-match or match-match event
if (result == null) { // nomatch-match
notifyTransitions(noMatchMatchListeners, TRANSITION_NOMATCH_MATCH, item);
}
else { // match-match
notifyTransitions(matchMatchListeners, TRANSITION_MATCH_MATCH, item);
}
return new ServiceRegistrationImpl(this, item.serviceID);
}
private void notifyTransitions(Map listenerMap, int transition, ServiceItem item) {
LinkedList notifyListenerList = new LinkedList();
try {
matchLock.readLock().lock();
Iterator matches = listenerMap.keySet().iterator();
while (matches.hasNext()) {
ServiceTemplate tmpl = (ServiceTemplate)matches.next();
EventListener listener = (EventListener)listenerMap.get(tmpl);
if (isMatch(tmpl, item)) {
notifyListenerList.add(listener);
}
}
}
finally {
matchLock.readLock().unlock();
}
Iterator notifyListeners = notifyListenerList.iterator();
while (notifyListeners.hasNext()) {
EventListener listener = (EventListener)notifyListeners.next();
try {
listener.notifyEvent(new ServiceEvent(this,
EVENT_ID,
sequenceID++,
null,
item,
id,
transition));
}
catch (UnknownEventException e) {
Log.error(LocaleUtils.getLocalizedString("admin.error"), e);
}
}
}
/**
* Remove a service (only should be called by a ServiceRegistrationImpl.cancel()
*
* @param removeID The service id of the servce to remove
*/
final void remove(ServiceID removeID) {
ServiceItem item;
// Remove registration
try {
matchLock.writeLock().lock();
item = (ServiceItem)idTable.remove(removeID);
}
finally {
matchLock.writeLock().unlock();
}
// Notify listeners
if (item != null) {
notifyTransitions(matchNoMatchListeners, TRANSITION_MATCH_NOMATCH, item);
}
}
/**
* <p>Remove a service event listener
* (only should be called by ServiceEventRegistrationImpl.cancel()).</p>
*
* @param listener The event listener to remove
*/
final void remove(EventListener listener) {
try {
matchLock.writeLock().lock();
List templates = (List)listeners.remove(listener);
if (templates != null) {
Iterator templateItr = templates.iterator();
while (templateItr.hasNext()) {
Object template = templateItr.next();
matchMatchListeners.remove(template);
matchNoMatchListeners.remove(template);
noMatchMatchListeners.remove(template);
}
}
}
finally {
matchLock.writeLock().unlock();
}
}
/**
* Sets the attributes for an entry.
* Only should be called by a ServiceRegistrationImpl.setAttributes()
*
* @param serviceID The id of the service to modify
* @param attributes The new attributes for that service
*/
final void setAttributes(ServiceID serviceID, Entry[] attributes) {
try {
matchLock.writeLock().lock();
ServiceItem item = (ServiceItem)idTable.get(serviceID);
item.attributes = attributes;
}
finally {
matchLock.writeLock().unlock();
}
}
}
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.messenger.container.spi;
import org.jivesoftware.messenger.container.EventListener;
import org.jivesoftware.messenger.container.EventRegistration;
import org.jivesoftware.messenger.container.ServiceID;
import org.jivesoftware.messenger.container.ServiceItem;
import org.jivesoftware.messenger.container.ServiceLookup;
import org.jivesoftware.messenger.container.ServiceMatches;
import org.jivesoftware.messenger.container.ServiceRegistration;
import org.jivesoftware.messenger.container.ServiceTemplate;
import org.jivesoftware.messenger.auth.AuthToken;
import org.jivesoftware.messenger.auth.Permissions;
/**
* Authorization proxy for service lookups.
*
* @author Iain Shigeoka
*/
public class ServiceLookupProxy implements ServiceLookup {
private AuthToken authToken;
private Permissions permissions;
private ServiceLookup lookup;
/**
* Create a lookup security proxy
*
* @param authToken the authentication token for the user.
* @param permissions the permissions of the user.
* @param lookup the lookup being proxied.
*/
public ServiceLookupProxy(AuthToken authToken, Permissions permissions, ServiceLookup lookup) {
this.authToken = authToken;
this.permissions = permissions;
this.lookup = lookup;
}
public ServiceID getServiceID() {
return lookup.getServiceID();
}
public Class[] getServiceTypes(ServiceTemplate tmpl, String prefix) {
return lookup.getServiceTypes(tmpl, prefix);
}
public Object lookup(Class type) {
return lookup.lookup(type);
}
public Object lookup(ServiceTemplate tmpl) {
return lookup.lookup(tmpl);
}
public ServiceMatches lookup(ServiceTemplate tmpl, int maxMatches) {
return lookup.lookup(tmpl, maxMatches);
}
public EventRegistration notifyRegister(ServiceTemplate tmpl, int transitions, EventListener listener) {
return lookup.notifyRegister(tmpl, transitions, listener);
}
public ServiceRegistration register(ServiceItem item) {
return lookup.register(item);
}
}
\ No newline at end of file
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.messenger.container.spi;
import org.jivesoftware.messenger.container.Entry;
import org.jivesoftware.messenger.container.ServiceID;
import org.jivesoftware.messenger.container.ServiceRegistration;
/**
* A simple service registration implementation.
*
* @author Iain Shigeoka
*/
public class ServiceRegistrationImpl implements ServiceRegistration {
/**
* The lookup that owns this registration.
*/
private ServiceLookupImpl lookup;
/**
* The ID of the service regististered.
*/
private ServiceID id;
/**
* Create a service registration for the given lookup with the given ID.
*
* @param serviceLookup the service lookup that owns this registration.
* @param ID the id for the registration
*/
ServiceRegistrationImpl(ServiceLookupImpl serviceLookup, ServiceID ID) {
this.lookup = serviceLookup;
this.id = ID;
}
public ServiceID getServiceID() {
return id;
}
public void setAttributes(Entry[] attributes) {
lookup.setAttributes(id, attributes);
}
public void cancel() {
lookup.remove(id);
}
}
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.messenger.disco;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.XMPPServer;
import org.jivesoftware.messenger.handler.IQHandler;
/**
* Base class for handling disco request. So far this class is not of much help since practically
* all the main behavior is located in each subclass.
*
* @author Gaston Dombiak
*/
public abstract class IQDiscoHandler extends IQHandler {
public XMPPServer localServer;
public IQDiscoHandler(String name) {
super(name);
}
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
return trackInfo;
}
}
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
package org.jivesoftware.messenger.disco; package org.jivesoftware.messenger.disco;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.forms.spi.XDataFormImpl; import org.jivesoftware.messenger.forms.spi.XDataFormImpl;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.handler.IQHandler;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
...@@ -45,7 +45,7 @@ import org.xmpp.packet.JID; ...@@ -45,7 +45,7 @@ import org.xmpp.packet.JID;
* *
* @author Gaston Dombiak * @author Gaston Dombiak
*/ */
public class IQDiscoInfoHandler extends IQDiscoHandler { public class IQDiscoInfoHandler extends IQHandler {
private HashMap entities = new HashMap(); private HashMap entities = new HashMap();
private List serverFeatures = new ArrayList(); private List serverFeatures = new ArrayList();
...@@ -170,37 +170,20 @@ public class IQDiscoInfoHandler extends IQDiscoHandler { ...@@ -170,37 +170,20 @@ public class IQDiscoInfoHandler extends IQDiscoHandler {
* *
* @param provider the ServerFeaturesProvider that provides new server features. * @param provider the ServerFeaturesProvider that provides new server features.
*/ */
public void addServerFeaturesProvider(ServerFeaturesProvider provider) { private void addServerFeaturesProvider(ServerFeaturesProvider provider) {
for (Iterator it = provider.getFeatures(); it.hasNext();) { for (Iterator it = provider.getFeatures(); it.hasNext();) {
serverFeatures.add(it.next()); serverFeatures.add(it.next());
} }
} }
/** public void initialize(XMPPServer server) {
* Removes the features provided by the service that implements the ServerFeaturesProvider super.initialize(server);
* interface which is being removed. Example of features are: jabber:iq:agents,
* jabber:iq:time, etc.
*
* @param provider the ServerFeaturesProvider that was providing server features.
*/
public void removeServerFeaturesProvider(ServerFeaturesProvider provider) {
for (Iterator it = provider.getFeatures(); it.hasNext();) {
serverFeatures.remove(it.next());
}
}
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = super.getTrackInfo();
// Track the implementors of ServerFeaturesProvider so that we can collect the features // Track the implementors of ServerFeaturesProvider so that we can collect the features
// provided by the server // provided by the server
trackInfo.getTrackerClasses().put(ServerFeaturesProvider.class, "ServerFeaturesProvider"); for (ServerFeaturesProvider provider : server.getServerFeaturesProviders()) {
return trackInfo; addServerFeaturesProvider(provider);
}
public void serviceAdded(Object service) {
if (service instanceof XMPPServer) {
setProvider(((XMPPServer)service).getServerInfo().getName(), getServerInfoProvider());
} }
setProvider(server.getServerInfo().getName(), getServerInfoProvider());
} }
/** /**
......
...@@ -19,8 +19,8 @@ import org.dom4j.DocumentHelper; ...@@ -19,8 +19,8 @@ import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.jivesoftware.messenger.IQHandlerInfo; import org.jivesoftware.messenger.IQHandlerInfo;
import org.jivesoftware.messenger.XMPPServer; import org.jivesoftware.messenger.XMPPServer;
import org.jivesoftware.messenger.handler.IQHandler;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.util.StringUtils; import org.jivesoftware.util.StringUtils;
import org.xmpp.packet.IQ; import org.xmpp.packet.IQ;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
...@@ -48,12 +48,12 @@ import org.xmpp.packet.PacketError; ...@@ -48,12 +48,12 @@ import org.xmpp.packet.PacketError;
* *
* @author Gaston Dombiak * @author Gaston Dombiak
*/ */
public class IQDiscoItemsHandler extends IQDiscoHandler implements ServerFeaturesProvider { public class IQDiscoItemsHandler extends IQHandler implements ServerFeaturesProvider {
private HashMap entities = new HashMap(); private HashMap entities = new HashMap();
private List serverItems = new ArrayList(); private List serverItems = new ArrayList();
private IQHandlerInfo info; private IQHandlerInfo info;
public IQDiscoInfoHandler infoHandler; private IQDiscoInfoHandler infoHandler;
public IQDiscoItemsHandler() { public IQDiscoItemsHandler() {
super("XMPP Disco Items Handler"); super("XMPP Disco Items Handler");
...@@ -165,7 +165,7 @@ public class IQDiscoItemsHandler extends IQDiscoHandler implements ServerFeature ...@@ -165,7 +165,7 @@ public class IQDiscoItemsHandler extends IQDiscoHandler implements ServerFeature
* *
* @param provider the ServerItemsProvider that provides new server items. * @param provider the ServerItemsProvider that provides new server items.
*/ */
public void addServerItemsProvider(ServerItemsProvider provider) { private void addServerItemsProvider(ServerItemsProvider provider) {
DiscoServerItem discoItem; DiscoServerItem discoItem;
for (Iterator it = provider.getItems(); it.hasNext();) { for (Iterator it = provider.getItems(); it.hasNext();) {
discoItem = (DiscoServerItem)it.next(); discoItem = (DiscoServerItem)it.next();
...@@ -184,51 +184,15 @@ public class IQDiscoItemsHandler extends IQDiscoHandler implements ServerFeature ...@@ -184,51 +184,15 @@ public class IQDiscoItemsHandler extends IQDiscoHandler implements ServerFeature
} }
} }
/** public void initialize(XMPPServer server) {
* Removes the items provided by the service that implements the ServerItemsProvider super.initialize(server);
* interface which is being removed. Example of item is:
* &lt;item jid='conference.localhost' name='Public chatrooms'/&gt;
*
* @param provider the ServerItemsProvider that was providing server items.
*/
public void removeServerItemsProvider(ServerItemsProvider provider) {
DiscoItem discoItem;
for (Iterator it = provider.getItems(); it.hasNext();) {
discoItem = (DiscoItem)it.next();
// Locate the element that represents the DiscoItem to remove
Element element = null;
boolean found = false;
for (Iterator itemsItr = serverItems.iterator(); !found && it.hasNext();) {
element = (Element)itemsItr.next();
if (discoItem.getJID().equals(element.attributeValue("jid"))) {
found = true;
break;
}
}
// If the element was found then remove it from the items provided by the server
if (found) {
serverItems.remove(element);
}
// Remove the item as a valid entity that could receive info and items disco requests
String host = StringUtils.parseServer(discoItem.getJID());
infoHandler.removeProvider(host);
removeProvider(host);
}
}
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = super.getTrackInfo();
// Track the implementors of ServerItemsProvider so that we can collect the items // Track the implementors of ServerItemsProvider so that we can collect the items
// provided by the server // provided by the server
trackInfo.getTrackerClasses().put(ServerItemsProvider.class, "ServerItemsProvider"); infoHandler = server.getIQDiscoInfoHandler();
trackInfo.getTrackerClasses().put(IQDiscoInfoHandler.class, "infoHandler"); for (ServerItemsProvider provider : server.getServerItemsProviders()) {
return trackInfo; addServerItemsProvider(provider);
}
public void serviceAdded(Object service) {
if (service instanceof XMPPServer) {
setProvider(((XMPPServer)service).getServerInfo().getName(), getServerItemsProvider());
} }
setProvider(server.getServerInfo().getName(), getServerItemsProvider());
} }
public Iterator getFeatures() { public Iterator getFeatures() {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
...@@ -55,6 +54,10 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -55,6 +54,10 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
private Element probeResponse; private Element probeResponse;
private IQHandlerInfo info; private IQHandlerInfo info;
private UserManager userManager;
private XMPPServer localServer;
private SessionManager sessionManager;
/** /**
* Clients are not authenticated when accessing this handler. * Clients are not authenticated when accessing this handler.
*/ */
...@@ -76,7 +79,7 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -76,7 +79,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 = SessionManager.getInstance().getSession(packet.getFrom()); Session session = sessionManager.getSession(packet.getFrom());
IQ response = null; IQ response = null;
try { try {
Element iq = packet.getElement(); Element iq = packet.getElement();
...@@ -226,15 +229,11 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -226,15 +229,11 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
JiveGlobals.setProperty("xmpp.auth.anonymous", anonymousAllowed ? "true" : "false"); JiveGlobals.setProperty("xmpp.auth.anonymous", anonymousAllowed ? "true" : "false");
} }
public UserManager userManager; public void initialize(XMPPServer server) {
public XMPPServer localServer; super.initialize(server);
private SessionManager sessionManager = SessionManager.getInstance(); localServer = server;
userManager = server.getUserManager();
protected TrackInfo getTrackInfo() { sessionManager = server.getSessionManager();
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager");
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
return trackInfo;
} }
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
......
...@@ -11,16 +11,9 @@ ...@@ -11,16 +11,9 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.ChannelHandler; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.IQHandlerInfo;
import org.jivesoftware.messenger.IQRouter;
import org.jivesoftware.messenger.PacketDeliverer;
import org.jivesoftware.messenger.PacketException;
import org.jivesoftware.messenger.Session;
import org.jivesoftware.messenger.SessionManager;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
...@@ -39,10 +32,12 @@ import org.xmpp.packet.PacketError; ...@@ -39,10 +32,12 @@ import org.xmpp.packet.PacketError;
*/ */
public abstract class IQHandler extends BasicModule implements ChannelHandler { public abstract class IQHandler extends BasicModule implements ChannelHandler {
public PacketDeliverer deliverer; protected PacketDeliverer deliverer;
protected IQRouter router; protected IQRouter router;
private SessionManager sessionManager;
/** /**
* Create a basic module with the given name. * Create a basic module with the given name.
* *
...@@ -69,14 +64,14 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler { ...@@ -69,14 +64,14 @@ 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 = SessionManager.getInstance().getSession(iq.getFrom()); Session session = sessionManager.getSession(iq.getFrom());
if (!session.getConnection().isClosed()) { if (!session.getConnection().isClosed()) {
session.getConnection().deliver(response); session.getConnection().deliver(response);
} }
} }
catch (Exception de) { catch (Exception de) {
Log.error(LocaleUtils.getLocalizedString("admin.error"), de); Log.error(LocaleUtils.getLocalizedString("admin.error"), de);
SessionManager.getInstance().getSession(iq.getFrom()).getConnection().close(); sessionManager.getSession(iq.getFrom()).getConnection().close();
} }
} }
} }
...@@ -107,9 +102,9 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler { ...@@ -107,9 +102,9 @@ public abstract class IQHandler extends BasicModule implements ChannelHandler {
*/ */
public abstract IQHandlerInfo getInfo(); public abstract IQHandlerInfo getInfo();
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer"); deliverer = server.getPacketDeliverer();
return trackInfo; sessionManager = server.getSessionManager();
} }
} }
\ No newline at end of file
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
...@@ -49,6 +48,7 @@ import org.xmpp.packet.IQ; ...@@ -49,6 +48,7 @@ import org.xmpp.packet.IQ;
public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvider { public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvider {
private IQHandlerInfo info; private IQHandlerInfo info;
private PrivateStorage privateStorage = null;
public IQPrivateHandler() { public IQPrivateHandler() {
super("XMPP Private Storage Handler"); super("XMPP Private Storage Handler");
...@@ -77,12 +77,9 @@ public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvide ...@@ -77,12 +77,9 @@ public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvide
return replyPacket; return replyPacket;
} }
public PrivateStorage privateStorage = null; public void initialize(XMPPServer server) {
super.initialize(server);
protected TrackInfo getTrackInfo() { privateStorage = server.getPrivateStorage();
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(PrivateStorage.class, "privateStorage");
return trackInfo;
} }
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
......
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.Container;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.forms.DataForm; import org.jivesoftware.messenger.forms.DataForm;
import org.jivesoftware.messenger.forms.FormField; import org.jivesoftware.messenger.forms.FormField;
...@@ -67,9 +65,10 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -67,9 +65,10 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
private static Element probeResult; private static Element probeResult;
public UserManager userManager; private UserManager userManager;
public RosterManager rosterManager; private RosterManager rosterManager;
public PresenceUpdateHandler presenceHandler; private PresenceUpdateHandler presenceHandler;
private SessionManager sessionManager;
private IQHandlerInfo info; private IQHandlerInfo info;
// TODO: this value needs to be shared across all instances but not across the entire jvm... // TODO: this value needs to be shared across all instances but not across the entire jvm...
...@@ -84,8 +83,13 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -84,8 +83,13 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
info = new IQHandlerInfo("query", "jabber:iq:register"); info = new IQHandlerInfo("query", "jabber:iq:register");
} }
public void initialize(Container container) { public void initialize(XMPPServer server) {
super.initialize(container); super.initialize(server);
userManager = server.getUserManager();
rosterManager = server.getRosterManager();
presenceHandler = server.getPresenceUpdateHandler();
sessionManager = server.getSessionManager();
if (probeResult == null) { if (probeResult == null) {
// Create the basic element of the probeResult which contains the basic registration // Create the basic element of the probeResult which contains the basic registration
// information (e.g. username, passoword and email) // information (e.g. username, passoword and email)
...@@ -154,7 +158,7 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -154,7 +158,7 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
Session session = null; Session session = null;
try { try {
session = SessionManager.getInstance().getSession(packet.getFrom()); session = sessionManager.getSession(packet.getFrom());
} }
catch (Exception e) { catch (Exception e) {
} }
...@@ -354,14 +358,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid ...@@ -354,14 +358,6 @@ public class IQRegisterHandler extends IQHandler implements ServerFeaturesProvid
delegates.remove(serviceName); delegates.remove(serviceName);
} }
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager");
trackInfo.getTrackerClasses().put(RosterManager.class, "rosterManager");
trackInfo.getTrackerClasses().put(PresenceUpdateHandler.class, "presenceHandler");
return trackInfo;
}
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
return info; return info;
} }
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
...@@ -22,7 +21,6 @@ import org.jivesoftware.messenger.user.Roster; ...@@ -22,7 +21,6 @@ import org.jivesoftware.messenger.user.Roster;
import org.jivesoftware.messenger.user.spi.IQRosterItemImpl; import org.jivesoftware.messenger.user.spi.IQRosterItemImpl;
import org.xmpp.packet.*; import org.xmpp.packet.*;
import org.dom4j.Element; import org.dom4j.Element;
import org.xmlpull.v1.XmlPullParserException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
...@@ -61,6 +59,11 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -61,6 +59,11 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
private IQHandlerInfo info; private IQHandlerInfo info;
private UserManager userManager;
private XMPPServer localServer;
private SessionManager sessionManager;
private PacketRouter router;
public IQRosterHandler() { public IQRosterHandler() {
super("XMPP Roster Handler"); super("XMPP Roster Handler");
info = new IQHandlerInfo("query", "jabber:iq:roster"); info = new IQHandlerInfo("query", "jabber:iq:roster");
...@@ -111,7 +114,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -111,7 +114,7 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
* *
* @param packet The packet suspected of containing a roster removal * @param packet The packet suspected of containing a roster removal
*/ */
private void removeRosterItem(IQRoster packet) throws UnauthorizedException, XmlPullParserException { private void removeRosterItem(IQRoster packet) throws UnauthorizedException {
JID recipientJID = packet.getTo(); JID recipientJID = packet.getTo();
JID senderJID = packet.getFrom(); JID senderJID = packet.getFrom();
try { try {
...@@ -144,12 +147,12 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -144,12 +147,12 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
* @param packet The packet that triggered this update * @param packet The packet that triggered this update
* @return Either a response to the roster update or null if the packet is corrupt and the session was closed down * @return Either a response to the roster update or null if the packet is corrupt and the session was closed down
*/ */
private IQ manageRoster(IQRoster packet) throws UnauthorizedException, UserAlreadyExistsException, XmlPullParserException { private IQ manageRoster(IQRoster packet) throws UnauthorizedException, UserAlreadyExistsException {
IQ returnPacket = null; IQ returnPacket = null;
Session session = null; Session session = null;
try { try {
SessionManager.getInstance().getSession(packet.getFrom()); sessionManager.getSession(packet.getFrom());
} }
catch (Exception e) { catch (Exception e) {
IQ error = IQ.createResultIQ(packet); IQ error = IQ.createResultIQ(packet);
...@@ -258,21 +261,12 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider ...@@ -258,21 +261,12 @@ public class IQRosterHandler extends IQHandler implements ServerFeaturesProvider
return response; return response;
} }
public UserManager userManager; public void initialize(XMPPServer server) {
public XMPPServer localServer; super.initialize(server);
private SessionManager sessionManager = SessionManager.getInstance(); localServer = server;
public PresenceManager presenceManager; userManager = server.getUserManager();
public PacketRouter router; router = server.getPacketRouter();
public RoutingTable routingTable; sessionManager = server.getSessionManager();
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager");
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable");
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
trackInfo.getTrackerClasses().put(PresenceManager.class, "presenceManager");
trackInfo.getTrackerClasses().put(PacketRouter.class, "router");
return trackInfo;
} }
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.IQHandlerInfo; import org.jivesoftware.messenger.IQHandlerInfo;
import org.jivesoftware.messenger.PacketException; import org.jivesoftware.messenger.PacketException;
...@@ -49,6 +48,7 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide ...@@ -49,6 +48,7 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide
private static Element bodyElement; private static Element bodyElement;
private static Element versionElement; private static Element versionElement;
private IQHandlerInfo info; private IQHandlerInfo info;
private XMPPServer localServer;
public IQVersionHandler() { public IQVersionHandler() {
super("XMPP Server Version Handler"); super("XMPP Server Version Handler");
...@@ -70,12 +70,9 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide ...@@ -70,12 +70,9 @@ public class IQVersionHandler extends IQHandler implements ServerFeaturesProvide
return result; return result;
} }
public XMPPServer localServer; public void initialize(XMPPServer server) {
super.initialize(server);
protected TrackInfo getTrackInfo() { localServer = server;
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
return trackInfo;
} }
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo;
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.User; import org.jivesoftware.messenger.user.User;
...@@ -62,6 +61,7 @@ import org.xmpp.packet.PacketError; ...@@ -62,6 +61,7 @@ import org.xmpp.packet.PacketError;
public class IQvCardHandler extends IQHandler { public class IQvCardHandler extends IQHandler {
private IQHandlerInfo info; private IQHandlerInfo info;
private UserManager userManager;
public IQvCardHandler() { public IQvCardHandler() {
super("XMPP vCard Handler"); super("XMPP vCard Handler");
...@@ -151,12 +151,9 @@ public class IQvCardHandler extends IQHandler { ...@@ -151,12 +151,9 @@ public class IQvCardHandler extends IQHandler {
return buf.toString(); return buf.toString();
} }
public UserManager userManager; public void initialize(XMPPServer server) {
super.initialize(server);
protected TrackInfo getTrackInfo() { userManager = server.getUserManager();
TrackInfo trackInfo = super.getTrackInfo();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager");
return trackInfo;
} }
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.util.CacheManager; import org.jivesoftware.util.CacheManager;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
...@@ -73,6 +72,10 @@ import java.util.Map; ...@@ -73,6 +72,10 @@ import java.util.Map;
*/ */
public class PresenceSubscribeHandler extends BasicModule implements ChannelHandler { public class PresenceSubscribeHandler extends BasicModule implements ChannelHandler {
private RoutingTable routingTable;
private XMPPServer localServer;
private PacketDeliverer deliverer;
public PresenceSubscribeHandler() { public PresenceSubscribeHandler() {
super("Presence subscription handler"); super("Presence subscription handler");
} }
...@@ -358,18 +361,11 @@ public class PresenceSubscribeHandler extends BasicModule implements ChannelHand ...@@ -358,18 +361,11 @@ public class PresenceSubscribeHandler extends BasicModule implements ChannelHand
} }
} }
public RoutingTable routingTable; public void initialize(XMPPServer server) {
public UserManager userManager; super.initialize(server);
public XMPPServer localServer; localServer = server;
public PacketDeliverer deliverer; routingTable = server.getRoutingTable();
deliverer = server.getPacketDeliverer();
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = new TrackInfo();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager");
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable");
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer");
return trackInfo;
} }
public void setRouter(PresenceRouter router) { public void setRouter(PresenceRouter router) {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.handler; package org.jivesoftware.messenger.handler;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
...@@ -23,7 +22,6 @@ import org.jivesoftware.messenger.user.RosterItem; ...@@ -23,7 +22,6 @@ import org.jivesoftware.messenger.user.RosterItem;
import org.jivesoftware.messenger.user.RosterManager; import org.jivesoftware.messenger.user.RosterManager;
import org.jivesoftware.messenger.user.UserNotFoundException; import org.jivesoftware.messenger.user.UserNotFoundException;
import org.xmpp.packet.*; import org.xmpp.packet.*;
import org.xmlpull.v1.XmlPullParserException;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.*; import java.util.*;
...@@ -78,6 +76,13 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler ...@@ -78,6 +76,13 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
private Map<String, Set> directedPresences = new HashMap<String, Set>(); private Map<String, Set> directedPresences = new HashMap<String, Set>();
private RosterManager rosterManager;
private XMPPServer localServer;
private PresenceManager presenceManager;
private PacketDeliverer deliverer;
private OfflineMessageStore messageStore;
private SessionManager sessionManager;
public PresenceUpdateHandler() { public PresenceUpdateHandler() {
super("Presence update handler"); super("Presence update handler");
} }
...@@ -85,7 +90,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler ...@@ -85,7 +90,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
public void process(Packet xmppPacket) throws UnauthorizedException, PacketException { public void process(Packet xmppPacket) throws UnauthorizedException, PacketException {
Presence presence = (Presence)xmppPacket; Presence presence = (Presence)xmppPacket;
try { try {
Session session = SessionManager.getInstance().getSession(presence.getFrom()); Session session = sessionManager.getSession(presence.getFrom());
Presence.Type type = presence.getType(); Presence.Type type = presence.getType();
// Available // Available
if (type == null) { if (type == null) {
...@@ -137,7 +142,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler ...@@ -137,7 +142,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
} }
catch (UnauthorizedException e) { catch (UnauthorizedException e) {
try { try {
Session session = SessionManager.getInstance().getSession(presence.getFrom()); Session session = sessionManager.getSession(presence.getFrom());
presence = presence.createCopy(); presence = presence.createCopy();
if (session != null) { if (session != null) {
presence.setFrom(new JID(null, session.getServerName(), null)); presence.setFrom(new JID(null, session.getServerName(), null));
...@@ -169,7 +174,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler ...@@ -169,7 +174,7 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
* @throws UnauthorizedException If the caller doesn't have the right permissions * @throws UnauthorizedException If the caller doesn't have the right permissions
* @throws UserNotFoundException If the user being updated does not exist * @throws UserNotFoundException If the user being updated does not exist
*/ */
private void initSession(Session session) throws UnauthorizedException, UserNotFoundException, XmlPullParserException { private void initSession(Session session) throws UnauthorizedException, UserNotFoundException {
// Only user sessions need to be authenticated // Only user sessions need to be authenticated
if (!"".equals(session.getAddress().getNode())) { if (!"".equals(session.getAddress().getNode())) {
...@@ -375,22 +380,14 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler ...@@ -375,22 +380,14 @@ public class PresenceUpdateHandler extends BasicModule implements ChannelHandler
} }
} }
public void initialize(XMPPServer server) {
public RosterManager rosterManager; super.initialize(server);
public XMPPServer localServer; localServer = server;
private SessionManager sessionManager = SessionManager.getInstance(); rosterManager = server.getRosterManager();
public PresenceManager presenceManager; presenceManager = server.getPresenceManager();
public PacketDeliverer deliverer; deliverer = server.getPacketDeliverer();
public OfflineMessageStore messageStore; messageStore = server.getOfflineMessageStore();
sessionManager = server.getSessionManager();
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = new TrackInfo();
trackInfo.getTrackerClasses().put(RosterManager.class, "rosterManager");
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer");
trackInfo.getTrackerClasses().put(PresenceManager.class, "presenceManager");
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer");
trackInfo.getTrackerClasses().put(OfflineMessageStore.class, "messageStore");
return trackInfo;
} }
/** /**
......
...@@ -26,16 +26,12 @@ import java.util.concurrent.LinkedBlockingQueue; ...@@ -26,16 +26,12 @@ import java.util.concurrent.LinkedBlockingQueue;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.jivesoftware.messenger.JiveGlobals; import org.jivesoftware.messenger.JiveGlobals;
import org.jivesoftware.messenger.PacketDeliverer;
import org.jivesoftware.messenger.PacketRouter; import org.jivesoftware.messenger.PacketRouter;
import org.jivesoftware.messenger.PresenceManager;
import org.jivesoftware.messenger.RoutableChannelHandler; import org.jivesoftware.messenger.RoutableChannelHandler;
import org.jivesoftware.messenger.RoutingTable; import org.jivesoftware.messenger.RoutingTable;
import org.jivesoftware.messenger.XMPPServer; import org.jivesoftware.messenger.XMPPServer;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.Container;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.DiscoInfoProvider; import org.jivesoftware.messenger.disco.DiscoInfoProvider;
import org.jivesoftware.messenger.disco.DiscoItemsProvider; import org.jivesoftware.messenger.disco.DiscoItemsProvider;
import org.jivesoftware.messenger.disco.DiscoServerItem; import org.jivesoftware.messenger.disco.DiscoServerItem;
...@@ -130,22 +126,14 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha ...@@ -130,22 +126,14 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha
private HistoryStrategy historyStrategy; private HistoryStrategy historyStrategy;
private RoutingTable routingTable = null; private RoutingTable routingTable = null;
/**
* The packet deliverer for the server.
*/
public PacketDeliverer deliverer = null;
/** /**
* The packet router for the server. * The packet router for the server.
*/ */
public PacketRouter router = null; private PacketRouter router = null;
/**
* The packet manager for the server.
*/
public PresenceManager presenceManager = null;
/** /**
* The handler of packets with namespace jabber:iq:register for the server. * The handler of packets with namespace jabber:iq:register for the server.
*/ */
public IQRegisterHandler registerHandler = null; private IQRegisterHandler registerHandler = null;
/** /**
* The total time all agents took to chat * * The total time all agents took to chat *
*/ */
...@@ -375,36 +363,6 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha ...@@ -375,36 +363,6 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha
} }
} }
/**
* Initialize the track info for the server.
*
* @return the track information for this server.
*/
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = new TrackInfo();
trackInfo.getTrackerClasses().put(PacketRouter.class, "router");
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer");
trackInfo.getTrackerClasses().put(PresenceManager.class, "presenceManager");
// TODO Remove the tracking for IQRegisterHandler when the component JEP gets implemented.
trackInfo.getTrackerClasses().put(IQRegisterHandler.class, "registerHandler");
return trackInfo;
}
public void serviceAdded(Object service) {
if (service instanceof RoutingTable) {
((RoutingTable)service).addRoute(chatServiceAddress, this);
ArrayList params = new ArrayList();
params.clear();
params.add(chatServiceName);
Log.info(LocaleUtils.getLocalizedString("startup.starting.muc", params));
}
else if (service instanceof IQRegisterHandler) {
((IQRegisterHandler) service).addDelegate(
getServiceName(),
new IQMUCRegisterHandler(this));
}
}
public void setServiceName(String name) { public void setServiceName(String name) {
JiveGlobals.setProperty("xmpp.muc.service", name); JiveGlobals.setProperty("xmpp.muc.service", name);
} }
...@@ -528,8 +486,8 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha ...@@ -528,8 +486,8 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha
JiveGlobals.setProperty("xmpp.muc.create.jid", fromArray(jids)); JiveGlobals.setProperty("xmpp.muc.create.jid", fromArray(jids));
} }
public void initialize(Container container) { public void initialize(XMPPServer server) {
super.initialize(container); super.initialize(server);
chatServiceName = JiveGlobals.getProperty("xmpp.muc.service"); chatServiceName = JiveGlobals.getProperty("xmpp.muc.service");
// Trigger the strategy to load itself from the context // Trigger the strategy to load itself from the context
...@@ -593,19 +551,7 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha ...@@ -593,19 +551,7 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha
chatServiceName = "conference"; chatServiceName = "conference";
} }
String serverName = null; String serverName = null;
try { serverName = server.getServerInfo().getName();
XMPPServer server = (XMPPServer)lookup.lookup(XMPPServer.class);
if (server != null) {
serverName = server.getServerInfo().getName();
}
else {
// Try to get serverName directly.
serverName = JiveGlobals.getProperty("xmpp.domain");
}
}
catch (Exception e) {
Log.error(e);
}
if (serverName != null) { if (serverName != null) {
chatServiceName += "." + serverName; chatServiceName += "." + serverName;
} }
...@@ -618,11 +564,23 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha ...@@ -618,11 +564,23 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha
// (default values) // (default values)
logConversationTask = new LogConversationTask(); logConversationTask = new LogConversationTask();
timer.schedule(logConversationTask, log_timeout, log_timeout); timer.schedule(logConversationTask, log_timeout, log_timeout);
routingTable = server.getRoutingTable();
router = server.getPacketRouter();
// TODO Remove the tracking for IQRegisterHandler when the component JEP gets implemented.
registerHandler = server.getIQRegisterHandler();
registerHandler.addDelegate(getServiceName(), new IQMUCRegisterHandler(this));
// Add the route to this service
routingTable.addRoute(chatServiceAddress, this);
ArrayList params = new ArrayList();
params.clear();
params.add(chatServiceName);
Log.info(LocaleUtils.getLocalizedString("startup.starting.muc", params));
} }
public void start() { public void start() {
super.start(); super.start();
routingTable = (RoutingTable)lookup.lookup(RoutingTable.class);
routingTable.addRoute(chatServiceAddress, this); routingTable.addRoute(chatServiceAddress, this);
ArrayList params = new ArrayList(); ArrayList params = new ArrayList();
params.clear(); params.clear();
...@@ -636,6 +594,7 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha ...@@ -636,6 +594,7 @@ public class MultiUserChatServerImpl extends BasicModule implements MultiUserCha
public void stop() { public void stop() {
super.stop(); super.stop();
routingTable.removeRoute(chatServiceAddress);
timer.cancel(); timer.cancel();
logAllConversation(); logAllConversation();
if (registerHandler != null) { if (registerHandler != null) {
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
...@@ -36,6 +35,13 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana ...@@ -36,6 +35,13 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana
private SSLSocketAcceptThread sslSocketThread; private SSLSocketAcceptThread sslSocketThread;
private ArrayList ports; private ArrayList ports;
private AuditManager auditManager;
private SessionManager sessionManager;
private PacketDeliverer deliverer;
private PacketRouter router;
private String serverName;
private XMPPServer server;
public ConnectionManagerImpl() { public ConnectionManagerImpl() {
super("Connection Manager"); super("Connection Manager");
ports = new ArrayList(2); ports = new ArrayList(2);
...@@ -100,13 +106,6 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana ...@@ -100,13 +106,6 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana
return ports.iterator(); return ports.iterator();
} }
public AuditManager auditManager;
private SessionManager sessionManager = SessionManager.getInstance();
public PacketDeliverer deliverer;
public PacketRouter router;
private String serverName;
public XMPPServer server;
public void addSocket(Socket sock, boolean isSecure) { public void addSocket(Socket sock, boolean isSecure) {
try { try {
// the order of these calls is critical (stupid huh?) // the order of these calls is critical (stupid huh?)
...@@ -129,20 +128,13 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana ...@@ -129,20 +128,13 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana
} }
} }
public TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(XMPPServer.class, "server"); this.server = server;
trackInfo.getTrackerClasses().put(PacketRouter.class, "router"); router = server.getPacketRouter();
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer"); deliverer = server.getPacketDeliverer();
trackInfo.getTrackerClasses().put(AuditManager.class, "auditManager"); auditManager = server.getAuditManager();
return trackInfo; sessionManager = server.getSessionManager();
}
public void serviceAdded(Object service) {
if (service instanceof XMPPServer) {
serverName = server.getServerInfo().getName();
}
createSocket();
} }
// Used to know if the sockets can be started (the connection manager has been started) // Used to know if the sockets can be started (the connection manager has been started)
...@@ -150,12 +142,6 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana ...@@ -150,12 +142,6 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana
// Used to know if the sockets have been started // Used to know if the sockets have been started
private boolean isSocketStarted = false; private boolean isSocketStarted = false;
public void serviceRemoved(Object service) {
if (server == null) {
serverName = null;
}
}
// ##################################################################### // #####################################################################
// Module management // Module management
// ##################################################################### // #####################################################################
...@@ -163,6 +149,7 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana ...@@ -163,6 +149,7 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana
public void start() { public void start() {
super.start(); super.start();
isStarted = true; isStarted = true;
serverName = server.getServerInfo().getName();
createSocket(); createSocket();
} }
...@@ -176,5 +163,6 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana ...@@ -176,5 +163,6 @@ public class ConnectionManagerImpl extends BasicModule implements ConnectionMana
sslSocketThread.shutdown(); sslSocketThread.shutdown();
sslSocketThread = null; sslSocketThread = null;
} }
serverName = null;
} }
} }
...@@ -18,7 +18,6 @@ import java.util.Map; ...@@ -18,7 +18,6 @@ import java.util.Map;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.handler.IQHandler; import org.jivesoftware.messenger.handler.IQHandler;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
...@@ -34,10 +33,8 @@ import org.dom4j.Element; ...@@ -34,10 +33,8 @@ import org.dom4j.Element;
*/ */
public class IQRouterImpl extends BasicModule implements IQRouter { public class IQRouterImpl extends BasicModule implements IQRouter {
public XMPPServer localServer; private RoutingTable routingTable;
public OfflineMessageStore messageStore; private LinkedList iqHandlers = new LinkedList();
public RoutingTable routingTable;
public LinkedList iqHandlers = new LinkedList();
private Map namespace2Handlers = new HashMap(); private Map namespace2Handlers = new HashMap();
private SessionManager sessionManager; private SessionManager sessionManager;
...@@ -46,14 +43,13 @@ public class IQRouterImpl extends BasicModule implements IQRouter { ...@@ -46,14 +43,13 @@ public class IQRouterImpl extends BasicModule implements IQRouter {
*/ */
public IQRouterImpl() { public IQRouterImpl() {
super("XMPP IQ Router"); super("XMPP IQ Router");
sessionManager = SessionManager.getInstance();
} }
public void route(IQ packet) { public void route(IQ packet) {
if (packet == null) { if (packet == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
Session session = SessionManager.getInstance().getSession(packet.getFrom()); Session session = sessionManager.getSession(packet.getFrom());
if (session == null || session.getStatus() == Session.STATUS_AUTHENTICATED if (session == null || session.getStatus() == Session.STATUS_AUTHENTICATED
|| (isLocalServer(packet.getTo()) || (isLocalServer(packet.getTo())
&& ("jabber:iq:auth".equals(packet.getChildElement().getNamespaceURI()) && ("jabber:iq:auth".equals(packet.getChildElement().getNamespaceURI())
...@@ -188,13 +184,10 @@ public class IQRouterImpl extends BasicModule implements IQRouter { ...@@ -188,13 +184,10 @@ public class IQRouterImpl extends BasicModule implements IQRouter {
return handler; return handler;
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer"); routingTable = server.getRoutingTable();
trackInfo.getTrackerClasses().put(OfflineMessageStore.class, "messageStore"); iqHandlers.addAll(server.getIQHandlers());
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable"); sessionManager = server.getSessionManager();
trackInfo.getTrackerClasses().put(IQHandler.class, "iqHandlers");
return trackInfo;
} }
} }
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
...@@ -27,8 +26,9 @@ import org.xmpp.packet.PacketError; ...@@ -27,8 +26,9 @@ import org.xmpp.packet.PacketError;
*/ */
public class MessageRouterImpl extends BasicModule implements MessageRouter { public class MessageRouterImpl extends BasicModule implements MessageRouter {
public OfflineMessageStrategy messageStrategy; private OfflineMessageStrategy messageStrategy;
public RoutingTable routingTable; private RoutingTable routingTable;
private SessionManager sessionManager;
/** /**
* <p>Create a packet router.</p> * <p>Create a packet router.</p>
...@@ -41,7 +41,7 @@ public class MessageRouterImpl extends BasicModule implements MessageRouter { ...@@ -41,7 +41,7 @@ public class MessageRouterImpl extends BasicModule implements MessageRouter {
if (packet == null) { if (packet == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
Session session = SessionManager.getInstance().getSession(packet.getFrom()); Session session = sessionManager.getSession(packet.getFrom());
if (session == null if (session == null
|| session.getStatus() == Session.STATUS_AUTHENTICATED) || session.getStatus() == Session.STATUS_AUTHENTICATED)
{ {
...@@ -74,11 +74,10 @@ public class MessageRouterImpl extends BasicModule implements MessageRouter { ...@@ -74,11 +74,10 @@ public class MessageRouterImpl extends BasicModule implements MessageRouter {
} }
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(OfflineMessageStrategy.class, "messageStrategy"); messageStrategy = server.getOfflineMessageStrategy();
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable"); routingTable = server.getRoutingTable();
return trackInfo; sessionManager = server.getSessionManager();
} }
} }
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.net.SocketPacketWriteHandler; import org.jivesoftware.messenger.net.SocketPacketWriteHandler;
...@@ -30,8 +29,8 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer ...@@ -30,8 +29,8 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer
*/ */
protected ChannelHandler deliverHandler; protected ChannelHandler deliverHandler;
public OfflineMessageStrategy messageStrategy; private OfflineMessageStrategy messageStrategy;
private SessionManager sessionManager = SessionManager.getInstance(); private SessionManager sessionManager;
public PacketDelivererImpl() { public PacketDelivererImpl() {
super("Packet Delivery"); super("Packet Delivery");
...@@ -47,21 +46,19 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer ...@@ -47,21 +46,19 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer
deliverHandler.process(packet); deliverHandler.process(packet);
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(OfflineMessageStrategy.class, "messageStrategy"); messageStrategy = server.getOfflineMessageStrategy();
return trackInfo; sessionManager = server.getSessionManager();
} }
public void serviceAdded(Object service) { public void start() throws IllegalStateException {
if (sessionManager != null && messageStrategy != null) { super.start();
deliverHandler = new SocketPacketWriteHandler(sessionManager, messageStrategy); deliverHandler = new SocketPacketWriteHandler(sessionManager, messageStrategy);
}
} }
public void serviceRemoved(Object service) { public void stop() {
if (sessionManager == null || messageStrategy == null) { super.stop();
deliverHandler = null; deliverHandler = null;
}
} }
} }
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.xmpp.packet.Packet; import org.xmpp.packet.Packet;
import org.xmpp.packet.Message; import org.xmpp.packet.Message;
...@@ -25,9 +24,9 @@ import org.xmpp.packet.IQ; ...@@ -25,9 +24,9 @@ import org.xmpp.packet.IQ;
* @author Iain Shigeoka * @author Iain Shigeoka
*/ */
public class PacketRouterImpl extends BasicModule implements PacketRouter { public class PacketRouterImpl extends BasicModule implements PacketRouter {
public IQRouter iqRouter; private IQRouter iqRouter;
public PresenceRouter presenceRouter; private PresenceRouter presenceRouter;
public MessageRouter messageRouter; private MessageRouter messageRouter;
/** /**
* Initialize ComponentManager to handle delegation of packets. * Initialize ComponentManager to handle delegation of packets.
...@@ -103,11 +102,10 @@ public class PacketRouterImpl extends BasicModule implements PacketRouter { ...@@ -103,11 +102,10 @@ public class PacketRouterImpl extends BasicModule implements PacketRouter {
return false; return false;
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(IQRouter.class, "iqRouter"); iqRouter = server.getIQRouter();
trackInfo.getTrackerClasses().put(MessageRouter.class, "messageRouter"); messageRouter = server.getMessageRouter();
trackInfo.getTrackerClasses().put(PresenceRouter.class, "presenceRouter"); presenceRouter = server.getPresenceRouter();
return trackInfo;
} }
} }
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.util.Log; 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;
...@@ -29,17 +28,17 @@ public class PacketTransporterImpl extends BasicModule { ...@@ -29,17 +28,17 @@ public class PacketTransporterImpl extends BasicModule {
/** /**
* The handler that does the actual delivery (could be a channel instead) * The handler that does the actual delivery (could be a channel instead)
*/ */
public TransportHandler transportHandler; private TransportHandler transportHandler;
/** /**
* deliverer for xmpp server * deliverer for xmpp server
*/ */
public PacketDeliverer deliverer; private PacketDeliverer deliverer;
/** /**
* xmpp server * xmpp server
*/ */
public XMPPServer xmppServer; private XMPPServer xmppServer;
/** /**
* This is a singleton, you can't create one. Be very careful not to do anything * This is a singleton, you can't create one. Be very careful not to do anything
...@@ -88,11 +87,10 @@ public class PacketTransporterImpl extends BasicModule { ...@@ -88,11 +87,10 @@ public class PacketTransporterImpl extends BasicModule {
} }
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(XMPPServer.class, "xmppServer"); xmppServer = server;
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer"); deliverer = server.getPacketDeliverer();
trackInfo.getTrackerClasses().put(TransportHandler.class, "transportHandler"); transportHandler = server.getTransportHandler();
return trackInfo;
} }
} }
...@@ -23,14 +23,11 @@ import org.jivesoftware.messenger.Component; ...@@ -23,14 +23,11 @@ import org.jivesoftware.messenger.Component;
import org.jivesoftware.messenger.ComponentManager; import org.jivesoftware.messenger.ComponentManager;
import org.jivesoftware.messenger.PacketDeliverer; import org.jivesoftware.messenger.PacketDeliverer;
import org.jivesoftware.messenger.PresenceManager; import org.jivesoftware.messenger.PresenceManager;
import org.jivesoftware.messenger.RoutingTable;
import org.jivesoftware.messenger.Session; import org.jivesoftware.messenger.Session;
import org.jivesoftware.messenger.SessionManager; import org.jivesoftware.messenger.SessionManager;
import org.jivesoftware.messenger.XMPPServer; import org.jivesoftware.messenger.XMPPServer;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.Container;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.user.User; import org.jivesoftware.messenger.user.User;
import org.jivesoftware.messenger.user.UserManager; import org.jivesoftware.messenger.user.UserManager;
import org.jivesoftware.messenger.user.UserNotFoundException; import org.jivesoftware.messenger.user.UserNotFoundException;
...@@ -56,11 +53,10 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager ...@@ -56,11 +53,10 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager
*/ */
private Cache foreignUserCache; private Cache foreignUserCache;
public UserManager userManager; private UserManager userManager;
private SessionManager sessionManager = SessionManager.getInstance(); private SessionManager sessionManager;
public RoutingTable routingTable; private XMPPServer server;
public XMPPServer server; private PacketDeliverer deliverer;
public PacketDeliverer deliverer;
private ComponentManager componentManager; private ComponentManager componentManager;
...@@ -392,20 +388,15 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager ...@@ -392,20 +388,15 @@ public class PresenceManagerImpl extends BasicModule implements PresenceManager
// Module management // Module management
// ##################################################################### // #####################################################################
public void initialize(Container container) { public void initialize(XMPPServer server) {
super.initialize(container); super.initialize(server);
this.server = server;
userManager = server.getUserManager();
deliverer = server.getPacketDeliverer();
sessionManager = server.getSessionManager();
initializeCaches(); initializeCaches();
} }
protected TrackInfo getTrackInfo() {
TrackInfo trackInfo = new TrackInfo();
trackInfo.getTrackerClasses().put(UserManager.class, "userManager");
trackInfo.getTrackerClasses().put(XMPPServer.class, "server");
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer");
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable");
return trackInfo;
}
public Component getPresenceComponent(JID probee) { public Component getPresenceComponent(JID probee) {
// Check for registered components // Check for registered components
Component component = componentManager.getComponent(probee.toBareJID()); Component component = componentManager.getComponent(probee.toBareJID());
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
...@@ -30,10 +29,10 @@ import org.xmpp.packet.PacketError; ...@@ -30,10 +29,10 @@ import org.xmpp.packet.PacketError;
*/ */
public class PresenceRouterImpl extends BasicModule implements PresenceRouter { public class PresenceRouterImpl extends BasicModule implements PresenceRouter {
public XMPPServer localServer; private RoutingTable routingTable;
public RoutingTable routingTable; private PresenceUpdateHandler updateHandler;
public PresenceUpdateHandler updateHandler; private PresenceSubscribeHandler subscribeHandler;
public PresenceSubscribeHandler subscribeHandler; private SessionManager sessionManager;
/** /**
* Create a packet router. * Create a packet router.
...@@ -46,7 +45,7 @@ public class PresenceRouterImpl extends BasicModule implements PresenceRouter { ...@@ -46,7 +45,7 @@ public class PresenceRouterImpl extends BasicModule implements PresenceRouter {
if (packet == null) { if (packet == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
Session session = SessionManager.getInstance().getSession(packet.getFrom()); Session session = sessionManager.getSession(packet.getFrom());
if (session == null || session.getStatus() == Session.STATUS_AUTHENTICATED) { if (session == null || session.getStatus() == Session.STATUS_AUTHENTICATED) {
handle(packet); handle(packet);
} }
...@@ -105,7 +104,7 @@ public class PresenceRouterImpl extends BasicModule implements PresenceRouter { ...@@ -105,7 +104,7 @@ public class PresenceRouterImpl extends BasicModule implements PresenceRouter {
catch (Exception e) { catch (Exception e) {
Log.error(LocaleUtils.getLocalizedString("admin.error.routing"), e); Log.error(LocaleUtils.getLocalizedString("admin.error.routing"), e);
try { try {
Session session = SessionManager.getInstance().getSession(packet.getFrom()); Session session = sessionManager.getSession(packet.getFrom());
if (session != null) { if (session != null) {
Connection conn = session.getConnection(); Connection conn = session.getConnection();
if (conn != null) { if (conn != null) {
...@@ -119,13 +118,11 @@ public class PresenceRouterImpl extends BasicModule implements PresenceRouter { ...@@ -119,13 +118,11 @@ public class PresenceRouterImpl extends BasicModule implements PresenceRouter {
} }
} }
protected TrackInfo getTrackInfo() { public void initialize(XMPPServer server) {
TrackInfo trackInfo = new TrackInfo(); super.initialize(server);
trackInfo.getTrackerClasses().put(XMPPServer.class, "localServer"); routingTable = server.getRoutingTable();
trackInfo.getTrackerClasses().put(RoutingTable.class, "routingTable"); updateHandler = server.getPresenceUpdateHandler();
trackInfo.getTrackerClasses().put(PresenceUpdateHandler.class, "updateHandler"); subscribeHandler = server.getPresenceSubscribeHandler();
trackInfo.getTrackerClasses().put(PresenceSubscribeHandler.class, "subscribeHandler"); sessionManager = server.getSessionManager();
return trackInfo;
} }
} }
...@@ -81,7 +81,7 @@ public class SessionImpl implements Session { ...@@ -81,7 +81,7 @@ public class SessionImpl implements Session {
conn = connection; conn = connection;
this.streamID = streamID; this.streamID = streamID;
this.serverName = serverName; this.serverName = serverName;
this.address = new JID(null, null, null); this.address = new JID(null, serverName, null);
presence = new Presence(); presence = new Presence();
this.sessionManager = SessionManager.getInstance(); this.sessionManager = SessionManager.getInstance();
......
...@@ -50,7 +50,7 @@ public class ServerStarter { ...@@ -50,7 +50,7 @@ public class ServerStarter {
Thread.currentThread().setContextClassLoader(loader); Thread.currentThread().setContextClassLoader(loader);
Class containerClass = loader.loadClass( Class containerClass = loader.loadClass(
"org.jivesoftware.messenger.XMPPBootContainer"); "org.jivesoftware.messenger.spi.BasicServer");
containerClass.newInstance(); containerClass.newInstance();
} }
catch (Exception e) { catch (Exception e) {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
package org.jivesoftware.messenger.transport; package org.jivesoftware.messenger.transport;
import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log; import org.jivesoftware.util.Log;
...@@ -33,6 +32,8 @@ public class TransportHandler extends BasicModule implements ChannelHandler { ...@@ -33,6 +32,8 @@ public class TransportHandler extends BasicModule implements ChannelHandler {
private Map<String, Channel> transports = new ConcurrentHashMap<String, Channel>(); private Map<String, Channel> transports = new ConcurrentHashMap<String, Channel>();
private PacketDeliverer deliverer;
public TransportHandler() { public TransportHandler() {
super("Transport handler"); super("Transport handler");
} }
...@@ -68,11 +69,8 @@ public class TransportHandler extends BasicModule implements ChannelHandler { ...@@ -68,11 +69,8 @@ public class TransportHandler extends BasicModule implements ChannelHandler {
} }
} }
public PacketDeliverer deliverer; public void initialize(XMPPServer server) {
super.initialize(server);
protected TrackInfo getTrackInfo() { deliverer = server.getPacketDeliverer();
TrackInfo trackInfo = new TrackInfo();
trackInfo.getTrackerClasses().put(PacketDeliverer.class, "deliverer");
return trackInfo;
} }
} }
\ No newline at end of file
...@@ -22,12 +22,12 @@ import java.util.List; ...@@ -22,12 +22,12 @@ import java.util.List;
import org.jivesoftware.database.DbConnectionManager; import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.container.Container;
import org.jivesoftware.messenger.user.User; import org.jivesoftware.messenger.user.User;
import org.jivesoftware.messenger.user.UserAlreadyExistsException; import org.jivesoftware.messenger.user.UserAlreadyExistsException;
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.user.UserProviderFactory; import org.jivesoftware.messenger.user.UserProviderFactory;
import org.jivesoftware.messenger.XMPPServer;
import org.jivesoftware.stringprep.Stringprep; import org.jivesoftware.stringprep.Stringprep;
import org.jivesoftware.stringprep.StringprepException; import org.jivesoftware.stringprep.StringprepException;
import org.jivesoftware.util.Cache; import org.jivesoftware.util.Cache;
...@@ -291,8 +291,8 @@ public class UserManagerImpl extends BasicModule implements UserManager { ...@@ -291,8 +291,8 @@ public class UserManagerImpl extends BasicModule implements UserManager {
// Module management // Module management
// ##################################################################### // #####################################################################
public void initialize(Container container) { public void initialize(XMPPServer server) {
super.initialize(container); super.initialize(server);
initializeCaches(); initializeCaches();
} }
} }
\ No newline at end of file
...@@ -114,10 +114,6 @@ public class AcceptManagerImpl extends BasicModule implements AcceptManager { ...@@ -114,10 +114,6 @@ public class AcceptManagerImpl extends BasicModule implements AcceptManager {
return trackInfo; return trackInfo;
} }
public void initialize(Container container) {
super.initialize(container);
}
protected void serviceAdded(Object service) { protected void serviceAdded(Object service) {
if (service instanceof ConnectionManager){ if (service instanceof ConnectionManager){
connManager = (ConnectionManager) service; connManager = (ConnectionManager) service;
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
org.jivesoftware.messenger.container.ServiceLookupFactory, org.jivesoftware.messenger.container.ServiceLookupFactory,
org.jivesoftware.messenger.auth.UnauthorizedException, org.jivesoftware.messenger.auth.UnauthorizedException,
org.jivesoftware.messenger.JiveGlobals, org.jivesoftware.messenger.JiveGlobals,
org.jivesoftware.messenger.XMPPBootContainer,
java.util.Map, java.util.Map,
java.util.Iterator" java.util.Iterator"
%> %>
......
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