blob: e00be7dfc5f0e0d3ce89cc09daeedeafa515a1a4 [file] [log] [blame] [edit]
// 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_HTTP_HTTP_ENCODER_H_
#define QUICHE_QUIC_CORE_HTTP_HTTP_ENCODER_H_
#include <memory>
#include "quiche/quic/core/http/http_frames.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/platform/api/quic_export.h"
#include "quiche/common/quiche_buffer_allocator.h"
namespace quic {
class QuicDataWriter;
// A class for encoding the HTTP frames that are exchanged in an HTTP over QUIC
// session.
class QUICHE_EXPORT HttpEncoder {
public:
HttpEncoder() = delete;
// Returns the length of the header for a DATA frame.
static QuicByteCount GetDataFrameHeaderLength(QuicByteCount payload_length);
// Serializes a DATA frame header into a QuicheBuffer; returns said
// QuicheBuffer on success, empty buffer otherwise.
static quiche::QuicheBuffer SerializeDataFrameHeader(
QuicByteCount payload_length, quiche::QuicheBufferAllocator* allocator);
// Serializes a HEADERS frame header.
static std::string SerializeHeadersFrameHeader(QuicByteCount payload_length);
// Serializes a SETTINGS frame.
static std::string SerializeSettingsFrame(const SettingsFrame& settings);
// Serializes a GOAWAY frame.
static std::string SerializeGoAwayFrame(const GoAwayFrame& goaway);
// Serializes a PRIORITY_UPDATE frame.
static std::string SerializePriorityUpdateFrame(
const PriorityUpdateFrame& priority_update);
// Serializes an ACCEPT_CH frame.
static std::string SerializeAcceptChFrame(const AcceptChFrame& accept_ch);
// Serializes an ORIGIN frame.
static std::string SerializeOriginFrame(const OriginFrame& origin);
// Serializes a frame with reserved frame type specified in
// https://tools.ietf.org/html/draft-ietf-quic-http-25#section-7.2.9.
static std::string SerializeGreasingFrame();
// Serializes a WEBTRANSPORT_STREAM frame header as specified in
// https://www.ietf.org/archive/id/draft-ietf-webtrans-http3-00.html#name-client-initiated-bidirectio
static std::string SerializeWebTransportStreamFrameHeader(
WebTransportSessionId session_id);
// Serializes a METADATA frame header.
static std::string SerializeMetadataFrameHeader(QuicByteCount payload_length);
};
} // namespace quic
#endif // QUICHE_QUIC_CORE_HTTP_HTTP_ENCODER_H_