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 <[email protected]>
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 ([email protected])
*/
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);