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 2bfe52c Revert "Move S2S handlers to StanzaHandlerLookup" 2bfe52c is described below commit 2bfe52c26c29d5f075c54c9d3e02a5f644658308 Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Tue Aug 27 09:43:28 2019 +0200 Revert "Move S2S handlers to StanzaHandlerLookup" This reverts commit e6df72e3 --- .../vysper/xmpp/protocol/StanzaHandlerLookup.java | 68 +++++++++------------- .../vysper/xmpp/server/ServerRuntimeContext.java | 11 ++-- .../server/s2s/DefaultXMPPServerConnector.java | 21 ++++++- 3 files changed, 53 insertions(+), 47 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 040d332..9820487 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,39 +30,27 @@ 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 static final ServiceUnavailableStanzaErrorHandler SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER = new ServiceUnavailableStanzaErrorHandler(); - - private final IQHandler iqHandler = new RelayingIQHandler(); - - private final MessageHandler messageHandler = new MessageHandler(); + private IQHandler iqHandler = new RelayingIQHandler(); - private final PresenceHandler presenceHandler = new PresenceHandler(); + private MessageHandler messageHandler = new MessageHandler(); - private final DbVerifyHandler dbVerifyHandler = new DbVerifyHandler(); + private PresenceHandler presenceHandler = new PresenceHandler(); - private final DbResultHandler dbResultHandler = new DbResultHandler(); - - private final TlsProceedHandler tlsProceedHandler = new TlsProceedHandler(); - - private final FeaturesHandler featuresHandler = new FeaturesHandler(); + private static final ServiceUnavailableStanzaErrorHandler SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER = new ServiceUnavailableStanzaErrorHandler(); protected ServerRuntimeContext serverRuntimeContext; @@ -72,7 +60,6 @@ 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 */ @@ -83,41 +70,42 @@ 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 (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 ("verify".equals(name)) { + return new DbVerifyHandler(); + } else if ("result".equals(name)) { + return new DbResultHandler(); } else if (iqHandler.verify(stanza)) { return getIQHandler(stanza); } else if (messageHandler.verify(stanza)) { - return messageHandler; + return getMessageHandler(stanza); } else if (presenceHandler.verify(stanza)) { - return presenceHandler; + return getPresenceHandler(stanza); } 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 5d69892..d73149a 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,10 +28,13 @@ 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; @@ -70,14 +73,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 089dd5f..54aebd4 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,6 +21,7 @@ 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; @@ -42,6 +43,8 @@ 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; @@ -70,6 +73,9 @@ 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; @@ -204,15 +210,24 @@ 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 handler = serverRuntimeContext.getHandler(stanza); + StanzaHandler s2sHandler = lookupS2SHandler(stanza); - if (handler != null) { + if (s2sHandler != null) { ResponseStanzaContainer container; try { - container = handler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, + container = s2sHandler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext)); } catch (ProtocolException e) { return;