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 const String _webSocketGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; | 7 const String _webSocketGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; |
8 const String _clientNoContextTakeover = "client_no_context_takeover"; | 8 const String _clientNoContextTakeover = "client_no_context_takeover"; |
9 const String _serverNoContextTakeover = "server_no_context_takeover"; | 9 const String _serverNoContextTakeover = "server_no_context_takeover"; |
10 const String _clientMaxWindowBits = "client_max_window_bits"; | 10 const String _clientMaxWindowBits = "client_max_window_bits"; |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 }).then(upgrade); | 451 }).then(upgrade); |
452 } else { | 452 } else { |
453 return upgrade(null); | 453 return upgrade(null); |
454 } | 454 } |
455 } | 455 } |
456 | 456 |
457 static _WebSocketPerMessageDeflate _negotiateCompression(HttpRequest request, | 457 static _WebSocketPerMessageDeflate _negotiateCompression(HttpRequest request, |
458 HttpResponse response, CompressionOptions compression) { | 458 HttpResponse response, CompressionOptions compression) { |
459 var extensionHeader = request.headers.value("Sec-WebSocket-Extensions"); | 459 var extensionHeader = request.headers.value("Sec-WebSocket-Extensions"); |
460 | 460 |
461 if (extensionHeader == null) { | 461 extensionHeader ??= ""; |
462 extensionHeader = ""; | |
463 } | |
464 | 462 |
465 var hv = HeaderValue.parse(extensionHeader, valueSeparator: ','); | 463 var hv = HeaderValue.parse(extensionHeader, valueSeparator: ','); |
466 if (compression.enabled && hv.value == _WebSocketImpl.PER_MESSAGE_DEFLATE) { | 464 if (compression.enabled && hv.value == _WebSocketImpl.PER_MESSAGE_DEFLATE) { |
467 var info = compression._createHeader(hv); | 465 var info = compression._createHeader(hv); |
468 | 466 |
469 response.headers.add("Sec-WebSocket-Extensions", info[0]); | 467 response.headers.add("Sec-WebSocket-Extensions", info[0]); |
470 var serverNoContextTakeover = | 468 var serverNoContextTakeover = |
471 hv.parameters.containsKey(_serverNoContextTakeover); | 469 hv.parameters.containsKey(_serverNoContextTakeover); |
472 var clientNoContextTakeover = | 470 var clientNoContextTakeover = |
473 hv.parameters.containsKey(_clientNoContextTakeover); | 471 hv.parameters.containsKey(_clientNoContextTakeover); |
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1231 return code != null && | 1229 return code != null && |
1232 (code < WebSocketStatus.NORMAL_CLOSURE || | 1230 (code < WebSocketStatus.NORMAL_CLOSURE || |
1233 code == WebSocketStatus.RESERVED_1004 || | 1231 code == WebSocketStatus.RESERVED_1004 || |
1234 code == WebSocketStatus.NO_STATUS_RECEIVED || | 1232 code == WebSocketStatus.NO_STATUS_RECEIVED || |
1235 code == WebSocketStatus.ABNORMAL_CLOSURE || | 1233 code == WebSocketStatus.ABNORMAL_CLOSURE || |
1236 (code > WebSocketStatus.INTERNAL_SERVER_ERROR && | 1234 (code > WebSocketStatus.INTERNAL_SERVER_ERROR && |
1237 code < WebSocketStatus.RESERVED_1015) || | 1235 code < WebSocketStatus.RESERVED_1015) || |
1238 (code >= WebSocketStatus.RESERVED_1015 && code < 3000)); | 1236 (code >= WebSocketStatus.RESERVED_1015 && code < 3000)); |
1239 } | 1237 } |
1240 } | 1238 } |
OLD | NEW |