diff options
Diffstat (limited to 'tools/codegen/core/gen_static_metadata.py')
-rwxr-xr-x | tools/codegen/core/gen_static_metadata.py | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/tools/codegen/core/gen_static_metadata.py b/tools/codegen/core/gen_static_metadata.py index e56c627721..6ee8a7cace 100755 --- a/tools/codegen/core/gen_static_metadata.py +++ b/tools/codegen/core/gen_static_metadata.py @@ -132,29 +132,33 @@ CONFIG = [ ('www-authenticate', ''), ] +# Entries marked with is_default=True are ignored when counting +# non-default initial metadata that prevents the chttp2 server from +# sending a Trailers-Only response. METADATA_BATCH_CALLOUTS = [ - ':path', - ':method', - ':status', - ':authority', - ':scheme', - 'te', - 'grpc-message', - 'grpc-status', - 'grpc-payload-bin', - 'grpc-encoding', - 'grpc-accept-encoding', - 'grpc-server-stats-bin', - 'grpc-tags-bin', - 'grpc-trace-bin', - 'content-type', - 'content-encoding', - 'accept-encoding', - 'grpc-internal-encoding-request', - 'grpc-internal-stream-encoding-request', - 'user-agent', - 'host', - 'lb-token', + # (name, is_default) + (':path', True), + (':method', True), + (':status', True), + (':authority', True), + (':scheme', True), + ('te', True), + ('grpc-message', True), + ('grpc-status', True), + ('grpc-payload-bin', True), + ('grpc-encoding', True), + ('grpc-accept-encoding', True), + ('grpc-server-stats-bin', True), + ('grpc-tags-bin', True), + ('grpc-trace-bin', True), + ('content-type', True), + ('content-encoding', True), + ('accept-encoding', True), + ('grpc-internal-encoding-request', True), + ('grpc-internal-stream-encoding-request', True), + ('user-agent', True), + ('host', True), + ('lb-token', True), ] COMPRESSION_ALGORITHMS = [ @@ -235,7 +239,7 @@ all_elems = list() static_userdata = {} # put metadata batch callouts first, to make the check of if a static metadata # string is a callout trivial -for elem in METADATA_BATCH_CALLOUTS: +for elem, _ in METADATA_BATCH_CALLOUTS: if elem not in all_strs: all_strs.append(elem) for elem in CONFIG: @@ -372,7 +376,7 @@ def slice_def(i): # validate configuration -for elem in METADATA_BATCH_CALLOUTS: +for elem, _ in METADATA_BATCH_CALLOUTS: assert elem in all_strs print >> H, '#define GRPC_STATIC_MDSTR_COUNT %d' % len(all_strs) @@ -540,7 +544,7 @@ for a, b in all_elems: print >> C, '};' print >> H, 'typedef enum {' -for elem in METADATA_BATCH_CALLOUTS: +for elem, _ in METADATA_BATCH_CALLOUTS: print >> H, ' %s,' % mangle(elem, 'batch').upper() print >> H, ' GRPC_BATCH_CALLOUTS_COUNT' print >> H, '} grpc_metadata_batch_callouts_index;' @@ -548,7 +552,7 @@ print >> H print >> H, 'typedef union {' print >> H, ' struct grpc_linked_mdelem *array[GRPC_BATCH_CALLOUTS_COUNT];' print >> H, ' struct {' -for elem in METADATA_BATCH_CALLOUTS: +for elem, _ in METADATA_BATCH_CALLOUTS: print >> H, ' struct grpc_linked_mdelem *%s;' % mangle(elem, '').lower() print >> H, ' } named;' print >> H, '} grpc_metadata_batch_callouts;' @@ -556,6 +560,14 @@ print >> H print >> H, '#define GRPC_BATCH_INDEX_OF(slice) \\' print >> H, ' (GRPC_IS_STATIC_METADATA_STRING((slice)) ? (grpc_metadata_batch_callouts_index)GPR_CLAMP(GRPC_STATIC_METADATA_INDEX((slice)), 0, GRPC_BATCH_CALLOUTS_COUNT) : GRPC_BATCH_CALLOUTS_COUNT)' print >> H +print >> H, ('extern bool grpc_static_callout_is_default[' + 'GRPC_BATCH_CALLOUTS_COUNT];') +print >> H +print >> C, 'bool grpc_static_callout_is_default[GRPC_BATCH_CALLOUTS_COUNT] = {' +for elem, is_default in METADATA_BATCH_CALLOUTS: + print >> C, ' %s, // %s' % (str(is_default).lower(), elem) +print >> C, '};' +print >> C print >> H, 'extern const uint8_t grpc_static_accept_encoding_metadata[%d];' % ( 1 << len(COMPRESSION_ALGORITHMS)) |