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 cc0188c Remove getStanzaProcessor from the ServerRuntimeContext
cc0188c is described below
commit cc0188cd02508415d0cb93f60a78f33e90774b81
Author: Réda Housni Alaoui <[email protected]>
AuthorDate: Sun Aug 25 13:04:17 2019 +0200
Remove getStanzaProcessor from the ServerRuntimeContext
---
.../xmpp/exemples/embeddedwar/VysperListener.java | 4 +-
.../vysper/mina/MinaBackedSessionContext.java | 7 +--
.../java/org/apache/vysper/mina/TCPEndpoint.java | 13 +++--
.../apache/vysper/mina/XmppIoHandlerAdapter.java | 16 +++---
...pringCompatibleDefaultServerRuntimeContext.java | 4 +-
.../vysper/stanzasession/StanzaSessionContext.java | 10 ++--
.../vysper/stanzasession/StanzaSessionFactory.java | 9 +++-
.../vysper/xmpp/protocol/StanzaProcessor.java | 6 +--
.../vysper/xmpp/server/AbstractSessionContext.java | 15 +++---
.../xmpp/server/DefaultServerRuntimeContext.java | 22 ++------
.../org/apache/vysper/xmpp/server/Endpoint.java | 4 ++
.../vysper/xmpp/server/ServerRuntimeContext.java | 2 -
.../org/apache/vysper/xmpp/server/XMPPServer.java | 18 ++++++-
.../server/s2s/DefaultXMPPServerConnector.java | 13 +++--
.../s2s/DefaultXMPPServerConnectorRegistry.java | 10 +++-
.../stanzasession/StanzaSessionTestCase.java | 5 +-
.../vysper/xmpp/server/TestSessionContext.java | 22 ++++----
...DefaultXMPPServerConnectorRegistryTestCase.java | 15 ++++--
.../extension/websockets/JettyXmppWebSocket.java | 8 +--
.../websockets/JettyXmppWebSocketServlet.java | 44 ++++++++++-----
.../extension/websockets/TomcatXmppWebSocket.java | 5 +-
.../websockets/TomcatXmppWebSocketServlet.java | 62 ++++++++++++++--------
.../websockets/WebSocketBackedSessionContext.java | 19 +++++--
.../extension/websockets/WebSocketEndpoint.java | 10 +++-
.../extension/websockets/XmppWebSocketServlet.java | 5 +-
.../websockets/JettyXmppWebSocketServletTest.java | 7 ++-
.../websockets/JettyXmppWebSocketTest.java | 15 +++---
.../websockets/TomcatXmppWebSocketServletTest.java | 9 ++--
.../websockets/TomcatXmppWebSocketTest.java | 15 +++---
.../extension/xep0045_muc/TestSessionContext.java | 22 ++++----
.../xep0060_pubsub/TestSessionContext.java | 22 ++++----
.../xep0124/BoshBackedSessionContext.java | 6 ++-
.../xmpp/extension/xep0124/BoshEndpoint.java | 12 ++++-
.../vysper/xmpp/extension/xep0124/BoshHandler.java | 11 +++-
.../vysper/xmpp/extension/xep0124/BoshServlet.java | 7 +--
.../xep0124/BoshBackedSessionContextTest.java | 16 +++---
.../xmpp/extension/xep0124/BoshHandlerTest.java | 5 +-
37 files changed, 314 insertions(+), 181 deletions(-)
diff --git
a/examples/embedded-war/src/main/java/org/apache/vysper/xmpp/exemples/embeddedwar/VysperListener.java
b/examples/embedded-war/src/main/java/org/apache/vysper/xmpp/exemples/embeddedwar/VysperListener.java
index 896c0f8..6c65860 100644
---
a/examples/embedded-war/src/main/java/org/apache/vysper/xmpp/exemples/embeddedwar/VysperListener.java
+++
b/examples/embedded-war/src/main/java/org/apache/vysper/xmpp/exemples/embeddedwar/VysperListener.java
@@ -34,6 +34,7 @@ import
org.apache.vysper.xmpp.modules.extension.xep0054_vcardtemp.VcardTempModul
import
org.apache.vysper.xmpp.modules.extension.xep0092_software_version.SoftwareVersionModule;
import
org.apache.vysper.xmpp.modules.extension.xep0199_xmppping.XmppPingModule;
import
org.apache.vysper.xmpp.modules.extension.xep0202_entity_time.EntityTimeModule;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerFeatures;
import org.apache.vysper.xmpp.server.XMPPServer;
@@ -47,7 +48,7 @@ public class VysperListener implements ServletContextListener
{
StorageProviderRegistry providerRegistry = new
MemoryStorageProviderRegistry();
- final AccountManagement accountManagement = (AccountManagement)
providerRegistry
+ final AccountManagement accountManagement = providerRegistry
.retrieve(AccountManagement.class);
Entity user1 = EntityImpl.parse("user1@" + domain);
@@ -92,6 +93,7 @@ public class VysperListener implements ServletContextListener
{
// Used by the websocket endpoint, if enabled
sce.getServletContext().setAttribute("org.apache.vysper.xmpp.server.ServerRuntimeContext",
server.getServerRuntimeContext());
+
sce.getServletContext().setAttribute(StanzaProcessor.class.getCanonicalName(),
server.getStanzaProcessor());
sce.getServletContext().setAttribute("vysper", server);
} catch (Exception e) {
e.printStackTrace();
diff --git
a/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
b/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
index f74aa43..32c5cbc 100644
---
a/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
+++
b/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
@@ -28,6 +28,7 @@ import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.vysper.mina.codec.StanzaWriteInfo;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionState;
@@ -54,9 +55,9 @@ public class MinaBackedSessionContext extends
AbstractSessionContext implements
protected CloseFuture closeFuture;
- public MinaBackedSessionContext(ServerRuntimeContext serverRuntimeContext,
SessionStateHolder sessionStateHolder,
- IoSession minaSession) {
- super(serverRuntimeContext, sessionStateHolder);
+ public MinaBackedSessionContext(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor, SessionStateHolder sessionStateHolder,
+ IoSession minaSession) {
+ super(serverRuntimeContext, stanzaProcessor, sessionStateHolder);
this.minaSession = minaSession;
closeFuture = minaSession.getCloseFuture();
closeFuture.addListener(this);
diff --git a/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java
b/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java
index 9246f07..3ff021d 100644
--- a/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java
+++ b/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java
@@ -30,6 +30,7 @@ import
org.apache.mina.filter.executor.OrderedThreadPoolExecutor;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.vysper.mina.codec.XMPPProtocolCodecFactory;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.Endpoint;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -40,6 +41,8 @@ import org.apache.vysper.xmpp.server.ServerRuntimeContext;
public class TCPEndpoint implements Endpoint {
private ServerRuntimeContext serverRuntimeContext;
+
+ private StanzaProcessor stanzaProcessor;
private int port = 5222;
@@ -59,7 +62,12 @@ public class TCPEndpoint implements Endpoint {
public void setServerRuntimeContext(ServerRuntimeContext
serverRuntimeContext) {
this.serverRuntimeContext = serverRuntimeContext;
}
-
+
+ @Override
+ public void setStanzaProcessor(StanzaProcessor stanzaProcessor) {
+ this.stanzaProcessor = stanzaProcessor;
+ }
+
/**
* Returns the configured port if one is provided (non-zero value).
*/
@@ -92,8 +100,7 @@ public class TCPEndpoint implements Endpoint {
filterChainBuilder.addLast("executorFilter", new ExecutorFilter(new
OrderedThreadPoolExecutor(coreThreadCount, maxThreadCount,
threadTimeoutSeconds, TimeUnit.SECONDS)));
acceptor.setFilterChainBuilder(filterChainBuilder);
- XmppIoHandlerAdapter adapter = new XmppIoHandlerAdapter();
- adapter.setServerRuntimeContext(serverRuntimeContext);
+ XmppIoHandlerAdapter adapter = new
XmppIoHandlerAdapter(serverRuntimeContext, stanzaProcessor);
acceptor.setHandler(adapter);
acceptor.setReuseAddress(true);
diff --git
a/server/core/src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java
b/server/core/src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java
index 23e1cbe..cffa8d4 100644
--- a/server/core/src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java
+++ b/server/core/src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java
@@ -27,9 +27,9 @@ import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.write.WriteToClosedSessionException;
import org.apache.mina.filter.FilterEvent;
import org.apache.mina.filter.ssl.SslEvent;
-import org.apache.mina.filter.ssl.SslFilter;
import org.apache.vysper.xml.fragment.XMLText;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.protocol.StreamErrorCondition;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
@@ -40,6 +40,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXParseException;
+import static java.util.Objects.requireNonNull;
+
/**
* handler for client-to-server sessions
* @author The Apache MINA Project ([email protected])
@@ -54,10 +56,12 @@ public class XmppIoHandlerAdapter implements IoHandler {
final Logger logger = LoggerFactory.getLogger(XmppIoHandlerAdapter.class);
- private ServerRuntimeContext serverRuntimeContext;
+ private final ServerRuntimeContext serverRuntimeContext;
+ private final StanzaProcessor stanzaProcessor;
- public void setServerRuntimeContext(ServerRuntimeContext
serverRuntimeContext) {
+ public XmppIoHandlerAdapter(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor) {
this.serverRuntimeContext = serverRuntimeContext;
+ this.stanzaProcessor = stanzaProcessor;
}
@Override
@@ -79,7 +83,7 @@ public class XmppIoHandlerAdapter implements IoHandler {
SessionStateHolder stateHolder = (SessionStateHolder) ioSession
.getAttribute(ATTRIBUTE_VYSPER_SESSIONSTATEHOLDER);
-
serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext,
session, stanza, stateHolder);
+ stanzaProcessor.processStanza(serverRuntimeContext, session, stanza,
stateHolder);
}
private SessionContext extractSession(IoSession ioSession) {
@@ -102,7 +106,7 @@ public class XmppIoHandlerAdapter implements IoHandler {
SessionContext session = extractSession(ioSession);
SessionStateHolder stateHolder = (SessionStateHolder) ioSession
.getAttribute(ATTRIBUTE_VYSPER_SESSIONSTATEHOLDER);
-
serverRuntimeContext.getStanzaProcessor().processTLSEstablished(session,
stateHolder);
+ stanzaProcessor.processTLSEstablished(session, stateHolder);
} else if (event == SslEvent.UNSECURED) {
// TODO
}
@@ -111,7 +115,7 @@ public class XmppIoHandlerAdapter implements IoHandler {
@Override
public void sessionCreated(IoSession ioSession) throws Exception {
SessionStateHolder stateHolder = new SessionStateHolder();
- SessionContext sessionContext = new
MinaBackedSessionContext(serverRuntimeContext, stateHolder, ioSession);
+ SessionContext sessionContext = new
MinaBackedSessionContext(serverRuntimeContext, stanzaProcessor, stateHolder,
ioSession);
ioSession.setAttribute(ATTRIBUTE_VYSPER_SESSION, sessionContext);
ioSession.setAttribute(ATTRIBUTE_VYSPER_SESSIONSTATEHOLDER,
stateHolder);
ioSession.setAttribute(ATTRIBUTE_VYSPER_TERMINATE_REASON,
SessionTerminationCause.CLIENT_BYEBYE);
diff --git
a/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java
b/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java
index 44876a2..86ddac2 100644
---
a/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java
+++
b/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java
@@ -28,6 +28,7 @@ import
org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException;
import org.apache.vysper.xmpp.modules.Module;
import org.apache.vysper.xmpp.protocol.HandlerDictionary;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.AlterableComponentRegistry;
import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
import org.apache.vysper.xmpp.server.ServerFeatures;
@@ -65,8 +66,9 @@ public class SpringCompatibleDefaultServerRuntimeContext
extends DefaultServerRu
public SpringCompatibleDefaultServerRuntimeContext(Entity serverEntity,
ServerFeatures serverFeatures,
List<HandlerDictionary> dictionaries, ResourceRegistry
resourceRegistry,
+ StanzaProcessor stanzaProcessor,
AlterableComponentRegistry componentRegistry) {
- super(serverEntity, new StanzaRelayHull(), componentRegistry,
resourceRegistry, serverFeatures, dictionaries);
+ super(serverEntity, new StanzaRelayHull(), stanzaProcessor,
componentRegistry, resourceRegistry, serverFeatures, dictionaries);
}
public void setStanzaRelay(StanzaRelay stanzaRelay) {
diff --git
a/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java
b/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java
index 48a6698..007e4f1 100644
---
a/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java
+++
b/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java
@@ -23,6 +23,7 @@ import java.util.LinkedList;
import java.util.Queue;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionState;
@@ -38,9 +39,12 @@ import org.apache.vysper.xmpp.writer.StanzaWriter;
public class StanzaSessionContext extends AbstractSessionContext implements
StanzaWriter {
protected Queue<Stanza> stanzaQueue = new LinkedList<Stanza>();
+
+ private final StanzaProcessor stanzaProcessor;
- public StanzaSessionContext(ServerRuntimeContext serverRuntimeContext,
SessionStateHolder sessionStateHolder) {
- super(serverRuntimeContext, sessionStateHolder);
+ public StanzaSessionContext(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor, SessionStateHolder sessionStateHolder) {
+ super(serverRuntimeContext, stanzaProcessor, sessionStateHolder);
+ this.stanzaProcessor = stanzaProcessor;
}
public StanzaWriter getResponseWriter() {
@@ -48,7 +52,7 @@ public class StanzaSessionContext extends
AbstractSessionContext implements Stan
}
public void sendStanzaToServer(Stanza stanza) {
-
serverRuntimeContext.getStanzaProcessor().processStanza(getServerRuntimeContext(),
this, stanza,
+ stanzaProcessor.processStanza(getServerRuntimeContext(), this, stanza,
sessionStateHolder);
}
diff --git
a/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionFactory.java
b/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionFactory.java
index 7b09bf5..23b3627 100644
---
a/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionFactory.java
+++
b/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionFactory.java
@@ -20,6 +20,7 @@
package org.apache.vysper.stanzasession;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.Endpoint;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionState;
@@ -31,6 +32,7 @@ import org.apache.vysper.xmpp.server.SessionState;
public class StanzaSessionFactory implements Endpoint {
private ServerRuntimeContext serverRuntimeContext;
+ private StanzaProcessor stanzaProcessor;
/**
* returns a new session for the server. the session behaves like a
client, but lives within the server JVM
@@ -38,7 +40,7 @@ public class StanzaSessionFactory implements Endpoint {
public StanzaSession createNewSession() {
SessionStateHolder stateHolder = new SessionStateHolder();
stateHolder.setState(SessionState.INITIATED);
- StanzaSessionContext sessionContext = new
StanzaSessionContext(serverRuntimeContext, stateHolder);
+ StanzaSessionContext sessionContext = new
StanzaSessionContext(serverRuntimeContext, stanzaProcessor, stateHolder);
StanzaSession session = new StanzaSession(sessionContext);
return session;
}
@@ -47,6 +49,11 @@ public class StanzaSessionFactory implements Endpoint {
this.serverRuntimeContext = serverRuntimeContext;
}
+ @Override
+ public void setStanzaProcessor(StanzaProcessor stanzaProcessor) {
+ this.stanzaProcessor = stanzaProcessor;
+ }
+
public void start() {
// nothing to do
}
diff --git
a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaProcessor.java
b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaProcessor.java
index 2adc3ba..e7b2952 100644
---
a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaProcessor.java
+++
b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaProcessor.java
@@ -33,8 +33,8 @@ public interface StanzaProcessor {
/**
* processes a stanza as received from a local session
*/
- public void processStanza(ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext, Stanza stanza,
- SessionStateHolder sessionStateHolder);
+ void processStanza(ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext, Stanza stanza,
+ SessionStateHolder sessionStateHolder);
- public void processTLSEstablished(SessionContext sessionContext,
SessionStateHolder sessionStateHolder);
+ void processTLSEstablished(SessionContext sessionContext,
SessionStateHolder sessionStateHolder);
}
diff --git
a/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
b/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
index ae99cfd..848624e 100644
---
a/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
+++
b/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
@@ -25,14 +25,13 @@ import java.util.Map;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.apache.vysper.xmpp.state.resourcebinding.BindException;
import org.apache.vysper.xmpp.uuid.JVMBuiltinUUIDGenerator;
import org.apache.vysper.xmpp.uuid.UUIDGenerator;
import org.apache.vysper.xmpp.writer.StanzaWriter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* provides default session context behavior
@@ -41,9 +40,9 @@ import org.slf4j.LoggerFactory;
*/
public abstract class AbstractSessionContext implements SessionContext {
- private static final Logger logger =
LoggerFactory.getLogger(AbstractSessionContext.class);
+ protected final ServerRuntimeContext serverRuntimeContext;
- protected ServerRuntimeContext serverRuntimeContext;
+ private final StanzaProcessor stanzaProcessor;
protected String sessionId;
@@ -59,10 +58,12 @@ public abstract class AbstractSessionContext implements
SessionContext {
private boolean serverToServer = false;
- private Map<String, Object> attributeMap = new HashMap<String, Object>();
+ private Map<String, Object> attributeMap = new HashMap<>();
- public AbstractSessionContext(ServerRuntimeContext serverRuntimeContext,
SessionStateHolder sessionStateHolder) {
+ public AbstractSessionContext(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor,
+ SessionStateHolder sessionStateHolder) {
this.serverRuntimeContext = serverRuntimeContext;
+ this.stanzaProcessor = stanzaProcessor;
sessionId = serverRuntimeContext.getNextSessionId();
serverEntity = serverRuntimeContext.getServerEntity();
xmlLang = serverRuntimeContext.getDefaultXMLLang();
@@ -140,7 +141,7 @@ public abstract class AbstractSessionContext implements
SessionContext {
|| terminationCause ==
SessionTerminationCause.CONNECTION_ABORT) {
if (getState().equals(SessionState.AUTHENTICATED)) {
Stanza unavailableStanza =
StanzaBuilder.createUnavailablePresenceStanza(null, terminationCause);
-
serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext,
this, unavailableStanza,
+ stanzaProcessor.processStanza(serverRuntimeContext, this,
unavailableStanza,
sessionStateHolder);
}
} else if (terminationCause ==
SessionTerminationCause.SERVER_SHUTDOWN) {
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 87aac14..a7ff5f7 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
@@ -98,12 +98,6 @@ public class DefaultServerRuntimeContext implements
ServerRuntimeContext, Module
// basic services the server is using...
/**
- * 'input stream': receives stanzas issued by client sessions to be
handled by
- * the server
- */
- private final StanzaProcessor stanzaProcessor;
-
- /**
* 'output stream': receives stanzas issued by a session, which are going
to
* other sessions/servers
*/
@@ -141,17 +135,16 @@ public class DefaultServerRuntimeContext implements
ServerRuntimeContext, Module
private final AlterableComponentRegistry componentRegistry;
private final SimpleEventBus eventBus;
-
+
private final ComponentStanzaProcessorFactory
componentStanzaProcessorFactory;
- public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay
stanzaRelay,
+ public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay
stanzaRelay, StanzaProcessor stanzaProcessor,
AlterableComponentRegistry componentRegistry, ResourceRegistry
resourceRegistry,
ServerFeatures serverFeatures, List<HandlerDictionary>
dictionaries) {
this.serverEntity = serverEntity;
this.stanzaRelay = stanzaRelay;
- this.stanzaProcessor = new ProtocolWorker(stanzaRelay);
this.componentRegistry = requireNonNull(componentRegistry);
- this.serverConnectorRegistry = new
DefaultXMPPServerConnectorRegistry(this, stanzaRelay);
+ this.serverConnectorRegistry = new
DefaultXMPPServerConnectorRegistry(this, stanzaRelay, stanzaProcessor);
this.stanzaHandlerLookup = new StanzaHandlerLookup(this);
this.eventBus = new SimpleEventBus();
this.serverFeatures = serverFeatures;
@@ -168,8 +161,8 @@ public class DefaultServerRuntimeContext implements
ServerRuntimeContext, Module
}
public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay
stanzaRelay) {
- this(serverEntity, stanzaRelay, new
SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(),
- new ServerFeatures(), Collections.emptyList());
+ this(serverEntity, stanzaRelay, new ProtocolWorker(stanzaRelay), new
SimpleComponentRegistry(serverEntity),
+ new DefaultResourceRegistry(), new ServerFeatures(),
Collections.emptyList());
}
/**
@@ -203,11 +196,6 @@ public class DefaultServerRuntimeContext implements
ServerRuntimeContext, Module
return "en_US"; // TODO must be configurable as of RFC3920
}
- @Override
- public StanzaProcessor getStanzaProcessor() {
- return stanzaProcessor;
- }
-
public StanzaRelay getStanzaRelay() {
return stanzaRelay;
}
diff --git
a/server/core/src/main/java/org/apache/vysper/xmpp/server/Endpoint.java
b/server/core/src/main/java/org/apache/vysper/xmpp/server/Endpoint.java
index 4a1a75c..50f95c0 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/Endpoint.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/Endpoint.java
@@ -19,6 +19,8 @@
*/
package org.apache.vysper.xmpp.server;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
+
import java.io.IOException;
/**
@@ -33,6 +35,8 @@ import java.io.IOException;
public interface Endpoint {
void setServerRuntimeContext(ServerRuntimeContext serverRuntimeContext);
+
+ void setStanzaProcessor(StanzaProcessor stanzaProcessor);
void start() throws IOException;
diff --git
a/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
b/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
index 1cebe0d..d73149a 100644
---
a/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
+++
b/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
@@ -54,8 +54,6 @@ public interface ServerRuntimeContext {
String getDefaultXMLLang();
- StanzaProcessor getStanzaProcessor();
-
ServerFeatures getServerFeatures();
SSLContext getSslContext();
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 0176190..f516e0d 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
@@ -47,6 +47,8 @@ import
org.apache.vysper.xmpp.modules.extension.xep0160_offline_storage.OfflineS
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.StanzaProcessor;
import org.apache.vysper.xmpp.state.resourcebinding.DefaultResourceRegistry;
import org.apache.vysper.xmpp.state.resourcebinding.ResourceRegistry;
@@ -69,6 +71,8 @@ public class XMPPServer {
private String serverDomain;
private DefaultServerRuntimeContext serverRuntimeContext;
+
+ private StanzaProcessor stanzaProcessor;
private StorageProviderRegistry storageProviderRegistry;
@@ -193,7 +197,9 @@ public class XMPPServer {
stanzaRelayBroker.setInternalRelay(internalStanzaRelay);
stanzaRelayBroker.setExternalRelay(externalStanzaRelay);
- serverRuntimeContext = new DefaultServerRuntimeContext(serverEntity,
stanzaRelayBroker, componentRegistry,
+ stanzaProcessor = new ProtocolWorker(stanzaRelayBroker);
+
+ serverRuntimeContext = new DefaultServerRuntimeContext(serverEntity,
stanzaRelayBroker, stanzaProcessor, componentRegistry,
resourceRegistry, serverFeatures, dictionaries);
serverRuntimeContext.setStorageProviderRegistry(storageProviderRegistry);
serverRuntimeContext.setTlsContextFactory(tlsContextFactory);
@@ -213,8 +219,14 @@ public class XMPPServer {
if (endpoints.size() == 0)
throw new IllegalStateException("server must have at least one
endpoint");
+
+ /*
+ 'input stream': receives stanzas issued by client sessions to be
handled by
+ the server
+ */
for (Endpoint endpoint : endpoints) {
endpoint.setServerRuntimeContext(serverRuntimeContext);
+ endpoint.setStanzaProcessor(stanzaProcessor);
endpoint.start();
}
}
@@ -260,4 +272,8 @@ public class XMPPServer {
public ServerRuntimeContext getServerRuntimeContext() {
return serverRuntimeContext;
}
+
+ public StanzaProcessor getStanzaProcessor(){
+ return stanzaProcessor;
+ }
}
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 2047ad1..54aebd4 100644
---
a/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java
+++
b/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java
@@ -52,6 +52,7 @@ 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.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.server.SessionState;
@@ -78,6 +79,8 @@ public class DefaultXMPPServerConnector implements
XmppPingListener, XMPPServerC
private final ServerRuntimeContext serverRuntimeContext;
private final StanzaRelay stanzaRelay;
+
+ private final StanzaProcessor stanzaProcessor;
private MinaBackedSessionContext sessionContext;
@@ -108,9 +111,11 @@ public class DefaultXMPPServerConnector implements
XmppPingListener, XMPPServerC
protected final CountDownLatch authenticatedLatch = new CountDownLatch(1);
public DefaultXMPPServerConnector(Entity remoteServer,
ServerRuntimeContext serverRuntimeContext,
- StanzaRelay stanzaRelay, SessionContext dialbackSessionContext,
- SessionStateHolder dialbackSessionStateHolder) {
+ StanzaRelay stanzaRelay, StanzaProcessor
stanzaProcessor,
+ SessionContext dialbackSessionContext,
+ SessionStateHolder
dialbackSessionStateHolder) {
this.serverRuntimeContext = serverRuntimeContext;
+ this.stanzaProcessor = stanzaProcessor;
this.stanzaRelay = stanzaRelay;
this.remoteServer = remoteServer;
this.dialbackSessionContext = dialbackSessionContext;
@@ -279,7 +284,7 @@ public class DefaultXMPPServerConnector implements
XmppPingListener, XMPPServerC
return;
}
-
serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext,
sessionContext, stanza,
+ stanzaProcessor.processStanza(serverRuntimeContext,
sessionContext, stanza,
sessionStateHolder);
}
}
@@ -301,7 +306,7 @@ public class DefaultXMPPServerConnector implements
XmppPingListener, XMPPServerC
public void handleSessionOpened(IoSession session) {
LOG.info("XMPP server session opened to {}", remoteServer);
- sessionContext = new MinaBackedSessionContext(serverRuntimeContext,
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 a463d99..f1694d2 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
@@ -28,6 +28,7 @@ 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.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.slf4j.Logger;
@@ -47,10 +48,15 @@ public class DefaultXMPPServerConnectorRegistry implements
XMPPServerConnectorRe
private final Map<Entity, XMPPServerConnector> connectors = new
ConcurrentHashMap<>();
private final StanzaRelay stanzaRelay;
+
+ private final StanzaProcessor stanzaProcessor;
- public DefaultXMPPServerConnectorRegistry(ServerRuntimeContext
serverRuntimeContext, StanzaRelay stanzaRelay) {
+ public DefaultXMPPServerConnectorRegistry(ServerRuntimeContext
serverRuntimeContext,
+ StanzaRelay stanzaRelay,
+ StanzaProcessor stanzaProcessor)
{
this.serverRuntimeContext = serverRuntimeContext;
this.stanzaRelay = stanzaRelay;
+ this.stanzaProcessor = stanzaProcessor;
}
/*
@@ -98,7 +104,7 @@ public class DefaultXMPPServerConnectorRegistry implements
XMPPServerConnectorRe
protected XMPPServerConnector createConnector(Entity otherServer,
ServerRuntimeContext serverRuntimeContext,
SessionContext dialbackSessionContext, SessionStateHolder
dialbackSessionStateHolder) {
- return new DefaultXMPPServerConnector(otherServer,
serverRuntimeContext, stanzaRelay, dialbackSessionContext,
+ return new DefaultXMPPServerConnector(otherServer,
serverRuntimeContext, stanzaRelay, 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 e0af08c..73556f6 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
@@ -28,6 +28,7 @@ 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.server.DefaultServerRuntimeContext;
import org.apache.vysper.xmpp.server.ServerFeatures;
import org.apache.vysper.xmpp.server.SimpleComponentRegistry;
@@ -56,13 +57,15 @@ 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, new SimpleComponentRegistry(serverEntity), new
DefaultResourceRegistry(), new ServerFeatures(), dictionaries);
+ relay, protocolWorker, new
SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(), new
ServerFeatures(), dictionaries);
relay.setServerRuntimeContext(serverContext);
sessionFactory = new StanzaSessionFactory();
sessionFactory.setServerRuntimeContext(serverContext);
+ sessionFactory.setStanzaProcessor(protocolWorker);
}
public void testHandshake() {
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 a9343f2..6624392 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
@@ -31,6 +31,7 @@ import org.apache.vysper.xmpp.delivery.RecordingStanzaRelay;
import org.apache.vysper.xmpp.delivery.StanzaReceiverQueue;
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.stanza.Stanza;
import org.apache.vysper.xmpp.writer.StanzaWriter;
@@ -109,21 +110,20 @@ public class TestSessionContext extends
AbstractSessionContext implements Stanza
}
public TestSessionContext(SessionStateHolder sessionStateHolder) {
- super(new DefaultServerRuntimeContext(new EntityImpl(null, "test",
null), new RecordingStanzaRelay(),
- new MemoryStorageProviderRegistry()), sessionStateHolder);
- sessionId = serverRuntimeContext.getNextSessionId();
- xmlLang = "de";
- this.relay = ((DefaultServerRuntimeContext)
serverRuntimeContext).getStanzaRelay();
- }
-
- public TestSessionContext(SessionStateHolder sessionStateHolder,
StanzaReceiverRelay relay) {
- this(new DefaultServerRuntimeContext(new EntityImpl(null, "test",
null), new RecordingStanzaRelay(),
- new MemoryStorageProviderRegistry()), sessionStateHolder,
relay);
+ this(sessionStateHolder, new RecordingStanzaRelay());
}
public TestSessionContext(ServerRuntimeContext serverRuntimeContext,
SessionStateHolder sessionStateHolder,
StanzaRelay relay) {
- super(serverRuntimeContext, sessionStateHolder);
+ super(serverRuntimeContext, new ProtocolWorker(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);
sessionId = serverRuntimeContext.getNextSessionId();
xmlLang = "de";
this.relay = relay;
diff --git
a/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistryTestCase.java
b/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistryTestCase.java
index 91ece0a..0b2326d 100644
---
a/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistryTestCase.java
+++
b/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistryTestCase.java
@@ -60,7 +60,8 @@ public class DefaultXMPPServerConnectorRegistryTestCase {
@Test
public void connectorShouldBeReused() throws
RemoteServerNotFoundException, RemoteServerTimeoutException {
- DefaultXMPPServerConnectorRegistry registry = new
DefaultXMPPServerConnectorRegistry(serverRuntimeContext, null) {
+ DefaultXMPPServerConnectorRegistry registry =
+ new DefaultXMPPServerConnectorRegistry(serverRuntimeContext,
null, null) {
@Override
protected XMPPServerConnector createConnector(Entity otherServer,
ServerRuntimeContext serverRuntimeContext, SessionContext
dialbackSessionContext,
@@ -83,7 +84,8 @@ public class DefaultXMPPServerConnectorRegistryTestCase {
@Test
public void dontReuseClosedConnector() throws
RemoteServerNotFoundException, RemoteServerTimeoutException {
- DefaultXMPPServerConnectorRegistry registry = new
DefaultXMPPServerConnectorRegistry(serverRuntimeContext, null) {
+ DefaultXMPPServerConnectorRegistry registry =
+ new DefaultXMPPServerConnectorRegistry(serverRuntimeContext,
null, null) {
@Override
protected XMPPServerConnector createConnector(Entity otherServer,
ServerRuntimeContext serverRuntimeContext, SessionContext
dialbackSessionContext,
@@ -104,7 +106,8 @@ public class DefaultXMPPServerConnectorRegistryTestCase {
@Test
public void dontReuseConnectorToDifferentServers() throws
RemoteServerNotFoundException, RemoteServerTimeoutException {
- DefaultXMPPServerConnectorRegistry registry = new
DefaultXMPPServerConnectorRegistry(serverRuntimeContext, null) {
+ DefaultXMPPServerConnectorRegistry registry =
+ new DefaultXMPPServerConnectorRegistry(serverRuntimeContext,
null, null) {
@Override
protected XMPPServerConnector createConnector(Entity otherServer,
ServerRuntimeContext serverRuntimeContext, SessionContext
dialbackSessionContext,
@@ -123,7 +126,8 @@ public class DefaultXMPPServerConnectorRegistryTestCase {
@Test
public void createDialbackConnector() throws
RemoteServerNotFoundException, RemoteServerTimeoutException {
- DefaultXMPPServerConnectorRegistry registry = new
DefaultXMPPServerConnectorRegistry(serverRuntimeContext, null) {
+ DefaultXMPPServerConnectorRegistry registry =
+ new DefaultXMPPServerConnectorRegistry(serverRuntimeContext,
null, null) {
@Override
protected XMPPServerConnector createConnector(Entity otherServer,
ServerRuntimeContext serverRuntimeContext, SessionContext
dialbackSessionContext,
@@ -143,7 +147,8 @@ public class DefaultXMPPServerConnectorRegistryTestCase {
@Test
public void close() throws RemoteServerNotFoundException,
RemoteServerTimeoutException {
- DefaultXMPPServerConnectorRegistry registry = new
DefaultXMPPServerConnectorRegistry(serverRuntimeContext, null) {
+ DefaultXMPPServerConnectorRegistry registry =
+ new DefaultXMPPServerConnectorRegistry(serverRuntimeContext,
null, null) {
@Override
protected XMPPServerConnector createConnector(Entity otherServer,
ServerRuntimeContext serverRuntimeContext, SessionContext
dialbackSessionContext,
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocket.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocket.java
index 014f0f5..8570a07 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocket.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocket.java
@@ -21,6 +21,7 @@ package org.apache.vysper.xmpp.extension.websockets;
import java.io.IOException;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.eclipse.jetty.websocket.WebSocket;
@@ -34,14 +35,14 @@ import org.slf4j.LoggerFactory;
*/
public class JettyXmppWebSocket implements WebSocket, WebSocket.OnTextMessage,
Outbound {
-
private final static Logger LOG =
LoggerFactory.getLogger(JettyXmppWebSocket.class);
private WebSocketBackedSessionContext sessionContext;
+
private Connection outbound;
- public JettyXmppWebSocket(ServerRuntimeContext serverRuntimeContext) {
- this.sessionContext = new
WebSocketBackedSessionContext(serverRuntimeContext, this);
+ public JettyXmppWebSocket(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor) {
+ this.sessionContext = new
WebSocketBackedSessionContext(serverRuntimeContext, stanzaProcessor, this);
}
/**
@@ -54,7 +55,6 @@ public class JettyXmppWebSocket implements WebSocket,
WebSocket.OnTextMessage, O
sessionContext.onOpen();
}
-
public void onMessage(String data) {
LOG.info("< " + data);
sessionContext.onMessage(data);
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServlet.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServlet.java
index 4b77cc3..8fd7edf 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServlet.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServlet.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;
@@ -33,9 +34,11 @@ import org.slf4j.LoggerFactory;
/**
* Servlet for initiating websocket connections for Jetty.
* <p>
- * When creating this servlet from web.xml, the Vysper server needs to be
started beforehand
- * (e.g. from a {@link ServletContextListener} and the {@link
ServerRuntimeContext} needs to be
- * added as an attribute in the {@link ServletContext} with the key
"org.apache.vysper.xmpp.server.ServerRuntimeContext".
+ * When creating this servlet from web.xml, the Vysper server needs to be
+ * started beforehand (e.g. from a {@link ServletContextListener} and the
+ * {@link ServerRuntimeContext} needs to be added as an attribute in the
+ * {@link ServletContext} with the key
+ * "org.apache.vysper.xmpp.server.ServerRuntimeContext".
* </p>
*
* @author The Apache MINA Project ([email protected])
@@ -43,23 +46,28 @@ import org.slf4j.LoggerFactory;
public class JettyXmppWebSocketServlet extends WebSocketServlet {
/**
- * The attribute key for the {@link ServerRuntimeContext} in {@link
ServletContext}
+ * The attribute key for the {@link ServerRuntimeContext} in
+ * {@link ServletContext}
*/
public static final String SERVER_RUNTIME_CONTEXT_ATTRIBUTE =
"org.apache.vysper.xmpp.server.ServerRuntimeContext";
private final static Logger LOG =
LoggerFactory.getLogger(JettyXmppWebSocketServlet.class);
private static final long serialVersionUID = 197413099255392883L;
+
private static final String SUB_PROTOCOL = "xmpp";
private ServerRuntimeContext serverRuntimeContext;
+ private StanzaProcessor stanzaProcessor;
+
public JettyXmppWebSocketServlet() {
// default cstr needed
}
- public JettyXmppWebSocketServlet(ServerRuntimeContext
serverRuntimeContext) {
+ public JettyXmppWebSocketServlet(ServerRuntimeContext
serverRuntimeContext, StanzaProcessor stanzaProcessor) {
this.serverRuntimeContext = serverRuntimeContext;
+ this.stanzaProcessor = stanzaProcessor;
}
/**
@@ -69,10 +77,21 @@ public class JettyXmppWebSocketServlet extends
WebSocketServlet {
public void init() throws ServletException {
super.init();
- if(serverRuntimeContext == null) {
- serverRuntimeContext = (ServerRuntimeContext)
getServletContext().getAttribute(SERVER_RUNTIME_CONTEXT_ATTRIBUTE);
- if(serverRuntimeContext == null) {
- throw new RuntimeException("Failed to get Vysper
ServerRuntimeContext from servlet context attribute \"" +
SERVER_RUNTIME_CONTEXT_ATTRIBUTE + "\"");
+ if (serverRuntimeContext == null) {
+ serverRuntimeContext = (ServerRuntimeContext) getServletContext()
+ .getAttribute(SERVER_RUNTIME_CONTEXT_ATTRIBUTE);
+ if (serverRuntimeContext == null) {
+ throw new RuntimeException("Failed to get Vysper
ServerRuntimeContext from servlet context attribute \""
+ + SERVER_RUNTIME_CONTEXT_ATTRIBUTE + "\"");
+ }
+ }
+
+ if (stanzaProcessor == null) {
+ stanzaProcessor = (StanzaProcessor) getServletContext()
+ .getAttribute(StanzaProcessor.class.getCanonicalName());
+ if (stanzaProcessor == null) {
+ throw new RuntimeException("Failed to get Vysper
StanzaProcessor from servlet context attribute \""
+ + StanzaProcessor.class.getCanonicalName() + "\"");
}
}
}
@@ -80,11 +99,12 @@ public class JettyXmppWebSocketServlet extends
WebSocketServlet {
/**
* {@inheritDoc}
*
- * Will return null if the client does not provide the correct websocket
sub protocol. "xmpp" is required.
+ * Will return null if the client does not provide the correct websocket
sub
+ * protocol. "xmpp" is required.
*/
public WebSocket doWebSocketConnect(HttpServletRequest request, String
protocol) {
- if(SUB_PROTOCOL.equals(protocol)) {
- JettyXmppWebSocket sessionContext = new
JettyXmppWebSocket(serverRuntimeContext);
+ if (SUB_PROTOCOL.equals(protocol)) {
+ JettyXmppWebSocket sessionContext = new
JettyXmppWebSocket(serverRuntimeContext, stanzaProcessor);
return sessionContext;
} else {
LOG.warn("Unsupported WebSocket sub protocol, must be \"xmpp\"");
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocket.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocket.java
index 4776c09..bb92b82 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocket.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocket.java
@@ -25,6 +25,7 @@ import java.nio.CharBuffer;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.WsOutbound;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.slf4j.Logger;
@@ -42,8 +43,8 @@ public class TomcatXmppWebSocket extends MessageInbound
implements Outbound {
private WebSocketBackedSessionContext sessionContext;
private WsOutbound outbound;
- public TomcatXmppWebSocket(ServerRuntimeContext serverRuntimeContext) {
- this.sessionContext = new
WebSocketBackedSessionContext(serverRuntimeContext, this);
+ public TomcatXmppWebSocket(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor) {
+ this.sessionContext = new
WebSocketBackedSessionContext(serverRuntimeContext, stanzaProcessor, this);
}
/**
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServlet.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServlet.java
index ca901ee..c628b9a 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServlet.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServlet.java
@@ -27,16 +27,18 @@ import javax.servlet.ServletException;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
- * Servlet for initiating websocket connections in Apache Tomcat. Requires
Tomcat 7.0.27 or later.
+ * Servlet for initiating websocket connections in Apache Tomcat. Requires
+ * Tomcat 7.0.27 or later.
* <p>
- * When creating this servlet from web.xml, the Vysper server needs to be
started beforehand
- * (e.g. from a {@link ServletContextListener} and the {@link
ServerRuntimeContext} needs to be
- * added as an attribute in the {@link ServletContext} with the key
"org.apache.vysper.xmpp.server.ServerRuntimeContext".
+ * When creating this servlet from web.xml, the Vysper server needs to be
+ * started beforehand (e.g. from a {@link ServletContextListener} and the
+ * {@link ServerRuntimeContext} needs to be added as an attribute in the
+ * {@link ServletContext} with the key
+ * "org.apache.vysper.xmpp.server.ServerRuntimeContext".
* </p>
*
* @author The Apache MINA Project ([email protected])
@@ -44,23 +46,26 @@ import org.slf4j.LoggerFactory;
public class TomcatXmppWebSocketServlet extends WebSocketServlet {
/**
- * The attribute key for the {@link ServerRuntimeContext} in {@link
ServletContext}
+ * The attribute key for the {@link ServerRuntimeContext} in
+ * {@link ServletContext}
*/
public static final String SERVER_RUNTIME_CONTEXT_ATTRIBUTE =
"org.apache.vysper.xmpp.server.ServerRuntimeContext";
- private final static Logger LOG =
LoggerFactory.getLogger(TomcatXmppWebSocketServlet.class);
-
private static final long serialVersionUID = 197413099255392884L;
+
private static final String SUB_PROTOCOL = "xmpp";
private ServerRuntimeContext serverRuntimeContext;
+ private StanzaProcessor stanzaProcessor;
+
public TomcatXmppWebSocketServlet() {
// default cstr needed
}
- public TomcatXmppWebSocketServlet(ServerRuntimeContext
serverRuntimeContext) {
+ public TomcatXmppWebSocketServlet(ServerRuntimeContext
serverRuntimeContext, StanzaProcessor stanzaProcessor) {
this.serverRuntimeContext = serverRuntimeContext;
+ this.stanzaProcessor = stanzaProcessor;
}
/**
@@ -70,10 +75,21 @@ public class TomcatXmppWebSocketServlet extends
WebSocketServlet {
public void init() throws ServletException {
super.init();
- if(serverRuntimeContext == null) {
- serverRuntimeContext = (ServerRuntimeContext)
getServletContext().getAttribute(SERVER_RUNTIME_CONTEXT_ATTRIBUTE);
- if(serverRuntimeContext == null) {
- throw new RuntimeException("Failed to get Vysper
ServerRuntimeContext from servlet context attribute \"" +
SERVER_RUNTIME_CONTEXT_ATTRIBUTE + "\"");
+ if (serverRuntimeContext == null) {
+ serverRuntimeContext = (ServerRuntimeContext) getServletContext()
+ .getAttribute(SERVER_RUNTIME_CONTEXT_ATTRIBUTE);
+ if (serverRuntimeContext == null) {
+ throw new RuntimeException("Failed to get Vysper
ServerRuntimeContext from servlet context attribute \""
+ + SERVER_RUNTIME_CONTEXT_ATTRIBUTE + "\"");
+ }
+ }
+
+ if (stanzaProcessor == null) {
+ stanzaProcessor = (StanzaProcessor) getServletContext()
+ .getAttribute(StanzaProcessor.class.getCanonicalName());
+ if (stanzaProcessor == null) {
+ throw new RuntimeException("Failed to get Vysper
StanzaProcessor from servlet context attribute \""
+ + StanzaProcessor.class.getCanonicalName() + "\"");
}
}
}
@@ -86,17 +102,19 @@ public class TomcatXmppWebSocketServlet extends
WebSocketServlet {
/**
* {@inheritDoc}
*
- * Will return null if the client does not provide the correct websocket
sub protocol. "xmpp" is required.
+ * Will return null if the client does not provide the correct websocket
sub
+ * protocol. "xmpp" is required.
*/
@Override
protected StreamInbound createWebSocketInbound(String subProtocol) {
// TODO subProtocol is always null on Tomcat 7.0.27, reactivate check
when fixed
- //if (SUB_PROTOCOL.equals(subProtocol)) {
- TomcatXmppWebSocket sessionContext = new
TomcatXmppWebSocket(serverRuntimeContext);
- return sessionContext;
- //} else {
- // LOG.warn("Unsupported websocket sub protocol, must be \"xmpp\",
but was \"" + subProtocol + "\"");
- // return null;
- //}
+ // if (SUB_PROTOCOL.equals(subProtocol)) {
+ TomcatXmppWebSocket sessionContext = new
TomcatXmppWebSocket(serverRuntimeContext, stanzaProcessor);
+ return sessionContext;
+ // } else {
+ // LOG.warn("Unsupported websocket sub protocol, must be \"xmpp\", but
was \"" +
+ // subProtocol + "\"");
+ // return null;
+ // }
}
}
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
index dfe781a..c96c446 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
@@ -33,6 +33,7 @@ import org.apache.vysper.xml.sax.NonBlockingXMLReader;
import org.apache.vysper.xml.sax.impl.DefaultNonBlockingXMLReader;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.protocol.StreamErrorCondition;
import org.apache.vysper.xmpp.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -51,13 +52,19 @@ import org.xml.sax.SAXException;
public class WebSocketBackedSessionContext extends AbstractSessionContext
implements XMLElementListener, StanzaWriter {
private final static Charset CHARSET = Charset.forName("UTF-8");
+
private final static CharsetDecoder CHARSET_DECODER = CHARSET.newDecoder();
private NonBlockingXMLReader xmlReader = new DefaultNonBlockingXMLReader();
+
+ private final StanzaProcessor stanzaProcessor;
+
private Outbound outbound;
- public WebSocketBackedSessionContext(ServerRuntimeContext
serverRuntimeContext, Outbound outbound) {
- super(serverRuntimeContext, new SessionStateHolder());
+ public WebSocketBackedSessionContext(ServerRuntimeContext
serverRuntimeContext, StanzaProcessor stanzaProcessor,
+ Outbound outbound) {
+ super(serverRuntimeContext, stanzaProcessor, new SessionStateHolder());
+ this.stanzaProcessor = stanzaProcessor;
this.outbound = outbound;
@@ -104,7 +111,8 @@ public class WebSocketBackedSessionContext extends
AbstractSessionContext implem
*/
public void element(XMLElement element) {
// on parsed stanzas
-
serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext,
this, (Stanza) element, sessionStateHolder);
+ stanzaProcessor.processStanza(serverRuntimeContext, this, (Stanza)
element,
+ sessionStateHolder);
}
public void onOpen() {
@@ -120,7 +128,7 @@ public class WebSocketBackedSessionContext extends
AbstractSessionContext implem
throw new RuntimeException(e);
} catch (SAXException e) {
Stanza errorStanza =
ServerErrorResponses.getStreamError(StreamErrorCondition.XML_NOT_WELL_FORMED,
- getXMLLang(), "Stanza not well-formed", null);
+ getXMLLang(), "Stanza not well-formed", null);
write(errorStanza);
endSession(SessionTerminationCause.STREAM_ERROR);
}
@@ -136,7 +144,8 @@ public class WebSocketBackedSessionContext extends
AbstractSessionContext implem
public void write(Stanza stanza) {
// handle stream open
Renderer renderer = new Renderer(stanza);
- if("stream".equals(stanza.getName()) &&
NamespaceURIs.HTTP_ETHERX_JABBER_ORG_STREAMS.equals(stanza.getNamespaceURI())) {
+ if ("stream".equals(stanza.getName())
+ &&
NamespaceURIs.HTTP_ETHERX_JABBER_ORG_STREAMS.equals(stanza.getNamespaceURI())) {
// stream:stream and stream:features comes at the same time, split
them
write(renderer.getOpeningElement());
write(renderer.getElementContent());
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
index b8b59f1..b4b0473 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
@@ -21,6 +21,7 @@ package org.apache.vysper.xmpp.extension.websockets;
import java.io.IOException;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.Endpoint;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.eclipse.jetty.server.Connector;
@@ -45,6 +46,8 @@ public class WebSocketEndpoint implements Endpoint {
protected final static Logger logger =
LoggerFactory.getLogger(WebSocketEndpoint.class);
protected ServerRuntimeContext serverRuntimeContext;
+
+ private StanzaProcessor stanzaProcessor;
protected int port = 8080;
@@ -65,6 +68,11 @@ public class WebSocketEndpoint implements Endpoint {
this.serverRuntimeContext = serverRuntimeContext;
}
+ @Override
+ public void setStanzaProcessor(StanzaProcessor stanzaProcessor) {
+ this.stanzaProcessor = stanzaProcessor;
+ }
+
/**
* Set the port on which the endpoint will listen for incoming traffic.
* Defaults to 8080.
@@ -142,7 +150,7 @@ public class WebSocketEndpoint implements Endpoint {
ServletContextHandler servletContext = new
ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath(contextPath);
- JettyXmppWebSocketServlet wsServlet = new
JettyXmppWebSocketServlet(serverRuntimeContext);
+ JettyXmppWebSocketServlet wsServlet = new
JettyXmppWebSocketServlet(serverRuntimeContext, stanzaProcessor);
servletContext.addServlet(new ServletHolder(wsServlet), "/ws");
return servletContext;
diff --git
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
index 9e7a60d..5376983 100644
---
a/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
+++
b/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
@@ -19,6 +19,7 @@
*/
package org.apache.vysper.xmpp.extension.websockets;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -34,7 +35,7 @@ public class XmppWebSocketServlet extends
JettyXmppWebSocketServlet {
super();
}
- public XmppWebSocketServlet(ServerRuntimeContext serverRuntimeContext) {
- super(serverRuntimeContext);
+ public XmppWebSocketServlet(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor) {
+ super(serverRuntimeContext, stanzaProcessor);
}
}
diff --git
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServletTest.java
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServletTest.java
index de61107..3c8b7f9 100644
---
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServletTest.java
+++
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketServletTest.java
@@ -23,6 +23,7 @@ import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.eclipse.jetty.websocket.WebSocket;
import org.junit.Assert;
@@ -36,11 +37,13 @@ import org.mockito.Mockito;
public class JettyXmppWebSocketServletTest {
private ServerRuntimeContext serverRuntimeContext =
Mockito.mock(ServerRuntimeContext.class);
+ private StanzaProcessor stanzaProcessor =
Mockito.mock(StanzaProcessor.class);
@Test
public void doWebSocketConnectWithDefaultCstr() throws ServletException {
ServletContext servletContext = Mockito.mock(ServletContext.class);
Mockito.when(servletContext.getAttribute(JettyXmppWebSocketServlet.SERVER_RUNTIME_CONTEXT_ATTRIBUTE)).thenReturn(serverRuntimeContext);
+
Mockito.when(servletContext.getAttribute(StanzaProcessor.class.getCanonicalName())).thenReturn(stanzaProcessor);
ServletConfig servletConfig = Mockito.mock(ServletConfig.class);
Mockito.when(servletConfig.getServletContext()).thenReturn(servletContext);
@@ -54,7 +57,7 @@ public class JettyXmppWebSocketServletTest {
@Test
public void doWebSocketConnectWithDirectCstr() throws ServletException {
- JettyXmppWebSocketServlet servlet = new
JettyXmppWebSocketServlet(serverRuntimeContext);
+ JettyXmppWebSocketServlet servlet = new
JettyXmppWebSocketServlet(serverRuntimeContext, stanzaProcessor);
WebSocket webSocket = servlet.doWebSocketConnect(null, "xmpp");
Assert.assertTrue(webSocket instanceof JettyXmppWebSocket);
@@ -62,7 +65,7 @@ public class JettyXmppWebSocketServletTest {
@Test
public void doWebSocketConnectWithInvalidSubprotocl() throws
ServletException {
- JettyXmppWebSocketServlet servlet = new
JettyXmppWebSocketServlet(serverRuntimeContext);
+ JettyXmppWebSocketServlet servlet = new
JettyXmppWebSocketServlet(serverRuntimeContext, stanzaProcessor);
WebSocket webSocket = servlet.doWebSocketConnect(null, "dummy");
Assert.assertNull(webSocket);
diff --git
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketTest.java
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketTest.java
index 7473b0f..868456c 100644
---
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketTest.java
+++
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/JettyXmppWebSocketTest.java
@@ -28,7 +28,6 @@ import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.eclipse.jetty.websocket.WebSocket.Connection;
-import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -39,26 +38,24 @@ import org.mockito.Mockito;
public class JettyXmppWebSocketTest {
private StanzaProcessor stanzaProcessor =
Mockito.mock(StanzaProcessor.class);
+
private ServerRuntimeContext serverRuntimeContext =
Mockito.mock(ServerRuntimeContext.class);
- private Connection outbound = Mockito.mock(Connection.class);
- @Before
- public void before() {
-
Mockito.when(serverRuntimeContext.getStanzaProcessor()).thenReturn(stanzaProcessor);
- }
+ private Connection outbound = Mockito.mock(Connection.class);
@Test
public void onMessage() {
- JettyXmppWebSocket context = new
JettyXmppWebSocket(serverRuntimeContext);
+ JettyXmppWebSocket context = new
JettyXmppWebSocket(serverRuntimeContext, stanzaProcessor);
context.onMessage("<test></test>");
Stanza expected = new StanzaBuilder("test").build();
-
Mockito.verify(stanzaProcessor).processStanza(Mockito.eq(serverRuntimeContext),
Mockito.any(SessionContext.class), Mockito.eq(expected),
Mockito.any(SessionStateHolder.class));
+
Mockito.verify(stanzaProcessor).processStanza(Mockito.eq(serverRuntimeContext),
+ Mockito.any(SessionContext.class), Mockito.eq(expected),
Mockito.any(SessionStateHolder.class));
}
@Test
public void write() throws IOException {
- JettyXmppWebSocket context = new
JettyXmppWebSocket(serverRuntimeContext);
+ JettyXmppWebSocket context = new
JettyXmppWebSocket(serverRuntimeContext, stanzaProcessor);
context.onOpen(outbound);
context.write("<test></test>");
diff --git
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServletTest.java
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServletTest.java
index 0244f88..5c42a89 100644
---
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServletTest.java
+++
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketServletTest.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.catalina.websocket.StreamInbound;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.junit.Assert;
import org.junit.Ignore;
@@ -37,12 +38,14 @@ import org.mockito.Mockito;
public class TomcatXmppWebSocketServletTest {
private ServerRuntimeContext serverRuntimeContext =
Mockito.mock(ServerRuntimeContext.class);
+ private StanzaProcessor stanzaProcessor =
Mockito.mock(StanzaProcessor.class);
@Test
public void doWebSocketConnectWithDefaultCstr() throws ServletException {
ServletContext servletContext = Mockito.mock(ServletContext.class);
Mockito.when(servletContext.getAttribute(JettyXmppWebSocketServlet.SERVER_RUNTIME_CONTEXT_ATTRIBUTE)).thenReturn(serverRuntimeContext);
-
+
Mockito.when(servletContext.getAttribute(StanzaProcessor.class.getCanonicalName())).thenReturn(stanzaProcessor);
+
ServletConfig servletConfig = Mockito.mock(ServletConfig.class);
Mockito.when(servletConfig.getServletContext()).thenReturn(servletContext);
@@ -55,7 +58,7 @@ public class TomcatXmppWebSocketServletTest {
@Test
public void doWebSocketConnectWithDirectCstr() throws ServletException {
- TomcatXmppWebSocketServlet servlet = new
TomcatXmppWebSocketServlet(serverRuntimeContext);
+ TomcatXmppWebSocketServlet servlet = new
TomcatXmppWebSocketServlet(serverRuntimeContext, stanzaProcessor);
StreamInbound webSocket = servlet.createWebSocketInbound("xmpp");
Assert.assertTrue(webSocket instanceof TomcatXmppWebSocket);
@@ -64,7 +67,7 @@ public class TomcatXmppWebSocketServletTest {
@Test
@Ignore("sub protocol check temporarily disabled for Tomcat")
public void doWebSocketConnectWithInvalidSubprotocl() throws
ServletException {
- TomcatXmppWebSocketServlet servlet = new
TomcatXmppWebSocketServlet(serverRuntimeContext);
+ TomcatXmppWebSocketServlet servlet = new
TomcatXmppWebSocketServlet(serverRuntimeContext, stanzaProcessor);
StreamInbound webSocket = servlet.createWebSocketInbound("dummy");
Assert.assertNull(webSocket);
diff --git
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketTest.java
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketTest.java
index f09756a..ac19a8b 100644
---
a/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketTest.java
+++
b/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/TomcatXmppWebSocketTest.java
@@ -29,7 +29,6 @@ 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.StanzaBuilder;
-import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -40,26 +39,24 @@ import org.mockito.Mockito;
public class TomcatXmppWebSocketTest {
private StanzaProcessor stanzaProcessor =
Mockito.mock(StanzaProcessor.class);
+
private ServerRuntimeContext serverRuntimeContext =
Mockito.mock(ServerRuntimeContext.class);
- private WsOutbound outbound = Mockito.mock(WsOutbound.class);
- @Before
- public void before() {
-
Mockito.when(serverRuntimeContext.getStanzaProcessor()).thenReturn(stanzaProcessor);
- }
+ private WsOutbound outbound = Mockito.mock(WsOutbound.class);
@Test
public void onMessage() throws IOException {
- TomcatXmppWebSocket context = new
TomcatXmppWebSocket(serverRuntimeContext);
+ TomcatXmppWebSocket context = new
TomcatXmppWebSocket(serverRuntimeContext, stanzaProcessor);
context.onTextMessage(CharBuffer.wrap("<test></test>"));
Stanza expected = new StanzaBuilder("test").build();
-
Mockito.verify(stanzaProcessor).processStanza(Mockito.eq(serverRuntimeContext),
Mockito.any(SessionContext.class), Mockito.eq(expected),
Mockito.any(SessionStateHolder.class));
+
Mockito.verify(stanzaProcessor).processStanza(Mockito.eq(serverRuntimeContext),
+ Mockito.any(SessionContext.class), Mockito.eq(expected),
Mockito.any(SessionStateHolder.class));
}
@Test
public void write() throws IOException {
- TomcatXmppWebSocket context = new
TomcatXmppWebSocket(serverRuntimeContext);
+ TomcatXmppWebSocket context = new
TomcatXmppWebSocket(serverRuntimeContext, stanzaProcessor);
context.onOpen(outbound);
context.write("<test></test>");
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 a751e2d..eb30a76 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
@@ -31,6 +31,7 @@ import org.apache.vysper.xmpp.delivery.RecordingStanzaRelay;
import org.apache.vysper.xmpp.delivery.StanzaReceiverQueue;
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.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
@@ -113,21 +114,20 @@ public class TestSessionContext extends
AbstractSessionContext implements Stanza
}
public TestSessionContext(SessionStateHolder sessionStateHolder) {
- super(new DefaultServerRuntimeContext(new EntityImpl(null, "test",
null), new RecordingStanzaRelay(),
- new MemoryStorageProviderRegistry()), sessionStateHolder);
- sessionId = serverRuntimeContext.getNextSessionId();
- xmlLang = "de";
- this.relay = ((DefaultServerRuntimeContext)
serverRuntimeContext).getStanzaRelay();
- }
-
- public TestSessionContext(SessionStateHolder sessionStateHolder,
StanzaReceiverRelay relay) {
- this(new DefaultServerRuntimeContext(new EntityImpl(null, "test",
null), new RecordingStanzaRelay(),
- new MemoryStorageProviderRegistry()), sessionStateHolder,
relay);
+ this(sessionStateHolder, new RecordingStanzaRelay());
}
public TestSessionContext(ServerRuntimeContext serverRuntimeContext,
SessionStateHolder sessionStateHolder,
StanzaRelay relay) {
- super(serverRuntimeContext, sessionStateHolder);
+ super(serverRuntimeContext, new ProtocolWorker(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);
sessionId = serverRuntimeContext.getNextSessionId();
xmlLang = "de";
this.relay = relay;
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 084c807..aeab842 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
@@ -31,6 +31,7 @@ import org.apache.vysper.xmpp.delivery.RecordingStanzaRelay;
import org.apache.vysper.xmpp.delivery.StanzaReceiverQueue;
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.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
@@ -113,21 +114,20 @@ public class TestSessionContext extends
AbstractSessionContext implements Stanza
}
public TestSessionContext(SessionStateHolder sessionStateHolder) {
- super(new DefaultServerRuntimeContext(new EntityImpl(null, "test",
null), new RecordingStanzaRelay(),
- new MemoryStorageProviderRegistry()), sessionStateHolder);
- sessionId = serverRuntimeContext.getNextSessionId();
- xmlLang = "de";
- this.relay = ((DefaultServerRuntimeContext)
serverRuntimeContext).getStanzaRelay();
- }
-
- public TestSessionContext(SessionStateHolder sessionStateHolder,
StanzaReceiverRelay relay) {
- this(new DefaultServerRuntimeContext(new EntityImpl(null, "test",
null), new RecordingStanzaRelay(),
- new MemoryStorageProviderRegistry()), sessionStateHolder,
relay);
+ this(sessionStateHolder, new RecordingStanzaRelay());
}
public TestSessionContext(ServerRuntimeContext serverRuntimeContext,
SessionStateHolder sessionStateHolder,
StanzaRelay relay) {
- super(serverRuntimeContext, sessionStateHolder);
+ super(serverRuntimeContext, new ProtocolWorker(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);
sessionId = serverRuntimeContext.getNextSessionId();
xmlLang = "de";
this.relay = relay;
diff --git
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
index 25547db..f281d96 100644
---
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
+++
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
@@ -39,6 +39,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.vysper.xml.fragment.Renderer;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionState;
@@ -144,10 +145,11 @@ public class BoshBackedSessionContext extends
AbstractSessionContext implements
/**
* Creates a new context for a session
* @param serverRuntimeContext
+ * @param stanzaProcessor
* @param inactivityChecker
*/
- public BoshBackedSessionContext(ServerRuntimeContext serverRuntimeContext,
BoshHandler boshHandler, InactivityChecker inactivityChecker) {
- super(serverRuntimeContext, new SessionStateHolder());
+ public BoshBackedSessionContext(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor, BoshHandler boshHandler, InactivityChecker
inactivityChecker) {
+ super(serverRuntimeContext, stanzaProcessor, new SessionStateHolder());
// in BOSH we jump directly to the encrypted state
sessionStateHolder.setState(SessionState.ENCRYPTED);
diff --git
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
index 7c78f80..c303d01 100644
---
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
+++
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshEndpoint.java
@@ -22,6 +22,7 @@ package org.apache.vysper.xmpp.extension.xep0124;
import java.io.IOException;
import java.util.List;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.Endpoint;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.eclipse.jetty.server.Connector;
@@ -48,7 +49,9 @@ public class BoshEndpoint implements Endpoint {
protected final static Logger logger =
LoggerFactory.getLogger(BoshEndpoint.class);
protected ServerRuntimeContext serverRuntimeContext;
-
+
+ private StanzaProcessor stanzaProcessor;
+
protected int port = 8080;
protected Server server;
@@ -67,6 +70,11 @@ public class BoshEndpoint implements Endpoint {
this.serverRuntimeContext = serverRuntimeContext;
}
+ @Override
+ public void setStanzaProcessor(StanzaProcessor stanzaProcessor) {
+ this.stanzaProcessor = stanzaProcessor;
+ }
+
/**
* Setter for the listen port
* @param port
@@ -175,7 +183,7 @@ public class BoshEndpoint implements Endpoint {
boshContext.setContextPath(contextPath);
BoshServlet boshServlet = new BoshServlet();
- boshServlet.setServerRuntimeContext(serverRuntimeContext);
+ boshServlet.inject(serverRuntimeContext, stanzaProcessor);
boshServlet.setAccessControlAllowOrigin(accessControlAllowOrigin);
boshContext.addServlet(new ServletHolder(boshServlet), "/");
diff --git
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
index 87eb7e8..847eea4 100644
---
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
+++
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
@@ -22,6 +22,7 @@ package org.apache.vysper.xmpp.extension.xep0124;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xmpp.modules.ServerRuntimeContextService;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionState;
import org.apache.vysper.xmpp.server.response.ServerResponses;
@@ -51,6 +52,8 @@ public class BoshHandler implements
ServerRuntimeContextService {
private static final Logger LOGGER =
LoggerFactory.getLogger(BoshHandler.class);
private ServerRuntimeContext serverRuntimeContext;
+
+ private StanzaProcessor stanzaProcessor;
private Map<String, BoshBackedSessionContext> sessions;
@@ -85,9 +88,13 @@ public class BoshHandler implements
ServerRuntimeContextService {
public void setServerRuntimeContext(ServerRuntimeContext
serverRuntimeContext) {
this.serverRuntimeContext = serverRuntimeContext;
}
+
+ public void setStanzaProcessor(StanzaProcessor stanzaProcessor){
+ this.stanzaProcessor = stanzaProcessor;
+ }
protected BoshBackedSessionContext createSessionContext() {
- return new BoshBackedSessionContext(serverRuntimeContext, this,
inactivityChecker);
+ return new BoshBackedSessionContext(serverRuntimeContext,
stanzaProcessor, this, inactivityChecker);
}
/**
@@ -225,7 +232,7 @@ public class BoshHandler implements
ServerRuntimeContextService {
stanza = new Stanza(element.getNamespaceURI(), element.getName(),
element.getNamespacePrefix(),
element.getAttributes(), element.getInnerFragments());
}
-
serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext,
session, stanza,
+ stanzaProcessor.processStanza(serverRuntimeContext, session, stanza,
session.getStateHolder());
}
diff --git
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
index e594309..9f71369 100644
---
a/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
+++
b/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
@@ -19,6 +19,7 @@
*/
package org.apache.vysper.xmpp.extension.xep0124;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -76,14 +77,14 @@ public class BoshServlet extends HttpServlet {
/**
* Setter for the {@link ServerRuntimeContext}
* @param serverRuntimeContext
+ * @param stanzaProcessor
*/
- public void setServerRuntimeContext(ServerRuntimeContext
serverRuntimeContext) {
+ public void inject(ServerRuntimeContext serverRuntimeContext,
StanzaProcessor stanzaProcessor) {
boshHandler.setServerRuntimeContext(serverRuntimeContext);
+ boshHandler.setStanzaProcessor(stanzaProcessor);
serverRuntimeContext.registerServerRuntimeContextService(boshHandler);
}
-
-
public List<String> getAccessControlAllowOrigin() {
return accessControlAllowOrigin;
}
diff --git
a/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContextTest.java
b/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContextTest.java
index 750f4ca..b8a8c69 100644
---
a/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContextTest.java
+++
b/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContextTest.java
@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.vysper.xml.fragment.Renderer;
import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.easymock.Capture;
@@ -51,6 +52,8 @@ public class BoshBackedSessionContextTest {
private ServerRuntimeContext serverRuntimeContext;
+ private StanzaProcessor stanzaProcessor;
+
private InactivityChecker inactivityChecker;
@Before
@@ -58,6 +61,7 @@ public class BoshBackedSessionContextTest {
mocksControl = createControl();
boshHandler = mocksControl.createMock(BoshHandler.class);
serverRuntimeContext =
mocksControl.createMock(ServerRuntimeContext.class);
+ stanzaProcessor = mocksControl.createMock(StanzaProcessor.class);
expect(serverRuntimeContext.getNextSessionId()).andReturn("123");
expect(serverRuntimeContext.getServerEntity()).andReturn(new
EntityImpl(null, "vysper.org", null));
expect(serverRuntimeContext.getDefaultXMLLang()).andReturn("en");
@@ -87,7 +91,7 @@ public class BoshBackedSessionContextTest {
httpServletRequest.setAttribute(eq(BOSH_RESPONSE_ATTRIBUTE),
EasyMock.<BoshResponse> capture(captured));
mocksControl.replay();
- BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, null, inactivityChecker);
+ BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, stanzaProcessor, null,
inactivityChecker);
Stanza body = BoshStanzaUtils.EMPTY_BOSH_RESPONSE;
boshBackedSessionContext.insertRequest(new
BoshRequest(httpServletRequest, body, 1L));
boshBackedSessionContext.writeBoshResponse(body);
@@ -101,7 +105,7 @@ public class BoshBackedSessionContextTest {
@Test
public void testSetBoshVersion1() {
mocksControl.replay();
- BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, null, inactivityChecker);
+ BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, stanzaProcessor, null,
inactivityChecker);
boshBackedSessionContext.setBoshVersion("1.8");
assertEquals("1.8", boshBackedSessionContext.getBoshVersion());
mocksControl.verify();
@@ -110,7 +114,7 @@ public class BoshBackedSessionContextTest {
@Test
public void testSetBoshVersion2() {
mocksControl.replay();
- BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, null, inactivityChecker);
+ BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, stanzaProcessor, null,
inactivityChecker);
boshBackedSessionContext.setBoshVersion("2.0");
assertEquals("1.9", boshBackedSessionContext.getBoshVersion());
mocksControl.verify();
@@ -146,7 +150,7 @@ public class BoshBackedSessionContextTest {
// write0
mocksControl.replay();
- BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, null, inactivityChecker);
+ BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, stanzaProcessor, null,
inactivityChecker);
boshBackedSessionContext.insertRequest(br);
listenerCaptured.getValue().onTimeout(asyncEvent);
@@ -192,7 +196,7 @@ public class BoshBackedSessionContextTest {
httpServletRequest1.setAttribute(eq(BOSH_RESPONSE_ATTRIBUTE),
EasyMock.<BoshResponse> capture(captured));
mocksControl.replay();
- BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, null, inactivityChecker);
+ BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(serverRuntimeContext, stanzaProcessor, null,
inactivityChecker);
boshBackedSessionContext.setHold(2);
// consecutive writes with RID 1 and 2
@@ -233,7 +237,7 @@ public class BoshBackedSessionContextTest {
mocksControl.replay();
BoshBackedSessionContext boshBackedSessionContext = new
BoshBackedSessionContext(
- serverRuntimeContext, null, inactivityChecker);
+ serverRuntimeContext, stanzaProcessor, null,
inactivityChecker);
boshBackedSessionContext.writeBoshResponse(body); // queued for merging
boshBackedSessionContext.writeBoshResponse(body); // queued for merging
boshBackedSessionContext.writeBoshResponse(body); // queued for merging
diff --git
a/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandlerTest.java
b/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandlerTest.java
index e41f759..e01a829 100644
---
a/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandlerTest.java
+++
b/server/extensions/xep0124-xep0206-bosh/src/test/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandlerTest.java
@@ -58,6 +58,7 @@ public class BoshHandlerTest {
private IMocksControl mocksControl;
private ServerRuntimeContext serverRuntimeContext;
+ private StanzaProcessor stanzaProcessor;
private BoshHandler boshHandler;
@@ -65,8 +66,10 @@ public class BoshHandlerTest {
public void setUp() throws Exception {
mocksControl = createControl();
serverRuntimeContext =
mocksControl.createMock(ServerRuntimeContext.class);
+ stanzaProcessor = mocksControl.createMock(StanzaProcessor.class);
boshHandler = new BoshHandler();
boshHandler.setServerRuntimeContext(serverRuntimeContext);
+ boshHandler.setStanzaProcessor(stanzaProcessor);
}
@After
@@ -130,8 +133,6 @@ public class BoshHandlerTest {
asyncContext.setTimeout(anyLong());
httpServletRequest.setAttribute(eq(BOSH_REQUEST_ATTRIBUTE),
EasyMock.<BoshRequest> capture(br));
asyncContext.addListener(EasyMock.<AsyncListener> anyObject());
- StanzaProcessor stanzaProcessor =
mocksControl.createMock(StanzaProcessor.class);
-
expect(serverRuntimeContext.getStanzaProcessor()).andReturn(stanzaProcessor);
Capture<Stanza> stanzaCaptured = new Capture<Stanza>();
stanzaProcessor.processStanza(eq(serverRuntimeContext),
EasyMock.<SessionContext> anyObject(),
EasyMock.<Stanza> capture(stanzaCaptured),
EasyMock.<SessionStateHolder> anyObject());