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

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

Issue 80883002: Avoid unneeded toLowerCase and add fast version of _isTokenChar, in HTTP parser. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: More cleanup. Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/http_impl.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 // Global constants. 7 // Global constants.
8 class _Const { 8 class _Const {
9 // Bytes for "HTTP". 9 // Bytes for "HTTP".
10 static const HTTP = const [72, 84, 84, 80]; 10 static const HTTP = const [72, 84, 84, 80];
11 // Bytes for "HTTP/1.". 11 // Bytes for "HTTP/1.".
12 static const HTTP1DOT = const [72, 84, 84, 80, 47, 49, 46]; 12 static const HTTP1DOT = const [72, 84, 84, 80, 47, 49, 46];
13 // Bytes for "HTTP/1.0". 13 // Bytes for "HTTP/1.0".
14 static const HTTP10 = const [72, 84, 84, 80, 47, 49, 46, 48]; 14 static const HTTP10 = const [72, 84, 84, 80, 47, 49, 46, 48];
15 // Bytes for "HTTP/1.1". 15 // Bytes for "HTTP/1.1".
16 static const HTTP11 = const [72, 84, 84, 80, 47, 49, 46, 49]; 16 static const HTTP11 = const [72, 84, 84, 80, 47, 49, 46, 49];
17 17
18 static const END_CHUNKED = const [0x30, 13, 10, 13, 10]; 18 static const bool T = true;
19 19 static const bool F = false;
20 // Bytes for '()<>@,;:\\"/[]?={} \t'. 20 // Loopup-map for the following characters: '()<>@,;:\\"/[]?={} \t'.
21 static const SEPARATORS = const [40, 41, 60, 62, 64, 44, 59, 58, 92, 34, 47, 21 static const SEPARATOR_MAP = const [
22 91, 93, 63, 61, 123, 125, 32, 9]; 22 F,F,F,F,F,F,F,F,F,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,F,T,F,F,
23 23 F,F,F,T,T,F,F,T,F,F,T,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,
24 // Bytes for '()<>@,;:\\"/[]?={} \t\r\n'. 24 F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
25 static const SEPARATORS_AND_CR_LF = const [40, 41, 60, 62, 64, 44, 59, 58, 92, 25 F,F,F,F,F,F,F,F,F,F,F,F,T,F,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
26 34, 47, 91, 93, 63, 61, 123, 125, 26 F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
27 32, 9, 13, 10]; 27 F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,
28 F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F];
28 } 29 }
29 30
30 31
31 // Frequently used character codes. 32 // Frequently used character codes.
32 class _CharCode { 33 class _CharCode {
33 static const int HT = 9; 34 static const int HT = 9;
34 static const int LF = 10; 35 static const int LF = 10;
35 static const int CR = 13; 36 static const int CR = 13;
36 static const int SP = 32; 37 static const int SP = 32;
37 static const int AMPERSAND = 38; 38 static const int AMPERSAND = 38;
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 _state = _State.RESPONSE_LINE_STATUS_CODE; 363 _state = _State.RESPONSE_LINE_STATUS_CODE;
363 } else { 364 } else {
364 throw new HttpException("Invalid response line"); 365 throw new HttpException("Invalid response line");
365 } 366 }
366 break; 367 break;
367 368
368 case _State.REQUEST_LINE_METHOD: 369 case _State.REQUEST_LINE_METHOD:
369 if (byte == _CharCode.SP) { 370 if (byte == _CharCode.SP) {
370 _state = _State.REQUEST_LINE_URI; 371 _state = _State.REQUEST_LINE_URI;
371 } else { 372 } else {
372 if (_Const.SEPARATORS_AND_CR_LF.indexOf(byte) != -1) { 373 if (_Const.SEPARATOR_MAP[byte] ||
374 byte == _CharCode.CR ||
375 byte == _CharCode.LF) {
373 throw new HttpException("Invalid request method"); 376 throw new HttpException("Invalid request method");
374 } 377 }
375 _method_or_status_code.add(byte); 378 _method_or_status_code.add(byte);
376 } 379 }
377 break; 380 break;
378 381
379 case _State.REQUEST_LINE_URI: 382 case _State.REQUEST_LINE_URI:
380 if (byte == _CharCode.SP) { 383 if (byte == _CharCode.SP) {
381 if (_uri_or_reason_phrase.length == 0) { 384 if (_uri_or_reason_phrase.length == 0) {
382 throw new HttpException("Invalid request URI"); 385 throw new HttpException("Invalid request URI");
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 832
830 _headers = null; 833 _headers = null;
831 } 834 }
832 835
833 _releaseBuffer() { 836 _releaseBuffer() {
834 _buffer = null; 837 _buffer = null;
835 _index = null; 838 _index = null;
836 } 839 }
837 840
838 bool _isTokenChar(int byte) { 841 bool _isTokenChar(int byte) {
839 return byte > 31 && byte < 128 && _Const.SEPARATORS.indexOf(byte) == -1; 842 return byte > 31 && byte < 128 && !_Const.SEPARATOR_MAP[byte];
840 } 843 }
841 844
842 List<String> _tokenizeFieldValue(String headerValue) { 845 List<String> _tokenizeFieldValue(String headerValue) {
843 List<String> tokens = new List<String>(); 846 List<String> tokens = new List<String>();
844 int start = 0; 847 int start = 0;
845 int index = 0; 848 int index = 0;
846 while (index < headerValue.length) { 849 while (index < headerValue.length) {
847 if (headerValue[index] == ",") { 850 if (headerValue[index] == ",") {
848 tokens.add(headerValue.substring(start, index)); 851 tokens.add(headerValue.substring(start, index));
849 start = index + 1; 852 start = index + 1;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 _HttpHeaders _headers; 986 _HttpHeaders _headers;
984 987
985 // The current incoming connection. 988 // The current incoming connection.
986 _HttpIncoming _incoming; 989 _HttpIncoming _incoming;
987 StreamSubscription _socketSubscription; 990 StreamSubscription _socketSubscription;
988 bool _paused = true; 991 bool _paused = true;
989 bool _bodyPaused = false; 992 bool _bodyPaused = false;
990 StreamController<_HttpIncoming> _controller; 993 StreamController<_HttpIncoming> _controller;
991 StreamController<List<int>> _bodyController; 994 StreamController<List<int>> _bodyController;
992 } 995 }
OLDNEW
« no previous file with comments | « sdk/lib/io/http_impl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698