Skip to content

Commit ee86512

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 ee86512

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
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

2425
import io.helidon.common.http.Http;
2526
import io.helidon.webserver.ForwardingHandler;
26-
2727
import io.netty.buffer.Unpooled;
2828
import io.netty.channel.ChannelFuture;
2929
import io.netty.channel.ChannelFutureListener;
@@ -41,9 +41,11 @@
4141
import org.glassfish.tyrus.core.TyrusUpgradeResponse;
4242

4343
class WebSocketUpgradeCodec implements HttpServerUpgradeHandler.UpgradeCodec {
44-
4544
private static final Logger LOGGER = Logger.getLogger(WebSocketUpgradeCodec.class.getName());
4645

46+
private static final String SEC_WEBSOCKET_ACCEPT = "Sec-WebSocket-Accept";
47+
private static final String SEC_WEBSOCKET_PROTOCOL = "Sec-WebSocket-Protocol";
48+
4749
private final WebSocketRouting webSocketRouting;
4850
private String path;
4951
private WebSocketHandler wsHandler;
@@ -73,23 +75,26 @@ public boolean prepareUpgradeResponse(ChannelHandlerContext ctx,
7375
TyrusUpgradeResponse upgradeResponse = wsHandler.upgradeResponse();
7476
if (upgradeResponse.getStatus() != Http.Status.SWITCHING_PROTOCOLS_101.code()) {
7577
// 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");
78+
Map<String, List<String>> upgradeHeaders = upgradeResponse.getHeaders();
79+
upgradeHeaders.remove(Http.Header.UPGRADE);
80+
upgradeHeaders.remove(Http.Header.CONNECTION);
81+
upgradeHeaders.remove(SEC_WEBSOCKET_ACCEPT);
82+
upgradeHeaders.remove(SEC_WEBSOCKET_PROTOCOL);
7983
HttpHeaders headers = new DefaultHttpHeaders();
80-
upgradeResponse.getHeaders().forEach(headers::add);
84+
upgradeHeaders.forEach(headers::add);
8185

8286
// set payload as text/plain with reason phrase
8387
headers.add(Http.Header.CONTENT_TYPE, "text/plain");
8488
String reasonPhrase = upgradeResponse.getReasonPhrase() == null ? ""
8589
: upgradeResponse.getReasonPhrase();
86-
HttpResponse r = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
90+
HttpResponse httpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
8791
HttpResponseStatus.valueOf(upgradeResponse.getStatus()),
8892
Unpooled.wrappedBuffer(reasonPhrase.getBytes(Charset.defaultCharset())),
89-
headers, EmptyHttpHeaders.INSTANCE);
93+
headers,
94+
EmptyHttpHeaders.INSTANCE); // trailing headers
9095

9196
// write, flush and later close connection
92-
ChannelFuture writeComplete = ctx.writeAndFlush(r);
97+
ChannelFuture writeComplete = ctx.writeAndFlush(httpResponse);
9398
writeComplete.addListener(ChannelFutureListener.CLOSE);
9499
return false;
95100
}

0 commit comments

Comments
 (0)