| // Copyright (c) 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "quiche/quic/tools/quic_simple_client_stream.h" |
| |
| #include "quiche/common/platform/api/quiche_logging.h" |
| |
| namespace quic { |
| |
| void QuicSimpleClientStream::OnBodyAvailable() { |
| if (!drop_response_body_) { |
| QuicSpdyClientStream::OnBodyAvailable(); |
| return; |
| } |
| |
| while (HasBytesToRead()) { |
| struct iovec iov; |
| if (GetReadableRegions(&iov, 1) == 0) { |
| break; |
| } |
| MarkConsumed(iov.iov_len); |
| } |
| if (sequencer()->IsClosed()) { |
| OnFinRead(); |
| } else { |
| sequencer()->SetUnblocked(); |
| } |
| } |
| |
| bool QuicSimpleClientStream::ParseAndValidateStatusCode() { |
| const size_t num_previous_interim_headers = preliminary_headers().size(); |
| if (!QuicSpdyClientStream::ParseAndValidateStatusCode()) { |
| return false; |
| } |
| // The base ParseAndValidateStatusCode() may have added a preliminary header. |
| if (preliminary_headers().size() > num_previous_interim_headers) { |
| QUICHE_DCHECK_EQ(preliminary_headers().size(), |
| num_previous_interim_headers + 1); |
| if (on_interim_headers_) { |
| on_interim_headers_(preliminary_headers().back()); |
| } |
| } |
| return true; |
| } |
| |
| } // namespace quic |