File tree Expand file tree Collapse file tree 9 files changed +182
-1
lines changed
main/java/org/springframework/web/socket
test/java/org/springframework/web/socket Expand file tree Collapse file tree 9 files changed +182
-1
lines changed Original file line number Diff line number Diff line change @@ -83,6 +83,26 @@ public interface WebSocketSession {
83
83
*/
84
84
String getAcceptedProtocol ();
85
85
86
+ /**
87
+ * Configure the maximum size for an incoming text message.
88
+ */
89
+ void setTextMessageSizeLimit (int messageSizeLimit );
90
+
91
+ /**
92
+ * Get the configured maximum size for an incoming text message.
93
+ */
94
+ int getTextMessageSizeLimit ();
95
+
96
+ /**
97
+ * Configure the maximum size for an incoming binary message.
98
+ */
99
+ void setBinaryMessageSizeLimit (int messageSizeLimit );
100
+
101
+ /**
102
+ * Get the configured maximum size for an incoming binary message.
103
+ */
104
+ int getBinaryMessageSizeLimit ();
105
+
86
106
/**
87
107
* Return the negotiated extensions or {@code null} if none was specified or
88
108
* negotiated successfully.
Original file line number Diff line number Diff line change @@ -126,6 +126,30 @@ public String getAcceptedProtocol() {
126
126
return getNativeSession ().getUpgradeResponse ().getAcceptedSubProtocol ();
127
127
}
128
128
129
+ @ Override
130
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
131
+ checkNativeSessionInitialized ();
132
+ getNativeSession ().getPolicy ().setMaxTextMessageSize (messageSizeLimit );
133
+ }
134
+
135
+ @ Override
136
+ public int getTextMessageSizeLimit () {
137
+ checkNativeSessionInitialized ();
138
+ return getNativeSession ().getPolicy ().getMaxTextMessageSize ();
139
+ }
140
+
141
+ @ Override
142
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
143
+ checkNativeSessionInitialized ();
144
+ getNativeSession ().getPolicy ().setMaxBinaryMessageSize (messageSizeLimit );
145
+ }
146
+
147
+ @ Override
148
+ public int getBinaryMessageSizeLimit () {
149
+ checkNativeSessionInitialized ();
150
+ return getNativeSession ().getPolicy ().getMaxBinaryMessageSize ();
151
+ }
152
+
129
153
@ Override
130
154
public List <WebSocketExtension > getExtensions () {
131
155
checkNativeSessionInitialized ();
Original file line number Diff line number Diff line change 1
1
/*
2
- * Copyright 2002-2013 the original author or authors.
2
+ * Copyright 2002-2014 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -140,6 +140,30 @@ public String getAcceptedProtocol() {
140
140
return StringUtils .isEmpty (protocol )? null : protocol ;
141
141
}
142
142
143
+ @ Override
144
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
145
+ checkNativeSessionInitialized ();
146
+ getNativeSession ().setMaxTextMessageBufferSize (messageSizeLimit );
147
+ }
148
+
149
+ @ Override
150
+ public int getTextMessageSizeLimit () {
151
+ checkNativeSessionInitialized ();
152
+ return getNativeSession ().getMaxTextMessageBufferSize ();
153
+ }
154
+
155
+ @ Override
156
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
157
+ checkNativeSessionInitialized ();
158
+ getNativeSession ().setMaxBinaryMessageBufferSize (messageSizeLimit );
159
+ }
160
+
161
+ @ Override
162
+ public int getBinaryMessageSizeLimit () {
163
+ checkNativeSessionInitialized ();
164
+ return getNativeSession ().getMaxBinaryMessageBufferSize ();
165
+ }
166
+
143
167
@ Override
144
168
public List <WebSocketExtension > getExtensions () {
145
169
checkNativeSessionInitialized ();
Original file line number Diff line number Diff line change @@ -118,6 +118,26 @@ public List<WebSocketExtension> getExtensions() {
118
118
return this .delegate .getExtensions ();
119
119
}
120
120
121
+ @ Override
122
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
123
+ this .delegate .setTextMessageSizeLimit (messageSizeLimit );
124
+ }
125
+
126
+ @ Override
127
+ public int getTextMessageSizeLimit () {
128
+ return this .delegate .getTextMessageSizeLimit ();
129
+ }
130
+
131
+ @ Override
132
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
133
+ this .delegate .setBinaryMessageSizeLimit (messageSizeLimit );
134
+ }
135
+
136
+ @ Override
137
+ public int getBinaryMessageSizeLimit () {
138
+ return this .delegate .getBinaryMessageSizeLimit ();
139
+ }
140
+
121
141
@ Override
122
142
public boolean isOpen () {
123
143
return this .delegate .isOpen ();
Original file line number Diff line number Diff line change 61
61
*/
62
62
public class StompSubProtocolHandler implements SubProtocolHandler , ApplicationEventPublisherAware {
63
63
64
+ /**
65
+ * This protocol handler supports assembling large STOMP messages split into
66
+ * multiple WebSocket messages. STOMP clients (like stomp.js) split large STOMP
67
+ * messages at 16K boundaries.
68
+ *
69
+ * <p>We need to ensure the WebSocket server buffer is configured to support
70
+ * that size at a minimum plus a little extra for any potential SockJS framing.
71
+ */
72
+ public static final int MINIMUM_WEBSOCKET_MESSAGE_SIZE = 16 * 1024 + 256 ;
73
+
64
74
/**
65
75
* The name of the header set on the CONNECTED frame indicating the name
66
76
* of the user authenticated on the WebSocket session.
@@ -332,6 +342,9 @@ public String resolveSessionId(Message<?> message) {
332
342
333
343
@ Override
334
344
public void afterSessionStarted (WebSocketSession session , MessageChannel outputChannel ) {
345
+ if (session .getTextMessageSizeLimit () < MINIMUM_WEBSOCKET_MESSAGE_SIZE ) {
346
+ session .setTextMessageSizeLimit (MINIMUM_WEBSOCKET_MESSAGE_SIZE );
347
+ }
335
348
this .decoders .put (session .getId (), new BufferingStompDecoder (getMessageSizeLimit ()));
336
349
}
337
350
Original file line number Diff line number Diff line change @@ -148,6 +148,26 @@ public boolean isActive() {
148
148
return (control != null && !control .isCompleted ());
149
149
}
150
150
151
+ @ Override
152
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
153
+ // ignore
154
+ }
155
+
156
+ @ Override
157
+ public int getTextMessageSizeLimit () {
158
+ return -1 ;
159
+ }
160
+
161
+ @ Override
162
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
163
+ // ignore
164
+ }
165
+
166
+ @ Override
167
+ public int getBinaryMessageSizeLimit () {
168
+ return -1 ;
169
+ }
170
+
151
171
@ Override
152
172
public List <WebSocketExtension > getExtensions () {
153
173
return Collections .emptyList ();
Original file line number Diff line number Diff line change @@ -91,6 +91,30 @@ public String getAcceptedProtocol() {
91
91
return this .webSocketSession .getAcceptedProtocol ();
92
92
}
93
93
94
+ @ Override
95
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
96
+ checkDelegateSessionInitialized ();
97
+ this .webSocketSession .setTextMessageSizeLimit (messageSizeLimit );
98
+ }
99
+
100
+ @ Override
101
+ public int getTextMessageSizeLimit () {
102
+ checkDelegateSessionInitialized ();
103
+ return this .webSocketSession .getTextMessageSizeLimit ();
104
+ }
105
+
106
+ @ Override
107
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
108
+ checkDelegateSessionInitialized ();
109
+ this .webSocketSession .setBinaryMessageSizeLimit (messageSizeLimit );
110
+ }
111
+
112
+ @ Override
113
+ public int getBinaryMessageSizeLimit () {
114
+ checkDelegateSessionInitialized ();
115
+ return this .webSocketSession .getBinaryMessageSizeLimit ();
116
+ }
117
+
94
118
@ Override
95
119
public List <WebSocketExtension > getExtensions () {
96
120
checkDelegateSessionInitialized ();
Original file line number Diff line number Diff line change @@ -145,6 +145,24 @@ public void setAcceptedProtocol(String protocol) {
145
145
this .protocol = protocol ;
146
146
}
147
147
148
+ @ Override
149
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
150
+ }
151
+
152
+ @ Override
153
+ public int getTextMessageSizeLimit () {
154
+ return 0 ;
155
+ }
156
+
157
+ @ Override
158
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
159
+ }
160
+
161
+ @ Override
162
+ public int getBinaryMessageSizeLimit () {
163
+ return 0 ;
164
+ }
165
+
148
166
@ Override
149
167
public List <WebSocketExtension > getExtensions () {
150
168
return this .extensions ;
Original file line number Diff line number Diff line change @@ -128,6 +128,24 @@ public void setAcceptedProtocol(String protocol) {
128
128
this .subProtocol = protocol ;
129
129
}
130
130
131
+ @ Override
132
+ public void setTextMessageSizeLimit (int messageSizeLimit ) {
133
+ }
134
+
135
+ @ Override
136
+ public int getTextMessageSizeLimit () {
137
+ return 0 ;
138
+ }
139
+
140
+ @ Override
141
+ public void setBinaryMessageSizeLimit (int messageSizeLimit ) {
142
+ }
143
+
144
+ @ Override
145
+ public int getBinaryMessageSizeLimit () {
146
+ return 0 ;
147
+ }
148
+
131
149
@ Override
132
150
public List <WebSocketExtension > getExtensions () {
133
151
return this .extensions ;
You can’t perform that action at this time.
0 commit comments