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 c0d3b2b Add StanzaHandlerExecutor and make it unavoidable to execute a StanzaHandler c0d3b2b is described below commit c0d3b2bcef14fc54e008d42bb5cf85f8a5957c69 Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Wed Aug 28 01:07:31 2019 +0200 Add StanzaHandlerExecutor and make it unavoidable to execute a StanzaHandler --- .../DeliveringInternalInboundStanzaRelay.java | 9 +-- .../modules/core/base/handler/MessageHandler.java | 9 ++- .../vysper/xmpp/protocol/ProtocolWorker.java | 19 +++---- .../SimpleStanzaHandlerExecutor.java} | 22 ++++++-- .../SimpleStanzaHandlerExecutorFactory.java} | 13 +++-- .../apache/vysper/xmpp/protocol/StanzaHandler.java | 8 +-- .../xmpp/protocol/StanzaHandlerExecutor.java | 42 ++++++++++++++ .../StanzaHandlerExecutorFactory.java} | 13 ++--- .../worker/AbstractStateAwareProtocolWorker.java | 18 +++--- .../worker/AuthenticatedProtocolWorker.java | 10 ++-- .../protocol/worker/EncryptedProtocolWorker.java | 10 ++-- .../worker/EncryptionStartedProtocolWorker.java | 14 ++--- .../protocol/worker/EndOrClosedProtocolWorker.java | 10 ++-- .../worker/InboundStanzaProtocolWorker.java | 15 ++--- .../protocol/worker/InitiatedProtocolWorker.java | 10 ++-- .../protocol/worker/StartedProtocolWorker.java | 10 ++-- .../protocol/worker/UnconnectedProtocolWorker.java | 10 ++-- .../server/ComponentStanzaProcessorFactory.java | 10 ++-- .../xmpp/server/DefaultServerRuntimeContext.java | 17 ++++-- .../org/apache/vysper/xmpp/server/XMPPServer.java | 25 +++++--- .../AlterableComponentRegistry.java | 5 +- .../server/{ => components}/ComponentRegistry.java | 2 +- .../components/ComponentStanzaProcessor.java | 66 ++++++++++++++++------ .../{ => components}/SimpleComponentRegistry.java | 5 +- .../server/s2s/DefaultXMPPServerConnector.java | 24 ++++---- .../s2s/DefaultXMPPServerConnectorRegistry.java | 18 +++--- .../stanzasession/StanzaSessionTestCase.java | 28 +++++---- ...eliveringInteralInboundStanzaRelayTestCase.java | 20 ++++--- .../protocol/AbstractProtocolStateTestCase.java | 2 +- .../protocol/ProtocolWorkerProcessTestCase.java | 2 +- .../ProtocolWorkerStateAwarenessTestCase.java | 5 +- .../vysper/xmpp/server/TestSessionContext.java | 9 ++- .../ComponentStanzaProcessorTestCase.java | 4 +- .../extension/xep0045_muc/TestSessionContext.java | 11 ++-- .../handler/PubSubPublishHandler.java | 28 +++++---- .../xep0060_pubsub/TestSessionContext.java | 11 ++-- 36 files changed, 328 insertions(+), 206 deletions(-) diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java index 49fb761..86fe263 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java @@ -49,13 +49,13 @@ import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; import org.apache.vysper.xmpp.modules.extension.xep0160_offline_storage.OfflineStorageProvider; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaProcessor; import org.apache.vysper.xmpp.protocol.worker.InboundStanzaProtocolWorker; -import org.apache.vysper.xmpp.server.ComponentRegistry; import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; -import org.apache.vysper.xmpp.server.SimpleComponentRegistry; +import org.apache.vysper.xmpp.server.components.ComponentRegistry; import org.apache.vysper.xmpp.server.resources.ManagedThreadPool; import org.apache.vysper.xmpp.server.resources.ManagedThreadPoolUtil; import org.apache.vysper.xmpp.stanza.IQStanza; @@ -151,8 +151,9 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage this.serverRuntimeContext = serverRuntimeContext; } - public void setStanzaRelay(StanzaRelay stanzaRelay) { - this.inboundStanzaProtocolWorker = new InboundStanzaProtocolWorker(stanzaRelay); + public void setStanzaHandlerExecutionContextFactory( + StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + this.inboundStanzaProtocolWorker = new InboundStanzaProtocolWorker(stanzaHandlerExecutorFactory); } public final void setLogStorageProvider(final LogStorageProvider logStorageProvider) { diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java index e28aaa2..34e7c02 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java @@ -20,12 +20,13 @@ package org.apache.vysper.xmpp.modules.core.base.handler; +import java.util.List; + import org.apache.vysper.xml.fragment.Attribute; import org.apache.vysper.xml.fragment.XMLElement; import org.apache.vysper.xml.fragment.XMLSemanticError; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.addressing.EntityImpl; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.delivery.failure.ReturnErrorToSenderFailureStrategy; import org.apache.vysper.xmpp.protocol.StanzaBroker; import org.apache.vysper.xmpp.server.ServerRuntimeContext; @@ -35,8 +36,6 @@ import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.StanzaBuilder; import org.apache.vysper.xmpp.stanza.XMPPCoreStanza; -import java.util.List; - /** * handling message stanzas * @@ -54,7 +53,7 @@ public class MessageHandler extends XMPPCoreStanzaHandler { @Override protected List<Stanza> executeCore(XMPPCoreStanza stanza, ServerRuntimeContext serverRuntimeContext, - boolean isOutboundStanza, SessionContext sessionContext, StanzaBroker stanzaBroker) { + boolean isOutboundStanza, SessionContext sessionContext, StanzaBroker stanzaBroker) { // (try to) read thread id String threadId = null; @@ -123,7 +122,7 @@ public class MessageHandler extends XMPPCoreStanzaHandler { stanzaBroker.write(stanza.getTo(), stanza, new ReturnErrorToSenderFailureStrategy(stanzaBroker)); } catch (Exception e) { // TODO return error stanza - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + e.printStackTrace(); // To change body of catch statement use File | Settings | File Templates. } } else if (sessionContext != null) { sessionContext.getResponseWriter().write(stanza); diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java index 6606575..a10e185 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java @@ -25,7 +25,6 @@ import java.util.Map; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.addressing.EntityUtils; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.extension.xep0077_inbandreg.InBandRegistrationHandler; import org.apache.vysper.xmpp.protocol.exception.TLSException; import org.apache.vysper.xmpp.protocol.worker.AuthenticatedProtocolWorker; @@ -66,16 +65,16 @@ public class ProtocolWorker implements StanzaProcessor { private final ResponseWriter responseWriter = new ResponseWriter(); - public ProtocolWorker(StanzaRelay stanzaRelay) { + public ProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { - stateWorker.put(SessionState.UNCONNECTED, new UnconnectedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.INITIATED, new InitiatedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.STARTED, new StartedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.ENCRYPTION_STARTED, new EncryptionStartedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.ENCRYPTED, new EncryptedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.AUTHENTICATED, new AuthenticatedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.ENDED, new EndOrClosedProtocolWorker(stanzaRelay)); - stateWorker.put(SessionState.CLOSED, new EndOrClosedProtocolWorker(stanzaRelay)); + stateWorker.put(SessionState.UNCONNECTED, new UnconnectedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.INITIATED, new InitiatedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.STARTED, new StartedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.ENCRYPTION_STARTED, new EncryptionStartedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.ENCRYPTED, new EncryptedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.AUTHENTICATED, new AuthenticatedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.ENDED, new EndOrClosedProtocolWorker(stanzaHandlerExecutorFactory)); + stateWorker.put(SessionState.CLOSED, new EndOrClosedProtocolWorker(stanzaHandlerExecutorFactory)); } /** diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java similarity index 54% copy from server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java copy to server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java index ef2dc04..470f316 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java @@ -17,25 +17,35 @@ * under the License. * */ -package org.apache.vysper.xmpp.server; +package org.apache.vysper.xmpp.protocol; import static java.util.Objects.requireNonNull; import org.apache.vysper.xmpp.delivery.StanzaRelay; -import org.apache.vysper.xmpp.server.components.ComponentStanzaProcessor; +import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; +import org.apache.vysper.xmpp.stanza.Stanza; /** * @author Réda Housni Alaoui */ -public class ComponentStanzaProcessorFactory { +class SimpleStanzaHandlerExecutor implements StanzaHandlerExecutor { private final StanzaRelay stanzaRelay; - public ComponentStanzaProcessorFactory(StanzaRelay stanzaRelay) { + private final StanzaHandler stanzaHandler; + + public SimpleStanzaHandlerExecutor(StanzaRelay stanzaRelay, StanzaHandler stanzaHandler) { this.stanzaRelay = requireNonNull(stanzaRelay); + this.stanzaHandler = requireNonNull(stanzaHandler); } - public ComponentStanzaProcessor build() { - return new ComponentStanzaProcessor(stanzaRelay); + @Override + public ResponseStanzaContainer execute(Stanza stanza, ServerRuntimeContext serverRuntimeContext, + boolean isOutboundStanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder) + throws ProtocolException { + return stanzaHandler.execute(stanza, serverRuntimeContext, isOutboundStanza, sessionContext, sessionStateHolder, + new SimpleStanzaBroker(stanzaRelay, sessionContext)); } + } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java similarity index 74% copy from server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java copy to server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java index ef2dc04..efcf05e 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java @@ -17,25 +17,26 @@ * under the License. * */ -package org.apache.vysper.xmpp.server; +package org.apache.vysper.xmpp.protocol; import static java.util.Objects.requireNonNull; import org.apache.vysper.xmpp.delivery.StanzaRelay; -import org.apache.vysper.xmpp.server.components.ComponentStanzaProcessor; /** * @author Réda Housni Alaoui */ -public class ComponentStanzaProcessorFactory { +public class SimpleStanzaHandlerExecutorFactory implements StanzaHandlerExecutorFactory { private final StanzaRelay stanzaRelay; - public ComponentStanzaProcessorFactory(StanzaRelay stanzaRelay) { + public SimpleStanzaHandlerExecutorFactory(StanzaRelay stanzaRelay) { this.stanzaRelay = requireNonNull(stanzaRelay); } - public ComponentStanzaProcessor build() { - return new ComponentStanzaProcessor(stanzaRelay); + @Override + public StanzaHandlerExecutor build(StanzaHandler stanzaHandler) { + return new SimpleStanzaHandlerExecutor(stanzaRelay, stanzaHandler); } + } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandler.java index 1575aaf..d3c7b71 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandler.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandler.java @@ -65,17 +65,13 @@ public interface StanzaHandler { /** * executes a stanza * - * @param stanza - * @param serverRuntimeContext * @param isOutboundStanza * true, if the stanza was emitted by the client which is handled by * the session belonging to the given sessionContext parameter. * false, if the session is receiving the stanza targeted to the * session's client. - * @param sessionContext - * @param sessionStateHolder - * @param stanzaBroker - * @return optionally returns a stanzaBroker which is passed to the session's client + * @return optionally returns a stanzaBroker which is passed to the session's + * client */ public ResponseStanzaContainer execute(Stanza stanza, ServerRuntimeContext serverRuntimeContext, boolean isOutboundStanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder, diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerExecutor.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerExecutor.java new file mode 100644 index 0000000..3526d70 --- /dev/null +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerExecutor.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.vysper.xmpp.protocol; + +import org.apache.vysper.xmpp.server.ServerRuntimeContext; +import org.apache.vysper.xmpp.server.SessionContext; +import org.apache.vysper.xmpp.stanza.Stanza; + +/** + * The stanza handler executor sole purpose is to execute a + * {@link StanzaHandler}. Consumers must use this executor instead of directly + * calling the + * {@link StanzaHandler#execute(Stanza, ServerRuntimeContext, boolean, SessionContext, SessionStateHolder, StanzaBroker)} + * + * An executor allows to decorate the {@link StanzaHandler} execution. For + * example vysper could make sure that the executor always runs some process + * before and/or after + * {@link StanzaHandler#execute(Stanza, ServerRuntimeContext, boolean, SessionContext, SessionStateHolder, StanzaBroker)}. + * + * @author Réda Housni Alaoui + */ +public interface StanzaHandlerExecutor { + ResponseStanzaContainer execute(Stanza stanza, ServerRuntimeContext serverRuntimeContext, boolean isOutboundStanza, + SessionContext sessionContext, SessionStateHolder sessionStateHolder) throws ProtocolException; +} diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentRegistry.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerExecutorFactory.java similarity index 78% copy from server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentRegistry.java copy to server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerExecutorFactory.java index cd97b55..4b0b9a5 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentRegistry.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerExecutorFactory.java @@ -17,16 +17,15 @@ * under the License. * */ -package org.apache.vysper.xmpp.server; - -import org.apache.vysper.xmpp.addressing.Entity; -import org.apache.vysper.xmpp.protocol.StanzaProcessor; +package org.apache.vysper.xmpp.protocol; /** * @author Réda Housni Alaoui */ -public interface ComponentRegistry { +public interface StanzaHandlerExecutorFactory { - StanzaProcessor getComponentStanzaProcessor(Entity entity); - + /** + * @see StanzaHandlerExecutor + */ + StanzaHandlerExecutor build(StanzaHandler stanzaHandler); } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java index 24f3acc..af3c9f9 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AbstractStateAwareProtocolWorker.java @@ -21,13 +21,12 @@ package org.apache.vysper.xmpp.protocol.worker; import static java.util.Objects.requireNonNull; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.ProtocolException; import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer; import org.apache.vysper.xmpp.protocol.ResponseWriter; import org.apache.vysper.xmpp.protocol.SessionStateHolder; -import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StateAwareProtocolWorker; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; @@ -40,10 +39,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public abstract class AbstractStateAwareProtocolWorker implements StateAwareProtocolWorker { - private final StanzaRelay stanzaRelay; + private final StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory; - protected AbstractStateAwareProtocolWorker(StanzaRelay stanzaRelay) { - this.stanzaRelay = requireNonNull(stanzaRelay); + protected AbstractStateAwareProtocolWorker( + StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + this.stanzaHandlerExecutorFactory = requireNonNull(stanzaHandlerExecutorFactory); } abstract public SessionState getHandledState(); @@ -78,11 +78,11 @@ public abstract class AbstractStateAwareProtocolWorker implements StateAwareProt protected ResponseStanzaContainer executeHandler(SessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza, StanzaHandler stanzaHandler) { - ResponseStanzaContainer responseStanzaContainer = null; + ResponseStanzaContainer responseStanzaContainer; try { - responseStanzaContainer = stanzaHandler.execute(stanza, sessionContext.getServerRuntimeContext(), - isProcessingOutboundStanzas(), sessionContext, sessionStateHolder, - new SimpleStanzaBroker(stanzaRelay, sessionContext)); + responseStanzaContainer = stanzaHandlerExecutorFactory.build(stanzaHandler).execute(stanza, + sessionContext.getServerRuntimeContext(), isProcessingOutboundStanzas(), sessionContext, + sessionStateHolder); } catch (ProtocolException e) { ResponseWriter.handleProtocolError(e, sessionContext, stanza); return null; diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AuthenticatedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AuthenticatedProtocolWorker.java index a4e6cc3..10d37f8 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AuthenticatedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/AuthenticatedProtocolWorker.java @@ -19,11 +19,11 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.core.base.handler.StreamStartHandler; import org.apache.vysper.xmpp.protocol.ResponseWriter; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -34,11 +34,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public class AuthenticatedProtocolWorker extends AbstractStateAwareProtocolWorker { - public AuthenticatedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public AuthenticatedProtocolWorker(StanzaHandlerExecutorFactory StanzaHandlerExecutorFactory) { + super(StanzaHandlerExecutorFactory); + } - @Override + @Override protected boolean checkState(SessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza, StanzaHandler stanzaHandler) { if (StreamStartHandler.class.isAssignableFrom(stanzaHandler.unwrapType())) diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java index f7fd352..96623f9 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java @@ -19,7 +19,6 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.core.base.handler.StreamStartHandler; import org.apache.vysper.xmpp.modules.core.base.handler.XMLPrologHandler; import org.apache.vysper.xmpp.modules.core.sasl.handler.AbstractSASLHandler; @@ -29,6 +28,7 @@ import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbVerify import org.apache.vysper.xmpp.protocol.ResponseWriter; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -39,11 +39,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public class EncryptedProtocolWorker extends AbstractStateAwareProtocolWorker { - public EncryptedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public EncryptedProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.ENCRYPTED; } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptionStartedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptionStartedProtocolWorker.java index 51a5414..20e84de 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptionStartedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptionStartedProtocolWorker.java @@ -19,24 +19,23 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; /** - * * @author The Apache MINA Project (d...@mina.apache.org) */ public class EncryptionStartedProtocolWorker extends AbstractStateAwareProtocolWorker { - public EncryptionStartedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public EncryptionStartedProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.ENCRYPTION_STARTED; } @@ -45,7 +44,8 @@ public class EncryptionStartedProtocolWorker extends AbstractStateAwareProtocolW protected boolean checkState(SessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza, StanzaHandler stanzaHandler) { // StartTLS is currently completely handled on the protocol side. - // anyway, there are no stanzas to be parsed between ENCRYPTION_STARTED and ENCRYPTED. + // anyway, there are no stanzas to be parsed between ENCRYPTION_STARTED and + // ENCRYPTED. // the state change is handeld in ProtocolWorker.processTLSEstablished() throw new RuntimeException("worker not implemented"); } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EndOrClosedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EndOrClosedProtocolWorker.java index 1157f04..dac84e3 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EndOrClosedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EndOrClosedProtocolWorker.java @@ -19,9 +19,9 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -32,11 +32,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public class EndOrClosedProtocolWorker extends AbstractStateAwareProtocolWorker { - public EndOrClosedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public EndOrClosedProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.ENDED; } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java index d92ea72..0c60769 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java @@ -19,25 +19,26 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer; import org.apache.vysper.xmpp.protocol.ResponseWriter; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; /** - * to send a mail through the handler and afterwards actually forwarding the result to the client - * inbound stanzas can only be forwarded when the client is authenticated + * to send a mail through the handler and afterwards actually forwarding the + * result to the client inbound stanzas can only be forwarded when the client is + * authenticated * * @author The Apache MINA Project (d...@mina.apache.org) */ public class InboundStanzaProtocolWorker extends AbstractStateAwareProtocolWorker { - public InboundStanzaProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public InboundStanzaProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.AUTHENTICATED; } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InitiatedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InitiatedProtocolWorker.java index a47ec84..cf0d9bd 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InitiatedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InitiatedProtocolWorker.java @@ -19,12 +19,12 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.core.base.handler.StreamStartHandler; import org.apache.vysper.xmpp.modules.core.base.handler.XMLPrologHandler; import org.apache.vysper.xmpp.protocol.ResponseWriter; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -35,11 +35,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public class InitiatedProtocolWorker extends AbstractStateAwareProtocolWorker { - public InitiatedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public InitiatedProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.INITIATED; } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java index 407ed49..9887669 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java @@ -19,7 +19,6 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.core.sasl.handler.AbstractSASLHandler; import org.apache.vysper.xmpp.modules.core.starttls.handler.StartTLSHandler; import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbResultHandler; @@ -27,6 +26,7 @@ import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbVerify import org.apache.vysper.xmpp.protocol.ResponseWriter; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -37,11 +37,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public class StartedProtocolWorker extends AbstractStateAwareProtocolWorker { - public StartedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public StartedProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.STARTED; } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/UnconnectedProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/UnconnectedProtocolWorker.java index 9ce5701..e5e5f4e 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/UnconnectedProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/UnconnectedProtocolWorker.java @@ -19,9 +19,9 @@ */ package org.apache.vysper.xmpp.protocol.worker; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -32,11 +32,11 @@ import org.apache.vysper.xmpp.stanza.Stanza; */ public class UnconnectedProtocolWorker extends AbstractStateAwareProtocolWorker { - public UnconnectedProtocolWorker(StanzaRelay stanzaRelay) { - super(stanzaRelay); - } + public UnconnectedProtocolWorker(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + super(stanzaHandlerExecutorFactory); + } - @Override + @Override public SessionState getHandledState() { return SessionState.UNCONNECTED; } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java index ef2dc04..d209186 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentStanzaProcessorFactory.java @@ -21,7 +21,7 @@ package org.apache.vysper.xmpp.server; import static java.util.Objects.requireNonNull; -import org.apache.vysper.xmpp.delivery.StanzaRelay; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.components.ComponentStanzaProcessor; /** @@ -29,13 +29,13 @@ import org.apache.vysper.xmpp.server.components.ComponentStanzaProcessor; */ public class ComponentStanzaProcessorFactory { - private final StanzaRelay stanzaRelay; + private final StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory; - public ComponentStanzaProcessorFactory(StanzaRelay stanzaRelay) { - this.stanzaRelay = requireNonNull(stanzaRelay); + public ComponentStanzaProcessorFactory(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + this.stanzaHandlerExecutorFactory = requireNonNull(stanzaHandlerExecutorFactory); } public ComponentStanzaProcessor build() { - return new ComponentStanzaProcessor(stanzaRelay); + return new ComponentStanzaProcessor(stanzaHandlerExecutorFactory); } } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java index a7ff5f7..2681bf9 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java @@ -44,10 +44,14 @@ import org.apache.vysper.xmpp.modules.ModuleRegistry; import org.apache.vysper.xmpp.modules.ServerRuntimeContextService; import org.apache.vysper.xmpp.protocol.HandlerDictionary; import org.apache.vysper.xmpp.protocol.ProtocolWorker; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaHandlerLookup; import org.apache.vysper.xmpp.protocol.StanzaProcessor; +import org.apache.vysper.xmpp.server.components.AlterableComponentRegistry; import org.apache.vysper.xmpp.server.components.Component; +import org.apache.vysper.xmpp.server.components.SimpleComponentRegistry; import org.apache.vysper.xmpp.server.s2s.DefaultXMPPServerConnectorRegistry; import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry; import org.apache.vysper.xmpp.stanza.Stanza; @@ -144,12 +148,16 @@ public class DefaultServerRuntimeContext implements ServerRuntimeContext, Module this.serverEntity = serverEntity; this.stanzaRelay = stanzaRelay; this.componentRegistry = requireNonNull(componentRegistry); - this.serverConnectorRegistry = new DefaultXMPPServerConnectorRegistry(this, stanzaRelay, stanzaProcessor); + StanzaHandlerExecutorFactory simpleStanzaHandlerExecutorFactory = new SimpleStanzaHandlerExecutorFactory( + stanzaRelay); + this.serverConnectorRegistry = new DefaultXMPPServerConnectorRegistry(this, + simpleStanzaHandlerExecutorFactory, stanzaProcessor); this.stanzaHandlerLookup = new StanzaHandlerLookup(this); this.eventBus = new SimpleEventBus(); this.serverFeatures = serverFeatures; this.resourceRegistry = resourceRegistry; - this.componentStanzaProcessorFactory = new ComponentStanzaProcessorFactory(stanzaRelay); + this.componentStanzaProcessorFactory = new ComponentStanzaProcessorFactory( + simpleStanzaHandlerExecutorFactory); addDictionaries(dictionaries); } @@ -161,8 +169,9 @@ public class DefaultServerRuntimeContext implements ServerRuntimeContext, Module } public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay stanzaRelay) { - this(serverEntity, stanzaRelay, new ProtocolWorker(stanzaRelay), new SimpleComponentRegistry(serverEntity), - new DefaultResourceRegistry(), new ServerFeatures(), Collections.emptyList()); + this(serverEntity, stanzaRelay, new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)), + new SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(), new ServerFeatures(), + Collections.emptyList()); } /** diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java index f516e0d..58901bf 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java @@ -48,7 +48,11 @@ import org.apache.vysper.xmpp.modules.roster.RosterModule; import org.apache.vysper.xmpp.modules.servicediscovery.ServiceDiscoveryModule; import org.apache.vysper.xmpp.protocol.HandlerDictionary; import org.apache.vysper.xmpp.protocol.ProtocolWorker; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaProcessor; +import org.apache.vysper.xmpp.server.components.AlterableComponentRegistry; +import org.apache.vysper.xmpp.server.components.SimpleComponentRegistry; import org.apache.vysper.xmpp.state.resourcebinding.DefaultResourceRegistry; import org.apache.vysper.xmpp.state.resourcebinding.ResourceRegistry; @@ -71,7 +75,7 @@ public class XMPPServer { private String serverDomain; private DefaultServerRuntimeContext serverRuntimeContext; - + private StanzaProcessor stanzaProcessor; private StorageProviderRegistry storageProviderRegistry; @@ -197,10 +201,13 @@ public class XMPPServer { stanzaRelayBroker.setInternalRelay(internalStanzaRelay); stanzaRelayBroker.setExternalRelay(externalStanzaRelay); - stanzaProcessor = new ProtocolWorker(stanzaRelayBroker); + StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory = new SimpleStanzaHandlerExecutorFactory( + stanzaRelayBroker); + + stanzaProcessor = new ProtocolWorker(stanzaHandlerExecutorFactory); - serverRuntimeContext = new DefaultServerRuntimeContext(serverEntity, stanzaRelayBroker, stanzaProcessor, componentRegistry, - resourceRegistry, serverFeatures, dictionaries); + serverRuntimeContext = new DefaultServerRuntimeContext(serverEntity, stanzaRelayBroker, stanzaProcessor, + componentRegistry, resourceRegistry, serverFeatures, dictionaries); serverRuntimeContext.setStorageProviderRegistry(storageProviderRegistry); serverRuntimeContext.setTlsContextFactory(tlsContextFactory); @@ -210,7 +217,7 @@ public class XMPPServer { stanzaRelayBroker.setServerRuntimeContext(serverRuntimeContext); internalStanzaRelay.setServerRuntimeContext(serverRuntimeContext); - internalStanzaRelay.setStanzaRelay(stanzaRelayBroker); + internalStanzaRelay.setStanzaHandlerExecutionContextFactory(stanzaHandlerExecutorFactory); externalStanzaRelay.setServerRuntimeContext(serverRuntimeContext); final LogStorageProvider logStorageProvider = this.storageProviderRegistry.retrieve(LogStorageProvider.class); @@ -221,8 +228,8 @@ public class XMPPServer { throw new IllegalStateException("server must have at least one endpoint"); /* - 'input stream': receives stanzas issued by client sessions to be handled by - the server + * 'input stream': receives stanzas issued by client sessions to be handled by + * the server */ for (Endpoint endpoint : endpoints) { endpoint.setServerRuntimeContext(serverRuntimeContext); @@ -272,8 +279,8 @@ public class XMPPServer { public ServerRuntimeContext getServerRuntimeContext() { return serverRuntimeContext; } - - public StanzaProcessor getStanzaProcessor(){ + + public StanzaProcessor getStanzaProcessor() { return stanzaProcessor; } } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/AlterableComponentRegistry.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/AlterableComponentRegistry.java similarity index 87% rename from server/core/src/main/java/org/apache/vysper/xmpp/server/AlterableComponentRegistry.java rename to server/core/src/main/java/org/apache/vysper/xmpp/server/components/AlterableComponentRegistry.java index b38fe0a..f9a9e3c 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/AlterableComponentRegistry.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/AlterableComponentRegistry.java @@ -17,10 +17,9 @@ * under the License. * */ -package org.apache.vysper.xmpp.server; +package org.apache.vysper.xmpp.server.components; -import org.apache.vysper.xmpp.delivery.StanzaRelay; -import org.apache.vysper.xmpp.server.components.Component; +import org.apache.vysper.xmpp.server.ComponentStanzaProcessorFactory; /** * @author Réda Housni Alaoui diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentRegistry.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentRegistry.java similarity index 95% rename from server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentRegistry.java rename to server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentRegistry.java index cd97b55..d88f5f7 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ComponentRegistry.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentRegistry.java @@ -17,7 +17,7 @@ * under the License. * */ -package org.apache.vysper.xmpp.server; +package org.apache.vysper.xmpp.server.components; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.protocol.StanzaProcessor; diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java index cbdf0cb..518f24e 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessor.java @@ -19,35 +19,36 @@ */ package org.apache.vysper.xmpp.server.components; -import org.apache.vysper.xmpp.delivery.StanzaRelay; +import static java.util.Objects.requireNonNull; + +import java.util.List; + import org.apache.vysper.xmpp.delivery.failure.DeliveryException; import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy; import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary; import org.apache.vysper.xmpp.protocol.ProtocolException; import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer; import org.apache.vysper.xmpp.protocol.SessionStateHolder; -import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker; +import org.apache.vysper.xmpp.protocol.StanzaBroker; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutor; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaProcessor; import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionContext; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.XMPPCoreStanza; -import java.util.List; - -import static java.util.Objects.requireNonNull; - /** */ public class ComponentStanzaProcessor implements StanzaProcessor { - protected StanzaRelay stanzaRelay; + protected StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory; protected ComponentStanzaHandlerLookup componentStanzaHandlerLookup = new ComponentStanzaHandlerLookup(); - public ComponentStanzaProcessor(StanzaRelay stanzaRelay) { - this.stanzaRelay = requireNonNull(stanzaRelay); + public ComponentStanzaProcessor(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) { + this.stanzaHandlerExecutorFactory = requireNonNull(stanzaHandlerExecutorFactory); } public void addHandler(StanzaHandler stanzaHandler) { @@ -75,10 +76,10 @@ public class ComponentStanzaProcessor implements StanzaProcessor { ResponseStanzaContainer responseStanzaContainer = null; try { - responseStanzaContainer = stanzaHandler.execute(stanza, serverRuntimeContext, false, sessionContext, - sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext)); + responseStanzaContainer = stanzaHandlerExecutorFactory.build(stanzaHandler).execute(stanza, + serverRuntimeContext, false, sessionContext, sessionStateHolder); } catch (ProtocolException e) { - // TODO handle + // TODO handle e.printStackTrace(); } @@ -87,11 +88,14 @@ public class ComponentStanzaProcessor implements StanzaProcessor { } List<Stanza> responseStanzas = responseStanzaContainer.getResponseStanzas(); try { - IgnoreFailureStrategy failureStrategy = IgnoreFailureStrategy.IGNORE_FAILURE_STRATEGY; // TODO call back module - for (Stanza responseStanza: responseStanzas) { - stanzaRelay.relay(responseStanza.getTo(), responseStanza, failureStrategy); + // module + StanzaHandlerExecutor executionContext = stanzaHandlerExecutorFactory + .build(new RelayingStanzaHandler()); + for (Stanza responseStanza : responseStanzas) { + executionContext.execute(responseStanza, serverRuntimeContext, false, sessionContext, + sessionStateHolder); } - } catch (DeliveryException e) { + } catch (ProtocolException e) { throw new RuntimeException(e); } @@ -100,4 +104,34 @@ public class ComponentStanzaProcessor implements StanzaProcessor { public void processTLSEstablished(SessionContext sessionContext, SessionStateHolder sessionStateHolder) { throw new RuntimeException("should not be called for components, which only acts as an established session"); } + + private static class RelayingStanzaHandler implements StanzaHandler { + + @Override + public String getName() { + return null; + } + + @Override + public boolean verify(Stanza stanza) { + return false; + } + + @Override + public boolean isSessionRequired() { + return false; + } + + @Override + public ResponseStanzaContainer execute(Stanza stanza, ServerRuntimeContext serverRuntimeContext, + boolean isOutboundStanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder, + StanzaBroker stanzaBroker) { + try { + stanzaBroker.write(stanza.getTo(), stanza, IgnoreFailureStrategy.IGNORE_FAILURE_STRATEGY); + } catch (DeliveryException e) { + throw new RuntimeException(e); + } + return null; + } + } } diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/SimpleComponentRegistry.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/SimpleComponentRegistry.java similarity index 93% rename from server/core/src/main/java/org/apache/vysper/xmpp/server/SimpleComponentRegistry.java rename to server/core/src/main/java/org/apache/vysper/xmpp/server/components/SimpleComponentRegistry.java index 30b480e..6d045f0 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/SimpleComponentRegistry.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/components/SimpleComponentRegistry.java @@ -17,7 +17,7 @@ * under the License. * */ -package org.apache.vysper.xmpp.server; +package org.apache.vysper.xmpp.server.components; import static java.util.Objects.requireNonNull; @@ -27,8 +27,7 @@ import java.util.Map; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.addressing.EntityUtils; 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.ComponentStanzaProcessorFactory; /** * @author Réda Housni Alaoui 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..99d400c 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 @@ -38,7 +38,6 @@ import org.apache.vysper.mina.MinaBackedSessionContext; import org.apache.vysper.mina.StanzaLoggingFilter; import org.apache.vysper.mina.codec.XMPPProtocolCodecFactory; import org.apache.vysper.xmpp.addressing.Entity; -import org.apache.vysper.xmpp.delivery.StanzaRelay; 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; @@ -50,8 +49,8 @@ import org.apache.vysper.xmpp.protocol.NamespaceURIs; import org.apache.vysper.xmpp.protocol.ProtocolException; import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer; import org.apache.vysper.xmpp.protocol.SessionStateHolder; -import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker; import org.apache.vysper.xmpp.protocol.StanzaHandler; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaProcessor; import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionContext; @@ -78,8 +77,8 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC private final ServerRuntimeContext serverRuntimeContext; - private final StanzaRelay stanzaRelay; - + private final StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory; + private final StanzaProcessor stanzaProcessor; private MinaBackedSessionContext sessionContext; @@ -111,12 +110,11 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC protected final CountDownLatch authenticatedLatch = new CountDownLatch(1); public DefaultXMPPServerConnector(Entity remoteServer, ServerRuntimeContext serverRuntimeContext, - StanzaRelay stanzaRelay, StanzaProcessor stanzaProcessor, - SessionContext dialbackSessionContext, - SessionStateHolder dialbackSessionStateHolder) { + StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory, StanzaProcessor stanzaProcessor, + SessionContext dialbackSessionContext, SessionStateHolder dialbackSessionStateHolder) { this.serverRuntimeContext = serverRuntimeContext; this.stanzaProcessor = stanzaProcessor; - this.stanzaRelay = stanzaRelay; + this.stanzaHandlerExecutorFactory = stanzaHandlerExecutorFactory; this.remoteServer = remoteServer; this.dialbackSessionContext = dialbackSessionContext; this.dialbackSessionStateHolder = dialbackSessionStateHolder; @@ -227,8 +225,8 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC if (s2sHandler != null) { ResponseStanzaContainer container; try { - container = s2sHandler.execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder, - new SimpleStanzaBroker(stanzaRelay, sessionContext)); + container = stanzaHandlerExecutorFactory.build(s2sHandler).execute(stanza, serverRuntimeContext, + false, sessionContext, sessionStateHolder); } catch (ProtocolException e) { return; } @@ -284,8 +282,7 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC return; } - stanzaProcessor.processStanza(serverRuntimeContext, sessionContext, stanza, - sessionStateHolder); + stanzaProcessor.processStanza(serverRuntimeContext, sessionContext, stanza, sessionStateHolder); } } @@ -306,7 +303,8 @@ public class DefaultXMPPServerConnector implements XmppPingListener, XMPPServerC public void handleSessionOpened(IoSession session) { LOG.info("XMPP server session opened to {}", remoteServer); - sessionContext = new MinaBackedSessionContext(serverRuntimeContext, stanzaProcessor, sessionStateHolder, session); + sessionContext = new MinaBackedSessionContext(serverRuntimeContext, stanzaProcessor, sessionStateHolder, + session); sessionStateHolder.setState(SessionState.INITIATED); Stanza opener = new ServerResponses().getStreamOpenerForServerConnector(serverRuntimeContext.getServerEntity(), remoteServer, XMPPVersion.VERSION_1_0, sessionContext); diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistry.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistry.java index f1694d2..cd186c1 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistry.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistry.java @@ -24,10 +24,10 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.vysper.compliance.SpecCompliant; import org.apache.vysper.xmpp.addressing.Entity; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.delivery.failure.RemoteServerNotFoundException; import org.apache.vysper.xmpp.delivery.failure.RemoteServerTimeoutException; import org.apache.vysper.xmpp.protocol.SessionStateHolder; +import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaProcessor; import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionContext; @@ -47,15 +47,15 @@ public class DefaultXMPPServerConnectorRegistry implements XMPPServerConnectorRe private final Map<Entity, XMPPServerConnector> connectors = new ConcurrentHashMap<>(); - private final StanzaRelay stanzaRelay; - + private final StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory; + private final StanzaProcessor stanzaProcessor; - public DefaultXMPPServerConnectorRegistry(ServerRuntimeContext serverRuntimeContext, - StanzaRelay stanzaRelay, - StanzaProcessor stanzaProcessor) { + public DefaultXMPPServerConnectorRegistry(ServerRuntimeContext serverRuntimeContext, + StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory, + StanzaProcessor stanzaProcessor) { this.serverRuntimeContext = serverRuntimeContext; - this.stanzaRelay = stanzaRelay; + this.stanzaHandlerExecutorFactory = stanzaHandlerExecutorFactory; this.stanzaProcessor = stanzaProcessor; } @@ -104,8 +104,8 @@ public class DefaultXMPPServerConnectorRegistry implements XMPPServerConnectorRe protected XMPPServerConnector createConnector(Entity otherServer, ServerRuntimeContext serverRuntimeContext, SessionContext dialbackSessionContext, SessionStateHolder dialbackSessionStateHolder) { - return new DefaultXMPPServerConnector(otherServer, serverRuntimeContext, stanzaRelay, stanzaProcessor, dialbackSessionContext, - dialbackSessionStateHolder); + return new DefaultXMPPServerConnector(otherServer, serverRuntimeContext, stanzaHandlerExecutorFactory, + stanzaProcessor, dialbackSessionContext, dialbackSessionStateHolder); } /* diff --git a/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java b/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java index 73556f6..1e63b3e 100644 --- a/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java @@ -22,21 +22,22 @@ package org.apache.vysper.stanzasession; import java.util.ArrayList; import java.util.List; -import junit.framework.TestCase; - import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.addressing.EntityImpl; import org.apache.vysper.xmpp.delivery.StanzaRelayBroker; import org.apache.vysper.xmpp.protocol.HandlerDictionary; import org.apache.vysper.xmpp.protocol.ProtocolWorker; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext; import org.apache.vysper.xmpp.server.ServerFeatures; -import org.apache.vysper.xmpp.server.SimpleComponentRegistry; +import org.apache.vysper.xmpp.server.components.SimpleComponentRegistry; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.StanzaBuilder; import org.apache.vysper.xmpp.state.resourcebinding.DefaultResourceRegistry; import org.apache.vysper.xmpp.writer.DenseStanzaLogRenderer; +import junit.framework.TestCase; + /** */ public class StanzaSessionTestCase extends TestCase { @@ -57,9 +58,10 @@ public class StanzaSessionTestCase extends TestCase { dictionaries.add(new org.apache.vysper.xmpp.modules.roster.RosterDictionary()); Entity serverEntity = new EntityImpl(null, "test", null); - ProtocolWorker protocolWorker = new ProtocolWorker(relay); - DefaultServerRuntimeContext serverContext = new DefaultServerRuntimeContext(serverEntity, - relay, protocolWorker, new SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(), new ServerFeatures(), dictionaries); + ProtocolWorker protocolWorker = new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)); + DefaultServerRuntimeContext serverContext = new DefaultServerRuntimeContext(serverEntity, relay, protocolWorker, + new SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(), new ServerFeatures(), + dictionaries); relay.setServerRuntimeContext(serverContext); @@ -70,19 +72,21 @@ public class StanzaSessionTestCase extends TestCase { public void testHandshake() { StanzaSession session = sessionFactory.createNewSession(); - session.send(new StanzaBuilder("stream", "http://etherx.jabber.org/streams", "stream").addAttribute("from", - "m...@vysper.org").addAttribute("to", "vysper.org").declareNamespace("", "jabber:client").build()); + session.send(new StanzaBuilder("stream", "http://etherx.jabber.org/streams", "stream") + .addAttribute("from", "m...@vysper.org").addAttribute("to", "vysper.org") + .declareNamespace("", "jabber:client").build()); Stanza stanza = waitForStanza(session); assertNotNull(stanza); System.out.println(DenseStanzaLogRenderer.render(stanza)); - session.send(new StanzaBuilder("starttls", "urn:ietf:params:xml:ns:xmpp-tls").addAttribute("from", - "m...@vysper.org").build()); + session.send(new StanzaBuilder("starttls", "urn:ietf:params:xml:ns:xmpp-tls") + .addAttribute("from", "m...@vysper.org").build()); stanza = waitForStanza(session); assertNotNull(stanza); System.out.println(DenseStanzaLogRenderer.render(stanza)); session.setIsSecure(); - session.send(new StanzaBuilder("stream", "http://etherx.jabber.org/streams", "stream").addAttribute("from", - "m...@vysper.org").addAttribute("to", "vysper.org").declareNamespace("", "jabber:client").build()); + session.send(new StanzaBuilder("stream", "http://etherx.jabber.org/streams", "stream") + .addAttribute("from", "m...@vysper.org").addAttribute("to", "vysper.org") + .declareNamespace("", "jabber:client").build()); stanza = waitForStanza(session); assertNotNull(stanza); System.out.println(DenseStanzaLogRenderer.render(stanza)); diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java index 05c42eb..312823a 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java @@ -34,10 +34,11 @@ import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.delivery.failure.DeliveryException; import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy; import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionState; -import org.apache.vysper.xmpp.server.SimpleComponentRegistry; import org.apache.vysper.xmpp.server.TestSessionContext; +import org.apache.vysper.xmpp.server.components.SimpleComponentRegistry; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.StanzaBuilder; import org.apache.vysper.xmpp.state.resourcebinding.BindException; @@ -74,7 +75,7 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { ; // empty } } - + private Entity serverEntity; @Override @@ -91,7 +92,8 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { DefaultServerRuntimeContext serverRuntimeContext = new DefaultServerRuntimeContext(serverEntity, mock(StanzaRelay.class)); stanzaRelay.setServerRuntimeContext(serverRuntimeContext); - stanzaRelay.setStanzaRelay(stanzaRelay); + stanzaRelay + .setStanzaHandlerExecutionContextFactory(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); TestSessionContext sessionContext = TestSessionContext.createSessionContext(TO_ENTITY); sessionContext.setSessionState(SessionState.AUTHENTICATED); @@ -135,7 +137,8 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { serverRuntimeContext.getServerFeatures().setDeliverMessageToHighestPriorityResourcesOnly(false); stanzaRelay.setServerRuntimeContext(serverRuntimeContext); - stanzaRelay.setStanzaRelay(stanzaRelay); + stanzaRelay + .setStanzaHandlerExecutionContextFactory(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); TestSessionContext sessionContextTO_ENTITY_1_prio3 = createSessionForTo(TO_ENTITY, 3); // NON-NEGATIVE TestSessionContext sessionContextTO_ENTITY_2_prio0 = createSessionForTo(TO_ENTITY, 0); // NON-NEGATIVE @@ -170,7 +173,8 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { serverRuntimeContext.getServerFeatures().setDeliverMessageToHighestPriorityResourcesOnly(true); stanzaRelay.setServerRuntimeContext(serverRuntimeContext); - stanzaRelay.setStanzaRelay(stanzaRelay); + stanzaRelay + .setStanzaHandlerExecutionContextFactory(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); TestSessionContext sessionContextTO_ENTITY_1_prio3 = createSessionForTo(TO_ENTITY, 3); // HIGHEST PRIO TestSessionContext sessionContextTO_ENTITY_2_prio0 = createSessionForTo(TO_ENTITY, 1); // not receiving @@ -227,7 +231,8 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { mock(StanzaRelay.class)); stanzaRelay.setServerRuntimeContext(serverRuntimeContext); - stanzaRelay.setStanzaRelay(stanzaRelay); + stanzaRelay + .setStanzaHandlerExecutionContextFactory(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); stanzaRelay.setMaxThreadCount(1); TestSessionContext sessionContext = createSessionForTo(TO_ENTITY, 1); @@ -251,7 +256,8 @@ public class DeliveringInteralInboundStanzaRelayTestCase extends TestCase { mock(StanzaRelay.class)); stanzaRelay.setServerRuntimeContext(serverRuntimeContext); - stanzaRelay.setStanzaRelay(stanzaRelay); + stanzaRelay + .setStanzaHandlerExecutionContextFactory(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); stanzaRelay.setMaxThreadCount(10); TestSessionContext sessionContext = createSessionForTo(TO_ENTITY, 1); diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/AbstractProtocolStateTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/AbstractProtocolStateTestCase.java index f944cae..d5cfbdb 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/AbstractProtocolStateTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/AbstractProtocolStateTestCase.java @@ -54,7 +54,7 @@ public abstract class AbstractProtocolStateTestCase extends TestCase { super.setUp(); StanzaReceiverRelay receiverRelay = new StanzaReceiverRelay(); - protocolWorker = new ProtocolWorker(receiverRelay); + protocolWorker = new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(receiverRelay)); serverRuntimeContext = new DefaultServerRuntimeContext(serverEnitity, receiverRelay); receiverRelay.setServerRuntimeContext(serverRuntimeContext); serverRuntimeContext.addDictionary(new BaseStreamStanzaDictionary()); diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java index e82c734..514f3f0 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java @@ -58,7 +58,7 @@ public class ProtocolWorkerProcessTestCase extends TestCase { namespaceHandlerDictionary = new NamespaceHandlerDictionary("testNSURI"); StanzaReceiverRelay receiverRelay = new StanzaReceiverRelay(); serverRuntimeContext = new DefaultServerRuntimeContext(serverEnitity, receiverRelay); - protocolWorker = new ProtocolWorker(serverRuntimeContext.getStanzaRelay()); + protocolWorker = new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(receiverRelay)); receiverRelay.setServerRuntimeContext(serverRuntimeContext); serverRuntimeContext.addDictionary(namespaceHandlerDictionary); sessionStateHolder = new SessionStateHolder(); diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerStateAwarenessTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerStateAwarenessTestCase.java index f31cf4e..88aa0b4 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerStateAwarenessTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerStateAwarenessTestCase.java @@ -48,8 +48,9 @@ public class ProtocolWorkerStateAwarenessTestCase extends TestCase { sessionStateHolder = new SessionStateHolder(); Entity serverEnitity = new EntityImpl(null, "vysper-server.org", null); StanzaReceiverRelay receiverRelay = new StanzaReceiverRelay(); - protocolWorker = new ProtocolWorker(receiverRelay); - DefaultServerRuntimeContext serverRuntimeContext = new DefaultServerRuntimeContext(serverEnitity, receiverRelay); + protocolWorker = new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(receiverRelay)); + DefaultServerRuntimeContext serverRuntimeContext = new DefaultServerRuntimeContext(serverEnitity, + receiverRelay); receiverRelay.setServerRuntimeContext(serverRuntimeContext); serverRuntimeContext.addDictionary(new BaseStreamStanzaDictionary()); sessionStateHolder = new SessionStateHolder(); diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java b/server/core/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java index 6624392..ee98878 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java @@ -33,6 +33,7 @@ import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay; import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.ProtocolWorker; import org.apache.vysper.xmpp.protocol.SessionStateHolder; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.writer.StanzaWriter; @@ -115,15 +116,17 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza public TestSessionContext(ServerRuntimeContext serverRuntimeContext, SessionStateHolder sessionStateHolder, StanzaRelay relay) { - super(serverRuntimeContext, new ProtocolWorker(relay), sessionStateHolder); + super(serverRuntimeContext, new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)), + sessionStateHolder); sessionId = serverRuntimeContext.getNextSessionId(); xmlLang = "de"; this.relay = relay; } - + public TestSessionContext(SessionStateHolder sessionStateHolder, StanzaRelay relay) { super(new DefaultServerRuntimeContext(new EntityImpl(null, "test", null), relay, - new MemoryStorageProviderRegistry()), new ProtocolWorker(relay), sessionStateHolder); + new MemoryStorageProviderRegistry()), + new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)), sessionStateHolder); sessionId = serverRuntimeContext.getNextSessionId(); xmlLang = "de"; this.relay = relay; diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java index c0d9aed..2d3c514 100644 --- a/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java +++ b/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java @@ -29,6 +29,7 @@ import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer; import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl; import org.apache.vysper.xmpp.protocol.SessionStateHolder; import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.protocol.StanzaHandler; import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionContext; @@ -62,7 +63,8 @@ public class ComponentStanzaProcessorTestCase { private ResponseStanzaContainer container = new ResponseStanzaContainerImpl(responseStanza); - private ComponentStanzaProcessor processor = new ComponentStanzaProcessor(stanzaRelay); + private ComponentStanzaProcessor processor = new ComponentStanzaProcessor( + new SimpleStanzaHandlerExecutorFactory(stanzaRelay)); @Before public void before() { diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/TestSessionContext.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/TestSessionContext.java index eb30a76..dce5d5e 100644 --- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/TestSessionContext.java +++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/TestSessionContext.java @@ -33,6 +33,7 @@ import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay; import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.ProtocolWorker; import org.apache.vysper.xmpp.protocol.SessionStateHolder; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.AbstractSessionContext; import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext; import org.apache.vysper.xmpp.server.ServerRuntimeContext; @@ -104,7 +105,7 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza * @return */ public static TestSessionContext createWithStanzaReceiverRelay(SessionStateHolder sessionStateHolder, - ServerRuntimeContext serverContext, StanzaReceiverRelay relay) { + ServerRuntimeContext serverContext, StanzaReceiverRelay relay) { relay.setServerRuntimeContext(serverContext); return new TestSessionContext(serverContext, sessionStateHolder, relay); } @@ -118,8 +119,9 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza } public TestSessionContext(ServerRuntimeContext serverRuntimeContext, SessionStateHolder sessionStateHolder, - StanzaRelay relay) { - super(serverRuntimeContext, new ProtocolWorker(relay), sessionStateHolder); + StanzaRelay relay) { + super(serverRuntimeContext, new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)), + sessionStateHolder); sessionId = serverRuntimeContext.getNextSessionId(); xmlLang = "de"; this.relay = relay; @@ -127,7 +129,8 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza public TestSessionContext(SessionStateHolder sessionStateHolder, StanzaRelay relay) { super(new DefaultServerRuntimeContext(new EntityImpl(null, "test", null), relay, - new MemoryStorageProviderRegistry()), new ProtocolWorker(relay), sessionStateHolder); + new MemoryStorageProviderRegistry()), + new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)), sessionStateHolder); sessionId = serverRuntimeContext.getNextSessionId(); xmlLang = "de"; this.relay = relay; diff --git a/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java b/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java index 7931cb7..c56cb8e 100644 --- a/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java +++ b/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java @@ -19,6 +19,9 @@ */ package org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.handler; +import java.util.Collections; +import java.util.List; + import org.apache.vysper.compliance.SpecCompliance; import org.apache.vysper.compliance.SpecCompliant; import org.apache.vysper.xml.fragment.XMLElement; @@ -26,7 +29,6 @@ import org.apache.vysper.xml.fragment.XMLElementBuilder; import org.apache.vysper.xml.fragment.XMLFragment; import org.apache.vysper.xml.fragment.XMLText; import org.apache.vysper.xmpp.addressing.Entity; -import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.PubSubPrivilege; import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.PubSubServiceConfiguration; import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.CollectionNode; @@ -40,9 +42,6 @@ import org.apache.vysper.xmpp.stanza.IQStanzaType; import org.apache.vysper.xmpp.stanza.Stanza; import org.apache.vysper.xmpp.stanza.StanzaBuilder; -import java.util.Collections; -import java.util.List; - /** * This class handles the "publish" use cases for the "pubsub" namespace. * @@ -69,9 +68,11 @@ public class PubSubPublishHandler extends AbstractPubSubGeneralHandler { } /** - * This method takes care of handling the "publish" use-case including all (relevant) error conditions. + * This method takes care of handling the "publish" use-case including all + * (relevant) error conditions. * - * @return the appropriate response stanza (either success or some error condition). + * @return the appropriate response stanza (either success or some error + * condition). */ @Override @SpecCompliance(compliant = { @@ -84,7 +85,8 @@ public class PubSubPublishHandler extends AbstractPubSubGeneralHandler { @SpecCompliant(spec = "xep-0060", section = "7.1.3.4", status = SpecCompliant.ComplianceStatus.NOT_STARTED, coverage = SpecCompliant.ComplianceCoverage.UNSUPPORTED), @SpecCompliant(spec = "xep-0060", section = "7.1.3.5", status = SpecCompliant.ComplianceStatus.NOT_STARTED, coverage = SpecCompliant.ComplianceCoverage.UNSUPPORTED), @SpecCompliant(spec = "xep-0060", section = "7.1.3.6", status = SpecCompliant.ComplianceStatus.NOT_STARTED, coverage = SpecCompliant.ComplianceCoverage.UNSUPPORTED) }) - protected List<Stanza> handleSet(IQStanza stanza, ServerRuntimeContext serverRuntimeContext, SessionContext sessionContext, StanzaBroker stanzaBroker) { + protected List<Stanza> handleSet(IQStanza stanza, ServerRuntimeContext serverRuntimeContext, + SessionContext sessionContext, StanzaBroker stanzaBroker) { Entity serverJID = serviceConfiguration.getDomainJID(); CollectionNode root = serviceConfiguration.getRootNode(); @@ -108,7 +110,8 @@ public class PubSubPublishHandler extends AbstractPubSubGeneralHandler { if (!node.isAuthorized(sender, PubSubPrivilege.PUBLISH)) { // not enough privileges to publish - error condition 1 (7.1.3) - return Collections.singletonList(errorStanzaGenerator.generateInsufficientPrivilegesErrorStanza(sender, serverJID, stanza)); + return Collections.singletonList( + errorStanzaGenerator.generateInsufficientPrivilegesErrorStanza(sender, serverJID, stanza)); } XMLElementBuilder eventItemBuilder = new XMLElementBuilder("item", NamespaceURIs.XEP0060_PUBSUB_EVENT); @@ -137,9 +140,12 @@ public class PubSubPublishHandler extends AbstractPubSubGeneralHandler { /** * This method adds the default "success" elements to the given StanzaBuilder. * - * @param sb the StanzaBuilder to add the success elements. - * @param node the node to which the message was published. - * @param id the id of the published message. + * @param sb + * the StanzaBuilder to add the success elements. + * @param node + * the node to which the message was published. + * @param id + * the id of the published message. */ private void buildSuccessStanza(StanzaBuilder sb, String node, String id) { sb.startInnerElement("publish", NamespaceURIs.XEP0060_PUBSUB); diff --git a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/TestSessionContext.java b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/TestSessionContext.java index aeab842..78f0c30 100644 --- a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/TestSessionContext.java +++ b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/TestSessionContext.java @@ -33,6 +33,7 @@ import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay; import org.apache.vysper.xmpp.delivery.StanzaRelay; import org.apache.vysper.xmpp.protocol.ProtocolWorker; import org.apache.vysper.xmpp.protocol.SessionStateHolder; +import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory; import org.apache.vysper.xmpp.server.AbstractSessionContext; import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext; import org.apache.vysper.xmpp.server.ServerRuntimeContext; @@ -104,7 +105,7 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza * @return */ public static TestSessionContext createWithStanzaReceiverRelay(SessionStateHolder sessionStateHolder, - ServerRuntimeContext serverContext, StanzaReceiverRelay relay) { + ServerRuntimeContext serverContext, StanzaReceiverRelay relay) { relay.setServerRuntimeContext(serverContext); return new TestSessionContext(serverContext, sessionStateHolder, relay); } @@ -118,8 +119,9 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza } public TestSessionContext(ServerRuntimeContext serverRuntimeContext, SessionStateHolder sessionStateHolder, - StanzaRelay relay) { - super(serverRuntimeContext, new ProtocolWorker(relay), sessionStateHolder); + StanzaRelay relay) { + super(serverRuntimeContext, new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)), + sessionStateHolder); sessionId = serverRuntimeContext.getNextSessionId(); xmlLang = "de"; this.relay = relay; @@ -127,7 +129,8 @@ public class TestSessionContext extends AbstractSessionContext implements Stanza public TestSessionContext(SessionStateHolder sessionStateHolder, StanzaRelay relay) { super(new DefaultServerRuntimeContext(new EntityImpl(null, "test", null), relay, - new MemoryStorageProviderRegistry()), new ProtocolWorker(relay), sessionStateHolder); + new MemoryStorageProviderRegistry()), + new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay)), sessionStateHolder); sessionId = serverRuntimeContext.getNextSessionId(); xmlLang = "de"; this.relay = relay;