grpc 0.12.0 → 0.13.0.pre1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +5707 -22222
- data/include/grpc/byte_buffer.h +2 -83
- data/include/grpc/census.h +191 -121
- data/include/grpc/compression.h +14 -38
- data/include/grpc/grpc.h +88 -434
- data/include/grpc/grpc_security.h +76 -46
- data/include/grpc/grpc_zookeeper.h +1 -1
- data/include/grpc/impl/codegen/alloc.h +74 -0
- data/include/grpc/impl/codegen/atm.h +92 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
- data/include/grpc/impl/codegen/atm_win32.h +125 -0
- data/include/grpc/impl/codegen/byte_buffer.h +121 -0
- data/include/grpc/impl/codegen/compression_types.h +73 -0
- data/include/grpc/impl/codegen/connectivity_state.h +59 -0
- data/include/grpc/impl/codegen/grpc_types.h +373 -0
- data/include/grpc/impl/codegen/log.h +110 -0
- data/include/grpc/impl/codegen/port_platform.h +362 -0
- data/include/grpc/impl/codegen/propagation_bits.h +67 -0
- data/include/grpc/impl/codegen/slice.h +182 -0
- data/include/grpc/impl/codegen/slice_buffer.h +105 -0
- data/include/grpc/impl/codegen/status.h +163 -0
- data/include/grpc/impl/codegen/sync.h +316 -0
- data/include/grpc/impl/codegen/sync_generic.h +55 -0
- data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
- data/include/grpc/impl/codegen/sync_win32.h +49 -0
- data/include/grpc/impl/codegen/time.h +132 -0
- data/include/grpc/status.h +2 -126
- data/include/grpc/support/alloc.h +2 -35
- data/include/grpc/support/atm.h +2 -55
- data/include/grpc/support/atm_gcc_atomic.h +5 -38
- data/include/grpc/support/atm_gcc_sync.h +2 -50
- data/include/grpc/support/atm_win32.h +2 -88
- data/include/grpc/support/avl.h +7 -7
- data/include/grpc/support/cmdline.h +15 -13
- data/include/grpc/support/cpu.h +5 -3
- data/include/grpc/support/histogram.h +23 -20
- data/include/grpc/support/host_port.h +5 -3
- data/include/grpc/support/log.h +2 -71
- data/include/grpc/support/log_win32.h +2 -2
- data/include/grpc/support/port_platform.h +2 -319
- data/include/grpc/support/slice.h +2 -145
- data/include/grpc/support/slice_buffer.h +2 -65
- data/include/grpc/support/string_util.h +3 -3
- data/include/grpc/support/subprocess.h +8 -6
- data/include/grpc/support/sync.h +2 -278
- data/include/grpc/support/sync_generic.h +2 -18
- data/include/grpc/support/sync_posix.h +2 -10
- data/include/grpc/support/sync_win32.h +2 -12
- data/include/grpc/support/thd.h +11 -11
- data/include/grpc/support/time.h +2 -91
- data/include/grpc/support/tls.h +1 -1
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_msvc.h +1 -1
- data/include/grpc/support/tls_pthread.h +2 -2
- data/src/boringssl/err_data.c +1252 -0
- data/src/core/census/context.c +492 -8
- data/src/core/census/grpc_filter.c +3 -3
- data/src/core/census/initialize.c +4 -7
- data/src/core/census/operation.c +2 -2
- data/src/core/census/placeholders.c +109 -0
- data/src/core/census/rpc_metric_id.h +6 -6
- data/src/core/census/tracing.c +1 -1
- data/src/core/channel/channel_args.c +4 -3
- data/src/core/channel/channel_stack.c +1 -1
- data/src/core/channel/client_channel.c +18 -14
- data/src/core/channel/client_uchannel.c +3 -3
- data/src/core/channel/compress_filter.c +8 -8
- data/src/core/channel/http_client_filter.c +2 -2
- data/src/core/channel/http_server_filter.c +9 -9
- data/src/core/channel/subchannel_call_holder.c +12 -10
- data/src/core/client_config/lb_policies/pick_first.c +49 -31
- data/src/core/client_config/lb_policies/round_robin.c +7 -7
- data/src/core/client_config/resolvers/dns_resolver.c +3 -3
- data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
- data/src/core/client_config/subchannel.c +36 -25
- data/src/core/compression/algorithm.c +3 -3
- data/src/core/httpcli/format_request.c +1 -1
- data/src/core/httpcli/httpcli.c +5 -5
- data/src/core/httpcli/httpcli_security_connector.c +2 -3
- data/src/core/httpcli/parser.c +7 -7
- data/src/core/httpcli/parser.h +1 -1
- data/src/core/iomgr/closure.c +7 -7
- data/src/core/iomgr/closure.h +6 -5
- data/src/core/iomgr/exec_ctx.c +12 -8
- data/src/core/iomgr/exec_ctx.h +12 -5
- data/src/core/iomgr/executor.c +4 -4
- data/src/core/iomgr/executor.h +2 -2
- data/src/core/iomgr/fd_posix.c +28 -17
- data/src/core/iomgr/fd_posix.h +7 -4
- data/src/core/iomgr/iocp_windows.c +6 -8
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
- data/src/core/iomgr/pollset_posix.c +15 -15
- data/src/core/iomgr/pollset_posix.h +4 -2
- data/src/core/iomgr/pollset_windows.c +3 -12
- data/src/core/iomgr/resolve_address_posix.c +2 -2
- data/src/core/iomgr/resolve_address_windows.c +2 -2
- data/src/core/iomgr/sockaddr_utils.c +6 -6
- data/src/core/iomgr/sockaddr_win32.h +1 -6
- data/src/core/iomgr/tcp_client_posix.c +7 -7
- data/src/core/iomgr/tcp_client_windows.c +4 -4
- data/src/core/iomgr/tcp_posix.c +14 -8
- data/src/core/iomgr/tcp_posix.h +7 -1
- data/src/core/iomgr/tcp_server.h +40 -20
- data/src/core/iomgr/tcp_server_posix.c +106 -49
- data/src/core/iomgr/tcp_server_windows.c +98 -49
- data/src/core/iomgr/tcp_windows.c +11 -15
- data/src/core/iomgr/timer.c +8 -8
- data/src/core/iomgr/timer.h +1 -1
- data/src/core/iomgr/timer_heap.c +10 -10
- data/src/core/iomgr/timer_heap.h +2 -2
- data/src/core/iomgr/udp_server.c +2 -12
- data/src/core/iomgr/udp_server.h +1 -9
- data/src/core/iomgr/workqueue.h +2 -4
- data/src/core/iomgr/workqueue_posix.c +3 -3
- data/src/core/json/json_reader.c +11 -12
- data/src/core/json/json_reader.h +4 -4
- data/src/core/json/json_string.c +19 -19
- data/src/core/json/json_writer.c +7 -9
- data/src/core/profiling/basic_timers.c +1 -1
- data/src/core/security/base64.c +9 -9
- data/src/core/security/client_auth_filter.c +4 -4
- data/src/core/security/credentials.c +5 -5
- data/src/core/security/google_default_credentials.c +3 -3
- data/src/core/security/handshake.c +6 -5
- data/src/core/security/json_token.c +13 -7
- data/src/core/security/jwt_verifier.c +3 -2
- data/src/core/security/secure_endpoint.c +16 -16
- data/src/core/security/security_connector.c +47 -17
- data/src/core/security/security_connector.h +5 -5
- data/src/core/security/server_auth_filter.c +3 -3
- data/src/core/security/server_secure_chttp2.c +30 -31
- data/src/core/statistics/census_interface.h +2 -2
- data/src/core/statistics/census_rpc_stats.h +3 -3
- data/src/core/support/alloc.c +1 -1
- data/src/core/support/cpu_posix.c +2 -2
- data/src/core/support/env_linux.c +12 -2
- data/src/core/support/env_win32.c +15 -7
- data/src/core/support/histogram.c +5 -5
- data/src/core/support/log_posix.c +1 -1
- data/src/core/support/log_win32.c +4 -3
- data/src/core/support/murmur_hash.c +11 -11
- data/src/core/support/murmur_hash.h +1 -1
- data/src/core/support/slice.c +11 -11
- data/src/core/support/slice_buffer.c +6 -6
- data/src/core/support/stack_lockfree.c +20 -10
- data/src/core/support/string.c +15 -15
- data/src/core/support/string.h +5 -5
- data/src/core/support/string_win32.c +5 -5
- data/src/core/support/subprocess_windows.c +141 -0
- data/src/core/support/sync.c +4 -4
- data/src/core/support/sync_posix.c +2 -2
- data/src/core/support/sync_win32.c +10 -5
- data/src/core/support/time.c +29 -29
- data/src/core/support/time_posix.c +15 -6
- data/src/core/support/time_precise.c +2 -2
- data/src/core/support/time_win32.c +18 -9
- data/src/core/support/tls_pthread.c +1 -1
- data/src/core/support/wrap_memcpy.c +53 -0
- data/src/core/surface/alarm.c +83 -0
- data/src/core/surface/byte_buffer_reader.c +1 -1
- data/src/core/surface/call.c +78 -69
- data/src/core/surface/call.h +2 -2
- data/src/core/surface/call_test_only.h +2 -2
- data/src/core/surface/channel.c +9 -9
- data/src/core/surface/channel.h +1 -1
- data/src/core/surface/channel_connectivity.c +3 -3
- data/src/core/surface/channel_create.c +3 -3
- data/src/core/surface/channel_ping.c +2 -2
- data/src/core/surface/completion_queue.c +11 -12
- data/src/core/surface/completion_queue.h +1 -1
- data/src/core/surface/init.c +7 -5
- data/src/core/surface/lame_client.c +3 -3
- data/src/core/surface/secure_channel_create.c +3 -3
- data/src/core/surface/server.c +28 -28
- data/src/core/surface/server_chttp2.c +8 -8
- data/src/core/surface/server_create.c +1 -4
- data/src/core/surface/validate_metadata.c +3 -3
- data/src/core/surface/version.c +2 -2
- data/src/core/transport/byte_stream.c +8 -6
- data/src/core/transport/byte_stream.h +6 -5
- data/src/core/transport/chttp2/bin_encoder.c +29 -29
- data/src/core/transport/chttp2/frame_data.c +29 -26
- data/src/core/transport/chttp2/frame_data.h +6 -6
- data/src/core/transport/chttp2/frame_goaway.c +30 -30
- data/src/core/transport/chttp2/frame_goaway.h +6 -6
- data/src/core/transport/chttp2/frame_ping.c +6 -6
- data/src/core/transport/chttp2/frame_ping.h +5 -5
- data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
- data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
- data/src/core/transport/chttp2/frame_settings.c +30 -30
- data/src/core/transport/chttp2/frame_settings.h +13 -13
- data/src/core/transport/chttp2/frame_window_update.c +17 -18
- data/src/core/transport/chttp2/frame_window_update.h +5 -7
- data/src/core/transport/chttp2/hpack_encoder.c +69 -73
- data/src/core/transport/chttp2/hpack_encoder.h +16 -16
- data/src/core/transport/chttp2/hpack_parser.c +167 -167
- data/src/core/transport/chttp2/hpack_parser.h +16 -16
- data/src/core/transport/chttp2/hpack_table.c +13 -13
- data/src/core/transport/chttp2/hpack_table.h +11 -11
- data/src/core/transport/chttp2/internal.h +97 -86
- data/src/core/transport/chttp2/parsing.c +25 -25
- data/src/core/transport/chttp2/stream_lists.c +26 -3
- data/src/core/transport/chttp2/stream_map.c +13 -14
- data/src/core/transport/chttp2/stream_map.h +6 -7
- data/src/core/transport/chttp2/timeout_encoding.c +19 -16
- data/src/core/transport/chttp2/varint.c +8 -9
- data/src/core/transport/chttp2/varint.h +7 -8
- data/src/core/transport/chttp2/writing.c +26 -23
- data/src/core/transport/chttp2_transport.c +133 -92
- data/src/core/transport/connectivity_state.c +6 -6
- data/src/core/transport/metadata.c +18 -18
- data/src/core/transport/metadata.h +5 -5
- data/src/core/transport/static_metadata.c +15 -16
- data/src/core/transport/static_metadata.h +5 -5
- data/src/core/transport/transport.c +5 -5
- data/src/core/transport/transport.h +14 -1
- data/src/core/tsi/fake_transport_security.c +7 -7
- data/src/core/tsi/ssl_transport_security.c +6 -4
- data/src/core/tsi/ssl_types.h +55 -0
- data/src/ruby/ext/grpc/extconf.rb +51 -14
- data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
- data/src/ruby/ext/grpc/rb_call.c +6 -3
- data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
- data/src/ruby/ext/grpc/rb_channel.c +4 -2
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
- data/src/ruby/ext/grpc/rb_grpc.c +11 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
- data/src/ruby/ext/grpc/rb_loader.c +72 -0
- data/src/ruby/ext/grpc/rb_loader.h +40 -0
- data/src/ruby/ext/grpc/rb_server.c +3 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/grpc.rb +34 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/third_party/boringssl/crypto/aes/aes.c +1142 -0
- data/third_party/boringssl/crypto/aes/internal.h +87 -0
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
- data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
- data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
- data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
- data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
- data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
- data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
- data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
- data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
- data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
- data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
- data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
- data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
- data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
- data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
- data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
- data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
- data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
- data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
- data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
- data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
- data/third_party/boringssl/crypto/base64/base64.c +478 -0
- data/third_party/boringssl/crypto/bio/bio.c +608 -0
- data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
- data/third_party/boringssl/crypto/bio/buffer.c +496 -0
- data/third_party/boringssl/crypto/bio/connect.c +544 -0
- data/third_party/boringssl/crypto/bio/fd.c +270 -0
- data/third_party/boringssl/crypto/bio/file.c +349 -0
- data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
- data/third_party/boringssl/crypto/bio/internal.h +108 -0
- data/third_party/boringssl/crypto/bio/pair.c +803 -0
- data/third_party/boringssl/crypto/bio/printf.c +119 -0
- data/third_party/boringssl/crypto/bio/socket.c +195 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
- data/third_party/boringssl/crypto/bn/add.c +377 -0
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
- data/third_party/boringssl/crypto/bn/bn.c +341 -0
- data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
- data/third_party/boringssl/crypto/bn/cmp.c +200 -0
- data/third_party/boringssl/crypto/bn/convert.c +597 -0
- data/third_party/boringssl/crypto/bn/ctx.c +311 -0
- data/third_party/boringssl/crypto/bn/div.c +625 -0
- data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
- data/third_party/boringssl/crypto/bn/gcd.c +711 -0
- data/third_party/boringssl/crypto/bn/generic.c +1019 -0
- data/third_party/boringssl/crypto/bn/internal.h +294 -0
- data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
- data/third_party/boringssl/crypto/bn/mul.c +888 -0
- data/third_party/boringssl/crypto/bn/prime.c +845 -0
- data/third_party/boringssl/crypto/bn/random.c +326 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
- data/third_party/boringssl/crypto/bn/shift.c +299 -0
- data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
- data/third_party/boringssl/crypto/buf/buf.c +235 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
- data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
- data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
- data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
- data/third_party/boringssl/crypto/cipher/aead.c +167 -0
- data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
- data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
- data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
- data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
- data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
- data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
- data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
- data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
- data/third_party/boringssl/crypto/cipher/internal.h +164 -0
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
- data/third_party/boringssl/crypto/conf/conf.c +778 -0
- data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
- data/third_party/boringssl/crypto/conf/internal.h +31 -0
- data/third_party/boringssl/crypto/cpu-arm.c +199 -0
- data/third_party/boringssl/crypto/cpu-intel.c +261 -0
- data/third_party/boringssl/crypto/crypto.c +140 -0
- data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
- data/third_party/boringssl/crypto/des/des.c +771 -0
- data/third_party/boringssl/crypto/des/internal.h +212 -0
- data/third_party/boringssl/crypto/dh/check.c +180 -0
- data/third_party/boringssl/crypto/dh/dh.c +463 -0
- data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
- data/third_party/boringssl/crypto/dh/internal.h +80 -0
- data/third_party/boringssl/crypto/dh/params.c +301 -0
- data/third_party/boringssl/crypto/digest/digest.c +248 -0
- data/third_party/boringssl/crypto/digest/digests.c +321 -0
- data/third_party/boringssl/crypto/digest/internal.h +112 -0
- data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
- data/third_party/boringssl/crypto/directory.h +66 -0
- data/third_party/boringssl/crypto/directory_posix.c +108 -0
- data/third_party/boringssl/crypto/directory_win.c +144 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
- data/third_party/boringssl/crypto/dsa/internal.h +78 -0
- data/third_party/boringssl/crypto/ec/ec.c +889 -0
- data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
- data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
- data/third_party/boringssl/crypto/ec/internal.h +318 -0
- data/third_party/boringssl/crypto/ec/oct.c +416 -0
- data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
- data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
- data/third_party/boringssl/crypto/ec/simple.c +1313 -0
- data/third_party/boringssl/crypto/ec/util-64.c +183 -0
- data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
- data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
- data/third_party/boringssl/crypto/engine/engine.c +96 -0
- data/third_party/boringssl/crypto/err/err.c +756 -0
- data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
- data/third_party/boringssl/crypto/evp/evp.c +411 -0
- data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
- data/third_party/boringssl/crypto/evp/internal.h +278 -0
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
- data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
- data/third_party/boringssl/crypto/evp/sign.c +151 -0
- data/third_party/boringssl/crypto/ex_data.c +294 -0
- data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
- data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
- data/third_party/boringssl/crypto/internal.h +532 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
- data/third_party/boringssl/crypto/md4/md4.c +225 -0
- data/third_party/boringssl/crypto/md5/md5.c +275 -0
- data/third_party/boringssl/crypto/mem.c +200 -0
- data/third_party/boringssl/crypto/modes/cbc.c +216 -0
- data/third_party/boringssl/crypto/modes/cfb.c +231 -0
- data/third_party/boringssl/crypto/modes/ctr.c +226 -0
- data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
- data/third_party/boringssl/crypto/modes/internal.h +370 -0
- data/third_party/boringssl/crypto/modes/ofb.c +108 -0
- data/third_party/boringssl/crypto/obj/obj.c +664 -0
- data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
- data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
- data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
- data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
- data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
- data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
- data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
- data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
- data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
- data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
- data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
- data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
- data/third_party/boringssl/crypto/rand/internal.h +32 -0
- data/third_party/boringssl/crypto/rand/rand.c +239 -0
- data/third_party/boringssl/crypto/rand/urandom.c +223 -0
- data/third_party/boringssl/crypto/rand/windows.c +56 -0
- data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
- data/third_party/boringssl/crypto/refcount_c11.c +67 -0
- data/third_party/boringssl/crypto/refcount_lock.c +53 -0
- data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
- data/third_party/boringssl/crypto/rsa/internal.h +164 -0
- data/third_party/boringssl/crypto/rsa/padding.c +711 -0
- data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
- data/third_party/boringssl/crypto/sha/sha1.c +337 -0
- data/third_party/boringssl/crypto/sha/sha256.c +327 -0
- data/third_party/boringssl/crypto/sha/sha512.c +607 -0
- data/third_party/boringssl/crypto/stack/stack.c +386 -0
- data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
- data/third_party/boringssl/crypto/test/test_util.h +35 -0
- data/third_party/boringssl/crypto/thread.c +101 -0
- data/third_party/boringssl/crypto/thread_none.c +55 -0
- data/third_party/boringssl/crypto/thread_pthread.c +167 -0
- data/third_party/boringssl/crypto/thread_win.c +282 -0
- data/third_party/boringssl/crypto/time_support.c +212 -0
- data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
- data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
- data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
- data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
- data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
- data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
- data/third_party/boringssl/crypto/x509/by_file.c +295 -0
- data/third_party/boringssl/crypto/x509/charmap.h +15 -0
- data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
- data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
- data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
- data/third_party/boringssl/crypto/x509/t_req.c +246 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
- data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
- data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
- data/third_party/boringssl/crypto/x509/x509.c +152 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
- data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
- data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
- data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
- data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
- data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
- data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
- data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
- data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
- data/third_party/boringssl/crypto/x509/x509name.c +381 -0
- data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
- data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
- data/third_party/boringssl/crypto/x509/x509type.c +128 -0
- data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
- data/third_party/boringssl/crypto/x509/x_all.c +547 -0
- data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
- data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
- data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
- data/third_party/boringssl/crypto/x509/x_info.c +95 -0
- data/third_party/boringssl/crypto/x509/x_name.c +538 -0
- data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
- data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
- data/third_party/boringssl/crypto/x509/x_req.c +112 -0
- data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
- data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
- data/third_party/boringssl/crypto/x509/x_val.c +69 -0
- data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
- data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
- data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
- data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
- data/third_party/boringssl/include/openssl/aead.h +346 -0
- data/third_party/boringssl/include/openssl/aes.h +158 -0
- data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
- data/third_party/boringssl/include/openssl/asn1.h +1168 -0
- data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
- data/third_party/boringssl/include/openssl/asn1t.h +906 -0
- data/third_party/boringssl/include/openssl/base.h +261 -0
- data/third_party/boringssl/include/openssl/base64.h +184 -0
- data/third_party/boringssl/include/openssl/bio.h +902 -0
- data/third_party/boringssl/include/openssl/blowfish.h +93 -0
- data/third_party/boringssl/include/openssl/bn.h +885 -0
- data/third_party/boringssl/include/openssl/buf.h +118 -0
- data/third_party/boringssl/include/openssl/buffer.h +18 -0
- data/third_party/boringssl/include/openssl/bytestring.h +360 -0
- data/third_party/boringssl/include/openssl/cast.h +96 -0
- data/third_party/boringssl/include/openssl/chacha.h +37 -0
- data/third_party/boringssl/include/openssl/cipher.h +571 -0
- data/third_party/boringssl/include/openssl/cmac.h +76 -0
- data/third_party/boringssl/include/openssl/conf.h +145 -0
- data/third_party/boringssl/include/openssl/cpu.h +184 -0
- data/third_party/boringssl/include/openssl/crypto.h +68 -0
- data/third_party/boringssl/include/openssl/curve25519.h +88 -0
- data/third_party/boringssl/include/openssl/des.h +177 -0
- data/third_party/boringssl/include/openssl/dh.h +238 -0
- data/third_party/boringssl/include/openssl/digest.h +258 -0
- data/third_party/boringssl/include/openssl/dsa.h +343 -0
- data/third_party/boringssl/include/openssl/dtls1.h +16 -0
- data/third_party/boringssl/include/openssl/ec.h +355 -0
- data/third_party/boringssl/include/openssl/ec_key.h +280 -0
- data/third_party/boringssl/include/openssl/ecdh.h +102 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
- data/third_party/boringssl/include/openssl/engine.h +98 -0
- data/third_party/boringssl/include/openssl/err.h +487 -0
- data/third_party/boringssl/include/openssl/evp.h +750 -0
- data/third_party/boringssl/include/openssl/ex_data.h +213 -0
- data/third_party/boringssl/include/openssl/hkdf.h +44 -0
- data/third_party/boringssl/include/openssl/hmac.h +160 -0
- data/third_party/boringssl/include/openssl/lhash.h +192 -0
- data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
- data/third_party/boringssl/include/openssl/md4.h +102 -0
- data/third_party/boringssl/include/openssl/md5.h +107 -0
- data/third_party/boringssl/include/openssl/mem.h +140 -0
- data/third_party/boringssl/include/openssl/obj.h +198 -0
- data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
- data/third_party/boringssl/include/openssl/objects.h +18 -0
- data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
- data/third_party/boringssl/include/openssl/opensslv.h +18 -0
- data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
- data/third_party/boringssl/include/openssl/pem.h +521 -0
- data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
- data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
- data/third_party/boringssl/include/openssl/poly1305.h +51 -0
- data/third_party/boringssl/include/openssl/pqueue.h +146 -0
- data/third_party/boringssl/include/openssl/rand.h +113 -0
- data/third_party/boringssl/include/openssl/rc4.h +90 -0
- data/third_party/boringssl/include/openssl/rsa.h +637 -0
- data/third_party/boringssl/include/openssl/safestack.h +16 -0
- data/third_party/boringssl/include/openssl/sha.h +256 -0
- data/third_party/boringssl/include/openssl/srtp.h +18 -0
- data/third_party/boringssl/include/openssl/ssl.h +4466 -0
- data/third_party/boringssl/include/openssl/ssl3.h +441 -0
- data/third_party/boringssl/include/openssl/stack.h +298 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
- data/third_party/boringssl/include/openssl/thread.h +173 -0
- data/third_party/boringssl/include/openssl/time_support.h +90 -0
- data/third_party/boringssl/include/openssl/tls1.h +653 -0
- data/third_party/boringssl/include/openssl/type_check.h +91 -0
- data/third_party/boringssl/include/openssl/x509.h +1258 -0
- data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
- data/third_party/boringssl/include/openssl/x509v3.h +798 -0
- data/third_party/boringssl/ssl/custom_extensions.c +257 -0
- data/third_party/boringssl/ssl/d1_both.c +880 -0
- data/third_party/boringssl/ssl/d1_clnt.c +566 -0
- data/third_party/boringssl/ssl/d1_lib.c +340 -0
- data/third_party/boringssl/ssl/d1_meth.c +130 -0
- data/third_party/boringssl/ssl/d1_pkt.c +578 -0
- data/third_party/boringssl/ssl/d1_srtp.c +234 -0
- data/third_party/boringssl/ssl/d1_srvr.c +485 -0
- data/third_party/boringssl/ssl/dtls_record.c +308 -0
- data/third_party/boringssl/ssl/internal.h +1276 -0
- data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
- data/third_party/boringssl/ssl/s3_both.c +571 -0
- data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
- data/third_party/boringssl/ssl/s3_enc.c +494 -0
- data/third_party/boringssl/ssl/s3_lib.c +587 -0
- data/third_party/boringssl/ssl/s3_meth.c +166 -0
- data/third_party/boringssl/ssl/s3_pkt.c +732 -0
- data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
- data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
- data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
- data/third_party/boringssl/ssl/ssl_cert.c +539 -0
- data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
- data/third_party/boringssl/ssl/ssl_file.c +633 -0
- data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
- data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
- data/third_party/boringssl/ssl/ssl_session.c +764 -0
- data/third_party/boringssl/ssl/ssl_stat.c +591 -0
- data/third_party/boringssl/ssl/t1_enc.c +708 -0
- data/third_party/boringssl/ssl/t1_lib.c +2905 -0
- data/third_party/boringssl/ssl/test/async_bio.h +45 -0
- data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
- data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
- data/third_party/boringssl/ssl/test/test_config.h +108 -0
- data/third_party/boringssl/ssl/tls_record.c +342 -0
- data/third_party/zlib/adler32.c +179 -0
- data/third_party/zlib/compress.c +80 -0
- data/third_party/zlib/crc32.c +425 -0
- data/third_party/zlib/crc32.h +441 -0
- data/third_party/zlib/deflate.c +1967 -0
- data/third_party/zlib/deflate.h +346 -0
- data/third_party/zlib/gzclose.c +25 -0
- data/third_party/zlib/gzguts.h +209 -0
- data/third_party/zlib/gzlib.c +634 -0
- data/third_party/zlib/gzread.c +594 -0
- data/third_party/zlib/gzwrite.c +577 -0
- data/third_party/zlib/infback.c +640 -0
- data/third_party/zlib/inffast.c +340 -0
- data/third_party/zlib/inffast.h +11 -0
- data/third_party/zlib/inffixed.h +94 -0
- data/third_party/zlib/inflate.c +1512 -0
- data/third_party/zlib/inflate.h +122 -0
- data/third_party/zlib/inftrees.c +306 -0
- data/third_party/zlib/inftrees.h +62 -0
- data/third_party/zlib/trees.c +1226 -0
- data/third_party/zlib/trees.h +128 -0
- data/third_party/zlib/uncompr.c +59 -0
- data/third_party/zlib/zconf.h +511 -0
- data/third_party/zlib/zlib.h +1768 -0
- data/third_party/zlib/zutil.c +324 -0
- data/third_party/zlib/zutil.h +253 -0
- metadata +492 -25
- data/Rakefile +0 -63
- data/src/ruby/lib/grpc/grpc.so +0 -0
@@ -70,39 +70,38 @@ typedef struct {
|
|
70
70
|
/* index (in output) of the header for the current frame */
|
71
71
|
size_t header_idx;
|
72
72
|
/* have we seen a regular (non-colon-prefixed) header yet? */
|
73
|
-
|
73
|
+
uint8_t seen_regular_header;
|
74
74
|
/* output stream id */
|
75
|
-
|
75
|
+
uint32_t stream_id;
|
76
76
|
gpr_slice_buffer *output;
|
77
77
|
} framer_state;
|
78
78
|
|
79
79
|
/* fills p (which is expected to be 9 bytes long) with a data frame header */
|
80
|
-
static void fill_header(
|
81
|
-
|
80
|
+
static void fill_header(uint8_t *p, uint8_t type, uint32_t id, size_t len,
|
81
|
+
uint8_t flags) {
|
82
82
|
GPR_ASSERT(len < 16777316);
|
83
|
-
*p++ = (
|
84
|
-
*p++ = (
|
85
|
-
*p++ = (
|
83
|
+
*p++ = (uint8_t)(len >> 16);
|
84
|
+
*p++ = (uint8_t)(len >> 8);
|
85
|
+
*p++ = (uint8_t)(len);
|
86
86
|
*p++ = type;
|
87
87
|
*p++ = flags;
|
88
|
-
*p++ = (
|
89
|
-
*p++ = (
|
90
|
-
*p++ = (
|
91
|
-
*p++ = (
|
88
|
+
*p++ = (uint8_t)(id >> 24);
|
89
|
+
*p++ = (uint8_t)(id >> 16);
|
90
|
+
*p++ = (uint8_t)(id >> 8);
|
91
|
+
*p++ = (uint8_t)(id);
|
92
92
|
}
|
93
93
|
|
94
94
|
/* finish a frame - fill in the previously reserved header */
|
95
95
|
static void finish_frame(framer_state *st, int is_header_boundary,
|
96
96
|
int is_last_in_stream) {
|
97
|
-
|
97
|
+
uint8_t type = 0xff;
|
98
98
|
type = st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
|
99
99
|
: GRPC_CHTTP2_FRAME_CONTINUATION;
|
100
100
|
fill_header(
|
101
101
|
GPR_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
|
102
102
|
st->stream_id, st->output->length - st->output_length_at_start_of_frame,
|
103
|
-
(
|
104
|
-
|
105
|
-
(is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
|
103
|
+
(uint8_t)((is_last_in_stream ? GRPC_CHTTP2_DATA_FLAG_END_STREAM : 0) |
|
104
|
+
(is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
|
106
105
|
st->is_first_frame = 0;
|
107
106
|
}
|
108
107
|
|
@@ -127,7 +126,7 @@ static void ensure_space(framer_state *st, size_t need_bytes) {
|
|
127
126
|
}
|
128
127
|
|
129
128
|
/* increment a filter count, halve all counts if one element reaches max */
|
130
|
-
static void inc_filter(
|
129
|
+
static void inc_filter(uint8_t idx, uint32_t *sum, uint8_t *elems) {
|
131
130
|
elems[idx]++;
|
132
131
|
if (elems[idx] < 255) {
|
133
132
|
(*sum)++;
|
@@ -157,7 +156,7 @@ static void add_header_data(framer_state *st, gpr_slice slice) {
|
|
157
156
|
}
|
158
157
|
}
|
159
158
|
|
160
|
-
static
|
159
|
+
static uint8_t *add_tiny_header_data(framer_state *st, size_t len) {
|
161
160
|
ensure_space(st, len);
|
162
161
|
return gpr_slice_buffer_tiny_add(st->output, len);
|
163
162
|
}
|
@@ -168,17 +167,17 @@ static void evict_entry(grpc_chttp2_hpack_compressor *c) {
|
|
168
167
|
GPR_ASSERT(c->table_size >=
|
169
168
|
c->table_elem_size[c->tail_remote_index % c->cap_table_elems]);
|
170
169
|
GPR_ASSERT(c->table_elems > 0);
|
171
|
-
c->table_size =
|
172
|
-
c->table_size -
|
173
|
-
|
170
|
+
c->table_size =
|
171
|
+
(uint16_t)(c->table_size -
|
172
|
+
c->table_elem_size[c->tail_remote_index % c->cap_table_elems]);
|
174
173
|
c->table_elems--;
|
175
174
|
}
|
176
175
|
|
177
176
|
/* add an element to the decoder table */
|
178
177
|
static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
|
179
|
-
|
180
|
-
|
181
|
-
|
178
|
+
uint32_t key_hash = elem->key->hash;
|
179
|
+
uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
|
180
|
+
uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
|
182
181
|
size_t elem_size = 32 + GPR_SLICE_LENGTH(elem->key->slice) +
|
183
182
|
GPR_SLICE_LENGTH(elem->value->slice);
|
184
183
|
|
@@ -198,8 +197,8 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
|
|
198
197
|
evict_entry(c);
|
199
198
|
}
|
200
199
|
GPR_ASSERT(c->table_elems < c->max_table_size);
|
201
|
-
c->table_elem_size[new_index % c->cap_table_elems] = (
|
202
|
-
c->table_size = (
|
200
|
+
c->table_elem_size[new_index % c->cap_table_elems] = (uint16_t)elem_size;
|
201
|
+
c->table_size = (uint16_t)(c->table_size + elem_size);
|
203
202
|
c->table_elems++;
|
204
203
|
|
205
204
|
/* Store this element into {entries,indices}_elem */
|
@@ -254,14 +253,14 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
|
|
254
253
|
}
|
255
254
|
}
|
256
255
|
|
257
|
-
static void emit_indexed(grpc_chttp2_hpack_compressor *c,
|
256
|
+
static void emit_indexed(grpc_chttp2_hpack_compressor *c, uint32_t elem_index,
|
258
257
|
framer_state *st) {
|
259
|
-
|
258
|
+
uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(elem_index, 1);
|
260
259
|
GRPC_CHTTP2_WRITE_VARINT(elem_index, 1, 0x80, add_tiny_header_data(st, len),
|
261
260
|
len);
|
262
261
|
}
|
263
262
|
|
264
|
-
static gpr_slice get_wire_value(grpc_mdelem *elem,
|
263
|
+
static gpr_slice get_wire_value(grpc_mdelem *elem, uint8_t *huffman_prefix) {
|
265
264
|
if (grpc_is_binary_header((const char *)GPR_SLICE_START_PTR(elem->key->slice),
|
266
265
|
GPR_SLICE_LENGTH(elem->key->slice))) {
|
267
266
|
*huffman_prefix = 0x80;
|
@@ -273,49 +272,49 @@ static gpr_slice get_wire_value(grpc_mdelem *elem, gpr_uint8 *huffman_prefix) {
|
|
273
272
|
}
|
274
273
|
|
275
274
|
static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor *c,
|
276
|
-
|
275
|
+
uint32_t key_index, grpc_mdelem *elem,
|
277
276
|
framer_state *st) {
|
278
|
-
|
279
|
-
|
277
|
+
uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 2);
|
278
|
+
uint8_t huffman_prefix;
|
280
279
|
gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
281
280
|
size_t len_val = GPR_SLICE_LENGTH(value_slice);
|
282
|
-
|
283
|
-
GPR_ASSERT(len_val <=
|
284
|
-
len_val_len = GRPC_CHTTP2_VARINT_LENGTH((
|
281
|
+
uint32_t len_val_len;
|
282
|
+
GPR_ASSERT(len_val <= UINT32_MAX);
|
283
|
+
len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
|
285
284
|
GRPC_CHTTP2_WRITE_VARINT(key_index, 2, 0x40,
|
286
285
|
add_tiny_header_data(st, len_pfx), len_pfx);
|
287
|
-
GRPC_CHTTP2_WRITE_VARINT((
|
286
|
+
GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
|
288
287
|
add_tiny_header_data(st, len_val_len), len_val_len);
|
289
288
|
add_header_data(st, gpr_slice_ref(value_slice));
|
290
289
|
}
|
291
290
|
|
292
291
|
static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
|
293
|
-
|
292
|
+
uint32_t key_index, grpc_mdelem *elem,
|
294
293
|
framer_state *st) {
|
295
|
-
|
296
|
-
|
294
|
+
uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
|
295
|
+
uint8_t huffman_prefix;
|
297
296
|
gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
298
297
|
size_t len_val = GPR_SLICE_LENGTH(value_slice);
|
299
|
-
|
300
|
-
GPR_ASSERT(len_val <=
|
301
|
-
len_val_len = GRPC_CHTTP2_VARINT_LENGTH((
|
298
|
+
uint32_t len_val_len;
|
299
|
+
GPR_ASSERT(len_val <= UINT32_MAX);
|
300
|
+
len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
|
302
301
|
GRPC_CHTTP2_WRITE_VARINT(key_index, 4, 0x00,
|
303
302
|
add_tiny_header_data(st, len_pfx), len_pfx);
|
304
|
-
GRPC_CHTTP2_WRITE_VARINT((
|
303
|
+
GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
|
305
304
|
add_tiny_header_data(st, len_val_len), len_val_len);
|
306
305
|
add_header_data(st, gpr_slice_ref(value_slice));
|
307
306
|
}
|
308
307
|
|
309
308
|
static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor *c,
|
310
309
|
grpc_mdelem *elem, framer_state *st) {
|
311
|
-
|
312
|
-
|
310
|
+
uint32_t len_key = (uint32_t)GPR_SLICE_LENGTH(elem->key->slice);
|
311
|
+
uint8_t huffman_prefix;
|
313
312
|
gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
GPR_ASSERT(len_key <=
|
318
|
-
GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <=
|
313
|
+
uint32_t len_val = (uint32_t)GPR_SLICE_LENGTH(value_slice);
|
314
|
+
uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
|
315
|
+
uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
|
316
|
+
GPR_ASSERT(len_key <= UINT32_MAX);
|
317
|
+
GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <= UINT32_MAX);
|
319
318
|
*add_tiny_header_data(st, 1) = 0x40;
|
320
319
|
GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
|
321
320
|
add_tiny_header_data(st, len_key_len), len_key_len);
|
@@ -327,14 +326,14 @@ static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor *c,
|
|
327
326
|
|
328
327
|
static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor *c,
|
329
328
|
grpc_mdelem *elem, framer_state *st) {
|
330
|
-
|
331
|
-
|
329
|
+
uint32_t len_key = (uint32_t)GPR_SLICE_LENGTH(elem->key->slice);
|
330
|
+
uint8_t huffman_prefix;
|
332
331
|
gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
GPR_ASSERT(len_key <=
|
337
|
-
GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <=
|
332
|
+
uint32_t len_val = (uint32_t)GPR_SLICE_LENGTH(value_slice);
|
333
|
+
uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
|
334
|
+
uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
|
335
|
+
GPR_ASSERT(len_key <= UINT32_MAX);
|
336
|
+
GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <= UINT32_MAX);
|
338
337
|
*add_tiny_header_data(st, 1) = 0x00;
|
339
338
|
GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
|
340
339
|
add_tiny_header_data(st, len_key_len), len_key_len);
|
@@ -346,14 +345,13 @@ static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor *c,
|
|
346
345
|
|
347
346
|
static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor *c,
|
348
347
|
framer_state *st) {
|
349
|
-
|
348
|
+
uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(c->max_table_size, 3);
|
350
349
|
GRPC_CHTTP2_WRITE_VARINT(c->max_table_size, 3, 0x20,
|
351
350
|
add_tiny_header_data(st, len), len);
|
352
351
|
c->advertise_table_size_change = 0;
|
353
352
|
}
|
354
353
|
|
355
|
-
static
|
356
|
-
gpr_uint32 elem_index) {
|
354
|
+
static uint32_t dynidx(grpc_chttp2_hpack_compressor *c, uint32_t elem_index) {
|
357
355
|
return 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY + c->tail_remote_index +
|
358
356
|
c->table_elems - elem_index;
|
359
357
|
}
|
@@ -361,10 +359,10 @@ static gpr_uint32 dynidx(grpc_chttp2_hpack_compressor *c,
|
|
361
359
|
/* encode an mdelem */
|
362
360
|
static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
|
363
361
|
framer_state *st) {
|
364
|
-
|
365
|
-
|
362
|
+
uint32_t key_hash = elem->key->hash;
|
363
|
+
uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
|
366
364
|
size_t decoder_space_usage;
|
367
|
-
|
365
|
+
uint32_t indices_key;
|
368
366
|
int should_add_elem;
|
369
367
|
|
370
368
|
GPR_ASSERT(GPR_SLICE_LENGTH(elem->key->slice) > 0);
|
@@ -463,9 +461,7 @@ static void deadline_enc(grpc_chttp2_hpack_compressor *c, gpr_timespec deadline,
|
|
463
461
|
GRPC_MDELEM_UNREF(mdelem);
|
464
462
|
}
|
465
463
|
|
466
|
-
static
|
467
|
-
return (bytes + 31) / 32;
|
468
|
-
}
|
464
|
+
static uint32_t elems_for_bytes(uint32_t bytes) { return (bytes + 31) / 32; }
|
469
465
|
|
470
466
|
void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c) {
|
471
467
|
memset(c, 0, sizeof(*c));
|
@@ -489,21 +485,21 @@ void grpc_chttp2_hpack_compressor_destroy(grpc_chttp2_hpack_compressor *c) {
|
|
489
485
|
}
|
490
486
|
|
491
487
|
void grpc_chttp2_hpack_compressor_set_max_usable_size(
|
492
|
-
grpc_chttp2_hpack_compressor *c,
|
488
|
+
grpc_chttp2_hpack_compressor *c, uint32_t max_table_size) {
|
493
489
|
c->max_usable_size = max_table_size;
|
494
490
|
grpc_chttp2_hpack_compressor_set_max_table_size(
|
495
491
|
c, GPR_MIN(c->max_table_size, max_table_size));
|
496
492
|
}
|
497
493
|
|
498
|
-
static void rebuild_elems(grpc_chttp2_hpack_compressor *c,
|
499
|
-
|
500
|
-
|
494
|
+
static void rebuild_elems(grpc_chttp2_hpack_compressor *c, uint32_t new_cap) {
|
495
|
+
uint16_t *table_elem_size = gpr_malloc(sizeof(*table_elem_size) * new_cap);
|
496
|
+
uint32_t i;
|
501
497
|
|
502
498
|
memset(table_elem_size, 0, sizeof(*table_elem_size) * new_cap);
|
503
499
|
GPR_ASSERT(c->table_elems <= new_cap);
|
504
500
|
|
505
501
|
for (i = 0; i < c->table_elems; i++) {
|
506
|
-
|
502
|
+
uint32_t ofs = c->tail_remote_index + i + 1;
|
507
503
|
table_elem_size[ofs % new_cap] =
|
508
504
|
c->table_elem_size[ofs % c->cap_table_elems];
|
509
505
|
}
|
@@ -514,7 +510,7 @@ static void rebuild_elems(grpc_chttp2_hpack_compressor *c, gpr_uint32 new_cap) {
|
|
514
510
|
}
|
515
511
|
|
516
512
|
void grpc_chttp2_hpack_compressor_set_max_table_size(
|
517
|
-
grpc_chttp2_hpack_compressor *c,
|
513
|
+
grpc_chttp2_hpack_compressor *c, uint32_t max_table_size) {
|
518
514
|
max_table_size = GPR_MIN(max_table_size, c->max_usable_size);
|
519
515
|
if (max_table_size == c->max_table_size) {
|
520
516
|
return;
|
@@ -527,7 +523,7 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
|
|
527
523
|
if (c->max_table_elems > c->cap_table_elems) {
|
528
524
|
rebuild_elems(c, GPR_MAX(c->max_table_elems, 2 * c->cap_table_elems));
|
529
525
|
} else if (c->max_table_elems < c->cap_table_elems / 3) {
|
530
|
-
|
526
|
+
uint32_t new_cap = GPR_MAX(c->max_table_elems, 16);
|
531
527
|
if (new_cap != c->cap_table_elems) {
|
532
528
|
rebuild_elems(c, new_cap);
|
533
529
|
}
|
@@ -537,7 +533,7 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
|
|
537
533
|
}
|
538
534
|
|
539
535
|
void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
|
540
|
-
|
536
|
+
uint32_t stream_id,
|
541
537
|
grpc_metadata_batch *metadata, int is_eof,
|
542
538
|
gpr_slice_buffer *outbuf) {
|
543
539
|
framer_state st;
|
@@ -49,46 +49,46 @@
|
|
49
49
|
#define GRPC_CHTTP2_HPACKC_MAX_TABLE_SIZE (1024 * 1024)
|
50
50
|
|
51
51
|
typedef struct {
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
uint32_t filter_elems_sum;
|
53
|
+
uint32_t max_table_size;
|
54
|
+
uint32_t max_table_elems;
|
55
|
+
uint32_t cap_table_elems;
|
56
56
|
/** if non-zero, advertise to the decoder that we'll start using a table
|
57
57
|
of this size */
|
58
|
-
|
58
|
+
uint8_t advertise_table_size_change;
|
59
59
|
/** maximum number of bytes we'll use for the decode table (to guard against
|
60
60
|
peers ooming us by setting decode table size high) */
|
61
|
-
|
61
|
+
uint32_t max_usable_size;
|
62
62
|
/* one before the lowest usable table index */
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
uint32_t tail_remote_index;
|
64
|
+
uint32_t table_size;
|
65
|
+
uint32_t table_elems;
|
66
66
|
|
67
67
|
/* filter tables for elems: this tables provides an approximate
|
68
68
|
popularity count for particular hashes, and are used to determine whether
|
69
69
|
a new literal should be added to the compression table or not.
|
70
70
|
They track a single integer that counts how often a particular value has
|
71
71
|
been seen. When that count reaches max (255), all values are halved. */
|
72
|
-
|
72
|
+
uint8_t filter_elems[GRPC_CHTTP2_HPACKC_NUM_FILTERS];
|
73
73
|
|
74
74
|
/* entry tables for keys & elems: these tables track values that have been
|
75
75
|
seen and *may* be in the decompressor table */
|
76
76
|
grpc_mdstr *entries_keys[GRPC_CHTTP2_HPACKC_NUM_VALUES];
|
77
77
|
grpc_mdelem *entries_elems[GRPC_CHTTP2_HPACKC_NUM_VALUES];
|
78
|
-
|
79
|
-
|
78
|
+
uint32_t indices_keys[GRPC_CHTTP2_HPACKC_NUM_VALUES];
|
79
|
+
uint32_t indices_elems[GRPC_CHTTP2_HPACKC_NUM_VALUES];
|
80
80
|
|
81
|
-
|
81
|
+
uint16_t *table_elem_size;
|
82
82
|
} grpc_chttp2_hpack_compressor;
|
83
83
|
|
84
84
|
void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c);
|
85
85
|
void grpc_chttp2_hpack_compressor_destroy(grpc_chttp2_hpack_compressor *c);
|
86
86
|
void grpc_chttp2_hpack_compressor_set_max_table_size(
|
87
|
-
grpc_chttp2_hpack_compressor *c,
|
87
|
+
grpc_chttp2_hpack_compressor *c, uint32_t max_table_size);
|
88
88
|
void grpc_chttp2_hpack_compressor_set_max_usable_size(
|
89
|
-
grpc_chttp2_hpack_compressor *c,
|
89
|
+
grpc_chttp2_hpack_compressor *c, uint32_t max_table_size);
|
90
90
|
|
91
|
-
void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
|
91
|
+
void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c, uint32_t id,
|
92
92
|
grpc_metadata_batch *metadata, int is_eof,
|
93
93
|
gpr_slice_buffer *outbuf);
|
94
94
|
|
@@ -75,63 +75,63 @@ typedef enum {
|
|
75
75
|
a set of indirect jumps, and so not waste stack space. */
|
76
76
|
|
77
77
|
/* forward declarations for parsing states */
|
78
|
-
static int parse_begin(grpc_chttp2_hpack_parser *p, const
|
79
|
-
const
|
80
|
-
static int parse_error(grpc_chttp2_hpack_parser *p, const
|
81
|
-
const
|
82
|
-
static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const
|
83
|
-
const
|
84
|
-
|
85
|
-
static int parse_string_prefix(grpc_chttp2_hpack_parser *p,
|
86
|
-
const
|
87
|
-
static int parse_key_string(grpc_chttp2_hpack_parser *p, const
|
88
|
-
const
|
78
|
+
static int parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
79
|
+
const uint8_t *end);
|
80
|
+
static int parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
81
|
+
const uint8_t *end);
|
82
|
+
static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
83
|
+
const uint8_t *end);
|
84
|
+
|
85
|
+
static int parse_string_prefix(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
86
|
+
const uint8_t *end);
|
87
|
+
static int parse_key_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
88
|
+
const uint8_t *end);
|
89
89
|
static int parse_value_string_with_indexed_key(grpc_chttp2_hpack_parser *p,
|
90
|
-
const
|
91
|
-
const
|
90
|
+
const uint8_t *cur,
|
91
|
+
const uint8_t *end);
|
92
92
|
static int parse_value_string_with_literal_key(grpc_chttp2_hpack_parser *p,
|
93
|
-
const
|
94
|
-
const
|
95
|
-
|
96
|
-
static int parse_value0(grpc_chttp2_hpack_parser *p, const
|
97
|
-
const
|
98
|
-
static int parse_value1(grpc_chttp2_hpack_parser *p, const
|
99
|
-
const
|
100
|
-
static int parse_value2(grpc_chttp2_hpack_parser *p, const
|
101
|
-
const
|
102
|
-
static int parse_value3(grpc_chttp2_hpack_parser *p, const
|
103
|
-
const
|
104
|
-
static int parse_value4(grpc_chttp2_hpack_parser *p, const
|
105
|
-
const
|
106
|
-
static int parse_value5up(grpc_chttp2_hpack_parser *p, const
|
107
|
-
const
|
108
|
-
|
109
|
-
static int parse_indexed_field(grpc_chttp2_hpack_parser *p,
|
110
|
-
const
|
93
|
+
const uint8_t *cur,
|
94
|
+
const uint8_t *end);
|
95
|
+
|
96
|
+
static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
97
|
+
const uint8_t *end);
|
98
|
+
static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
99
|
+
const uint8_t *end);
|
100
|
+
static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
101
|
+
const uint8_t *end);
|
102
|
+
static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
103
|
+
const uint8_t *end);
|
104
|
+
static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
105
|
+
const uint8_t *end);
|
106
|
+
static int parse_value5up(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
107
|
+
const uint8_t *end);
|
108
|
+
|
109
|
+
static int parse_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
110
|
+
const uint8_t *end);
|
111
111
|
static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
|
112
|
-
const
|
113
|
-
static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
|
114
|
-
const
|
112
|
+
const uint8_t *cur, const uint8_t *end);
|
113
|
+
static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
114
|
+
const uint8_t *end);
|
115
115
|
static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
|
116
|
-
const
|
116
|
+
const uint8_t *cur, const uint8_t *end);
|
117
117
|
static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
|
118
|
-
const
|
119
|
-
static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
|
120
|
-
const
|
118
|
+
const uint8_t *cur, const uint8_t *end);
|
119
|
+
static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
120
|
+
const uint8_t *end);
|
121
121
|
static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
|
122
|
-
const
|
122
|
+
const uint8_t *cur, const uint8_t *end);
|
123
123
|
static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
|
124
|
-
const
|
125
|
-
static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
|
126
|
-
const
|
124
|
+
const uint8_t *cur, const uint8_t *end);
|
125
|
+
static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
126
|
+
const uint8_t *end);
|
127
127
|
static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
|
128
|
-
const
|
128
|
+
const uint8_t *cur, const uint8_t *end);
|
129
129
|
static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
|
130
|
-
const
|
131
|
-
static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const
|
132
|
-
const
|
133
|
-
static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
|
134
|
-
const
|
130
|
+
const uint8_t *cur, const uint8_t *end);
|
131
|
+
static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
132
|
+
const uint8_t *end);
|
133
|
+
static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
134
|
+
const uint8_t *end);
|
135
135
|
|
136
136
|
/* we translate the first byte of a hpack field into one of these decoding
|
137
137
|
cases, then use a lookup table to jump directly to the appropriate parser.
|
@@ -167,7 +167,7 @@ static const grpc_chttp2_hpack_parser_state first_byte_action[] = {
|
|
167
167
|
|
168
168
|
/* indexes the first byte to a parse state function - generated by
|
169
169
|
gen_hpack_tables.c */
|
170
|
-
static const
|
170
|
+
static const uint8_t first_byte_lut[256] = {
|
171
171
|
LITHDR_NOTIDX_V, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
|
172
172
|
LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
|
173
173
|
LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
|
@@ -239,7 +239,7 @@ static const gpr_uint8 first_byte_lut[256] = {
|
|
239
239
|
considered returns the next state.
|
240
240
|
|
241
241
|
generated by gen_hpack_tables.c */
|
242
|
-
static const
|
242
|
+
static const uint8_t next_tbl[256] = {
|
243
243
|
0, 1, 2, 3, 4, 1, 2, 5, 6, 1, 7, 8, 1, 3, 3, 9, 10, 11, 1, 1,
|
244
244
|
1, 12, 1, 2, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
|
245
245
|
14, 1, 15, 16, 1, 17, 1, 15, 2, 7, 3, 18, 19, 1, 1, 1, 1, 20, 1, 1,
|
@@ -257,7 +257,7 @@ static const gpr_uint8 next_tbl[256] = {
|
|
257
257
|
|
258
258
|
/* next state, based upon current state and the current nibble: see above.
|
259
259
|
generated by gen_hpack_tables.c */
|
260
|
-
static const
|
260
|
+
static const int16_t next_sub_tbl[48 * 16] = {
|
261
261
|
1, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
|
262
262
|
218, 2, 6, 10, 13, 14, 15, 16, 17, 2, 6, 10, 13, 14, 15,
|
263
263
|
16, 17, 3, 7, 11, 24, 3, 7, 11, 24, 3, 7, 11, 24, 3,
|
@@ -316,7 +316,7 @@ static const gpr_int16 next_sub_tbl[48 * 16] = {
|
|
316
316
|
emitted, or -1 for no byte, or 256 for end of stream
|
317
317
|
|
318
318
|
generated by gen_hpack_tables.c */
|
319
|
-
static const
|
319
|
+
static const uint16_t emit_tbl[256] = {
|
320
320
|
0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10, 11, 12, 13,
|
321
321
|
14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 23, 24, 25, 26, 27,
|
322
322
|
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
|
@@ -338,7 +338,7 @@ static const gpr_uint16 emit_tbl[256] = {
|
|
338
338
|
};
|
339
339
|
|
340
340
|
/* generated by gen_hpack_tables.c */
|
341
|
-
static const
|
341
|
+
static const int16_t emit_sub_tbl[249 * 16] = {
|
342
342
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
343
343
|
-1, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49,
|
344
344
|
49, 49, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 97,
|
@@ -607,7 +607,7 @@ static const gpr_int16 emit_sub_tbl[249 * 16] = {
|
|
607
607
|
13, 22, 22, 22, 22, 256, 256, 256, 256,
|
608
608
|
};
|
609
609
|
|
610
|
-
static const
|
610
|
+
static const uint8_t inverse_base64[256] = {
|
611
611
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
612
612
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
613
613
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255,
|
@@ -642,22 +642,22 @@ static int on_hdr(grpc_chttp2_hpack_parser *p, grpc_mdelem *md,
|
|
642
642
|
|
643
643
|
static grpc_mdstr *take_string(grpc_chttp2_hpack_parser *p,
|
644
644
|
grpc_chttp2_hpack_parser_string *str) {
|
645
|
-
grpc_mdstr *s = grpc_mdstr_from_buffer((
|
645
|
+
grpc_mdstr *s = grpc_mdstr_from_buffer((uint8_t *)str->str, str->length);
|
646
646
|
str->length = 0;
|
647
647
|
return s;
|
648
648
|
}
|
649
649
|
|
650
650
|
/* jump to the next state */
|
651
|
-
static int parse_next(grpc_chttp2_hpack_parser *p, const
|
652
|
-
const
|
651
|
+
static int parse_next(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
652
|
+
const uint8_t *end) {
|
653
653
|
p->state = *p->next_state++;
|
654
654
|
return p->state(p, cur, end);
|
655
655
|
}
|
656
656
|
|
657
657
|
/* begin parsing a header: all functionality is encoded into lookup tables
|
658
658
|
above */
|
659
|
-
static int parse_begin(grpc_chttp2_hpack_parser *p, const
|
660
|
-
const
|
659
|
+
static int parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
660
|
+
const uint8_t *end) {
|
661
661
|
if (cur == end) {
|
662
662
|
p->state = parse_begin;
|
663
663
|
return 1;
|
@@ -667,8 +667,8 @@ static int parse_begin(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
667
667
|
}
|
668
668
|
|
669
669
|
/* stream dependency and prioritization data: we just skip it */
|
670
|
-
static int parse_stream_weight(grpc_chttp2_hpack_parser *p,
|
671
|
-
const
|
670
|
+
static int parse_stream_weight(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
671
|
+
const uint8_t *end) {
|
672
672
|
if (cur == end) {
|
673
673
|
p->state = parse_stream_weight;
|
674
674
|
return 1;
|
@@ -677,8 +677,8 @@ static int parse_stream_weight(grpc_chttp2_hpack_parser *p,
|
|
677
677
|
return p->after_prioritization(p, cur + 1, end);
|
678
678
|
}
|
679
679
|
|
680
|
-
static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const
|
681
|
-
const
|
680
|
+
static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
681
|
+
const uint8_t *end) {
|
682
682
|
if (cur == end) {
|
683
683
|
p->state = parse_stream_dep3;
|
684
684
|
return 1;
|
@@ -687,8 +687,8 @@ static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
687
687
|
return parse_stream_weight(p, cur + 1, end);
|
688
688
|
}
|
689
689
|
|
690
|
-
static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const
|
691
|
-
const
|
690
|
+
static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
691
|
+
const uint8_t *end) {
|
692
692
|
if (cur == end) {
|
693
693
|
p->state = parse_stream_dep2;
|
694
694
|
return 1;
|
@@ -697,8 +697,8 @@ static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
697
697
|
return parse_stream_dep3(p, cur + 1, end);
|
698
698
|
}
|
699
699
|
|
700
|
-
static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const
|
701
|
-
const
|
700
|
+
static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
701
|
+
const uint8_t *end) {
|
702
702
|
if (cur == end) {
|
703
703
|
p->state = parse_stream_dep1;
|
704
704
|
return 1;
|
@@ -707,8 +707,8 @@ static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
707
707
|
return parse_stream_dep2(p, cur + 1, end);
|
708
708
|
}
|
709
709
|
|
710
|
-
static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const
|
711
|
-
const
|
710
|
+
static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
711
|
+
const uint8_t *end) {
|
712
712
|
if (cur == end) {
|
713
713
|
p->state = parse_stream_dep0;
|
714
714
|
return 1;
|
@@ -719,8 +719,8 @@ static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
719
719
|
|
720
720
|
/* emit an indexed field; for now just logs it to console; jumps to
|
721
721
|
begin the next field on completion */
|
722
|
-
static int finish_indexed_field(grpc_chttp2_hpack_parser *p,
|
723
|
-
const
|
722
|
+
static int finish_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
723
|
+
const uint8_t *end) {
|
724
724
|
grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
|
725
725
|
if (md == NULL) {
|
726
726
|
gpr_log(GPR_ERROR, "Invalid HPACK index received: %d", p->index);
|
@@ -731,8 +731,8 @@ static int finish_indexed_field(grpc_chttp2_hpack_parser *p,
|
|
731
731
|
}
|
732
732
|
|
733
733
|
/* parse an indexed field with index < 127 */
|
734
|
-
static int parse_indexed_field(grpc_chttp2_hpack_parser *p,
|
735
|
-
const
|
734
|
+
static int parse_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
735
|
+
const uint8_t *end) {
|
736
736
|
p->dynamic_table_update_allowed = 0;
|
737
737
|
p->index = (*cur) & 0x7f;
|
738
738
|
return finish_indexed_field(p, cur + 1, end);
|
@@ -740,7 +740,7 @@ static int parse_indexed_field(grpc_chttp2_hpack_parser *p,
|
|
740
740
|
|
741
741
|
/* parse an indexed field with index >= 127 */
|
742
742
|
static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
|
743
|
-
const
|
743
|
+
const uint8_t *cur, const uint8_t *end) {
|
744
744
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
745
745
|
finish_indexed_field};
|
746
746
|
p->dynamic_table_update_allowed = 0;
|
@@ -752,8 +752,8 @@ static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
|
|
752
752
|
|
753
753
|
/* finish a literal header with incremental indexing: just log, and jump to '
|
754
754
|
begin */
|
755
|
-
static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p,
|
756
|
-
const
|
755
|
+
static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
756
|
+
const uint8_t *end) {
|
757
757
|
grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
|
758
758
|
GPR_ASSERT(md != NULL); /* handled in string parsing */
|
759
759
|
return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
|
@@ -764,7 +764,7 @@ static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p,
|
|
764
764
|
|
765
765
|
/* finish a literal header with incremental indexing with no index */
|
766
766
|
static int finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
|
767
|
-
const
|
767
|
+
const uint8_t *cur, const uint8_t *end) {
|
768
768
|
return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
|
769
769
|
take_string(p, &p->value)),
|
770
770
|
1) &&
|
@@ -772,8 +772,8 @@ static int finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
|
|
772
772
|
}
|
773
773
|
|
774
774
|
/* parse a literal header with incremental indexing; index < 63 */
|
775
|
-
static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
|
776
|
-
const
|
775
|
+
static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
776
|
+
const uint8_t *end) {
|
777
777
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
778
778
|
parse_value_string_with_indexed_key, finish_lithdr_incidx};
|
779
779
|
p->dynamic_table_update_allowed = 0;
|
@@ -784,7 +784,7 @@ static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
|
|
784
784
|
|
785
785
|
/* parse a literal header with incremental indexing; index >= 63 */
|
786
786
|
static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
|
787
|
-
const
|
787
|
+
const uint8_t *cur, const uint8_t *end) {
|
788
788
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
789
789
|
parse_string_prefix, parse_value_string_with_indexed_key,
|
790
790
|
finish_lithdr_incidx};
|
@@ -797,7 +797,7 @@ static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
|
|
797
797
|
|
798
798
|
/* parse a literal header with incremental indexing; index = 0 */
|
799
799
|
static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
|
800
|
-
const
|
800
|
+
const uint8_t *cur, const uint8_t *end) {
|
801
801
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
802
802
|
parse_key_string, parse_string_prefix,
|
803
803
|
parse_value_string_with_literal_key, finish_lithdr_incidx_v};
|
@@ -807,8 +807,8 @@ static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
|
|
807
807
|
}
|
808
808
|
|
809
809
|
/* finish a literal header without incremental indexing */
|
810
|
-
static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p,
|
811
|
-
const
|
810
|
+
static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
811
|
+
const uint8_t *end) {
|
812
812
|
grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
|
813
813
|
GPR_ASSERT(md != NULL); /* handled in string parsing */
|
814
814
|
return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
|
@@ -819,7 +819,7 @@ static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p,
|
|
819
819
|
|
820
820
|
/* finish a literal header without incremental indexing with index = 0 */
|
821
821
|
static int finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
|
822
|
-
const
|
822
|
+
const uint8_t *cur, const uint8_t *end) {
|
823
823
|
return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
|
824
824
|
take_string(p, &p->value)),
|
825
825
|
0) &&
|
@@ -827,8 +827,8 @@ static int finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
|
|
827
827
|
}
|
828
828
|
|
829
829
|
/* parse a literal header without incremental indexing; index < 15 */
|
830
|
-
static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
|
831
|
-
const
|
830
|
+
static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
831
|
+
const uint8_t *end) {
|
832
832
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
833
833
|
parse_value_string_with_indexed_key, finish_lithdr_notidx};
|
834
834
|
p->dynamic_table_update_allowed = 0;
|
@@ -839,7 +839,7 @@ static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
|
|
839
839
|
|
840
840
|
/* parse a literal header without incremental indexing; index >= 15 */
|
841
841
|
static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
|
842
|
-
const
|
842
|
+
const uint8_t *cur, const uint8_t *end) {
|
843
843
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
844
844
|
parse_string_prefix, parse_value_string_with_indexed_key,
|
845
845
|
finish_lithdr_notidx};
|
@@ -852,7 +852,7 @@ static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
|
|
852
852
|
|
853
853
|
/* parse a literal header without incremental indexing; index == 0 */
|
854
854
|
static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
|
855
|
-
const
|
855
|
+
const uint8_t *cur, const uint8_t *end) {
|
856
856
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
857
857
|
parse_key_string, parse_string_prefix,
|
858
858
|
parse_value_string_with_literal_key, finish_lithdr_notidx_v};
|
@@ -862,8 +862,8 @@ static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
|
|
862
862
|
}
|
863
863
|
|
864
864
|
/* finish a literal header that is never indexed */
|
865
|
-
static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
|
866
|
-
const
|
865
|
+
static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
866
|
+
const uint8_t *end) {
|
867
867
|
grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
|
868
868
|
GPR_ASSERT(md != NULL); /* handled in string parsing */
|
869
869
|
return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
|
@@ -874,7 +874,7 @@ static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
|
|
874
874
|
|
875
875
|
/* finish a literal header that is never indexed with an extra value */
|
876
876
|
static int finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
|
877
|
-
const
|
877
|
+
const uint8_t *cur, const uint8_t *end) {
|
878
878
|
return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
|
879
879
|
take_string(p, &p->value)),
|
880
880
|
0) &&
|
@@ -882,8 +882,8 @@ static int finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
|
|
882
882
|
}
|
883
883
|
|
884
884
|
/* parse a literal header that is never indexed; index < 15 */
|
885
|
-
static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
|
886
|
-
const
|
885
|
+
static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
886
|
+
const uint8_t *end) {
|
887
887
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
888
888
|
parse_value_string_with_indexed_key, finish_lithdr_nvridx};
|
889
889
|
p->dynamic_table_update_allowed = 0;
|
@@ -894,7 +894,7 @@ static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
|
|
894
894
|
|
895
895
|
/* parse a literal header that is never indexed; index >= 15 */
|
896
896
|
static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
|
897
|
-
const
|
897
|
+
const uint8_t *cur, const uint8_t *end) {
|
898
898
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
899
899
|
parse_string_prefix, parse_value_string_with_indexed_key,
|
900
900
|
finish_lithdr_nvridx};
|
@@ -907,7 +907,7 @@ static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
|
|
907
907
|
|
908
908
|
/* parse a literal header that is never indexed; index == 0 */
|
909
909
|
static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
|
910
|
-
const
|
910
|
+
const uint8_t *cur, const uint8_t *end) {
|
911
911
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
912
912
|
parse_key_string, parse_string_prefix,
|
913
913
|
parse_value_string_with_literal_key, finish_lithdr_nvridx_v};
|
@@ -917,16 +917,16 @@ static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
|
|
917
917
|
}
|
918
918
|
|
919
919
|
/* finish parsing a max table size change */
|
920
|
-
static int finish_max_tbl_size(grpc_chttp2_hpack_parser *p,
|
921
|
-
const
|
920
|
+
static int finish_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
921
|
+
const uint8_t *end) {
|
922
922
|
gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
|
923
923
|
return grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index) &&
|
924
924
|
parse_begin(p, cur, end);
|
925
925
|
}
|
926
926
|
|
927
927
|
/* parse a max table size change, max size < 15 */
|
928
|
-
static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const
|
929
|
-
const
|
928
|
+
static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
929
|
+
const uint8_t *end) {
|
930
930
|
if (p->dynamic_table_update_allowed == 0) {
|
931
931
|
return 0;
|
932
932
|
}
|
@@ -936,8 +936,8 @@ static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
936
936
|
}
|
937
937
|
|
938
938
|
/* parse a max table size change, max size >= 15 */
|
939
|
-
static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
|
940
|
-
const
|
939
|
+
static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
940
|
+
const uint8_t *end) {
|
941
941
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
942
942
|
finish_max_tbl_size};
|
943
943
|
if (p->dynamic_table_update_allowed == 0) {
|
@@ -951,14 +951,14 @@ static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
|
|
951
951
|
}
|
952
952
|
|
953
953
|
/* a parse error: jam the parse state into parse_error, and return error */
|
954
|
-
static int parse_error(grpc_chttp2_hpack_parser *p, const
|
955
|
-
const
|
954
|
+
static int parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
955
|
+
const uint8_t *end) {
|
956
956
|
p->state = parse_error;
|
957
957
|
return 0;
|
958
958
|
}
|
959
959
|
|
960
|
-
static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const
|
961
|
-
const
|
960
|
+
static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
961
|
+
const uint8_t *end) {
|
962
962
|
GPR_ASSERT(cur != end);
|
963
963
|
gpr_log(GPR_DEBUG, "Illegal hpack op code %d", *cur);
|
964
964
|
return parse_error(p, cur, end);
|
@@ -966,8 +966,8 @@ static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
966
966
|
|
967
967
|
/* parse the 1st byte of a varint into p->parsing.value
|
968
968
|
no overflow is possible */
|
969
|
-
static int parse_value0(grpc_chttp2_hpack_parser *p, const
|
970
|
-
const
|
969
|
+
static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
970
|
+
const uint8_t *end) {
|
971
971
|
if (cur == end) {
|
972
972
|
p->state = parse_value0;
|
973
973
|
return 1;
|
@@ -984,14 +984,14 @@ static int parse_value0(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
984
984
|
|
985
985
|
/* parse the 2nd byte of a varint into p->parsing.value
|
986
986
|
no overflow is possible */
|
987
|
-
static int parse_value1(grpc_chttp2_hpack_parser *p, const
|
988
|
-
const
|
987
|
+
static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
988
|
+
const uint8_t *end) {
|
989
989
|
if (cur == end) {
|
990
990
|
p->state = parse_value1;
|
991
991
|
return 1;
|
992
992
|
}
|
993
993
|
|
994
|
-
*p->parsing.value += (((
|
994
|
+
*p->parsing.value += (((uint32_t)*cur) & 0x7f) << 7;
|
995
995
|
|
996
996
|
if ((*cur) & 0x80) {
|
997
997
|
return parse_value2(p, cur + 1, end);
|
@@ -1002,14 +1002,14 @@ static int parse_value1(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1002
1002
|
|
1003
1003
|
/* parse the 3rd byte of a varint into p->parsing.value
|
1004
1004
|
no overflow is possible */
|
1005
|
-
static int parse_value2(grpc_chttp2_hpack_parser *p, const
|
1006
|
-
const
|
1005
|
+
static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1006
|
+
const uint8_t *end) {
|
1007
1007
|
if (cur == end) {
|
1008
1008
|
p->state = parse_value2;
|
1009
1009
|
return 1;
|
1010
1010
|
}
|
1011
1011
|
|
1012
|
-
*p->parsing.value += (((
|
1012
|
+
*p->parsing.value += (((uint32_t)*cur) & 0x7f) << 14;
|
1013
1013
|
|
1014
1014
|
if ((*cur) & 0x80) {
|
1015
1015
|
return parse_value3(p, cur + 1, end);
|
@@ -1020,14 +1020,14 @@ static int parse_value2(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1020
1020
|
|
1021
1021
|
/* parse the 4th byte of a varint into p->parsing.value
|
1022
1022
|
no overflow is possible */
|
1023
|
-
static int parse_value3(grpc_chttp2_hpack_parser *p, const
|
1024
|
-
const
|
1023
|
+
static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1024
|
+
const uint8_t *end) {
|
1025
1025
|
if (cur == end) {
|
1026
1026
|
p->state = parse_value3;
|
1027
1027
|
return 1;
|
1028
1028
|
}
|
1029
1029
|
|
1030
|
-
*p->parsing.value += (((
|
1030
|
+
*p->parsing.value += (((uint32_t)*cur) & 0x7f) << 21;
|
1031
1031
|
|
1032
1032
|
if ((*cur) & 0x80) {
|
1033
1033
|
return parse_value4(p, cur + 1, end);
|
@@ -1038,11 +1038,11 @@ static int parse_value3(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1038
1038
|
|
1039
1039
|
/* parse the 5th byte of a varint into p->parsing.value
|
1040
1040
|
depending on the byte, we may overflow, and care must be taken */
|
1041
|
-
static int parse_value4(grpc_chttp2_hpack_parser *p, const
|
1042
|
-
const
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1041
|
+
static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1042
|
+
const uint8_t *end) {
|
1043
|
+
uint8_t c;
|
1044
|
+
uint32_t cur_value;
|
1045
|
+
uint32_t add_value;
|
1046
1046
|
|
1047
1047
|
if (cur == end) {
|
1048
1048
|
p->state = parse_value4;
|
@@ -1055,7 +1055,7 @@ static int parse_value4(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1055
1055
|
}
|
1056
1056
|
|
1057
1057
|
cur_value = *p->parsing.value;
|
1058
|
-
add_value = ((
|
1058
|
+
add_value = ((uint32_t)c) << 28;
|
1059
1059
|
if (add_value > 0xffffffffu - cur_value) {
|
1060
1060
|
goto error;
|
1061
1061
|
}
|
@@ -1079,8 +1079,8 @@ error:
|
|
1079
1079
|
/* parse any trailing bytes in a varint: it's possible to append an arbitrary
|
1080
1080
|
number of 0x80's and not affect the value - a zero will terminate - and
|
1081
1081
|
anything else will overflow */
|
1082
|
-
static int parse_value5up(grpc_chttp2_hpack_parser *p, const
|
1083
|
-
const
|
1082
|
+
static int parse_value5up(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1083
|
+
const uint8_t *end) {
|
1084
1084
|
while (cur != end && *cur == 0x80) {
|
1085
1085
|
++cur;
|
1086
1086
|
}
|
@@ -1102,8 +1102,8 @@ static int parse_value5up(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1102
1102
|
}
|
1103
1103
|
|
1104
1104
|
/* parse a string prefix */
|
1105
|
-
static int parse_string_prefix(grpc_chttp2_hpack_parser *p,
|
1106
|
-
const
|
1105
|
+
static int parse_string_prefix(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1106
|
+
const uint8_t *end) {
|
1107
1107
|
if (cur == end) {
|
1108
1108
|
p->state = parse_string_prefix;
|
1109
1109
|
return 1;
|
@@ -1121,22 +1121,22 @@ static int parse_string_prefix(grpc_chttp2_hpack_parser *p,
|
|
1121
1121
|
|
1122
1122
|
/* append some bytes to a string */
|
1123
1123
|
static void append_bytes(grpc_chttp2_hpack_parser_string *str,
|
1124
|
-
const
|
1124
|
+
const uint8_t *data, size_t length) {
|
1125
1125
|
if (length + str->length > str->capacity) {
|
1126
|
-
GPR_ASSERT(str->length + length <=
|
1127
|
-
str->capacity = (
|
1126
|
+
GPR_ASSERT(str->length + length <= UINT32_MAX);
|
1127
|
+
str->capacity = (uint32_t)(str->length + length);
|
1128
1128
|
str->str = gpr_realloc(str->str, str->capacity);
|
1129
1129
|
}
|
1130
1130
|
memcpy(str->str + str->length, data, length);
|
1131
|
-
GPR_ASSERT(length <=
|
1132
|
-
str->length += (
|
1131
|
+
GPR_ASSERT(length <= UINT32_MAX - str->length);
|
1132
|
+
str->length += (uint32_t)length;
|
1133
1133
|
}
|
1134
1134
|
|
1135
|
-
static int append_string(grpc_chttp2_hpack_parser *p, const
|
1136
|
-
const
|
1135
|
+
static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1136
|
+
const uint8_t *end) {
|
1137
1137
|
grpc_chttp2_hpack_parser_string *str = p->parsing.str;
|
1138
|
-
|
1139
|
-
|
1138
|
+
uint32_t bits;
|
1139
|
+
uint8_t decoded[3];
|
1140
1140
|
switch ((binary_state)p->binary) {
|
1141
1141
|
case NOT_BINARY:
|
1142
1142
|
append_bytes(str, cur, (size_t)(end - cur));
|
@@ -1197,9 +1197,9 @@ static int append_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1197
1197
|
goto b64_byte3;
|
1198
1198
|
p->base64_buffer |= bits;
|
1199
1199
|
bits = p->base64_buffer;
|
1200
|
-
decoded[0] = (
|
1201
|
-
decoded[1] = (
|
1202
|
-
decoded[2] = (
|
1200
|
+
decoded[0] = (uint8_t)(bits >> 16);
|
1201
|
+
decoded[1] = (uint8_t)(bits >> 8);
|
1202
|
+
decoded[2] = (uint8_t)(bits);
|
1203
1203
|
append_bytes(str, decoded, 3);
|
1204
1204
|
goto b64_byte0;
|
1205
1205
|
}
|
@@ -1208,9 +1208,9 @@ static int append_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1208
1208
|
|
1209
1209
|
/* append a null terminator to a string */
|
1210
1210
|
static int finish_str(grpc_chttp2_hpack_parser *p) {
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1211
|
+
uint8_t terminator = 0;
|
1212
|
+
uint8_t decoded[2];
|
1213
|
+
uint32_t bits;
|
1214
1214
|
grpc_chttp2_hpack_parser_string *str = p->parsing.str;
|
1215
1215
|
switch ((binary_state)p->binary) {
|
1216
1216
|
case NOT_BINARY:
|
@@ -1227,7 +1227,7 @@ static int finish_str(grpc_chttp2_hpack_parser *p) {
|
|
1227
1227
|
bits & 0xffff);
|
1228
1228
|
return 0;
|
1229
1229
|
}
|
1230
|
-
decoded[0] = (
|
1230
|
+
decoded[0] = (uint8_t)(bits >> 16);
|
1231
1231
|
append_bytes(str, decoded, 1);
|
1232
1232
|
break;
|
1233
1233
|
case B64_BYTE3:
|
@@ -1237,8 +1237,8 @@ static int finish_str(grpc_chttp2_hpack_parser *p) {
|
|
1237
1237
|
bits & 0xff);
|
1238
1238
|
return 0;
|
1239
1239
|
}
|
1240
|
-
decoded[0] = (
|
1241
|
-
decoded[1] = (
|
1240
|
+
decoded[0] = (uint8_t)(bits >> 16);
|
1241
|
+
decoded[1] = (uint8_t)(bits >> 8);
|
1242
1242
|
append_bytes(str, decoded, 2);
|
1243
1243
|
break;
|
1244
1244
|
}
|
@@ -1248,12 +1248,12 @@ static int finish_str(grpc_chttp2_hpack_parser *p) {
|
|
1248
1248
|
}
|
1249
1249
|
|
1250
1250
|
/* decode a nibble from a huffman encoded stream */
|
1251
|
-
static int huff_nibble(grpc_chttp2_hpack_parser *p,
|
1252
|
-
|
1253
|
-
|
1251
|
+
static int huff_nibble(grpc_chttp2_hpack_parser *p, uint8_t nibble) {
|
1252
|
+
int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble];
|
1253
|
+
int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble];
|
1254
1254
|
if (emit != -1) {
|
1255
1255
|
if (emit >= 0 && emit < 256) {
|
1256
|
-
|
1256
|
+
uint8_t c = (uint8_t)emit;
|
1257
1257
|
if (!append_string(p, &c, (&c) + 1)) return 0;
|
1258
1258
|
} else {
|
1259
1259
|
assert(emit == 256);
|
@@ -1264,8 +1264,8 @@ static int huff_nibble(grpc_chttp2_hpack_parser *p, gpr_uint8 nibble) {
|
|
1264
1264
|
}
|
1265
1265
|
|
1266
1266
|
/* decode full bytes from a huffman encoded stream */
|
1267
|
-
static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const
|
1268
|
-
const
|
1267
|
+
static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1268
|
+
const uint8_t *end) {
|
1269
1269
|
for (; cur != end; ++cur) {
|
1270
1270
|
if (!huff_nibble(p, *cur >> 4) || !huff_nibble(p, *cur & 0xf)) return 0;
|
1271
1271
|
}
|
@@ -1274,8 +1274,8 @@ static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1274
1274
|
|
1275
1275
|
/* decode some string bytes based on the current decoding mode
|
1276
1276
|
(huffman or not) */
|
1277
|
-
static int add_str_bytes(grpc_chttp2_hpack_parser *p, const
|
1278
|
-
const
|
1277
|
+
static int add_str_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1278
|
+
const uint8_t *end) {
|
1279
1279
|
if (p->huff) {
|
1280
1280
|
return add_huff_bytes(p, cur, end);
|
1281
1281
|
} else {
|
@@ -1284,8 +1284,8 @@ static int add_str_bytes(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1284
1284
|
}
|
1285
1285
|
|
1286
1286
|
/* parse a string - tries to do large chunks at a time */
|
1287
|
-
static int parse_string(grpc_chttp2_hpack_parser *p, const
|
1288
|
-
const
|
1287
|
+
static int parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1288
|
+
const uint8_t *end) {
|
1289
1289
|
size_t remaining = p->strlen - p->strgot;
|
1290
1290
|
size_t given = (size_t)(end - cur);
|
1291
1291
|
if (remaining <= given) {
|
@@ -1293,16 +1293,16 @@ static int parse_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1293
1293
|
parse_next(p, cur + remaining, end);
|
1294
1294
|
} else {
|
1295
1295
|
if (!add_str_bytes(p, cur, cur + given)) return 0;
|
1296
|
-
GPR_ASSERT(given <=
|
1297
|
-
p->strgot += (
|
1296
|
+
GPR_ASSERT(given <= UINT32_MAX - p->strgot);
|
1297
|
+
p->strgot += (uint32_t)given;
|
1298
1298
|
p->state = parse_string;
|
1299
1299
|
return 1;
|
1300
1300
|
}
|
1301
1301
|
}
|
1302
1302
|
|
1303
1303
|
/* begin parsing a string - performs setup, calls parse_string */
|
1304
|
-
static int begin_parse_string(grpc_chttp2_hpack_parser *p, const
|
1305
|
-
const
|
1304
|
+
static int begin_parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1305
|
+
const uint8_t *end, uint8_t binary,
|
1306
1306
|
grpc_chttp2_hpack_parser_string *str) {
|
1307
1307
|
p->strgot = 0;
|
1308
1308
|
str->length = 0;
|
@@ -1313,8 +1313,8 @@ static int begin_parse_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1313
1313
|
}
|
1314
1314
|
|
1315
1315
|
/* parse the key string */
|
1316
|
-
static int parse_key_string(grpc_chttp2_hpack_parser *p, const
|
1317
|
-
const
|
1316
|
+
static int parse_key_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1317
|
+
const uint8_t *end) {
|
1318
1318
|
return begin_parse_string(p, cur, end, NOT_BINARY, &p->key);
|
1319
1319
|
}
|
1320
1320
|
|
@@ -1340,8 +1340,8 @@ static is_binary_header is_binary_indexed_header(grpc_chttp2_hpack_parser *p) {
|
|
1340
1340
|
}
|
1341
1341
|
|
1342
1342
|
/* parse the value string */
|
1343
|
-
static int parse_value_string(grpc_chttp2_hpack_parser *p, const
|
1344
|
-
const
|
1343
|
+
static int parse_value_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
|
1344
|
+
const uint8_t *end, is_binary_header type) {
|
1345
1345
|
switch (type) {
|
1346
1346
|
case BINARY_HEADER:
|
1347
1347
|
return begin_parse_string(p, cur, end, B64_BYTE0, &p->value);
|
@@ -1355,14 +1355,14 @@ static int parse_value_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur,
|
|
1355
1355
|
}
|
1356
1356
|
|
1357
1357
|
static int parse_value_string_with_indexed_key(grpc_chttp2_hpack_parser *p,
|
1358
|
-
const
|
1359
|
-
const
|
1358
|
+
const uint8_t *cur,
|
1359
|
+
const uint8_t *end) {
|
1360
1360
|
return parse_value_string(p, cur, end, is_binary_indexed_header(p));
|
1361
1361
|
}
|
1362
1362
|
|
1363
1363
|
static int parse_value_string_with_literal_key(grpc_chttp2_hpack_parser *p,
|
1364
|
-
const
|
1365
|
-
const
|
1364
|
+
const uint8_t *cur,
|
1365
|
+
const uint8_t *end) {
|
1366
1366
|
return parse_value_string(p, cur, end, is_binary_literal_header(p));
|
1367
1367
|
}
|
1368
1368
|
|
@@ -1398,7 +1398,7 @@ void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser *p) {
|
|
1398
1398
|
}
|
1399
1399
|
|
1400
1400
|
int grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p,
|
1401
|
-
const
|
1401
|
+
const uint8_t *beg, const uint8_t *end) {
|
1402
1402
|
/* TODO(ctiller): limit the distance of end from beg, and perform multiple
|
1403
1403
|
steps in the event of a large chunk of data to limit
|
1404
1404
|
stack space usage when no tail call optimization is
|