diff --git a/jetty-websocket/websocket-api/src/main/java/org/eclipse/jetty/websocket/api/Session.java b/jetty-websocket/websocket-api/src/main/java/org/eclipse/jetty/websocket/api/Session.java
index a7257a62b32..9771f8296cc 100644
--- a/jetty-websocket/websocket-api/src/main/java/org/eclipse/jetty/websocket/api/Session.java
+++ b/jetty-websocket/websocket-api/src/main/java/org/eclipse/jetty/websocket/api/Session.java
@@ -19,8 +19,6 @@
package org.eclipse.jetty.websocket.api;
import java.io.IOException;
-import java.net.URI;
-import java.util.List;
public interface Session
{
@@ -52,26 +50,6 @@ public interface Session
*/
long getMaximumMessageSize();
- /**
- * Return the list of extensions currently in use for this conversation.
- *
- * Convenience method for .getUpgradeResponse().getExtensions()
- *
- * @return the negotiated extensions
- */
- @Deprecated
- List getNegotiatedExtensions();
-
- /**
- * Return the sub protocol agreed during the websocket handshake for this conversation.
- *
- * Convenience method for .getUpgradeResponse().getAcceptedSubProtocol()
- *
- * @return the negotiated subprotocol
- */
- @Deprecated
- String getNegotiatedSubprotocol();
-
/**
* Returns the version of the websocket protocol currently being used. This is taken as the value of the Sec-WebSocket-Version header used in the opening
* handshake. i.e. "13".
@@ -80,14 +58,6 @@ public interface Session
*/
String getProtocolVersion();
- /**
- * Return the query string associated with the request this session was opened under.
- *
- * Convenience method for .getUpgradeRequest().getRequestURI().getQuery()
- */
- @Deprecated
- String getQueryString();
-
/**
* Return a reference to the RemoteEndpoint object representing the other end of this conversation.
*
@@ -95,18 +65,6 @@ public interface Session
*/
RemoteEndpoint getRemote();
- /**
- * Return the URI that this session was opened under.
- *
- * Note, this is different than the servlet-api getRequestURI, as this will return the query portion as well.
- *
- * Convenience method for .getUpgradeRequest().getRequestURI()
- *
- * @return the request URI.
- */
- @Deprecated
- URI getRequestURI();
-
/**
* Get the UpgradeRequest used to create this session
*
diff --git a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/internal/io/UpgradeConnection.java b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/internal/io/UpgradeConnection.java
index 71403d75ff0..43259c809a8 100644
--- a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/internal/io/UpgradeConnection.java
+++ b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/internal/io/UpgradeConnection.java
@@ -36,15 +36,14 @@ import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.websocket.api.UpgradeException;
import org.eclipse.jetty.websocket.api.WebSocketPolicy;
-import org.eclipse.jetty.websocket.api.extensions.Extension;
import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
-import org.eclipse.jetty.websocket.api.extensions.IncomingFrames;
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.ClientUpgradeResponse;
import org.eclipse.jetty.websocket.client.internal.ConnectPromise;
import org.eclipse.jetty.websocket.common.AcceptHash;
import org.eclipse.jetty.websocket.common.WebSocketSession;
import org.eclipse.jetty.websocket.common.events.EventDriver;
+import org.eclipse.jetty.websocket.common.extensions.ExtensionStack;
/**
* This is the initial connection handling that exists immediately after physical connection is established to destination server.
@@ -212,51 +211,27 @@ public class UpgradeConnection extends AbstractConnection
// Initialize / Negotiate Extensions
EventDriver websocket = connectPromise.getDriver();
WebSocketPolicy policy = connectPromise.getClient().getPolicy();
- String acceptedSubProtocol = response.getAcceptedSubProtocol();
WebSocketSession session = new WebSocketSession(request.getRequestURI(),websocket,connection);
session.setPolicy(policy);
- session.setNegotiatedSubprotocol(acceptedSubProtocol);
+ session.setUpgradeResponse(response);
connection.setSession(session);
- List extensions = connectPromise.getClient().initExtensions(response.getExtensions());
- // Start with default routing.
- IncomingFrames incoming = session;
- // OutgoingFrames outgoing = connection;
+ // Initialize / Negotiate Extensions
+ ExtensionStack extensionStack = new ExtensionStack(connectPromise.getClient().getExtensionFactory());
+ extensionStack.negotiate(response.getExtensions());
- // Connect extensions
- if (extensions != null)
- {
- connection.getParser().configureFromExtensions(extensions);
- connection.getGenerator().configureFromExtensions(extensions);
+ extensionStack.configure(connection.getParser());
+ extensionStack.configure(connection.getGenerator());
- // FIXME
- // Iterator extIter;
- // // Connect outgoings
- // extIter = extensions.iterator();
- // while (extIter.hasNext())
- // {
- // Extension ext = extIter.next();
- // ext.setNextOutgoingFrames(outgoing);
- // outgoing = ext;
- // }
- //
- // // Connect incomings
- // Collections.reverse(extensions);
- // extIter = extensions.iterator();
- // while (extIter.hasNext())
- // {
- // Extension ext = extIter.next();
- // ext.setNextIncomingFrames(incoming);
- // incoming = ext;
- // }
- }
+ // Setup Incoming Routing
+ connection.setNextIncomingFrames(extensionStack);
+ extensionStack.setNextIncoming(session);
- // configure session for outgoing flows
- // session.setOutgoing(outgoing);
- // configure connection for incoming flows
- connection.getParser().setIncomingFramesHandler(incoming);
+ // Setup Outgoing Routing
+ session.setOutgoingHandler(extensionStack);
+ extensionStack.setNextOutgoing(connection);
// Now swap out the connection
endp.setConnection(connection);
diff --git a/jetty-websocket/websocket-client/src/test/java/org/eclipse/jetty/websocket/client/blockhead/BlockheadServer.java b/jetty-websocket/websocket-client/src/test/java/org/eclipse/jetty/websocket/client/blockhead/BlockheadServer.java
index aa405121c81..cf221562fd1 100644
--- a/jetty-websocket/websocket-client/src/test/java/org/eclipse/jetty/websocket/client/blockhead/BlockheadServer.java
+++ b/jetty-websocket/websocket-client/src/test/java/org/eclipse/jetty/websocket/client/blockhead/BlockheadServer.java
@@ -401,13 +401,13 @@ public class BlockheadServer
// Respond to used extensions
resp.append("Sec-WebSocket-Extensions: ");
boolean delim = false;
- for (String ext : extensionStack.getNegotiatedExtensions())
+ for (ExtensionConfig ext : extensionStack.getNegotiatedExtensions())
{
if (delim)
{
resp.append(", ");
}
- resp.append(ext);
+ resp.append(ext.getParameterizedName());
delim = true;
}
resp.append("\r\n");
diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketSession.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketSession.java
index 5496c4596c5..c042d75fb7b 100644
--- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketSession.java
+++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketSession.java
@@ -22,7 +22,6 @@ import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URI;
import java.nio.ByteBuffer;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -62,9 +61,7 @@ public class WebSocketSession extends ContainerLifeCycle implements Session, Web
private ExtensionFactory extensionFactory;
private boolean active = false;
private long maximumMessageSize;
- private List negotiatedExtensions = new ArrayList<>();
private String protocolVersion;
- private String negotiatedSubprotocol;
private long timeout;
private Map parameterMap = new HashMap<>();
private WebSocketRemoteEndpoint remote;
@@ -184,18 +181,6 @@ public class WebSocketSession extends ContainerLifeCycle implements Session, Web
return maximumMessageSize;
}
- @Override
- public List getNegotiatedExtensions()
- {
- return negotiatedExtensions;
- }
-
- @Override
- public String getNegotiatedSubprotocol()
- {
- return negotiatedSubprotocol;
- }
-
@ManagedAttribute(readonly = true)
public OutgoingFrames getOutgoingHandler()
{
@@ -214,12 +199,6 @@ public class WebSocketSession extends ContainerLifeCycle implements Session, Web
return protocolVersion;
}
- @Override
- public String getQueryString()
- {
- return getRequestURI().getQuery();
- }
-
@Override
public RemoteEndpoint getRemote()
{
@@ -245,7 +224,7 @@ public class WebSocketSession extends ContainerLifeCycle implements Session, Web
@Override
public String getSubProtocol()
{
- return getNegotiatedSubprotocol();
+ return upgradeResponse.getAcceptedSubProtocol();
}
@Override
@@ -359,17 +338,6 @@ public class WebSocketSession extends ContainerLifeCycle implements Session, Web
this.maximumMessageSize = length;
}
- public void setNegotiatedExtensions(List negotiatedExtensions)
- {
- this.negotiatedExtensions.clear();
- this.negotiatedExtensions.addAll(negotiatedExtensions);
- }
-
- public void setNegotiatedSubprotocol(String negotiatedSubprotocol)
- {
- this.negotiatedSubprotocol = negotiatedSubprotocol;
- }
-
public void setOutgoingHandler(OutgoingFrames outgoing)
{
this.outgoingHandler = outgoing;
diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java
index 2115788a4ca..b312c88d9f1 100644
--- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java
+++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java
@@ -159,9 +159,9 @@ public class ExtensionStack extends ContainerLifeCycle implements IncomingFrames
*
* @return list of negotiated extensions
*/
- public List getNegotiatedExtensions()
+ public List getNegotiatedExtensions()
{
- List ret = new ArrayList<>();
+ List ret = new ArrayList<>();
if (extensions == null)
{
return ret;
@@ -169,7 +169,7 @@ public class ExtensionStack extends ContainerLifeCycle implements IncomingFrames
for (Extension ext : extensions)
{
- ret.add(ext.getConfig().getParameterizedName());
+ ret.add(ext.getConfig());
}
return ret;
}
diff --git a/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/mux/add/DummyMuxAddServer.java b/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/mux/add/DummyMuxAddServer.java
index f32ff0de7c7..49b4fcb8947 100644
--- a/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/mux/add/DummyMuxAddServer.java
+++ b/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/mux/add/DummyMuxAddServer.java
@@ -79,7 +79,9 @@ public class DummyMuxAddServer implements MuxAddServer
EventDriver websocket = this.eventDriverFactory.wrap(echo);
WebSocketSession session = new WebSocketSession(request.getRequestURI(),websocket,channel);
- session.setNegotiatedSubprotocol("echo");
+ UpgradeResponse uresponse = new UpgradeResponse();
+ uresponse.setAcceptedSubProtocol("echo");
+ session.setUpgradeResponse(uresponse);
channel.setSession(session);
channel.setSubProtocol("echo");
channel.onOpen();
diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java
index 37fd3709854..fa2b16a2390 100644
--- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java
+++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java
@@ -415,8 +415,9 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
// Setup Session
WebSocketSession session = new WebSocketSession(request.getRequestURI(),driver,connection);
session.setPolicy(getPolicy().clonePolicy());
- session.setNegotiatedSubprotocol(response.getAcceptedSubProtocol());
- session.setNegotiatedExtensions(extensionStack.getNegotiatedExtensions());
+ session.setUpgradeRequest(request);
+ response.setExtensions(extensionStack.getNegotiatedExtensions());
+ session.setUpgradeResponse(response);
connection.setSession(session);
// Setup Incoming Routing