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 d3831ed The SessionContext can be null in StateAwareProtocolWorker d3831ed is described below commit d3831edbd8ad9d209dd8dfac267a686f889e84c0 Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Sun Sep 8 10:53:35 2019 +0200 The SessionContext can be null in StateAwareProtocolWorker --- .../inbound/DeliveringInternalInboundStanzaRelay.java | 4 ++-- .../org/apache/vysper/xmpp/protocol/ProtocolWorker.java | 2 +- .../vysper/xmpp/protocol/StateAwareProtocolWorker.java | 14 ++++++++------ .../protocol/worker/AbstractStateAwareProtocolWorker.java | 15 ++++++++------- 4 files changed, 19 insertions(+), 16 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 6b71fe0..c1172ff 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 @@ -412,7 +412,7 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage } try { StanzaHandler stanzaHandler = receivingSession.getServerRuntimeContext().getHandler(stanza); - inboundStanzaProtocolWorker.processStanza(receivingSession, sessionStateHolder, stanza, + inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, receivingSession, sessionStateHolder, stanza, stanzaHandler); } catch (Exception e) { relayResult.addProcessingError(new DeliveryException("no relay to non-authenticated sessions")); @@ -450,7 +450,7 @@ public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, Manage } try { StanzaHandler stanzaHandler = sessionContext.getServerRuntimeContext().getHandler(stanza); - inboundStanzaProtocolWorker.processStanza(sessionContext, sessionStateHolder, stanza, + inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, sessionContext, sessionStateHolder, stanza, stanzaHandler); } catch (Exception e) { relayResult.addProcessingError(new DeliveryException(e)); 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 e9139ce..d82a3f9 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 @@ -189,7 +189,7 @@ public class ProtocolWorker implements StanzaProcessor { } try { - stateAwareProtocolWorker.processStanza(sessionContext, sessionStateHolder, stanza, stanzaHandler); + stateAwareProtocolWorker.processStanza(serverRuntimeContext, sessionContext, sessionStateHolder, stanza, stanzaHandler); } catch (Exception e) { logger.error("error executing handler {} with stanza {}", stanzaHandler.getClass().getName(), DenseStanzaLogRenderer.render(stanza)); diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StateAwareProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StateAwareProtocolWorker.java index 4897905..88482b5 100644 --- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StateAwareProtocolWorker.java +++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StateAwareProtocolWorker.java @@ -20,18 +20,20 @@ package org.apache.vysper.xmpp.protocol; import org.apache.vysper.xmpp.server.InternalSessionContext; +import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.stanza.Stanza; /** - * this handler is aware of the session state and can act accordingly. - * for every session state, a dedicated implementation exists. - * the most interesting case is "authenticated", where the "common" XMPP happens (iq, message, presence) - * special treatment has to be given to other states, which cover session handshake and shutdown. + * this handler is aware of the session state and can act accordingly. for every + * session state, a dedicated implementation exists. the most interesting case + * is "authenticated", where the "common" XMPP happens (iq, message, presence) + * special treatment has to be given to other states, which cover session + * handshake and shutdown. * * @author The Apache MINA Project (d...@mina.apache.org) */ public interface StateAwareProtocolWorker { - void processStanza(InternalSessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza, - StanzaHandler stanzaHandler); + void processStanza(ServerRuntimeContext serverRuntimeContext, InternalSessionContext sessionContext, + SessionStateHolder sessionStateHolder, Stanza stanza, 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 9f3e354..bebdefc 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 @@ -28,6 +28,7 @@ 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.InternalSessionContext; +import org.apache.vysper.xmpp.server.ServerRuntimeContext; import org.apache.vysper.xmpp.server.SessionState; import org.apache.vysper.xmpp.stanza.Stanza; @@ -46,24 +47,24 @@ public abstract class AbstractStateAwareProtocolWorker implements StateAwareProt public abstract SessionState getHandledState(); - public void processStanza(InternalSessionContext sessionContext, SessionStateHolder sessionStateHolder, - Stanza stanza, StanzaHandler stanzaHandler) { + public void processStanza(ServerRuntimeContext serverRuntimeContext, InternalSessionContext sessionContext, + SessionStateHolder sessionStateHolder, Stanza stanza, StanzaHandler stanzaHandler) { boolean proceed = checkState(sessionContext, sessionStateHolder, stanza, stanzaHandler); if (!proceed) return; // TODO close stream? - executeHandler(sessionContext, sessionStateHolder, stanza, stanzaHandler); + executeHandler(serverRuntimeContext, sessionContext, sessionStateHolder, stanza, stanzaHandler); } protected boolean checkState(InternalSessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza, StanzaHandler stanzaHandler) { - return getHandledState() == sessionContext.getState(); + return sessionContext != null && getHandledState() == sessionContext.getState(); } - private void executeHandler(InternalSessionContext sessionContext, SessionStateHolder sessionStateHolder, - Stanza stanza, StanzaHandler stanzaHandler) { + private void executeHandler(ServerRuntimeContext serverRuntimeContext, InternalSessionContext sessionContext, + SessionStateHolder sessionStateHolder, Stanza stanza, StanzaHandler stanzaHandler) { try { - stanzaHandlerExecutorFactory.build(stanzaHandler).execute(stanza, sessionContext.getServerRuntimeContext(), + stanzaHandlerExecutorFactory.build(stanzaHandler).execute(stanza, serverRuntimeContext, isProcessingOutboundStanzas(), sessionContext, sessionStateHolder); } catch (ProtocolException e) { ResponseWriter.handleProtocolError(e, sessionContext, stanza);