xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_receive_stream.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/quic/core/qpack/qpack_receive_stream.h"
6 
7 #include "absl/strings/string_view.h"
8 #include "quiche/quic/core/quic_session.h"
9 
10 namespace quic {
QpackReceiveStream(PendingStream * pending,QuicSession * session,QpackStreamReceiver * receiver)11 QpackReceiveStream::QpackReceiveStream(PendingStream* pending,
12                                        QuicSession* session,
13                                        QpackStreamReceiver* receiver)
14     : QuicStream(pending, session, /*is_static=*/true), receiver_(receiver) {}
15 
OnStreamReset(const QuicRstStreamFrame &)16 void QpackReceiveStream::OnStreamReset(const QuicRstStreamFrame& /*frame*/) {
17   stream_delegate()->OnStreamError(
18       QUIC_HTTP_CLOSED_CRITICAL_STREAM,
19       "RESET_STREAM received for QPACK receive stream");
20 }
21 
OnDataAvailable()22 void QpackReceiveStream::OnDataAvailable() {
23   iovec iov;
24   while (!reading_stopped() && sequencer()->GetReadableRegion(&iov)) {
25     QUICHE_DCHECK(!sequencer()->IsClosed());
26 
27     receiver_->Decode(absl::string_view(
28         reinterpret_cast<const char*>(iov.iov_base), iov.iov_len));
29     sequencer()->MarkConsumed(iov.iov_len);
30   }
31 }
32 
33 }  // namespace quic
34