Skip to content

Commit c3ee959

Browse files
committed
Removes all possible upgrade headers that don't belong in a failed response. Some other minor cleanup.
Signed-off-by: Santiago Pericas-Geertsen <santiago.pericasgeertsen@oracle.com>
1 parent f0fc904 commit c3ee959

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

webserver/websocket/src/main/java/io/helidon/webserver/websocket/WebSocketUpgradeCodec.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.nio.charset.Charset;
1919
import java.util.Collection;
2020
import java.util.List;
21+
import java.util.Map;
2122
import java.util.logging.Level;
2223
import java.util.logging.Logger;
2324

@@ -41,9 +42,11 @@
4142
import org.glassfish.tyrus.core.TyrusUpgradeResponse;
4243

4344
class WebSocketUpgradeCodec implements HttpServerUpgradeHandler.UpgradeCodec {
44-
4545
private static final Logger LOGGER = Logger.getLogger(WebSocketUpgradeCodec.class.getName());
4646

47+
private static final String SEC_WEBSOCKET_ACCEPT = "Sec-WebSocket-Accept";
48+
private static final String SEC_WEBSOCKET_PROTOCOL = "Sec-WebSocket-Protocol";
49+
4750
private final WebSocketRouting webSocketRouting;
4851
private String path;
4952
private WebSocketHandler wsHandler;
@@ -73,23 +76,26 @@ public boolean prepareUpgradeResponse(ChannelHandlerContext ctx,
7376
TyrusUpgradeResponse upgradeResponse = wsHandler.upgradeResponse();
7477
if (upgradeResponse.getStatus() != Http.Status.SWITCHING_PROTOCOLS_101.code()) {
7578
// prepare headers for failed response
76-
upgradeResponse.getHeaders().remove(Http.Header.UPGRADE);
77-
upgradeResponse.getHeaders().remove(Http.Header.CONNECTION);
78-
upgradeResponse.getHeaders().remove("sec-websocket-accept");
79+
Map<String, List<String>> upgradeHeaders = upgradeResponse.getHeaders();
80+
upgradeHeaders.remove(Http.Header.UPGRADE);
81+
upgradeHeaders.remove(Http.Header.CONNECTION);
82+
upgradeHeaders.remove(SEC_WEBSOCKET_ACCEPT);
83+
upgradeHeaders.remove(SEC_WEBSOCKET_PROTOCOL);
7984
HttpHeaders headers = new DefaultHttpHeaders();
80-
upgradeResponse.getHeaders().forEach(headers::add);
85+
upgradeHeaders.forEach(headers::add);
8186

8287
// set payload as text/plain with reason phrase
8388
headers.add(Http.Header.CONTENT_TYPE, "text/plain");
8489
String reasonPhrase = upgradeResponse.getReasonPhrase() == null ? ""
8590
: upgradeResponse.getReasonPhrase();
86-
HttpResponse r = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
91+
HttpResponse httpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
8792
HttpResponseStatus.valueOf(upgradeResponse.getStatus()),
8893
Unpooled.wrappedBuffer(reasonPhrase.getBytes(Charset.defaultCharset())),
89-
headers, EmptyHttpHeaders.INSTANCE);
94+
headers,
95+
EmptyHttpHeaders.INSTANCE); // trailing headers
9096

9197
// write, flush and later close connection
92-
ChannelFuture writeComplete = ctx.writeAndFlush(r);
98+
ChannelFuture writeComplete = ctx.writeAndFlush(httpResponse);
9399
writeComplete.addListener(ChannelFutureListener.CLOSE);
94100
return false;
95101
}

0 commit comments

Comments
 (0)