This is an automated email from the ASF dual-hosted git repository. ralaoui pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-vysper.git
The following commit(s) were added to refs/heads/master by this push: new e6df72e Move S2S handlers to StanzaHandlerLookup e6df72e is described below commit e6df72e3da17b07df7283605034974c31a3c11a0 Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Tue Aug 27 00:18:40 2019 +0200 Move S2S handlers to StanzaHandlerLookup --- .../vysper/xmpp/protocol/StanzaHandlerLookup.java | 68 +++++++++++++--------- .../vysper/xmpp/server/ServerRuntimeContext.java | 11 ++-- .../server/s2s/DefaultXMPPServerConnector.java | 21 +------ 3 files changed, 47 insertions(+), 53 deletions(-) diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java index 9820487..040d332 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java @@ -30,27 +30,39 @@ import org.apache.vysper.xmpp.modules.core.im.handler.PresenceHandler; import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbResultHandler; import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbVerifyHandler; import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.s2s.FeaturesHandler; +import org.apache.vysper.xmpp.server.s2s.TlsProceedHandler; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.XMPPCoreStanza; /** - * for effeciently looking up the right handler for a stanza. at first this class tries to determine the stanza's - * specific namespace which uniquely brings up a NamespaceHandlerDictionary. then, all handlers in this directory - * are visited and can verify if they might want to handle the stanza. the first affirmative handler lucks out and - * can handle the stanza. regardless what comes out of this handler, no other handler will then be tasked with + * for effeciently looking up the right handler for a stanza. at first this + * class tries to determine the stanza's specific namespace which uniquely + * brings up a NamespaceHandlerDictionary. then, all handlers in this directory + * are visited and can verify if they might want to handle the stanza. the first + * affirmative handler lucks out and can handle the stanza. regardless what + * comes out of this handler, no other handler will then be tasked with * handling. * * @author The Apache MINA Project (d...@mina.apache.org) */ public class StanzaHandlerLookup extends AbstractStanzaHandlerLookup { - private IQHandler iqHandler = new RelayingIQHandler(); + private static final ServiceUnavailableStanzaErrorHandler SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER = new ServiceUnavailableStanzaErrorHandler(); - private MessageHandler messageHandler = new MessageHandler(); + private final IQHandler iqHandler = new RelayingIQHandler(); - private PresenceHandler presenceHandler = new PresenceHandler(); + private final MessageHandler messageHandler = new MessageHandler(); - private static final ServiceUnavailableStanzaErrorHandler SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER = new ServiceUnavailableStanzaErrorHandler(); + private final PresenceHandler presenceHandler = new PresenceHandler(); + + private final DbVerifyHandler dbVerifyHandler = new DbVerifyHandler(); + + private final DbResultHandler dbResultHandler = new DbResultHandler(); + + private final TlsProceedHandler tlsProceedHandler = new TlsProceedHandler(); + + private final FeaturesHandler featuresHandler = new FeaturesHandler(); protected ServerRuntimeContext serverRuntimeContext; @@ -60,6 +72,7 @@ public class StanzaHandlerLookup extends AbstractStanzaHandlerLookup { /** * looks into the stanza to see which handler is responsible, if any + * * @param stanza * @return NULL, if no handler could be */ @@ -70,42 +83,41 @@ public class StanzaHandlerLookup extends AbstractStanzaHandlerLookup { // allow extensions to override default handling StanzaHandler stanzaHandler = getHandlerForElement(stanza, stanza); - - if(stanzaHandler != null) { + + if (stanzaHandler != null) { return stanzaHandler; } else { String name = stanza.getName(); - + if ("xml".equals(name)) { return new XMLPrologHandler(); } else if ("stream".equals(name)) { return new StreamStartHandler(); - } else if ("verify".equals(name)) { - return new DbVerifyHandler(); - } else if ("result".equals(name)) { - return new DbResultHandler(); + } else if (dbVerifyHandler.verify(stanza)) { + return dbVerifyHandler; + } else if (dbResultHandler.verify(stanza)) { + return dbResultHandler; + } else if (tlsProceedHandler.verify(stanza)) { + return tlsProceedHandler; + } else if (featuresHandler.verify(stanza)) { + return featuresHandler; } else if (iqHandler.verify(stanza)) { return getIQHandler(stanza); } else if (messageHandler.verify(stanza)) { - return getMessageHandler(stanza); + return messageHandler; } else if (presenceHandler.verify(stanza)) { - return getPresenceHandler(stanza); + return presenceHandler; } else { - // ... and if we could not resolve and it's a core stanza, we can safely return an error - if (XMPPCoreStanza.getWrapper(stanza) != null) return SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER; - else return null; + // ... and if we could not resolve and it's a core stanza, we can safely return + // an error + if (XMPPCoreStanza.getWrapper(stanza) != null) + return SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER; + else + return null; } } } - private StanzaHandler getPresenceHandler(Stanza stanza) { - return presenceHandler; - } - - private StanzaHandler getMessageHandler(Stanza stanza) { - return messageHandler; - } - private StanzaHandler getIQHandler(Stanza stanza) { StanzaHandler handlerForElement = null; diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java index d73149a..5d69892 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java @@ -28,13 +28,10 @@ import org.apache.vysper.event.EventBus; import org.apache.vysper.storage.StorageProvider; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.authentication.UserAuthentication; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.Module; import org.apache.vysper.xmpp.modules.ServerRuntimeContextService; import org.apache.vysper.xmpp.protocol.StanzaHandler; -import org.apache.vysper.xmpp.protocol.StanzaProcessor; import org.apache.vysper.xmpp.server.components.Component; -import org.apache.vysper.xmpp.server.components.ComponentStanzaProcessor; import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.state.presence.LatestPresenceCache; @@ -73,14 +70,14 @@ public interface ServerRuntimeContext { void registerComponent(Component component); boolean hasComponentStanzaProcessor(Entity entity); - + XMPPServerConnectorRegistry getServerConnectorRegistry(); - + List<Module> getModules(); <T> T getModule(Class<T> clazz); - + void addModule(Module module); - + EventBus getEventBus(); } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java index 54aebd4..089dd5f 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java @@ -21,7 +21,6 @@ package org.apache.vysper.xmpp.server.s2s; import java.net.InetSocketAddress; import java.nio.channels.UnresolvedAddressException; -import java.util.Arrays; import java.util.List; import java.util.Timer; import java.util.TimerTask; @@ -43,8 +42,6 @@ import org.apache.vysper.xmpp.delivery.failure.RemoteServerNotFoundException; import org.apache.vysper.xmpp.delivery.failure.RemoteServerTimeoutException; import org.apache.vysper.xmpp.modules.extension.xep0199_xmppping.XmppPingListener; import org.apache.vysper.xmpp.modules.extension.xep0199_xmppping.XmppPingModule; -import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbResultHandler; -import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbVerifyHandler; import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DialbackIdGenerator; import org.apache.vysper.xmpp.protocol.NamespaceURIs; import org.apache.vysper.xmpp.protocol.ProtocolException; @@ -73,9 +70,6 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC private static final Logger LOG = LoggerFactory.getLogger(DefaultXMPPServerConnector.class); - private final static List<StanzaHandler> S2S_HANDSHAKE_HANDLERS = Arrays.asList(new DbVerifyHandler(), - new DbResultHandler(), new TlsProceedHandler(), new FeaturesHandler()); - private final ServerRuntimeContext serverRuntimeContext; private final StanzaRelay stanzaRelay; @@ -210,24 +204,15 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC } } - private StanzaHandler lookupS2SHandler(Stanza stanza) { - for (StanzaHandler handler : S2S_HANDSHAKE_HANDLERS) { - if (handler.verify(stanza)) { - return handler; - } - } - return null; - } - public void handleReceivedStanza(Stanza stanza) { // check for basic stanza handlers - StanzaHandler s2sHandler = lookupS2SHandler(stanza); + StanzaHandler handler = serverRuntimeContext.getHandler(stanza); - if (s2sHandler != null) { + if (handler != null) { ResponseStanzaContainer container; try { - container = s2sHandler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, + container = handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext)); } catch (ProtocolException e) { return;