| Index: sdk/lib/io/websocket_impl.dart
|
| diff --git a/sdk/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
|
| index bcb800d84aa80e8f4ca0d812f641b231012f9336..879d05e6c7835f9e23784455eef031919188a1ea 100644
|
| --- a/sdk/lib/io/websocket_impl.dart
|
| +++ b/sdk/lib/io/websocket_impl.dart
|
| @@ -37,6 +37,18 @@ class _WebSocketOpcode {
|
| }
|
|
|
| /**
|
| + * Stores the header and integer value derived from negotiation of
|
| + * client_max_window_bits and server_max_window_bits. headerValue will be
|
| + * set in the Websocket response headers.
|
| + */
|
| +class _CompressionMaxWindowBits {
|
| + String headerValue;
|
| + int maxWindowBits;
|
| + _CompressionMaxWindowBits([this.headerValue, this.maxWindowBits]);
|
| + String toString() => headerValue;
|
| +}
|
| +
|
| +/**
|
| * The web socket protocol transformer handles the protocol byte stream
|
| * which is supplied through the [:handleData:]. As the protocol is processed,
|
| * it'll output frame data as either a List<int> or String.
|
| @@ -458,15 +470,13 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| HttpResponse response, CompressionOptions compression) {
|
| var extensionHeader = request.headers.value("Sec-WebSocket-Extensions");
|
|
|
| - if (extensionHeader == null) {
|
| - extensionHeader = "";
|
| - }
|
| + extensionHeader ??= "";
|
|
|
| var hv = HeaderValue.parse(extensionHeader, valueSeparator: ',');
|
| if (compression.enabled && hv.value == _WebSocketImpl.PER_MESSAGE_DEFLATE) {
|
| var info = compression._createHeader(hv);
|
|
|
| - response.headers.add("Sec-WebSocket-Extensions", info[0]);
|
| + response.headers.add("Sec-WebSocket-Extensions", info.headerValue);
|
| var serverNoContextTakeover =
|
| hv.parameters.containsKey(_serverNoContextTakeover);
|
| var clientNoContextTakeover =
|
| @@ -474,8 +484,8 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| var deflate = new _WebSocketPerMessageDeflate(
|
| serverNoContextTakeover: serverNoContextTakeover,
|
| clientNoContextTakeover: clientNoContextTakeover,
|
| - serverMaxWindowBits: info[1],
|
| - clientMaxWindowBits: info[1],
|
| + serverMaxWindowBits: info.maxWindowBits,
|
| + clientMaxWindowBits: info.maxWindowBits,
|
| serverSide: true);
|
|
|
| return deflate;
|
|
|