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;

Reply via email to