Skip to content

Commit f004bb1

Browse files
Ivan Zbykovskyirstoyanchev
authored andcommitted
Add formatting for SockJS GoAway frame
Prevents infinite loop for xhr-polling and xhr-streaming transports. See gh-28000
1 parent 88f73bf commit f004bb1

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/AbstractHttpSendingTransportHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,11 @@ else if (sockJsSession.isClosed()) {
7979
if (logger.isDebugEnabled()) {
8080
logger.debug("Connection already closed (but not removed yet) for " + sockJsSession);
8181
}
82+
SockJsFrameFormat frameFormat = this.getFrameFormat(request);
8283
SockJsFrame frame = SockJsFrame.closeFrameGoAway();
84+
String formattedFrame = frameFormat.format(frame);
8385
try {
84-
response.getBody().write(frame.getContentBytes());
86+
response.getBody().write(formattedFrame.getBytes(SockJsFrame.CHARSET));
8587
}
8688
catch (IOException ex) {
8789
throw new SockJsException("Failed to send " + frame, sockJsSession.getId(), ex);

spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractHttpSockJsSession.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ public void handleSuccessiveRequest(ServerHttpRequest request, ServerHttpRespons
257257
synchronized (this.responseLock) {
258258
try {
259259
if (isClosed()) {
260-
response.getBody().write(SockJsFrame.closeFrameGoAway().getContentBytes());
260+
String formattedFrame = frameFormat.format(SockJsFrame.closeFrameGoAway());
261+
response.getBody().write(formattedFrame.getBytes(SockJsFrame.CHARSET));
261262
return;
262263
}
263264
this.response = response;

0 commit comments

Comments
 (0)