mirror of
https://github.com/jetty/jetty.project.git
synced 2025-02-26 09:34:56 +00:00
Issue #5170 - backport fix to websocket upgrade from jetty-10
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
parent
2f3808026f
commit
a3090a61e8
@ -47,6 +47,7 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
||||
private boolean shutdown;
|
||||
private boolean complete;
|
||||
private boolean unsolicited;
|
||||
private int status;
|
||||
|
||||
public HttpReceiverOverHTTP(HttpChannelOverHTTP channel)
|
||||
{
|
||||
@ -118,15 +119,17 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
||||
|
||||
protected ByteBuffer onUpgradeFrom()
|
||||
{
|
||||
ByteBuffer upgradeBuffer = null;
|
||||
if (networkBuffer.hasRemaining())
|
||||
{
|
||||
ByteBuffer upgradeBuffer = BufferUtil.allocate(networkBuffer.remaining());
|
||||
upgradeBuffer = BufferUtil.allocate(networkBuffer.remaining());
|
||||
BufferUtil.clearToFill(upgradeBuffer);
|
||||
BufferUtil.put(networkBuffer.getBuffer(), upgradeBuffer);
|
||||
BufferUtil.flipToFlush(upgradeBuffer, 0);
|
||||
return upgradeBuffer;
|
||||
}
|
||||
return null;
|
||||
|
||||
releaseNetworkBuffer();
|
||||
return upgradeBuffer;
|
||||
}
|
||||
|
||||
private void process()
|
||||
@ -145,12 +148,11 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
||||
return;
|
||||
}
|
||||
|
||||
// Connection may be closed or upgraded in a parser callback.
|
||||
boolean upgraded = connection != endPoint.getConnection();
|
||||
if (connection.isClosed() || upgraded)
|
||||
// Connection may be closed in a parser callback.
|
||||
if (connection.isClosed())
|
||||
{
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("{} {}", upgraded ? "Upgraded" : "Closed", connection);
|
||||
LOG.debug("Closed {}", connection);
|
||||
releaseNetworkBuffer();
|
||||
return;
|
||||
}
|
||||
@ -215,6 +217,14 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Parse complete={}, remaining {} {}", complete, networkBuffer.remaining(), parser);
|
||||
|
||||
if (complete)
|
||||
{
|
||||
int status = this.status;
|
||||
this.status = 0;
|
||||
if (status == HttpStatus.SWITCHING_PROTOCOLS_101)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (networkBuffer.isEmpty())
|
||||
return false;
|
||||
|
||||
@ -269,6 +279,7 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
||||
if (exchange == null)
|
||||
return false;
|
||||
|
||||
this.status = status;
|
||||
String method = exchange.getRequest().getMethod();
|
||||
parser.setHeadResponse(HttpMethod.HEAD.is(method) ||
|
||||
(HttpMethod.CONNECT.is(method) && status == HttpStatus.OK_200));
|
||||
|
Loading…
x
Reference in New Issue
Block a user