Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: sdk/lib/io/websocket_impl.dart

Issue 2260073002: RFC: Sending pre-encoded text over a web socket. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: error message Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sdk/lib/io/websocket.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 18 matching lines...) Expand all
29 static const int CLOSE = 8; 29 static const int CLOSE = 8;
30 static const int PING = 9; 30 static const int PING = 9;
31 static const int PONG = 10; 31 static const int PONG = 10;
32 static const int RESERVED_B = 11; 32 static const int RESERVED_B = 11;
33 static const int RESERVED_C = 12; 33 static const int RESERVED_C = 12;
34 static const int RESERVED_D = 13; 34 static const int RESERVED_D = 13;
35 static const int RESERVED_E = 14; 35 static const int RESERVED_E = 14;
36 static const int RESERVED_F = 15; 36 static const int RESERVED_F = 15;
37 } 37 }
38 38
39 class _EncodedString {
40 final List<int> bytes;
41 _EncodedString(this.bytes);
42 }
43
39 /** 44 /**
40 * Stores the header and integer value derived from negotiation of 45 * Stores the header and integer value derived from negotiation of
41 * client_max_window_bits and server_max_window_bits. headerValue will be 46 * client_max_window_bits and server_max_window_bits. headerValue will be
42 * set in the Websocket response headers. 47 * set in the Websocket response headers.
43 */ 48 */
44 class _CompressionMaxWindowBits { 49 class _CompressionMaxWindowBits {
45 String headerValue; 50 String headerValue;
46 int maxWindowBits; 51 int maxWindowBits;
47 _CompressionMaxWindowBits([this.headerValue, this.maxWindowBits]); 52 _CompressionMaxWindowBits([this.headerValue, this.maxWindowBits]);
48 String toString() => headerValue; 53 String toString() => headerValue;
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 if (message is _WebSocketPing) { 668 if (message is _WebSocketPing) {
664 addFrame(_WebSocketOpcode.PING, message.payload); 669 addFrame(_WebSocketOpcode.PING, message.payload);
665 return; 670 return;
666 } 671 }
667 List<int> data; 672 List<int> data;
668 int opcode; 673 int opcode;
669 if (message != null) { 674 if (message != null) {
670 if (message is String) { 675 if (message is String) {
671 opcode = _WebSocketOpcode.TEXT; 676 opcode = _WebSocketOpcode.TEXT;
672 data = UTF8.encode(message); 677 data = UTF8.encode(message);
678 } else if (message is List<int>) {
679 opcode = _WebSocketOpcode.BINARY;
680 data = message;
681 } else if (message is _EncodedString) {
682 opcode = _WebSocketOpcode.TEXT;
683 data = message.bytes;
673 } else { 684 } else {
674 if (message is List<int>) { 685 throw new ArgumentError(message);
675 opcode = _WebSocketOpcode.BINARY;
676 data = message;
677 } else {
678 throw new ArgumentError(message);
679 }
680 } 686 }
681 687
682 if (_deflateHelper != null) { 688 if (_deflateHelper != null) {
683 data = _deflateHelper.processOutgoingMessage(data); 689 data = _deflateHelper.processOutgoingMessage(data);
684 } 690 }
685 } else { 691 } else {
686 opcode = _WebSocketOpcode.TEXT; 692 opcode = _WebSocketOpcode.TEXT;
687 } 693 }
688 addFrame(opcode, data); 694 addFrame(opcode, data);
689 } 695 }
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 }); 1175 });
1170 } 1176 }
1171 1177
1172 int get readyState => _readyState; 1178 int get readyState => _readyState;
1173 1179
1174 String get extensions => null; 1180 String get extensions => null;
1175 int get closeCode => _closeCode; 1181 int get closeCode => _closeCode;
1176 String get closeReason => _closeReason; 1182 String get closeReason => _closeReason;
1177 1183
1178 void add(data) { _sink.add(data); } 1184 void add(data) { _sink.add(data); }
1185 void addUtf8Text(List<int> bytes) {
1186 if (bytes is! List<int>) {
1187 throw new ArgumentError(bytes, "bytes", "Is not a list of bytes");
1188 }
1189 _sink.add(new _EncodedString(bytes));
1190 }
1179 void addError(error, [StackTrace stackTrace]) { 1191 void addError(error, [StackTrace stackTrace]) {
1180 _sink.addError(error, stackTrace); 1192 _sink.addError(error, stackTrace);
1181 } 1193 }
1182 Future addStream(Stream stream) => _sink.addStream(stream); 1194 Future addStream(Stream stream) => _sink.addStream(stream);
1183 Future get done => _sink.done; 1195 Future get done => _sink.done;
1184 1196
1185 Future close([int code, String reason]) { 1197 Future close([int code, String reason]) {
1186 if (_isReservedStatusCode(code)) { 1198 if (_isReservedStatusCode(code)) {
1187 throw new WebSocketException("Reserved status code $code"); 1199 throw new WebSocketException("Reserved status code $code");
1188 } 1200 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 return code != null && 1268 return code != null &&
1257 (code < WebSocketStatus.NORMAL_CLOSURE || 1269 (code < WebSocketStatus.NORMAL_CLOSURE ||
1258 code == WebSocketStatus.RESERVED_1004 || 1270 code == WebSocketStatus.RESERVED_1004 ||
1259 code == WebSocketStatus.NO_STATUS_RECEIVED || 1271 code == WebSocketStatus.NO_STATUS_RECEIVED ||
1260 code == WebSocketStatus.ABNORMAL_CLOSURE || 1272 code == WebSocketStatus.ABNORMAL_CLOSURE ||
1261 (code > WebSocketStatus.INTERNAL_SERVER_ERROR && 1273 (code > WebSocketStatus.INTERNAL_SERVER_ERROR &&
1262 code < WebSocketStatus.RESERVED_1015) || 1274 code < WebSocketStatus.RESERVED_1015) ||
1263 (code >= WebSocketStatus.RESERVED_1015 && code < 3000)); 1275 (code >= WebSocketStatus.RESERVED_1015 && code < 3000));
1264 } 1276 }
1265 } 1277 }
OLDNEW
« no previous file with comments | « sdk/lib/io/websocket.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698