Chromium Code Reviews| 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 /** | 7 /** |
| 8 * WebSocket status codes used when closing a WebSocket connection. | 8 * WebSocket status codes used when closing a WebSocket connection. |
| 9 */ | 9 */ |
| 10 abstract class WebSocketStatus { | 10 abstract class WebSocketStatus { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 const CompressionOptions( | 72 const CompressionOptions( |
| 73 {this.clientNoContextTakeover: false, | 73 {this.clientNoContextTakeover: false, |
| 74 this.serverNoContextTakeover: false, | 74 this.serverNoContextTakeover: false, |
| 75 this.clientMaxWindowBits: _WebSocketImpl.DEFAULT_WINDOW_BITS, | 75 this.clientMaxWindowBits: _WebSocketImpl.DEFAULT_WINDOW_BITS, |
| 76 this.serverMaxWindowBits: _WebSocketImpl.DEFAULT_WINDOW_BITS, | 76 this.serverMaxWindowBits: _WebSocketImpl.DEFAULT_WINDOW_BITS, |
| 77 this.enabled: true}); | 77 this.enabled: true}); |
| 78 | 78 |
| 79 /// Parses list of requested server headers to return server compression | 79 /// Parses list of requested server headers to return server compression |
| 80 /// response headers. Uses [serverMaxWindowBits] value if set, otherwise will | 80 /// response headers. Uses [serverMaxWindowBits] value if set, otherwise will |
| 81 /// attempt to use value from headers. Defaults to | 81 /// attempt to use value from headers. Defaults to |
| 82 /// [WebSocket.DEFAULT_WINDOW_BITS] | 82 /// [WebSocket.DEFAULT_WINDOW_BITS] |
|
Søren Gjesse
2015/11/11 13:31:08
Please update the documentation to explain the two
butlermatt
2015/11/11 18:26:30
Done.
| |
| 83 List _createServerResponseHeader(HeaderValue requested) { | 83 List _createServerResponseHeader(HeaderValue requested) { |
| 84 var info = new List(2); | 84 var info = new List(2); |
| 85 | 85 |
| 86 int mwb; | 86 int mwb; |
| 87 var part = requested.parameters[_serverMaxWindowBits]; | 87 String part; |
| 88 if (requested?.parameters != null) { | |
| 89 part = requested.parameters[_serverMaxWindowBits]; | |
| 90 } | |
| 88 if (part != null) { | 91 if (part != null) { |
| 89 if (part.length >= 2 && part.startsWith('0')) { | 92 if (part.length >= 2 && part.startsWith('0')) { |
| 90 throw new ArgumentError("Illegal 0 padding on value."); | 93 throw new ArgumentError("Illegal 0 padding on value."); |
| 91 } else { | 94 } else { |
| 92 mwb = serverMaxWindowBits == null | 95 mwb = serverMaxWindowBits == null |
| 93 ? int.parse(part, | 96 ? int.parse(part, |
| 94 onError: (source) => _WebSocketImpl.DEFAULT_WINDOW_BITS) | 97 onError: (source) => _WebSocketImpl.DEFAULT_WINDOW_BITS) |
| 95 : serverMaxWindowBits; | 98 : serverMaxWindowBits; |
| 96 info[0] = "; server_max_window_bits=${mwb}"; | 99 info[0] = "; server_max_window_bits=${mwb}"; |
| 97 info[1] = mwb; | 100 info[1] = mwb; |
| 98 } | 101 } |
| 99 } else { | 102 } else { |
| 103 info[0] = ""; | |
| 100 info[1] = _WebSocketImpl.DEFAULT_WINDOW_BITS; | 104 info[1] = _WebSocketImpl.DEFAULT_WINDOW_BITS; |
| 101 } | 105 } |
| 102 return info; | 106 return info; |
| 103 } | 107 } |
| 104 | 108 |
| 105 /// Returns default values for client compression request headers. | 109 /// Returns default values for client compression request headers. |
| 106 List _createClientRequestHeader(HeaderValue requested) { | 110 List _createClientRequestHeader(HeaderValue requested, int size) { |
|
Søren Gjesse
2015/11/11 13:31:08
This is no longer returning a List.
butlermatt
2015/11/11 18:26:30
Done.
| |
| 107 var info = new List(2); | 111 var info = ""; |
| 108 | 112 |
| 109 info[1] = _WebSocketImpl.DEFAULT_WINDOW_BITS; | 113 // If responding to a valid request, specify size |
| 110 if (requested != null && | 114 if (requested != null) { |
| 111 requested.parameters[_clientMaxWindowBits] != null) { | 115 info = "; client_max_window_bits=$size"; |
| 112 info[0] = "; client_max_window_bits=${info[1]}"; | |
| 113 } else { | 116 } else { |
| 114 info[0] = "; client_max_window_bits"; | 117 // Client request. Specify default |
| 118 info = "; client_max_window_bits"; | |
| 115 } | 119 } |
| 116 | 120 |
| 117 return info; | 121 return info; |
| 118 } | 122 } |
| 119 | 123 |
| 120 /// Create a Compression Header. If [requested] is null or contains | 124 /// Create a Compression Header. If [requested] is null or contains |
| 121 /// client request headers, returns Client compression request headers. | 125 /// client request headers, returns Client compression request headers. |
| 122 /// If [requested] contains server response headers this method returns | 126 /// If [requested] contains server response headers this method returns |
| 123 /// a Server compression response header. | 127 /// a Server compression response header. |
| 124 List _createHeader([HeaderValue requested]) { | 128 List _createHeader([HeaderValue requested]) { |
|
Søren Gjesse
2015/11/11 13:31:08
See above.
butlermatt
2015/11/11 18:26:30
Done.
| |
| 125 if (!enabled) { | 129 if (!enabled) { |
| 126 return ["", 0]; | 130 return ["", 0]; |
| 127 } | 131 } |
| 128 | 132 |
| 129 var info = new List(2); | 133 var info = new List(2); |
| 130 var header = _WebSocketImpl.PER_MESSAGE_DEFLATE; | 134 var header = _WebSocketImpl.PER_MESSAGE_DEFLATE; |
| 131 | 135 |
| 132 if (clientNoContextTakeover && | 136 if (clientNoContextTakeover && |
| 133 (requested != null && | 137 (requested != null && |
| 134 requested.parameters.containsKey(_clientNoContextTakeover))) { | 138 requested.parameters.containsKey(_clientNoContextTakeover))) { |
| 135 header += "; client_no_context_takeover"; | 139 header += "; client_no_context_takeover"; |
| 136 } | 140 } |
| 137 | 141 |
| 138 if (serverNoContextTakeover && | 142 if (serverNoContextTakeover && |
| 139 (requested != null && | 143 (requested != null && |
| 140 requested.parameters.containsKey(_serverNoContextTakeover))) { | 144 requested.parameters.containsKey(_serverNoContextTakeover))) { |
| 141 header += "; server_no_context_takeover"; | 145 header += "; server_no_context_takeover"; |
| 142 } | 146 } |
| 143 | 147 |
| 144 if (requested == null || | 148 var headerList = _createServerResponseHeader(requested); |
| 145 requested.parameters.containsKey(_clientMaxWindowBits)) { | 149 header += headerList[0]; |
| 146 var clientList = _createClientRequestHeader(requested); | 150 info[1] = headerList[1]; |
| 147 header += clientList[0]; | 151 |
| 148 info[1] = clientList[1]; | 152 var clientList = _createClientRequestHeader(requested, info[1]); |
| 149 } else { | 153 header += clientList; |
| 150 var headerList = _createServerResponseHeader(requested); | |
| 151 header += headerList[0]; | |
| 152 info[1] = headerList[1]; | |
| 153 } | |
| 154 | 154 |
| 155 info[0] = header; | 155 info[0] = header; |
| 156 | |
| 157 return info; | 156 return info; |
| 158 } | 157 } |
| 159 } | 158 } |
| 160 | 159 |
| 161 /** | 160 /** |
| 162 * The [WebSocketTransformer] provides the ability to upgrade a | 161 * The [WebSocketTransformer] provides the ability to upgrade a |
| 163 * [HttpRequest] to a [WebSocket] connection. It supports both | 162 * [HttpRequest] to a [WebSocket] connection. It supports both |
| 164 * upgrading a single [HttpRequest] and upgrading a stream of | 163 * upgrading a single [HttpRequest] and upgrading a stream of |
| 165 * [HttpRequest]s. | 164 * [HttpRequest]s. |
| 166 * | 165 * |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 391 Future addStream(Stream stream); | 390 Future addStream(Stream stream); |
| 392 } | 391 } |
| 393 | 392 |
| 394 class WebSocketException implements IOException { | 393 class WebSocketException implements IOException { |
| 395 final String message; | 394 final String message; |
| 396 | 395 |
| 397 const WebSocketException([this.message = ""]); | 396 const WebSocketException([this.message = ""]); |
| 398 | 397 |
| 399 String toString() => "WebSocketException: $message"; | 398 String toString() => "WebSocketException: $message"; |
| 400 } | 399 } |
| OLD | NEW |