OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 // Global constants. | 5 // Global constants. |
6 class _Const { | 6 class _Const { |
7 // Bytes for "HTTP". | 7 // Bytes for "HTTP". |
8 static const HTTP = const [72, 84, 84, 80]; | 8 static const HTTP = const [72, 84, 84, 80]; |
9 // Bytes for "HTTP/1.". | 9 // Bytes for "HTTP/1.". |
10 static const HTTP1DOT = const [72, 84, 84, 80, 47, 49, 46]; | 10 static const HTTP1DOT = const [72, 84, 84, 80, 47, 49, 46]; |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 | 575 |
576 void streamData(List<int> buffer) { | 576 void streamData(List<int> buffer) { |
577 assert(_buffer == null); | 577 assert(_buffer == null); |
578 _buffer = buffer; | 578 _buffer = buffer; |
579 _index = 0; | 579 _index = 0; |
580 _lastIndex = buffer.length; | 580 _lastIndex = buffer.length; |
581 _parse(); | 581 _parse(); |
582 } | 582 } |
583 | 583 |
584 void streamDone() { | 584 void streamDone() { |
| 585 String type() => _requestParser ? "request" : "response"; |
| 586 |
585 // If the connection is idle the HTTP stream is closed. | 587 // If the connection is idle the HTTP stream is closed. |
586 if (_state == _State.START) { | 588 if (_state == _State.START) { |
587 if (_requestParser) { | 589 if (_requestParser) { |
588 closed(); | 590 closed(); |
589 } else { | 591 } else { |
590 error( | 592 error( |
591 new HttpParserException( | 593 new HttpParserException( |
592 "Connection closed before full header was received")); | 594 "Connection closed before full ${type()} header was received")); |
593 } | 595 } |
594 return; | 596 return; |
595 } | 597 } |
596 | 598 |
597 if (_state < _State.FIRST_BODY_STATE) { | 599 if (_state < _State.FIRST_BODY_STATE) { |
598 _state = _State.FAILURE; | 600 _state = _State.FAILURE; |
599 // Report the error through the error callback if any. Otherwise | 601 // Report the error through the error callback if any. Otherwise |
600 // throw the error. | 602 // throw the error. |
601 error( | 603 error( |
602 new HttpParserException( | 604 new HttpParserException( |
603 "Connection closed before full header was received")); | 605 "Connection closed before full ${type()} header was received")); |
604 return; | 606 return; |
605 } | 607 } |
606 | 608 |
607 if (!_chunked && _contentLength == -1) { | 609 if (!_chunked && _contentLength == -1) { |
608 dataEnd(true); | 610 dataEnd(true); |
609 _state = _State.CLOSED; | 611 _state = _State.CLOSED; |
610 closed(); | 612 closed(); |
611 } else { | 613 } else { |
612 _state = _State.FAILURE; | 614 _state = _State.FAILURE; |
613 // Report the error through the error callback if any. Otherwise | 615 // Report the error through the error callback if any. Otherwise |
614 // throw the error. | 616 // throw the error. |
615 error( | 617 error( |
616 new HttpParserException( | 618 new HttpParserException( |
617 "Connection closed before full body was received")); | 619 "Connection closed before full ${type()} body was received")); |
618 } | 620 } |
619 } | 621 } |
620 | 622 |
621 void streamError(e) { | 623 void streamError(e) { |
622 // Don't report errors when HTTP parser is in idle state. Clients | 624 // Don't report errors when HTTP parser is in idle state. Clients |
623 // can close the connection and cause a connection reset by peer | 625 // can close the connection and cause a connection reset by peer |
624 // error which is OK. | 626 // error which is OK. |
625 if (_state == _State.START) { | 627 if (_state == _State.START) { |
626 closed(); | 628 closed(); |
627 return; | 629 return; |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 Function error; | 768 Function error; |
767 Function closed; | 769 Function closed; |
768 } | 770 } |
769 | 771 |
770 | 772 |
771 class HttpParserException implements Exception { | 773 class HttpParserException implements Exception { |
772 const HttpParserException([String this.message = ""]); | 774 const HttpParserException([String this.message = ""]); |
773 String toString() => "HttpParserException: $message"; | 775 String toString() => "HttpParserException: $message"; |
774 final String message; | 776 final String message; |
775 } | 777 } |
OLD | NEW |