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 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 } | 388 } |
389 buffer[bufferPos++] = _CharCode.CR; | 389 buffer[bufferPos++] = _CharCode.CR; |
390 buffer[bufferPos++] = _CharCode.LF; | 390 buffer[bufferPos++] = _CharCode.LF; |
391 }); | 391 }); |
392 writeBuffer(); | 392 writeBuffer(); |
393 } | 393 } |
394 | 394 |
395 String toString() { | 395 String toString() { |
396 StringBuffer sb = new StringBuffer(); | 396 StringBuffer sb = new StringBuffer(); |
397 _headers.forEach((String name, List<String> values) { | 397 _headers.forEach((String name, List<String> values) { |
398 sb.add(name); | 398 sb.write(name); |
399 sb.add(": "); | 399 sb.write(": "); |
400 bool fold = _foldHeader(name); | 400 bool fold = _foldHeader(name); |
401 for (int i = 0; i < values.length; i++) { | 401 for (int i = 0; i < values.length; i++) { |
402 if (i > 0) { | 402 if (i > 0) { |
403 if (fold) { | 403 if (fold) { |
404 sb.add(", "); | 404 sb.write(", "); |
405 } else { | 405 } else { |
406 sb.add("\n"); | 406 sb.write("\n"); |
407 sb.add(name); | 407 sb.write(name); |
408 sb.add(": "); | 408 sb.write(": "); |
409 } | 409 } |
410 } | 410 } |
411 sb.add(values[i]); | 411 sb.write(values[i]); |
412 } | 412 } |
413 sb.add("\n"); | 413 sb.write("\n"); |
414 }); | 414 }); |
415 return sb.toString(); | 415 return sb.toString(); |
416 } | 416 } |
417 | 417 |
418 List<Cookie> _parseCookies() { | 418 List<Cookie> _parseCookies() { |
419 // Parse a Cookie header value according to the rules in RFC 6265. | 419 // Parse a Cookie header value according to the rules in RFC 6265. |
420 var cookies = new List<Cookie>(); | 420 var cookies = new List<Cookie>(); |
421 void parseCookieString(String s) { | 421 void parseCookieString(String s) { |
422 int index = 0; | 422 int index = 0; |
423 | 423 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 _parse(value); | 500 _parse(value); |
501 } | 501 } |
502 | 502 |
503 Map<String, String> get parameters { | 503 Map<String, String> get parameters { |
504 if (_parameters == null) _parameters = new Map<String, String>(); | 504 if (_parameters == null) _parameters = new Map<String, String>(); |
505 return _parameters; | 505 return _parameters; |
506 } | 506 } |
507 | 507 |
508 String toString() { | 508 String toString() { |
509 StringBuffer sb = new StringBuffer(); | 509 StringBuffer sb = new StringBuffer(); |
510 sb.add(value); | 510 sb.write(value); |
511 if (parameters != null && parameters.length > 0) { | 511 if (parameters != null && parameters.length > 0) { |
512 _parameters.forEach((String name, String value) { | 512 _parameters.forEach((String name, String value) { |
513 sb.add("; "); | 513 sb.write("; "); |
514 sb.add(name); | 514 sb.write(name); |
515 sb.add("="); | 515 sb.write("="); |
516 sb.add(value); | 516 sb.write(value); |
517 }); | 517 }); |
518 } | 518 } |
519 return sb.toString(); | 519 return sb.toString(); |
520 } | 520 } |
521 | 521 |
522 void _parse(String s) { | 522 void _parse(String s) { |
523 int index = 0; | 523 int index = 0; |
524 | 524 |
525 bool done() => index == s.length; | 525 bool done() => index == s.length; |
526 | 526 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 while (!done()) { | 573 while (!done()) { |
574 if (s[index] == "\\") { | 574 if (s[index] == "\\") { |
575 if (index + 1 == s.length) { | 575 if (index + 1 == s.length) { |
576 throw new HttpException("Failed to parse header value"); | 576 throw new HttpException("Failed to parse header value"); |
577 } | 577 } |
578 index++; | 578 index++; |
579 } else if (s[index] == "\"") { | 579 } else if (s[index] == "\"") { |
580 index++; | 580 index++; |
581 break; | 581 break; |
582 } | 582 } |
583 sb.add(s[index]); | 583 sb.write(s[index]); |
584 index++; | 584 index++; |
585 } | 585 } |
586 return sb.toString(); | 586 return sb.toString(); |
587 } else { | 587 } else { |
588 // Parse non-quoted value. | 588 // Parse non-quoted value. |
589 return parseValue(); | 589 return parseValue(); |
590 } | 590 } |
591 } | 591 } |
592 | 592 |
593 while (!done()) { | 593 while (!done()) { |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 } | 750 } |
751 index++; // Skip the = character. | 751 index++; // Skip the = character. |
752 value = parseValue(); | 752 value = parseValue(); |
753 if (done()) return; | 753 if (done()) return; |
754 index++; // Skip the ; character. | 754 index++; // Skip the ; character. |
755 parseAttributes(); | 755 parseAttributes(); |
756 } | 756 } |
757 | 757 |
758 String toString() { | 758 String toString() { |
759 StringBuffer sb = new StringBuffer(); | 759 StringBuffer sb = new StringBuffer(); |
760 sb.add(name); | 760 sb.write(name); |
761 sb.add("="); | 761 sb.write("="); |
762 sb.add(value); | 762 sb.write(value); |
763 if (expires != null) { | 763 if (expires != null) { |
764 sb.add("; Expires="); | 764 sb.write("; Expires="); |
765 sb.add(_HttpUtils.formatDate(expires)); | 765 sb.write(_HttpUtils.formatDate(expires)); |
766 } | 766 } |
767 if (maxAge != null) { | 767 if (maxAge != null) { |
768 sb.add("; Max-Age="); | 768 sb.write("; Max-Age="); |
769 sb.add(maxAge); | 769 sb.write(maxAge); |
770 } | 770 } |
771 if (domain != null) { | 771 if (domain != null) { |
772 sb.add("; Domain="); | 772 sb.write("; Domain="); |
773 sb.add(domain); | 773 sb.write(domain); |
774 } | 774 } |
775 if (path != null) { | 775 if (path != null) { |
776 sb.add("; Path="); | 776 sb.write("; Path="); |
777 sb.add(path); | 777 sb.write(path); |
778 } | 778 } |
779 if (secure) sb.add("; Secure"); | 779 if (secure) sb.write("; Secure"); |
780 if (httpOnly) sb.add("; HttpOnly"); | 780 if (httpOnly) sb.write("; HttpOnly"); |
781 return sb.toString(); | 781 return sb.toString(); |
782 } | 782 } |
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 |