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