#include <grpc/support/port_platform.h>
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
#include <stddef.h>
#include <stdlib.h>
#include <algorithm>
#include <initializer_list>
#include <string>
#include <utility>
#include "absl/base/attributes.h"
#include "absl/status/status.h"
#include "absl/strings/match.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "absl/types/variant.h"
#include <grpc/status.h>
#include <grpc/support/log.h>
#include "src/core/ext/transport/chttp2/transport/decode_huff.h"
#include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
#include "src/core/lib/debug/stats.h"
#include "src/core/lib/debug/stats_data.h"
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/gprpp/status_helper.h"
#include "src/core/lib/slice/slice.h"
#include "src/core/lib/slice/slice_refcount.h"
#include "src/core/lib/transport/parsed_metadata.h"
namespace grpc_core {
TraceFlag grpc_trace_chttp2_hpack_parser(false, "chttp2_hpack_parser");
namespace {
constexpr char kBase64Alphabet[] = …;
struct Base64InverseTable { … };
constexpr Base64InverseTable kBase64InverseTable;
}
class HPackParser::Input { … };
class HPackParser::String { … };
class HPackParser::Parser { … };
Slice HPackParser::String::Take() { … }
HPackParser::HPackParser() = default;
HPackParser::~HPackParser() = default;
void HPackParser::BeginFrame(grpc_metadata_batch* metadata_buffer,
uint32_t metadata_size_limit, Boundary boundary,
Priority priority, LogInfo log_info) { … }
grpc_error_handle HPackParser::Parse(const grpc_slice& slice, bool is_last) { … }
grpc_error_handle HPackParser::ParseInput(Input input, bool is_last) { … }
bool HPackParser::ParseInputInner(Input* input) { … }
void HPackParser::FinishFrame() { … }
}