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)11QpackReceiveStream::QpackReceiveStream(PendingStream* pending, 12 QuicSession* session, 13 QpackStreamReceiver* receiver) 14 : QuicStream(pending, session, /*is_static=*/true), receiver_(receiver) {} 15 OnStreamReset(const QuicRstStreamFrame &)16void 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()22void 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