clean up websocket handshakers

Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
Lachlan Roberts 2019-09-12 15:22:56 +10:00
parent 3068b4c8ae
commit 17b17cb2b9
3 changed files with 18 additions and 45 deletions

View File

@ -19,6 +19,7 @@
package org.eclipse.jetty.websocket.core.server;
import java.io.IOException;
import java.util.Objects;
import java.util.function.Function;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ -47,7 +48,7 @@ public class WebSocketUpgradeHandler extends HandlerWrapper
public WebSocketUpgradeHandler(WebSocketNegotiator negotiator, String... pathSpecs)
{
this.negotiator = negotiator;
this.negotiator = Objects.requireNonNull(negotiator);
addPathSpec(pathSpecs);
}

View File

@ -68,24 +68,14 @@ public final class RFC6455Handshaker implements Handshaker
public boolean upgradeRequest(WebSocketNegotiator negotiator, HttpServletRequest request, HttpServletResponse response,
FrameHandler.Customizer defaultCustomizer) throws IOException
{
final Request baseRequest = Request.getBaseRequest(request);
final HttpChannel httpChannel = baseRequest.getHttpChannel();
final Connector connector = httpChannel.getConnector();
if (negotiator == null)
{
if (LOG.isDebugEnabled())
LOG.debug("not upgraded: no WebSocketNegotiator {}", baseRequest);
return false;
}
if (!HttpMethod.GET.is(request.getMethod()))
{
if (LOG.isDebugEnabled())
LOG.debug("not upgraded method!=GET {}", baseRequest);
LOG.debug("not upgraded method!=GET {}", request);
return false;
}
final Request baseRequest = Request.getBaseRequest(request);
if (!HttpVersion.HTTP_1_1.equals(baseRequest.getHttpVersion()))
{
if (LOG.isDebugEnabled())
@ -93,15 +83,7 @@ public final class RFC6455Handshaker implements Handshaker
return false;
}
ByteBufferPool pool = negotiator.getByteBufferPool();
if (pool == null)
pool = baseRequest.getHttpChannel().getConnector().getByteBufferPool();
Negotiation negotiation = new Negotiation(
baseRequest,
request,
response,
new WebSocketComponents());
Negotiation negotiation = new Negotiation(baseRequest, request, response, new WebSocketComponents());
if (LOG.isDebugEnabled())
LOG.debug("negotiation {}", negotiation);
@ -200,6 +182,8 @@ public final class RFC6455Handshaker implements Handshaker
LOG.debug("session {}", coreSession);
// Create a connection
HttpChannel httpChannel = baseRequest.getHttpChannel();
Connector connector = httpChannel.getConnector();
WebSocketConnection connection = newWebSocketConnection(httpChannel.getEndPoint(), connector.getExecutor(), connector.getScheduler(), connector.getByteBufferPool(), coreSession);
if (LOG.isDebugEnabled())
LOG.debug("connection {}", connection);

View File

@ -65,10 +65,14 @@ public class RFC8441Handshaker implements Handshaker
@Override
public boolean upgradeRequest(WebSocketNegotiator negotiator, HttpServletRequest request, HttpServletResponse response, FrameHandler.Customizer defaultCustomizer) throws IOException
{
Request baseRequest = Request.getBaseRequest(request);
HttpChannel httpChannel = baseRequest.getHttpChannel();
Connector connector = httpChannel.getConnector();
if (!HttpMethod.CONNECT.is(request.getMethod()))
{
if (LOG.isDebugEnabled())
LOG.debug("not upgraded method!=GET {}", request.toString());
return false;
}
Request baseRequest = Request.getBaseRequest(request);
if (!HttpVersion.HTTP_2.equals(baseRequest.getHttpVersion()))
{
if (LOG.isDebugEnabled())
@ -76,24 +80,6 @@ public class RFC8441Handshaker implements Handshaker
return false;
}
if (!HttpMethod.CONNECT.is(request.getMethod()))
{
if (LOG.isDebugEnabled())
LOG.debug("not upgraded method!=GET {}", baseRequest);
return false;
}
if (negotiator == null)
{
if (LOG.isDebugEnabled())
LOG.debug("not upgraded: no WebSocketNegotiator {}", baseRequest);
return false;
}
ByteBufferPool pool = negotiator.getByteBufferPool();
if (pool == null)
pool = baseRequest.getHttpChannel().getConnector().getByteBufferPool();
Negotiation negotiation = new RFC8441Negotiation(baseRequest, request, response, new WebSocketComponents());
if (LOG.isDebugEnabled())
LOG.debug("negotiation {}", negotiation);
@ -189,8 +175,10 @@ public class RFC8441Handshaker implements Handshaker
if (LOG.isDebugEnabled())
LOG.debug("coreSession {}", coreSession);
// Create a connection
EndPoint endPoint = baseRequest.getHttpChannel().getTunnellingEndPoint();
// Create the Connection
HttpChannel httpChannel = baseRequest.getHttpChannel();
Connector connector = httpChannel.getConnector();
EndPoint endPoint = httpChannel.getTunnellingEndPoint();
WebSocketConnection connection = newWebSocketConnection(endPoint, connector.getExecutor(), connector.getScheduler(), connector.getByteBufferPool(), coreSession);
if (LOG.isDebugEnabled())
LOG.debug("connection {}", connection);