blob: 86cce55345b39634e4ca4efe54b0691dafe1c50b [file] [log] [blame]
// 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.
#ifndef QUICHE_QUIC_CORE_QPACK_QPACK_PROGRESSIVE_ENCODER_H_
#define QUICHE_QUIC_CORE_QPACK_QPACK_PROGRESSIVE_ENCODER_H_
#include <cstddef>
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_stream_sender.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_instruction_encoder.h"
#include "net/third_party/quiche/src/quic/core/quic_types.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
#include "net/third_party/quiche/src/spdy/core/hpack/hpack_encoder.h"
#include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
namespace quic {
class QpackHeaderTable;
// An implementation of ProgressiveEncoder interface that encodes a single
// header block.
class QUIC_EXPORT_PRIVATE QpackProgressiveEncoder
: public spdy::HpackEncoder::ProgressiveEncoder {
public:
QpackProgressiveEncoder() = delete;
QpackProgressiveEncoder(QuicStreamId stream_id,
QpackHeaderTable* header_table,
QpackEncoderStreamSender* encoder_stream_sender,
const spdy::SpdyHeaderBlock* header_list);
QpackProgressiveEncoder(const QpackProgressiveEncoder&) = delete;
QpackProgressiveEncoder& operator=(const QpackProgressiveEncoder&) = delete;
~QpackProgressiveEncoder() override = default;
// Returns true iff more remains to encode.
bool HasNext() const override;
// Encodes up to |max_encoded_bytes| octets, appending to |output|.
void Next(size_t max_encoded_bytes, QuicString* output) override;
private:
const QuicStreamId stream_id_;
QpackInstructionEncoder instruction_encoder_;
const QpackHeaderTable* const header_table_;
QpackEncoderStreamSender* const encoder_stream_sender_;
const spdy::SpdyHeaderBlock* const header_list_;
// Header field currently being encoded.
spdy::SpdyHeaderBlock::const_iterator header_list_iterator_;
// False until prefix is fully encoded.
bool prefix_encoded_;
};
} // namespace quic
#endif // QUICHE_QUIC_CORE_QPACK_QPACK_PROGRESSIVE_ENCODER_H_