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