| 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 |