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

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

Issue 1426043002: Revert "Web Socket compression - take two" (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 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
« no previous file with comments | « sdk/lib/io/http.dart ('k') | sdk/lib/io/websocket.dart » ('j') | 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 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 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 Map<String, String> _unmodifiableParameters; 623 Map<String, String> _unmodifiableParameters;
624 624
625 _HeaderValue([String this._value = "", Map<String, String> parameters]) { 625 _HeaderValue([String this._value = "", Map<String, String> parameters]) {
626 if (parameters != null) { 626 if (parameters != null) {
627 _parameters = new HashMap<String, String>.from(parameters); 627 _parameters = new HashMap<String, String>.from(parameters);
628 } 628 }
629 } 629 }
630 630
631 static _HeaderValue parse(String value, 631 static _HeaderValue parse(String value,
632 {parameterSeparator: ";", 632 {parameterSeparator: ";",
633 valueSeparator: null,
634 preserveBackslash: false}) { 633 preserveBackslash: false}) {
635 // Parse the string. 634 // Parse the string.
636 var result = new _HeaderValue(); 635 var result = new _HeaderValue();
637 result._parse(value, parameterSeparator, valueSeparator, preserveBackslash); 636 result._parse(value, parameterSeparator, preserveBackslash);
638 return result; 637 return result;
639 } 638 }
640 639
641 String get value => _value; 640 String get value => _value;
642 641
643 void _ensureParameters() { 642 void _ensureParameters() {
644 if (_parameters == null) { 643 if (_parameters == null) {
645 _parameters = new HashMap<String, String>(); 644 _parameters = new HashMap<String, String>();
646 } 645 }
647 } 646 }
(...skipping 10 matching lines...) Expand all
658 StringBuffer sb = new StringBuffer(); 657 StringBuffer sb = new StringBuffer();
659 sb.write(_value); 658 sb.write(_value);
660 if (parameters != null && parameters.length > 0) { 659 if (parameters != null && parameters.length > 0) {
661 _parameters.forEach((String name, String value) { 660 _parameters.forEach((String name, String value) {
662 sb..write("; ")..write(name)..write("=")..write(value); 661 sb..write("; ")..write(name)..write("=")..write(value);
663 }); 662 });
664 } 663 }
665 return sb.toString(); 664 return sb.toString();
666 } 665 }
667 666
668 void _parse(String s, 667 void _parse(String s, String parameterSeparator, bool preserveBackslash) {
669 String parameterSeparator,
670 String valueSeparator,
671 bool preserveBackslash) {
672 int index = 0; 668 int index = 0;
673 669
674 bool done() => index == s.length; 670 bool done() => index == s.length;
675 671
676 void skipWS() { 672 void skipWS() {
677 while (!done()) { 673 while (!done()) {
678 if (s[index] != " " && s[index] != "\t") return; 674 if (s[index] != " " && s[index] != "\t") return;
679 index++; 675 index++;
680 } 676 }
681 } 677 }
682 678
683 String parseValue() { 679 String parseValue() {
684 int start = index; 680 int start = index;
685 while (!done()) { 681 while (!done()) {
686 if (s[index] == " " || 682 if (s[index] == " " ||
687 s[index] == "\t" || 683 s[index] == "\t" ||
688 s[index] == valueSeparator ||
689 s[index] == parameterSeparator) break; 684 s[index] == parameterSeparator) break;
690 index++; 685 index++;
691 } 686 }
692 return s.substring(start, index); 687 return s.substring(start, index);
693 } 688 }
694 689
695 void expect(String expected) { 690 void expect(String expected) {
696 if (done() || s[index] != expected) { 691 if (done() || s[index] != expected) {
697 throw new HttpException("Failed to parse header value"); 692 throw new HttpException("Failed to parse header value");
698 } 693 }
699 index++; 694 index++;
700 } 695 }
701 696
702 void maybeExpect(String expected) { 697 void maybeExpect(String expected) {
703 if (s[index] == expected) index++; 698 if (s[index] == expected) index++;
704 } 699 }
705 700
706 void parseParameters() { 701 void parseParameters() {
707 var parameters = new HashMap<String, String>(); 702 var parameters = new HashMap<String, String>();
708 _parameters = new UnmodifiableMapView(parameters); 703 _parameters = new UnmodifiableMapView(parameters);
709 704
710 String parseParameterName() { 705 String parseParameterName() {
711 int start = index; 706 int start = index;
712 while (!done()) { 707 while (!done()) {
713 if (s[index] == " " || 708 if (s[index] == " " || s[index] == "\t" || s[index] == "=") break;
714 s[index] == "\t" ||
715 s[index] == "=" ||
716 s[index] == valueSeparator) break;
717 index++; 709 index++;
718 } 710 }
719 return s.substring(start, index).toLowerCase(); 711 return s.substring(start, index).toLowerCase();
720 } 712 }
721 713
722 String parseParameterValue() { 714 String parseParameterValue() {
723 if (!done() && s[index] == "\"") { 715 if (s[index] == "\"") {
724 // Parse quoted value. 716 // Parse quoted value.
725 StringBuffer sb = new StringBuffer(); 717 StringBuffer sb = new StringBuffer();
726 index++; 718 index++;
727 while (!done()) { 719 while (!done()) {
728 if (s[index] == "\\") { 720 if (s[index] == "\\") {
729 if (index + 1 == s.length) { 721 if (index + 1 == s.length) {
730 throw new HttpException("Failed to parse header value"); 722 throw new HttpException("Failed to parse header value");
731 } 723 }
732 if (preserveBackslash && s[index + 1] != "\"") { 724 if (preserveBackslash && s[index + 1] != "\"") {
733 sb.write(s[index]); 725 sb.write(s[index]);
734 } 726 }
735 index++; 727 index++;
736 } else if (s[index] == "\"") { 728 } else if (s[index] == "\"") {
737 index++; 729 index++;
738 break; 730 break;
739 } 731 }
740 sb.write(s[index]); 732 sb.write(s[index]);
741 index++; 733 index++;
742 } 734 }
743 return sb.toString(); 735 return sb.toString();
744 } else { 736 } else {
745 // Parse non-quoted value. 737 // Parse non-quoted value.
746 var val = parseValue(); 738 return parseValue();
747 return val == "" ? null : val;
748 } 739 }
749 } 740 }
750 741
751 while (!done()) { 742 while (!done()) {
752 skipWS(); 743 skipWS();
753 if (done()) return; 744 if (done()) return;
754 String name = parseParameterName(); 745 String name = parseParameterName();
755 skipWS(); 746 skipWS();
756 if (done()) { 747 expect("=");
757 parameters[name] = null;
758 return;
759 }
760 maybeExpect("=");
761 skipWS(); 748 skipWS();
762 if(done()) {
763 parameters[name] = null;
764 return;
765 }
766 String value = parseParameterValue(); 749 String value = parseParameterValue();
767 if (name == 'charset' && this is _ContentType) { 750 if (name == 'charset' && this is _ContentType) {
768 // Charset parameter of ContentTypes are always lower-case. 751 // Charset parameter of ContentTypes are always lower-case.
769 value = value.toLowerCase(); 752 value = value.toLowerCase();
770 } 753 }
771 parameters[name] = value; 754 parameters[name] = value;
772 skipWS(); 755 skipWS();
773 if (done()) return; 756 if (done()) return;
774 // TODO: Implement support for multi-valued parameters.
775 if(s[index] == valueSeparator) return;
776 expect(parameterSeparator); 757 expect(parameterSeparator);
777 } 758 }
778 } 759 }
779 760
780 skipWS(); 761 skipWS();
781 _value = parseValue(); 762 _value = parseValue();
782 skipWS(); 763 skipWS();
783 if (done()) return; 764 if (done()) return;
784 maybeExpect(parameterSeparator); 765 maybeExpect(parameterSeparator);
785 parseParameters(); 766 parseParameters();
(...skipping 26 matching lines...) Expand all
812 if (charset != null) { 793 if (charset != null) {
813 _ensureParameters(); 794 _ensureParameters();
814 this._parameters["charset"] = charset.toLowerCase(); 795 this._parameters["charset"] = charset.toLowerCase();
815 } 796 }
816 } 797 }
817 798
818 _ContentType._(); 799 _ContentType._();
819 800
820 static _ContentType parse(String value) { 801 static _ContentType parse(String value) {
821 var result = new _ContentType._(); 802 var result = new _ContentType._();
822 result._parse(value, ";", null, false); 803 result._parse(value, ";", false);
823 int index = result._value.indexOf("/"); 804 int index = result._value.indexOf("/");
824 if (index == -1 || index == (result._value.length - 1)) { 805 if (index == -1 || index == (result._value.length - 1)) {
825 result._primaryType = result._value.trim().toLowerCase(); 806 result._primaryType = result._value.trim().toLowerCase();
826 result._subType = ""; 807 result._subType = "";
827 } else { 808 } else {
828 result._primaryType = 809 result._primaryType =
829 result._value.substring(0, index).trim().toLowerCase(); 810 result._value.substring(0, index).trim().toLowerCase();
830 result._subType = result._value.substring(index + 1).trim().toLowerCase(); 811 result._subType = result._value.substring(index + 1).trim().toLowerCase();
831 } 812 }
832 return result; 813 return result;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 (codeUnit >= 0x23 && codeUnit <= 0x2B) || 970 (codeUnit >= 0x23 && codeUnit <= 0x2B) ||
990 (codeUnit >= 0x2D && codeUnit <= 0x3A) || 971 (codeUnit >= 0x2D && codeUnit <= 0x3A) ||
991 (codeUnit >= 0x3C && codeUnit <= 0x5B) || 972 (codeUnit >= 0x3C && codeUnit <= 0x5B) ||
992 (codeUnit >= 0x5D && codeUnit <= 0x7E))) { 973 (codeUnit >= 0x5D && codeUnit <= 0x7E))) {
993 throw new FormatException( 974 throw new FormatException(
994 "Invalid character in cookie value, code unit: '$codeUnit'"); 975 "Invalid character in cookie value, code unit: '$codeUnit'");
995 } 976 }
996 } 977 }
997 } 978 }
998 } 979 }
OLDNEW
« no previous file with comments | « sdk/lib/io/http.dart ('k') | sdk/lib/io/websocket.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698