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 class _HttpHeaders implements HttpHeaders { | 7 class _HttpHeaders implements HttpHeaders { |
8 _HttpHeaders(String this.protocolVersion) | 8 _HttpHeaders(String this.protocolVersion) |
9 : _headers = new Map<String, List<String>>(); | 9 : _headers = new Map<String, List<String>>(); |
10 | 10 |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 _write(IOSink sink) { | 343 _write(IOSink sink) { |
344 final COLONSP = const [_CharCode.COLON, _CharCode.SP]; | 344 final COLONSP = const [_CharCode.COLON, _CharCode.SP]; |
345 final COMMASP = const [_CharCode.COMMA, _CharCode.SP]; | 345 final COMMASP = const [_CharCode.COMMA, _CharCode.SP]; |
346 final CRLF = const [_CharCode.CR, _CharCode.LF]; | 346 final CRLF = const [_CharCode.CR, _CharCode.LF]; |
347 | 347 |
348 var bufferSize = 16 * 1024; | 348 var bufferSize = 16 * 1024; |
349 var buffer = new Uint8List(bufferSize); | 349 var buffer = new Uint8List(bufferSize); |
350 var bufferPos = 0; | 350 var bufferPos = 0; |
351 | 351 |
352 void writeBuffer() { | 352 void writeBuffer() { |
353 sink.add(buffer.getRange(0, bufferPos)); | 353 sink.writeBytes(buffer.getRange(0, bufferPos)); |
354 bufferPos = 0; | 354 bufferPos = 0; |
355 } | 355 } |
356 | 356 |
357 // Format headers. | 357 // Format headers. |
358 _headers.forEach((String name, List<String> values) { | 358 _headers.forEach((String name, List<String> values) { |
359 bool fold = _foldHeader(name); | 359 bool fold = _foldHeader(name); |
360 List<int> nameData; | 360 List<int> nameData; |
361 nameData = name.codeUnits; | 361 nameData = name.codeUnits; |
362 int nameDataLen = nameData.length; | 362 int nameDataLen = nameData.length; |
363 if (nameDataLen + 2 > bufferSize - bufferPos) writeBuffer(); | 363 if (nameDataLen + 2 > bufferSize - bufferPos) writeBuffer(); |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 _value = parseValue(); | 614 _value = parseValue(); |
615 skipWS(); | 615 skipWS(); |
616 if (done()) return; | 616 if (done()) return; |
617 maybeExpect(parameterSeparator); | 617 maybeExpect(parameterSeparator); |
618 parseParameters(); | 618 parseParameters(); |
619 } | 619 } |
620 } | 620 } |
621 | 621 |
622 | 622 |
623 class _ContentType extends _HeaderValue implements ContentType { | 623 class _ContentType extends _HeaderValue implements ContentType { |
| 624 String _primaryType = ""; |
| 625 String _subType = ""; |
| 626 |
624 _ContentType(String primaryType, | 627 _ContentType(String primaryType, |
625 String subType, | 628 String subType, |
626 String charset, | 629 String charset, |
627 Map<String, String> parameters) | 630 Map<String, String> parameters) |
628 : _primaryType = primaryType, _subType = subType, super("") { | 631 : _primaryType = primaryType, _subType = subType, super("") { |
629 if (_primaryType == null) _primaryType = ""; | 632 if (_primaryType == null) _primaryType = ""; |
630 if (_subType == null) _subType = ""; | 633 if (_subType == null) _subType = ""; |
631 _value = "$_primaryType/$_subType";; | 634 _value = "$_primaryType/$_subType";; |
632 if (parameters != null) { | 635 if (parameters != null) { |
633 parameters.forEach((String key, String value) { | 636 parameters.forEach((String key, String value) { |
634 this.parameters[key.toLowerCase()] = value.toLowerCase(); | 637 this.parameters[key.toLowerCase()] = value.toLowerCase(); |
635 }); | 638 }); |
636 } | 639 } |
637 if (charset != null) { | 640 if (charset != null) { |
638 this.parameters["charset"] = charset.toLowerCase(); | 641 this.parameters["charset"] = charset.toLowerCase(); |
639 } | 642 } |
640 } | 643 } |
641 | 644 |
642 _ContentType.fromString(String value) : super.fromString(value) { | 645 _ContentType.fromString(String value) : super.fromString(value) { |
643 int index = _value.indexOf("/"); | 646 int index = _value.indexOf("/"); |
644 if (index == -1 || index == (_value.length - 1)) { | 647 if (index == -1 || index == (_value.length - 1)) { |
645 _primaryType = _value.trim().toLowerCase(); | 648 _primaryType = _value.trim().toLowerCase(); |
646 _subType = ""; | 649 _subType = ""; |
647 } else { | 650 } else { |
648 _primaryType = _value.substring(0, index).trim().toLowerCase(); | 651 _primaryType = _value.substring(0, index).trim().toLowerCase(); |
649 _subType = _value.substring(index + 1).trim().toLowerCase(); | 652 _subType = _value.substring(index + 1).trim().toLowerCase(); |
650 } | 653 } |
651 } | 654 } |
652 | 655 |
653 String get primaryType => _primaryType; | 656 String get primaryType => _primaryType; |
654 | 657 |
655 String get subType => _subType; | 658 String get subType => _subType; |
656 | 659 |
657 String get charset => parameters["charset"]; | 660 String get charset => parameters["charset"]; |
658 | |
659 String _primaryType = ""; | |
660 String _subType = ""; | |
661 } | 661 } |
662 | 662 |
663 | 663 |
664 class _Cookie implements Cookie { | 664 class _Cookie implements Cookie { |
665 _Cookie([String this.name, String this.value]); | 665 _Cookie([String this.name, String this.value]); |
666 | 666 |
667 _Cookie.fromSetCookieValue(String value) { | 667 _Cookie.fromSetCookieValue(String value) { |
668 // Parse the 'set-cookie' header value. | 668 // Parse the 'set-cookie' header value. |
669 _parseSetCookieValue(value); | 669 _parseSetCookieValue(value); |
670 } | 670 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 | 783 |
784 String name; | 784 String name; |
785 String value; | 785 String value; |
786 DateTime expires; | 786 DateTime expires; |
787 int maxAge; | 787 int maxAge; |
788 String domain; | 788 String domain; |
789 String path; | 789 String path; |
790 bool httpOnly = false; | 790 bool httpOnly = false; |
791 bool secure = false; | 791 bool secure = false; |
792 } | 792 } |
OLD | NEW |