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 // 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]; |
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 } | 612 } |
613 } | 613 } |
614 _state = _State.HEADER_START; | 614 _state = _State.HEADER_START; |
615 break; | 615 break; |
616 | 616 |
617 case _State.HEADER_START: | 617 case _State.HEADER_START: |
618 _headers = new _HttpHeaders(version); | 618 _headers = new _HttpHeaders(version); |
619 if (byte == _CharCode.CR) { | 619 if (byte == _CharCode.CR) { |
620 _state = _State.HEADER_ENDING; | 620 _state = _State.HEADER_ENDING; |
621 } else if (byte == _CharCode.LF) { | 621 } else if (byte == _CharCode.LF) { |
622 if (_headersEnd()) { | 622 _state = _State.HEADER_ENDING; |
623 return; | 623 _index--; // Make the new state see the LF again. |
624 } else { | |
625 break; | |
626 } | |
627 } else { | 624 } else { |
628 // Start of new header field. | 625 // Start of new header field. |
629 _headerField.add(_toLowerCaseByte(byte)); | 626 _headerField.add(_toLowerCaseByte(byte)); |
630 _state = _State.HEADER_FIELD; | 627 _state = _State.HEADER_FIELD; |
631 } | 628 } |
632 break; | 629 break; |
633 | 630 |
634 case _State.HEADER_FIELD: | 631 case _State.HEADER_FIELD: |
635 if (byte == _CharCode.COLON) { | 632 if (byte == _CharCode.COLON) { |
636 _state = _State.HEADER_VALUE_START; | 633 _state = _State.HEADER_VALUE_START; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
690 } | 687 } |
691 } else { | 688 } else { |
692 _headers._add(headerField, headerValue); | 689 _headers._add(headerField, headerValue); |
693 } | 690 } |
694 _headerField.clear(); | 691 _headerField.clear(); |
695 _headerValue.clear(); | 692 _headerValue.clear(); |
696 | 693 |
697 if (byte == _CharCode.CR) { | 694 if (byte == _CharCode.CR) { |
698 _state = _State.HEADER_ENDING; | 695 _state = _State.HEADER_ENDING; |
699 } else if (byte == _CharCode.LF) { | 696 } else if (byte == _CharCode.LF) { |
700 if (_headersEnd()) { | 697 _state = _State.HEADER_ENDING; |
701 return; | 698 _index--; // Make the new state see the LF again. |
702 } else { | |
703 break; | |
704 } | |
705 } else { | 699 } else { |
706 // Start of new header field. | 700 // Start of new header field. |
707 _headerField.add(_toLowerCaseByte(byte)); | 701 _headerField.add(_toLowerCaseByte(byte)); |
708 _state = _State.HEADER_FIELD; | 702 _state = _State.HEADER_FIELD; |
709 } | 703 } |
710 } | 704 } |
711 break; | 705 break; |
712 | 706 |
713 case _State.HEADER_ENDING: | 707 case _State.HEADER_ENDING: |
714 _expect(byte, _CharCode.LF); | 708 _expect(byte, _CharCode.LF); |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1068 } | 1062 } |
1069 } | 1063 } |
1070 | 1064 |
1071 void _reportError(error, [stackTrace]) { | 1065 void _reportError(error, [stackTrace]) { |
1072 if (_socketSubscription != null) _socketSubscription.cancel(); | 1066 if (_socketSubscription != null) _socketSubscription.cancel(); |
1073 _state = _State.FAILURE; | 1067 _state = _State.FAILURE; |
1074 _controller.addError(error, stackTrace); | 1068 _controller.addError(error, stackTrace); |
1075 _controller.close(); | 1069 _controller.close(); |
1076 } | 1070 } |
1077 } | 1071 } |
OLD | NEW |