Index: openfire/src/java/org/jivesoftware/openfire/handler/IQBindHandler.java =================================================================== --- openfire/src/java/org/jivesoftware/openfire/handler/IQBindHandler.java (revision 9315) +++ openfire/src/java/org/jivesoftware/openfire/handler/IQBindHandler.java (working copy) @@ -18,6 +18,8 @@ import org.jivesoftware.openfire.XMPPServer; import org.jivesoftware.openfire.auth.AuthToken; import org.jivesoftware.openfire.auth.UnauthorizedException; +import org.jivesoftware.openfire.event.SessionEventDispatcher; +import org.jivesoftware.openfire.event.SessionEventDispatcher.EventType; import org.jivesoftware.openfire.session.ClientSession; import org.jivesoftware.openfire.session.LocalClientSession; import org.jivesoftware.stringprep.StringprepException; @@ -134,6 +136,8 @@ child.addElement("jid").setText(session.getAddress().toString()); // Send the response directly since a route does not exist at this point. session.process(reply); + // After the client has been informed, inform all listeners as well. + SessionEventDispatcher.dispatchEvent(session, EventType.resource_bound); return null; } Index: openfire/src/java/org/jivesoftware/openfire/event/SessionEventListener.java =================================================================== --- openfire/src/java/org/jivesoftware/openfire/event/SessionEventListener.java (revision 9315) +++ openfire/src/java/org/jivesoftware/openfire/event/SessionEventListener.java (working copy) @@ -46,4 +46,11 @@ * @param session the authenticated session of an anonymous user. */ public void anonymousSessionDestroyed(Session session); + + /** + * A session has finished resource binding. + * + * @param session the session on which resource binding was performed. + */ + public void resourceBound(Session session); } \ No newline at end of file Index: openfire/src/java/org/jivesoftware/openfire/event/SessionEventDispatcher.java =================================================================== --- openfire/src/java/org/jivesoftware/openfire/event/SessionEventDispatcher.java (revision 9315) +++ openfire/src/java/org/jivesoftware/openfire/event/SessionEventDispatcher.java (working copy) @@ -74,6 +74,10 @@ listener.anonymousSessionDestroyed(session); break; } + case resource_bound: { + listener.resourceBound(session); + break; + } default: break; @@ -109,6 +113,10 @@ * A anonymous session was destroyed */ anonymous_session_destroyed, - + + /** + * A resource was bound to the session. + */ + resource_bound } } \ No newline at end of file Index: openfire/src/java/org/jivesoftware/openfire/multiplex/ConnectionMultiplexerManager.java =================================================================== --- openfire/src/java/org/jivesoftware/openfire/multiplex/ConnectionMultiplexerManager.java (revision 9315) +++ openfire/src/java/org/jivesoftware/openfire/multiplex/ConnectionMultiplexerManager.java (working copy) @@ -282,6 +282,10 @@ public void sessionDestroyed(Session session) { removeSession(session); } + + public void resourceBound(Session session) { + // Do nothing. + } private void removeSession(Session session) { // Remove trace indicating that a connection manager is hosting a connection