This is a fairly low effort migration of the current codebase into a C++ class, instead of free standing C code.
It builds upon #26657 as a necessary first step.
I've tried to minimize any changes to semantics or logic in this change, except where required to get a minimal amount of encapsulation - which is the major aim of this change.
A future change in this series will buffer slices until all HPACK headers are in memory for a stream prior to decoding -- it's important to have an encapsulated API to the parser before doing so however (hence this CL).
The next change after that will be an almost complete rewrite of the parsing functionality -- since we'll have the total set of header bytes, we'll no longer need to support suspending decoding at arbitrary points. This will allow us to move to a simple recursive descent parser, eliminate a bunch of indirection in this code, and end up in a much more malleable place for when we start doing metadata API changes.
(we likely also end up with some good performance wins!)
This adds support for protobuf ObjC support for using the proto package to
define the prefix for the file
(https://github.com/protocolbuffers/protobuf/pull/8760).
Once protobuf cuts a release, it likely makes sense to support the same
generator options that the objc generator does, but for now the environment
variable support can used to enable this when building from recent sources.
Eliminate HPACK table
Use a switch statement instead of a table lookup for the first byte of
HPACK parsing.
This will lead the way to some other improvements down the track (I have
a substantial overhaul here planned), but this is a necessary first
step.
* Use constexpr to simplify HPACK parser
This is a bit of a trial balloon: in C++11, generate at load time a
table that used to be hard coded. In C++14, generate that same table at
compile time, but eliminate the code generator.
Should this work out, I'd like to expand the technique so that we can
eliminate some of the confusing tables in this file by keeping the code
that generates them *in the same place* as the code that consumes them.
* comments
* c++14 fixes
* match/overload abstraction
* update projects
* match should really not accept mutable args
* typo
* tests
* usage comment
* mutable version
* build stuff
* clang-format
* add an escape hatch to avoid needing port_platform.h in files that do not need port_platform.h
* unused args
* Make it possible for a test to not depend on gpr
* add tests
* compile fix
* sepelling
* add CallDispatchController API and use it in both retry and non-retry cases
* call commit when LB call is cancelled
* use DualRefCounted for ClusterState
* pass CallDispatchController on per-call basis instead of via channel args, and maybe don't use it for existing cluster refs
* use new API for xDS cluster unref, move fallback to recv_trailing_metadata, and ensure that Commit() gets called at most once
* clang-format and clang-tidy
* create a separate CallDispatchController for each call
* add virtual dtor
* Update visibility tags
Add some tags to the bazel build that we can leverage internally to help
control visibility in the Google build system.
* review feedback
* Add needed visibility tag
* Tighten the error tolerance requirement by 10x
* Make it 5 sigma instead of 4.5
* Rewrap comments
* Loosen the max concurrent requests in certain test cases
* Update visibility tags
Add some tags to the bazel build that we can leverage internally to help
control visibility in the Google build system.
* review feedback