1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.api;
20
21
22
23
24 public class WebSocketPolicy
25 {
26 private static final int KB = 1024;
27
28 public static WebSocketPolicy newClientPolicy()
29 {
30 return new WebSocketPolicy(WebSocketBehavior.CLIENT);
31 }
32
33 public static WebSocketPolicy newServerPolicy()
34 {
35 return new WebSocketPolicy(WebSocketBehavior.SERVER);
36 }
37
38
39
40
41
42
43
44
45 private int maxTextMessageSize = 64 * KB;
46
47
48
49
50
51
52
53
54 private int maxTextMessageBufferSize = 32 * KB;
55
56
57
58
59
60
61
62
63 private int maxBinaryMessageSize = 64 * KB;
64
65
66
67
68
69
70
71
72 private int maxBinaryMessageBufferSize = 32 * KB;
73
74
75
76
77
78
79 private long asyncWriteTimeout = 60000;
80
81
82
83
84
85
86 private long idleTimeout = 300000;
87
88
89
90
91
92
93 private int inputBufferSize = 4 * KB;
94
95
96
97
98 private final WebSocketBehavior behavior;
99
100 public WebSocketPolicy(WebSocketBehavior behavior)
101 {
102 this.behavior = behavior;
103 }
104
105 private void assertLessThan(String name, long size, String otherName, long otherSize)
106 {
107 if (size > otherSize)
108 {
109 throw new IllegalArgumentException(String.format("%s [%d] must be less than %s [%d]",name,size,otherName,otherSize));
110 }
111 }
112
113 private void assertGreaterThan(String name, long size, long minSize)
114 {
115 if (size < minSize)
116 {
117 throw new IllegalArgumentException(String.format("%s [%d] must be a greater than or equal to " + minSize,name,size));
118 }
119 }
120
121 public void assertValidBinaryMessageSize(int requestedSize)
122 {
123 if (maxBinaryMessageSize > 0)
124 {
125
126 if (requestedSize > maxBinaryMessageSize)
127 {
128 throw new MessageTooLargeException("Binary message size [" + requestedSize + "] exceeds maximum size [" + maxBinaryMessageSize + "]");
129 }
130 }
131 }
132
133 public void assertValidTextMessageSize(int requestedSize)
134 {
135 if (maxTextMessageSize > 0)
136 {
137
138 if (requestedSize > maxTextMessageSize)
139 {
140 throw new MessageTooLargeException("Text message size [" + requestedSize + "] exceeds maximum size [" + maxTextMessageSize + "]");
141 }
142 }
143 }
144
145 public WebSocketPolicy clonePolicy()
146 {
147 WebSocketPolicy clone = new WebSocketPolicy(this.behavior);
148 clone.idleTimeout = this.idleTimeout;
149 clone.maxTextMessageSize = this.maxTextMessageSize;
150 clone.maxTextMessageBufferSize = this.maxTextMessageBufferSize;
151 clone.maxBinaryMessageSize = this.maxBinaryMessageSize;
152 clone.maxBinaryMessageBufferSize = this.maxBinaryMessageBufferSize;
153 clone.inputBufferSize = this.inputBufferSize;
154 clone.asyncWriteTimeout = this.asyncWriteTimeout;
155 return clone;
156 }
157
158
159
160
161
162
163
164
165 public long getAsyncWriteTimeout()
166 {
167 return asyncWriteTimeout;
168 }
169
170 public WebSocketBehavior getBehavior()
171 {
172 return behavior;
173 }
174
175
176
177
178
179
180 public long getIdleTimeout()
181 {
182 return idleTimeout;
183 }
184
185
186
187
188
189
190
191
192 public int getInputBufferSize()
193 {
194 return inputBufferSize;
195 }
196
197
198
199
200
201
202 public int getMaxBinaryMessageBufferSize()
203 {
204 return maxBinaryMessageBufferSize;
205 }
206
207
208
209
210
211
212
213
214 public int getMaxBinaryMessageSize()
215 {
216 return maxBinaryMessageSize;
217 }
218
219
220
221
222
223
224 public int getMaxTextMessageBufferSize()
225 {
226 return maxTextMessageBufferSize;
227 }
228
229
230
231
232
233
234
235
236 public int getMaxTextMessageSize()
237 {
238 return maxTextMessageSize;
239 }
240
241
242
243
244
245
246
247
248
249 public void setAsyncWriteTimeout(long ms)
250 {
251 assertLessThan("AsyncWriteTimeout",ms,"IdleTimeout",idleTimeout);
252 this.asyncWriteTimeout = ms;
253 }
254
255
256
257
258
259
260
261 public void setIdleTimeout(long ms)
262 {
263 assertGreaterThan("IdleTimeout",ms,0);
264 this.idleTimeout = ms;
265 }
266
267
268
269
270
271
272
273 public void setInputBufferSize(int size)
274 {
275 assertGreaterThan("InputBufferSize",size,1);
276 assertLessThan("InputBufferSize",size,"MaxTextMessageBufferSize",maxTextMessageBufferSize);
277 assertLessThan("InputBufferSize",size,"MaxBinaryMessageBufferSize",maxBinaryMessageBufferSize);
278
279 this.inputBufferSize = size;
280 }
281
282
283
284
285
286
287
288
289
290 public void setMaxBinaryMessageBufferSize(int size)
291 {
292 assertGreaterThan("MaxBinaryMessageBufferSize",size,1);
293
294 this.maxBinaryMessageBufferSize = size;
295 }
296
297
298
299
300
301
302
303
304
305 public void setMaxBinaryMessageSize(int size)
306 {
307 assertGreaterThan("MaxBinaryMessageSize",size,1);
308
309 this.maxBinaryMessageSize = size;
310 }
311
312
313
314
315
316
317
318
319
320 public void setMaxTextMessageBufferSize(int size)
321 {
322 assertGreaterThan("MaxTextMessageBufferSize",size,1);
323
324 this.maxTextMessageBufferSize = size;
325 }
326
327
328
329
330
331
332
333
334
335 public void setMaxTextMessageSize(int size)
336 {
337 assertGreaterThan("MaxTextMessageSize",size,1);
338
339 this.maxTextMessageSize = size;
340 }
341
342 @Override
343 public String toString()
344 {
345 StringBuilder builder = new StringBuilder();
346 builder.append("WebSocketPolicy@").append(Integer.toHexString(hashCode()));
347 builder.append("[behavior=").append(behavior);
348 builder.append(",maxTextMessageSize=").append(maxTextMessageSize);
349 builder.append(",maxTextMessageBufferSize=").append(maxTextMessageBufferSize);
350 builder.append(",maxBinaryMessageSize=").append(maxBinaryMessageSize);
351 builder.append(",maxBinaryMessageBufferSize=").append(maxBinaryMessageBufferSize);
352 builder.append(",asyncWriteTimeout=").append(asyncWriteTimeout);
353 builder.append(",idleTimeout=").append(idleTimeout);
354 builder.append(",inputBufferSize=").append(inputBufferSize);
355 builder.append("]");
356 return builder.toString();
357 }
358 }