OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart.io; | 5 part of dart.io; |
6 | 6 |
7 /** | 7 /** |
8 * WebSocket status codes used when closing a WebSocket connection. | 8 * WebSocket status codes used when closing a WebSocket connection. |
9 */ | 9 */ |
10 abstract class WebSocketStatus { | 10 abstract class WebSocketStatus { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 String part; | 88 String part; |
89 if (requested?.parameters != null) { | 89 if (requested?.parameters != null) { |
90 part = requested.parameters[_serverMaxWindowBits]; | 90 part = requested.parameters[_serverMaxWindowBits]; |
91 } | 91 } |
92 if (part != null) { | 92 if (part != null) { |
93 if (part.length >= 2 && part.startsWith('0')) { | 93 if (part.length >= 2 && part.startsWith('0')) { |
94 throw new ArgumentError("Illegal 0 padding on value."); | 94 throw new ArgumentError("Illegal 0 padding on value."); |
95 } else { | 95 } else { |
96 mwb = serverMaxWindowBits == null | 96 mwb = serverMaxWindowBits == null |
97 ? int.parse(part, | 97 ? int.parse(part, |
98 onError: (source) => _WebSocketImpl.DEFAULT_WINDOW_BITS) | 98 onError: (source) => _WebSocketImpl.DEFAULT_WINDOW_BITS) |
99 : serverMaxWindowBits; | 99 : serverMaxWindowBits; |
100 info.headerValue = "; server_max_window_bits=${mwb}"; | 100 info.headerValue = "; server_max_window_bits=${mwb}"; |
101 info.maxWindowBits = mwb; | 101 info.maxWindowBits = mwb; |
102 } | 102 } |
103 } else { | 103 } else { |
104 info.headerValue = ""; | 104 info.headerValue = ""; |
105 info.maxWindowBits = _WebSocketImpl.DEFAULT_WINDOW_BITS; | 105 info.maxWindowBits = _WebSocketImpl.DEFAULT_WINDOW_BITS; |
106 } | 106 } |
107 return info; | 107 return info; |
108 } | 108 } |
(...skipping 30 matching lines...) Expand all Loading... |
139 /// response headers and negotiated maxWindowBits value. | 139 /// response headers and negotiated maxWindowBits value. |
140 _CompressionMaxWindowBits _createHeader([HeaderValue requested]) { | 140 _CompressionMaxWindowBits _createHeader([HeaderValue requested]) { |
141 var info = new _CompressionMaxWindowBits("", 0); | 141 var info = new _CompressionMaxWindowBits("", 0); |
142 if (!enabled) { | 142 if (!enabled) { |
143 return info; | 143 return info; |
144 } | 144 } |
145 | 145 |
146 info.headerValue = _WebSocketImpl.PER_MESSAGE_DEFLATE; | 146 info.headerValue = _WebSocketImpl.PER_MESSAGE_DEFLATE; |
147 | 147 |
148 if (clientNoContextTakeover && | 148 if (clientNoContextTakeover && |
149 (requested == null || (requested != null && | 149 (requested == null || |
150 requested.parameters.containsKey(_clientNoContextTakeover)))) { | 150 (requested != null && |
| 151 requested.parameters.containsKey(_clientNoContextTakeover)))) { |
151 info.headerValue += "; client_no_context_takeover"; | 152 info.headerValue += "; client_no_context_takeover"; |
152 } | 153 } |
153 | 154 |
154 if (serverNoContextTakeover && | 155 if (serverNoContextTakeover && |
155 (requested == null || (requested != null && | 156 (requested == null || |
156 requested.parameters.containsKey(_serverNoContextTakeover)))) { | 157 (requested != null && |
| 158 requested.parameters.containsKey(_serverNoContextTakeover)))) { |
157 info.headerValue += "; server_no_context_takeover"; | 159 info.headerValue += "; server_no_context_takeover"; |
158 } | 160 } |
159 | 161 |
160 var headerList = _createServerResponseHeader(requested); | 162 var headerList = _createServerResponseHeader(requested); |
161 info.headerValue += headerList.headerValue; | 163 info.headerValue += headerList.headerValue; |
162 info.maxWindowBits = headerList.maxWindowBits; | 164 info.maxWindowBits = headerList.maxWindowBits; |
163 | 165 |
164 info.headerValue += | 166 info.headerValue += |
165 _createClientRequestHeader(requested, info.maxWindowBits); | 167 _createClientRequestHeader(requested, info.maxWindowBits); |
166 | 168 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 } | 251 } |
250 } | 252 } |
251 | 253 |
252 /** | 254 /** |
253 * A two-way HTTP communication object for client or server applications. | 255 * A two-way HTTP communication object for client or server applications. |
254 * | 256 * |
255 * The stream exposes the messages received. A text message will be of type | 257 * The stream exposes the messages received. A text message will be of type |
256 * `String` and a binary message will be of type `List<int>`. | 258 * `String` and a binary message will be of type `List<int>`. |
257 */ | 259 */ |
258 abstract class WebSocket | 260 abstract class WebSocket |
259 implements Stream<dynamic/*String|List<int>*/>, | 261 implements |
260 StreamSink<dynamic/*String|List<int>*/> { | 262 Stream<dynamic /*String|List<int>*/ >, |
| 263 StreamSink<dynamic /*String|List<int>*/ > { |
261 /** | 264 /** |
262 * Possible states of the connection. | 265 * Possible states of the connection. |
263 */ | 266 */ |
264 static const int CONNECTING = 0; | 267 static const int CONNECTING = 0; |
265 static const int OPEN = 1; | 268 static const int OPEN = 1; |
266 static const int CLOSING = 2; | 269 static const int CLOSING = 2; |
267 static const int CLOSED = 3; | 270 static const int CLOSED = 3; |
268 | 271 |
269 /** | 272 /** |
270 * Set and get the interval for sending ping signals. If a ping message is not | 273 * Set and get the interval for sending ping signals. If a ping message is not |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 void addUtf8Text(List<int> bytes); | 415 void addUtf8Text(List<int> bytes); |
413 } | 416 } |
414 | 417 |
415 class WebSocketException implements IOException { | 418 class WebSocketException implements IOException { |
416 final String message; | 419 final String message; |
417 | 420 |
418 const WebSocketException([this.message = ""]); | 421 const WebSocketException([this.message = ""]); |
419 | 422 |
420 String toString() => "WebSocketException: $message"; | 423 String toString() => "WebSocketException: $message"; |
421 } | 424 } |
OLD | NEW |