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

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

Issue 1390353005: Web Socket compression - take two (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Add custom compression header test Created 5 years, 2 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 | « no previous file | sdk/lib/io/websocket.dart » ('j') | sdk/lib/io/websocket.dart » ('J')
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 class _HttpHeaders implements HttpHeaders { 7 class _HttpHeaders implements HttpHeaders {
8 final Map<String, List<String>> _headers; 8 final Map<String, List<String>> _headers;
9 final String protocolVersion; 9 final String protocolVersion;
10 10
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 if (s[index] != " " && s[index] != "\t") return; 674 if (s[index] != " " && s[index] != "\t") return;
675 index++; 675 index++;
676 } 676 }
677 } 677 }
678 678
679 String parseValue() { 679 String parseValue() {
680 int start = index; 680 int start = index;
681 while (!done()) { 681 while (!done()) {
682 if (s[index] == " " || 682 if (s[index] == " " ||
683 s[index] == "\t" || 683 s[index] == "\t" ||
684 s[index] == "," ||
684 s[index] == parameterSeparator) break; 685 s[index] == parameterSeparator) break;
685 index++; 686 index++;
686 } 687 }
687 return s.substring(start, index); 688 return s.substring(start, index);
688 } 689 }
689 690
690 void expect(String expected) { 691 void expect(String expected) {
691 if (done() || s[index] != expected) { 692 if (done() || s[index] != expected) {
692 throw new HttpException("Failed to parse header value"); 693 throw new HttpException("Failed to parse header value");
693 } 694 }
694 index++; 695 index++;
695 } 696 }
696 697
697 void maybeExpect(String expected) { 698 void maybeExpect(String expected) {
698 if (s[index] == expected) index++; 699 if (!done() && s[index] == expected) index++;
699 } 700 }
700 701
701 void parseParameters() { 702 void parseParameters() {
702 var parameters = new HashMap<String, String>(); 703 var parameters = new HashMap<String, String>();
703 _parameters = new UnmodifiableMapView(parameters); 704 _parameters = new UnmodifiableMapView(parameters);
704 705
705 String parseParameterName() { 706 String parseParameterName() {
706 int start = index; 707 int start = index;
707 while (!done()) { 708 while (!done()) {
708 if (s[index] == " " || s[index] == "\t" || s[index] == "=") break; 709 if (s[index] == " " ||
710 s[index] == "\t" ||
711 s[index] == "=" ||
712 s[index] == ",") break;
709 index++; 713 index++;
710 } 714 }
711 return s.substring(start, index).toLowerCase(); 715 return s.substring(start, index).toLowerCase();
712 } 716 }
713 717
714 String parseParameterValue() { 718 String parseParameterValue() {
715 if (s[index] == "\"") { 719 if (!done() && s[index] == "\"") {
716 // Parse quoted value. 720 // Parse quoted value.
717 StringBuffer sb = new StringBuffer(); 721 StringBuffer sb = new StringBuffer();
718 index++; 722 index++;
719 while (!done()) { 723 while (!done()) {
720 if (s[index] == "\\") { 724 if (s[index] == "\\") {
721 if (index + 1 == s.length) { 725 if (index + 1 == s.length) {
722 throw new HttpException("Failed to parse header value"); 726 throw new HttpException("Failed to parse header value");
723 } 727 }
724 if (preserveBackslash && s[index + 1] != "\"") { 728 if (preserveBackslash && s[index + 1] != "\"") {
725 sb.write(s[index]); 729 sb.write(s[index]);
726 } 730 }
727 index++; 731 index++;
728 } else if (s[index] == "\"") { 732 } else if (s[index] == "\"") {
729 index++; 733 index++;
730 break; 734 break;
731 } 735 }
732 sb.write(s[index]); 736 sb.write(s[index]);
733 index++; 737 index++;
734 } 738 }
735 return sb.toString(); 739 return sb.toString();
736 } else { 740 } else {
737 // Parse non-quoted value. 741 // Parse non-quoted value.
738 return parseValue(); 742 var val = parseValue();
743 return val == "" ? null : val;
739 } 744 }
740 } 745 }
741 746
742 while (!done()) { 747 while (!done()) {
743 skipWS(); 748 skipWS();
744 if (done()) return; 749 if (done()) return;
745 String name = parseParameterName(); 750 String name = parseParameterName();
746 skipWS(); 751 skipWS();
Søren Gjesse 2015/10/23 15:09:59 I think you should add if (done()) return; her
butlermatt 2015/10/23 15:44:11 Done.
747 expect("="); 752 maybeExpect("=");
748 skipWS(); 753 skipWS();
Søren Gjesse 2015/10/23 15:09:59 ditto add if (done()) return; here instead of
butlermatt 2015/10/23 15:44:11 Done.
749 String value = parseParameterValue(); 754 String value = parseParameterValue();
750 if (name == 'charset' && this is _ContentType) { 755 if (name == 'charset' && this is _ContentType) {
751 // Charset parameter of ContentTypes are always lower-case. 756 // Charset parameter of ContentTypes are always lower-case.
752 value = value.toLowerCase(); 757 value = value.toLowerCase();
753 } 758 }
754 parameters[name] = value; 759 parameters[name] = value;
755 skipWS(); 760 skipWS();
756 if (done()) return; 761 if (done()) return;
762 // TODO: Implement support for multi-valued parameters.
763 if(s[index] == ",") return;
757 expect(parameterSeparator); 764 expect(parameterSeparator);
758 } 765 }
759 } 766 }
760 767
761 skipWS(); 768 skipWS();
762 _value = parseValue(); 769 _value = parseValue();
763 skipWS(); 770 skipWS();
764 if (done()) return; 771 if (done()) return;
765 maybeExpect(parameterSeparator); 772 maybeExpect(parameterSeparator);
766 parseParameters(); 773 parseParameters();
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 (codeUnit >= 0x23 && codeUnit <= 0x2B) || 977 (codeUnit >= 0x23 && codeUnit <= 0x2B) ||
971 (codeUnit >= 0x2D && codeUnit <= 0x3A) || 978 (codeUnit >= 0x2D && codeUnit <= 0x3A) ||
972 (codeUnit >= 0x3C && codeUnit <= 0x5B) || 979 (codeUnit >= 0x3C && codeUnit <= 0x5B) ||
973 (codeUnit >= 0x5D && codeUnit <= 0x7E))) { 980 (codeUnit >= 0x5D && codeUnit <= 0x7E))) {
974 throw new FormatException( 981 throw new FormatException(
975 "Invalid character in cookie value, code unit: '$codeUnit'"); 982 "Invalid character in cookie value, code unit: '$codeUnit'");
976 } 983 }
977 } 984 }
978 } 985 }
979 } 986 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/io/websocket.dart » ('j') | sdk/lib/io/websocket.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698