Index: pkg/dev_compiler/tool/input_sdk/lib/io/websocket.dart |
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/io/websocket.dart b/pkg/dev_compiler/tool/input_sdk/lib/io/websocket.dart |
deleted file mode 100644 |
index 183714fedcce843c68425af99c0eb4bda4922254..0000000000000000000000000000000000000000 |
--- a/pkg/dev_compiler/tool/input_sdk/lib/io/websocket.dart |
+++ /dev/null |
@@ -1,410 +0,0 @@ |
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of dart.io; |
- |
-/** |
- * WebSocket status codes used when closing a WebSocket connection. |
- */ |
-abstract class WebSocketStatus { |
- static const int NORMAL_CLOSURE = 1000; |
- 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 NO_STATUS_RECEIVED = 1005; |
- static const int ABNORMAL_CLOSURE = 1006; |
- static const int INVALID_FRAME_PAYLOAD_DATA = 1007; |
- static const int POLICY_VIOLATION = 1008; |
- static const int MESSAGE_TOO_BIG = 1009; |
- static const int MISSING_MANDATORY_EXTENSION = 1010; |
- static const int INTERNAL_SERVER_ERROR = 1011; |
- static const int RESERVED_1015 = 1015; |
-} |
- |
-/** |
- * 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, |
- this.serverMaxWindowBits, |
- 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]. Returns a [_CompressionMaxWindowBits] |
- /// object which contains the response headers and negotiated max window bits. |
- _CompressionMaxWindowBits _createServerResponseHeader(HeaderValue requested) { |
- var info = new _CompressionMaxWindowBits(); |
- |
- int mwb; |
- String part; |
- if (requested?.parameters != null) { |
- 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.headerValue = "; server_max_window_bits=${mwb}"; |
- info.maxWindowBits = mwb; |
- } |
- } else { |
- info.headerValue = ""; |
- info.maxWindowBits = _WebSocketImpl.DEFAULT_WINDOW_BITS; |
- } |
- return info; |
- } |
- |
- /// Returns default values for client compression request headers. |
- String _createClientRequestHeader(HeaderValue requested, int size) { |
- var info = ""; |
- |
- // If responding to a valid request, specify size |
- if (requested != null) { |
- info = "; client_max_window_bits=$size"; |
- } else { |
- // Client request. Specify default |
- if (clientMaxWindowBits == null) { |
- info = "; client_max_window_bits"; |
- } else { |
- info = "; client_max_window_bits=$clientMaxWindowBits"; |
- } |
- if (serverMaxWindowBits != null) { |
- info += "; server_max_window_bits=$serverMaxWindowBits"; |
- } |
- } |
- |
- return info; |
- } |
- |
- /// Create a Compression Header. If [requested] is null or contains |
- /// client request headers, returns Client compression request headers with |
- /// default settings for `client_max_window_bits` header value. |
- /// If [requested] contains server response headers this method returns |
- /// a Server compression response header negotiating the max window bits |
- /// for both client and server as requested server_max_window_bits value. |
- /// This method returns a [_CompressionMaxWindowBits] object with the |
- /// response headers and negotiated maxWindowBits value. |
- _CompressionMaxWindowBits _createHeader([HeaderValue requested]) { |
- var info = new _CompressionMaxWindowBits("", 0); |
- if (!enabled) { |
- return info; |
- } |
- |
- info.headerValue = _WebSocketImpl.PER_MESSAGE_DEFLATE; |
- |
- if (clientNoContextTakeover && |
- (requested == null || (requested != null && |
- requested.parameters.containsKey(_clientNoContextTakeover)))) { |
- info.headerValue += "; client_no_context_takeover"; |
- } |
- |
- if (serverNoContextTakeover && |
- (requested == null || (requested != null && |
- requested.parameters.containsKey(_serverNoContextTakeover)))) { |
- info.headerValue += "; server_no_context_takeover"; |
- } |
- |
- var headerList = _createServerResponseHeader(requested); |
- info.headerValue += headerList.headerValue; |
- info.maxWindowBits = headerList.maxWindowBits; |
- |
- info.headerValue += |
- _createClientRequestHeader(requested, info.maxWindowBits); |
- |
- 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 |
- * [HttpRequest]s. |
- * |
- * To upgrade a single [HttpRequest] use the static [upgrade] method. |
- * |
- * HttpServer server; |
- * server.listen((request) { |
- * if (...) { |
- * WebSocketTransformer.upgrade(request).then((websocket) { |
- * ... |
- * }); |
- * } else { |
- * // Do normal HTTP request processing. |
- * } |
- * }); |
- * |
- * To transform a stream of [HttpRequest] events as it implements a |
- * stream transformer that transforms a stream of HttpRequest into a |
- * stream of WebSockets by upgrading each HttpRequest from the HTTP or |
- * HTTPS server, to the WebSocket protocol. |
- * |
- * server.transform(new WebSocketTransformer()).listen((webSocket) => ...); |
- * |
- * This transformer strives to implement WebSockets as specified by RFC6455. |
- */ |
-abstract class WebSocketTransformer |
- implements StreamTransformer<HttpRequest, WebSocket> { |
- /** |
- * Create a new [WebSocketTransformer]. |
- * |
- * If [protocolSelector] is provided, [protocolSelector] will be called to |
- * select what protocol to use, if any were provided by the client. |
- * [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); |
- |
- /** |
- * Upgrades a [HttpRequest] to a [WebSocket] connection. If the |
- * request is not a valid WebSocket upgrade request an HTTP response |
- * with status code 500 will be returned. Otherwise the returned |
- * future will complete with the [WebSocket] when the upgrade pocess |
- * is complete. |
- * |
- * If [protocolSelector] is provided, [protocolSelector] will be called to |
- * select what protocol to use, if any were provided by the client. |
- * [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); |
- } |
- |
- /** |
- * Checks whether the request is a valid WebSocket upgrade request. |
- */ |
- static bool isUpgradeRequest(HttpRequest request) { |
- return _WebSocketTransformerImpl._isUpgradeRequest(request); |
- } |
-} |
- |
-/** |
- * A two-way HTTP communication object for client or server applications. |
- * |
- * The stream exposes the messages received. A text message will be of type |
- * [:String:] and a binary message will be of type [:List<int>:]. |
- */ |
-abstract class WebSocket implements Stream, StreamSink { |
- /** |
- * Possible states of the connection. |
- */ |
- static const int CONNECTING = 0; |
- static const int OPEN = 1; |
- static const int CLOSING = 2; |
- static const int CLOSED = 3; |
- |
- /** |
- * Set and get the interval for sending ping signals. If a ping message is not |
- * answered by a pong message from the peer, the `WebSocket` is assumed |
- * disconnected and the connection is closed with a |
- * [WebSocketStatus.GOING_AWAY] close code. When a ping signal is sent, the |
- * pong message must be received within [pingInterval]. |
- * |
- * There are never two outstanding pings at any given time, and the next ping |
- * timer starts when the pong is received. |
- * |
- * Set the [pingInterval] to `null` to disable sending ping messages. |
- * |
- * The default value is `null`. |
- */ |
- Duration pingInterval; |
- |
- /** |
- * Create a new WebSocket connection. The URL supplied in [url] |
- * must use the scheme `ws` or `wss`. |
- * |
- * The [protocols] argument is specifying the subprotocols the |
- * client is willing to speak. |
- * |
- * The [headers] argument is specifying additional HTTP headers for |
- * setting up the connection. This would typically be the `Origin` |
- * header and potentially cookies. The keys of the map are the header |
- * fields and the values are either String or List<String>. |
- * |
- * If [headers] is provided, there are a number of headers |
- * which are controlled by the WebSocket connection process. These |
- * headers are: |
- * |
- * - `connection` |
- * - `sec-websocket-key` |
- * - `sec-websocket-protocol` |
- * - `sec-websocket-version` |
- * - `upgrade` |
- * |
- * If any of these are passed in the `headers` map they will be ignored. |
- * |
- * If the `url` contains user information this will be passed as basic |
- * 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); |
- |
- @Deprecated('This constructor will be removed in Dart 2.0. Use `implements`' |
- ' instead of `extends` if implementing this abstract class.') |
- WebSocket(); |
- |
- /** |
- * Creates a WebSocket from an already-upgraded socket. |
- * |
- * The initial WebSocket handshake must have occurred prior to this call. A |
- * WebSocket client can automatically perform the handshake using |
- * [WebSocket.connect], while a server can do so using |
- * [WebSocketTransformer.upgrade]. To manually upgrade an [HttpRequest], |
- * [HttpRequest.detachSocket] may be called. |
- * |
- * [protocol] should be the protocol negotiated by this handshake, if any. |
- * |
- * [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}) { |
- if (serverSide == null) { |
- throw new ArgumentError("The serverSide argument must be passed " |
- "explicitly to WebSocket.fromUpgradedSocket."); |
- } |
- return new _WebSocketImpl._fromSocket( |
- socket, protocol, compression, serverSide); |
- } |
- |
- /** |
- * Returns the current state of the connection. |
- */ |
- int get readyState; |
- |
- /** |
- * The extensions property is initially the empty string. After the |
- * WebSocket connection is established this string reflects the |
- * extensions used by the server. |
- */ |
- String get extensions; |
- |
- /** |
- * The protocol property is initially the empty string. After the |
- * WebSocket connection is established the value is the subprotocol |
- * selected by the server. If no subprotocol is negotiated the |
- * value will remain [:null:]. |
- */ |
- String get protocol; |
- |
- /** |
- * The close code set when the WebSocket connection is closed. If |
- * there is no close code available this property will be [:null:] |
- */ |
- int get closeCode; |
- |
- /** |
- * The close reason set when the WebSocket connection is closed. If |
- * there is no close reason available this property will be [:null:] |
- */ |
- String get closeReason; |
- |
- /** |
- * Closes the WebSocket connection. Set the optional [code] and [reason] |
- * arguments to send close information to the remote peer. If they are |
- * omitted, the peer will see [WebSocketStatus.NO_STATUS_RECEIVED] code |
- * with no reason. |
- */ |
- Future close([int code, String reason]); |
- |
- /** |
- * Sends data on the WebSocket connection. The data in [data] must |
- * be either a [:String:], or a [:List<int>:] holding bytes. |
- */ |
- void add(data); |
- |
- /** |
- * Sends data from a stream on WebSocket connection. Each data event from |
- * [stream] will be send as a single WebSocket frame. The data from [stream] |
- * must be either [:String:]s, or [:List<int>:]s holding bytes. |
- */ |
- Future addStream(Stream stream); |
-} |
- |
-class WebSocketException implements IOException { |
- final String message; |
- |
- const WebSocketException([this.message = ""]); |
- |
- String toString() => "WebSocketException: $message"; |
-} |