// Copyright 2024 The Pigweed Authors // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. // // AUTOGENERATED FILE, DO NOT EDIT // // To regenerate, run `go run gen/hpack_gen.go > hpack.autogen.inc`. // This file should be included in exactly one *.cc file. // // clang-format off // Huffman decoder table. Decoding starts at index=0. For each bit, we inspect // kHuffmanDecoderTable[index][bit] and take an action based on that value: // // * If the value matches 0b0..._...., set index=value // * If the value matches 0b1xxx_xxxx, output byte 32 + xx_xxxx, set index=0 // * If the value matches 0b1111_1110, fail: unprintable character // * If the value matches 0b1111_1111, fail: decoder entered an invalid state // static constexpr std::array kHuffmanDecoderTable = {{ /*0=*/ {1, 22}, /*1=*/ {2, 9}, /*2=*/ {3, 6}, /*3=*/ {4, 5}, /*4=*/ {144, 145}, /*5=*/ {146, 193}, /*6=*/ {7, 8}, /*7=*/ {195, 197}, /*8=*/ {201, 207}, /*9=*/ {10, 15}, /*10=*/ {11, 12}, /*11=*/ {211, 212}, /*12=*/ {13, 14}, /*13=*/ {128, 133}, /*14=*/ {141, 142}, /*15=*/ {16, 19}, /*16=*/ {17, 18}, /*17=*/ {143, 147}, /*18=*/ {148, 149}, /*19=*/ {20, 21}, /*20=*/ {150, 151}, /*21=*/ {152, 153}, /*22=*/ {23, 40}, /*23=*/ {24, 31}, /*24=*/ {25, 28}, /*25=*/ {26, 27}, /*26=*/ {157, 161}, /*27=*/ {191, 194}, /*28=*/ {29, 30}, /*29=*/ {196, 198}, /*30=*/ {199, 200}, /*31=*/ {32, 35}, /*32=*/ {33, 34}, /*33=*/ {204, 205}, /*34=*/ {206, 208}, /*35=*/ {36, 37}, /*36=*/ {210, 213}, /*37=*/ {38, 39}, /*38=*/ {154, 162}, /*39=*/ {163, 164}, /*40=*/ {41, 56}, /*41=*/ {42, 49}, /*42=*/ {43, 46}, /*43=*/ {44, 45}, /*44=*/ {165, 166}, /*45=*/ {167, 168}, /*46=*/ {47, 48}, /*47=*/ {169, 170}, /*48=*/ {171, 172}, /*49=*/ {50, 53}, /*50=*/ {51, 52}, /*51=*/ {173, 174}, /*52=*/ {175, 176}, /*53=*/ {54, 55}, /*54=*/ {177, 178}, /*55=*/ {179, 180}, /*56=*/ {57, 64}, /*57=*/ {58, 61}, /*58=*/ {59, 60}, /*59=*/ {181, 182}, /*60=*/ {183, 185}, /*61=*/ {62, 63}, /*62=*/ {202, 203}, /*63=*/ {209, 214}, /*64=*/ {65, 68}, /*65=*/ {66, 67}, /*66=*/ {215, 216}, /*67=*/ {217, 218}, /*68=*/ {69, 72}, /*69=*/ {70, 71}, /*70=*/ {134, 138}, /*71=*/ {140, 155}, /*72=*/ {73, 74}, /*73=*/ {184, 186}, /*74=*/ {75, 78}, /*75=*/ {76, 77}, /*76=*/ {129, 130}, /*77=*/ {136, 137}, /*78=*/ {79, 81}, /*79=*/ {159, 80}, /*80=*/ {135, 139}, /*81=*/ {82, 84}, /*82=*/ {220, 83}, /*83=*/ {131, 158}, /*84=*/ {85, 88}, /*85=*/ {86, 87}, /*86=*/ {254, 132}, /*87=*/ {160, 187}, /*88=*/ {89, 90}, /*89=*/ {189, 222}, /*90=*/ {91, 92}, /*91=*/ {190, 221}, /*92=*/ {93, 94}, /*93=*/ {156, 192}, /*94=*/ {219, 95}, /*95=*/ {96, 99}, /*96=*/ {97, 254}, /*97=*/ {98, 254}, /*98=*/ {188, 254}, /*99=*/ {254, 100}, /*100=*/ {254, 101}, /*101=*/ {254, 102}, /*102=*/ {254, 103}, /*103=*/ {254, 104}, /*104=*/ {254, 105}, /*105=*/ {254, 106}, /*106=*/ {254, 107}, /*107=*/ {254, 108}, /*108=*/ {254, 109}, /*109=*/ {110, 111}, /*110=*/ {223, 254}, /*111=*/ {254, 112}, /*112=*/ {254, 113}, /*113=*/ {254, 255}, }}; // Decoder table stats: // before optimization = {numBranchNodes:256 numOutputNodes:96 numUnprintableNodes:160 numInvalidNodes:1} // after optimization = {numBranchNodes:114 numOutputNodes:96 numUnprintableNodes:18 numInvalidNodes:1} // HPACK-encoded header fields which form grpc Response-Headers. // These are the same for every response. static constexpr std::array kResponseHeaderFields = { 0x88, 0x5f, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63 }; // HPACK-encoded header fields which form grpc Trailers. All response Trailers // are identical except for the status code. // // This is indexed by pw::Status::Code, which happens to be identical to grpc's // status code. struct ResponseTrailerPayload { uint32_t size; std::array bytes; }; static constexpr std::array kResponseTrailerFields = {{ {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x30}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x31}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x32}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x33}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x34}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x35}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x36}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x37}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x38}}, {.size=15, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1, 0x39}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x30}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x31}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x32}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x33}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x34}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x35}}, {.size=16, .bytes={0x40, 0xb, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2, 0x31, 0x36}}, }};