| Index: sdk/lib/io/websocket.dart
|
| diff --git a/sdk/lib/io/websocket.dart b/sdk/lib/io/websocket.dart
|
| index 5170bde89e6e45766c476c44122db6333be93f6f..599e295c60ac92923dc620303830b986b8522f96 100644
|
| --- a/sdk/lib/io/websocket.dart
|
| +++ b/sdk/lib/io/websocket.dart
|
| @@ -12,7 +12,7 @@ abstract class WebSocketStatus {
|
| static const int GOING_AWAY = 1001;
|
| static const int PROTOCOL_ERROR = 1002;
|
| static const int UNSUPPORTED_DATA = 1003;
|
| - static const int RESERVED_1004 = 1004;
|
| + static const int RESERVED_1004 = 1004;
|
| static const int NO_STATUS_RECEIVED = 1005;
|
| static const int ABNORMAL_CLOSURE = 1006;
|
| static const int INVALID_FRAME_PAYLOAD_DATA = 1007;
|
| @@ -24,141 +24,6 @@ abstract class WebSocketStatus {
|
| }
|
|
|
| /**
|
| - * The [CompressionOptions] class allows you to control
|
| - * the options of WebSocket compression.
|
| - */
|
| -class CompressionOptions {
|
| - /**
|
| - * Default WebSocket Compression options.
|
| - * Compression will be enabled with the following options:
|
| - * clientNoContextTakeover: false
|
| - * serverNoContextTakeover: false
|
| - * clientMaxWindowBits: 15
|
| - * serverMaxWindowBits: 15
|
| - */
|
| - static const CompressionOptions DEFAULT = const CompressionOptions();
|
| -
|
| - /**
|
| - * Disables WebSocket Compression.
|
| - */
|
| - static const CompressionOptions OFF =
|
| - const CompressionOptions(enabled: false);
|
| -
|
| - /**
|
| - * Control whether the client will reuse it's compression instances.
|
| - */
|
| - final bool clientNoContextTakeover;
|
| -
|
| - /**
|
| - * Control whether the server will reuse it's compression instances.
|
| - */
|
| - final bool serverNoContextTakeover;
|
| -
|
| - /**
|
| - * Sets the Max Window Bits for the Client.
|
| - */
|
| - final int clientMaxWindowBits;
|
| -
|
| - /**
|
| - * Sets the Max Window Bits for the Server.
|
| - */
|
| - final int serverMaxWindowBits;
|
| -
|
| - /**
|
| - * Enables or disables WebSocket compression.
|
| - */
|
| - final bool enabled;
|
| -
|
| - const CompressionOptions(
|
| - {this.clientNoContextTakeover: false,
|
| - this.serverNoContextTakeover: false,
|
| - this.clientMaxWindowBits: _WebSocketImpl.DEFAULT_WINDOW_BITS,
|
| - this.serverMaxWindowBits: _WebSocketImpl.DEFAULT_WINDOW_BITS,
|
| - this.enabled: true});
|
| -
|
| - /// Parses list of requested server headers to return server compression
|
| - /// response headers. Uses [serverMaxWindowBits] value if set, otherwise will
|
| - /// attempt to use value from headers. Defaults to
|
| - /// [WebSocket.DEFAULT_WINDOW_BITS]
|
| - List _createServerResponseHeader(HeaderValue requested) {
|
| - var info = new List(2);
|
| -
|
| - int mwb;
|
| - var part = requested.parameters[_serverMaxWindowBits];
|
| - if (part != null) {
|
| - if (part.length >= 2 && part.startsWith('0')) {
|
| - throw new ArgumentError("Illegal 0 padding on value.");
|
| - } else {
|
| - mwb = serverMaxWindowBits == null
|
| - ? int.parse(part,
|
| - onError: (source) => _WebSocketImpl.DEFAULT_WINDOW_BITS)
|
| - : serverMaxWindowBits;
|
| - info[0] = "; server_max_window_bits=${mwb}";
|
| - info[1] = mwb;
|
| - }
|
| - } else {
|
| - info[1] = _WebSocketImpl.DEFAULT_WINDOW_BITS;
|
| - }
|
| - return info;
|
| - }
|
| -
|
| - /// Returns default values for client compression request headers.
|
| - List _createClientRequestHeader(HeaderValue requested) {
|
| - var info = new List(2);
|
| -
|
| - info[1] = _WebSocketImpl.DEFAULT_WINDOW_BITS;
|
| - if (requested != null &&
|
| - requested.parameters[_clientMaxWindowBits] != null) {
|
| - info[0] = "; client_max_window_bits=${info[1]}";
|
| - } else {
|
| - info[0] = "; client_max_window_bits";
|
| - }
|
| -
|
| - return info;
|
| - }
|
| -
|
| - /// Create a Compression Header. If [requested] is null or contains
|
| - /// client request headers, returns Client compression request headers.
|
| - /// If [requested] contains server response headers this method returns
|
| - /// a Server compression response header.
|
| - List _createHeader([HeaderValue requested]) {
|
| - if (!enabled) {
|
| - return ["", 0];
|
| - }
|
| -
|
| - var info = new List(2);
|
| - var header = _WebSocketImpl.PER_MESSAGE_DEFLATE;
|
| -
|
| - if (clientNoContextTakeover &&
|
| - (requested != null &&
|
| - requested.parameters.containsKey(_clientNoContextTakeover))) {
|
| - header += "; client_no_context_takeover";
|
| - }
|
| -
|
| - if (serverNoContextTakeover &&
|
| - (requested != null &&
|
| - requested.parameters.containsKey(_serverNoContextTakeover))) {
|
| - header += "; server_no_context_takeover";
|
| - }
|
| -
|
| - if (requested == null ||
|
| - requested.parameters.containsKey(_clientMaxWindowBits)) {
|
| - var clientList = _createClientRequestHeader(requested);
|
| - header += clientList[0];
|
| - info[1] = clientList[1];
|
| - } else {
|
| - var headerList = _createServerResponseHeader(requested);
|
| - header += headerList[0];
|
| - info[1] = headerList[1];
|
| - }
|
| -
|
| - info[0] = header;
|
| -
|
| - return info;
|
| - }
|
| -}
|
| -
|
| -/**
|
| * The [WebSocketTransformer] provides the ability to upgrade a
|
| * [HttpRequest] to a [WebSocket] connection. It supports both
|
| * upgrading a single [HttpRequest] and upgrading a stream of
|
| @@ -188,6 +53,7 @@ class CompressionOptions {
|
| */
|
| abstract class WebSocketTransformer
|
| implements StreamTransformer<HttpRequest, WebSocket> {
|
| +
|
| /**
|
| * Create a new [WebSocketTransformer].
|
| *
|
| @@ -196,15 +62,9 @@ abstract class WebSocketTransformer
|
| * [protocolSelector] is should return either a [String] or a [Future]
|
| * completing with a [String]. The [String] must exist in the list of
|
| * protocols.
|
| - *
|
| - * If [compression] is provided, the [WebSocket] created will be configured
|
| - * to negotiate with the specified [CompressionOptions]. If none is specified
|
| - * then the [WebSocket] will be created with the default [CompressionOptions].
|
| */
|
| - factory WebSocketTransformer(
|
| - {protocolSelector(List<String> protocols),
|
| - CompressionOptions compression: CompressionOptions.DEFAULT}) =>
|
| - new _WebSocketTransformerImpl(protocolSelector, compression);
|
| + factory WebSocketTransformer({protocolSelector(List<String> protocols)})
|
| + => new _WebSocketTransformerImpl(protocolSelector);
|
|
|
| /**
|
| * Upgrades a [HttpRequest] to a [WebSocket] connection. If the
|
| @@ -218,16 +78,10 @@ abstract class WebSocketTransformer
|
| * [protocolSelector] is should return either a [String] or a [Future]
|
| * completing with a [String]. The [String] must exist in the list of
|
| * protocols.
|
| - *
|
| - * If [compression] is provided, the [WebSocket] created will be configured
|
| - * to negotiate with the specified [CompressionOptions]. If none is specified
|
| - * then the [WebSocket] will be created with the default [CompressionOptions].
|
| */
|
| static Future<WebSocket> upgrade(HttpRequest request,
|
| - {protocolSelector(List<String> protocols),
|
| - CompressionOptions compression: CompressionOptions.DEFAULT}) {
|
| - return _WebSocketTransformerImpl._upgrade(
|
| - request, protocolSelector, compression);
|
| + {protocolSelector(List<String> protocols)}) {
|
| + return _WebSocketTransformerImpl._upgrade(request, protocolSelector);
|
| }
|
|
|
| /**
|
| @@ -238,6 +92,7 @@ abstract class WebSocketTransformer
|
| }
|
| }
|
|
|
| +
|
| /**
|
| * A two-way HTTP communication object for client or server applications.
|
| *
|
| @@ -297,10 +152,9 @@ abstract class WebSocket implements Stream, StreamSink {
|
| * authentication when setting up the connection.
|
| */
|
| static Future<WebSocket> connect(String url,
|
| - {Iterable<String> protocols,
|
| - Map<String, dynamic> headers,
|
| - CompressionOptions compression: CompressionOptions.DEFAULT}) =>
|
| - _WebSocketImpl.connect(url, protocols, headers, compression: compression);
|
| + {Iterable<String> protocols,
|
| + Map<String, dynamic> headers}) =>
|
| + _WebSocketImpl.connect(url, protocols, headers);
|
|
|
| @Deprecated('This constructor will be removed in Dart 2.0. Use `implements`'
|
| ' instead of `extends` if implementing this abstract class.')
|
| @@ -320,21 +174,14 @@ abstract class WebSocket implements Stream, StreamSink {
|
| * [serverSide] must be passed explicitly. If it's `false`, the WebSocket will
|
| * act as the client and mask the messages it sends. If it's `true`, it will
|
| * act as the server and will not mask its messages.
|
| - *
|
| - * If [compression] is provided, the [WebSocket] created will be configured
|
| - * to negotiate with the specified [CompressionOptions]. If none is specified
|
| - * then the [WebSocket] will be created with the default [CompressionOptions].
|
| */
|
| - factory WebSocket.fromUpgradedSocket(Socket socket,
|
| - {String protocol,
|
| - bool serverSide,
|
| - CompressionOptions compression: CompressionOptions.DEFAULT}) {
|
| + factory WebSocket.fromUpgradedSocket(Socket socket, {String protocol,
|
| + bool serverSide}) {
|
| if (serverSide == null) {
|
| throw new ArgumentError("The serverSide argument must be passed "
|
| "explicitly to WebSocket.fromUpgradedSocket.");
|
| }
|
| - return new _WebSocketImpl._fromSocket(
|
| - socket, protocol, compression, serverSide);
|
| + return new _WebSocketImpl._fromSocket(socket, protocol, serverSide);
|
| }
|
|
|
| /**
|
| @@ -391,10 +238,9 @@ abstract class WebSocket implements Stream, StreamSink {
|
| Future addStream(Stream stream);
|
| }
|
|
|
| +
|
| class WebSocketException implements IOException {
|
| final String message;
|
| -
|
| const WebSocketException([this.message = ""]);
|
| -
|
| String toString() => "WebSocketException: $message";
|
| }
|
|
|