in lib/src/http_parser.dart [768:819]
void _onDone() {
// onDone cancels the subscription.
_socketSubscription = null;
if (_state == _State.CLOSED || _state == _State.FAILURE) return;
if (_incoming != null) {
if (_state != _State.UPGRADED &&
!(_state == _State.START && !_requestParser) &&
!(_state == _State.BODY && !_chunked && _transferLength == -1)) {
_bodyController
.addError(HttpException("Connection closed while receiving data"));
}
_closeIncoming(true);
_controller.close();
return;
}
// If the connection is idle the HTTP stream is closed.
if (_state == _State.START) {
if (!_requestParser) {
_reportError(
HttpException("Connection closed before full header was received"));
}
_controller.close();
return;
}
if (_state == _State.UPGRADED) {
_controller.close();
return;
}
if (_state < _State.FIRST_BODY_STATE) {
_state = _State.FAILURE;
// Report the error through the error callback if any. Otherwise
// throw the error.
_reportError(
HttpException("Connection closed before full header was received"));
_controller.close();
return;
}
if (!_chunked && _transferLength == -1) {
_state = _State.CLOSED;
} else {
_state = _State.FAILURE;
// Report the error through the error callback if any. Otherwise
// throw the error.
_reportError(
HttpException("Connection closed before full body was received"));
}
_controller.close();
}