grpc 1.24.0 → 1.25.0
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 +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +72 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -65,6 +65,10 @@ class SliceHashTable : public RefCounted<SliceHashTable<T>> {
|
|
65
65
|
Entry* entries,
|
66
66
|
ValueCmp value_cmp);
|
67
67
|
|
68
|
+
// Use Create function instead of using this directly.
|
69
|
+
SliceHashTable(size_t num_entries, Entry* entries, ValueCmp value_cmp);
|
70
|
+
virtual ~SliceHashTable();
|
71
|
+
|
68
72
|
/// Returns the value from the table associated with \a key.
|
69
73
|
/// Returns null if \a key is not found.
|
70
74
|
const T* Get(const grpc_slice& key) const;
|
@@ -78,12 +82,6 @@ class SliceHashTable : public RefCounted<SliceHashTable<T>> {
|
|
78
82
|
static int Cmp(const SliceHashTable& a, const SliceHashTable& b);
|
79
83
|
|
80
84
|
private:
|
81
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
82
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
|
83
|
-
|
84
|
-
SliceHashTable(size_t num_entries, Entry* entries, ValueCmp value_cmp);
|
85
|
-
virtual ~SliceHashTable();
|
86
|
-
|
87
85
|
void Add(const grpc_slice& key, T& value);
|
88
86
|
|
89
87
|
// Default value comparison function, if none specified by caller.
|
@@ -50,10 +50,6 @@ typedef struct slice_shard {
|
|
50
50
|
size_t capacity;
|
51
51
|
} slice_shard;
|
52
52
|
|
53
|
-
/* hash seed: decided at initialization time */
|
54
|
-
uint32_t g_hash_seed;
|
55
|
-
static int g_forced_hash_seed = 0;
|
56
|
-
|
57
53
|
static slice_shard g_shards[SHARD_COUNT];
|
58
54
|
|
59
55
|
typedef struct {
|
@@ -68,6 +64,10 @@ uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
|
|
68
64
|
|
69
65
|
namespace grpc_core {
|
70
66
|
|
67
|
+
/* hash seed: decided at initialization time */
|
68
|
+
uint32_t g_hash_seed;
|
69
|
+
static bool g_forced_hash_seed = false;
|
70
|
+
|
71
71
|
InternedSliceRefcount::~InternedSliceRefcount() {
|
72
72
|
slice_shard* shard = &g_shards[SHARD_IDX(this->hash)];
|
73
73
|
MutexLock lock(&shard->mu);
|
@@ -115,7 +115,7 @@ grpc_core::InternedSlice::InternedSlice(InternedSliceRefcount* s) {
|
|
115
115
|
|
116
116
|
uint32_t grpc_slice_default_hash_impl(grpc_slice s) {
|
117
117
|
return gpr_murmur_hash3(GRPC_SLICE_START_PTR(s), GRPC_SLICE_LENGTH(s),
|
118
|
-
g_hash_seed);
|
118
|
+
grpc_core::g_hash_seed);
|
119
119
|
}
|
120
120
|
|
121
121
|
uint32_t grpc_static_slice_hash(grpc_slice s) {
|
@@ -159,20 +159,20 @@ grpc_slice grpc_slice_intern(grpc_slice slice) {
|
|
159
159
|
}
|
160
160
|
|
161
161
|
// Attempt to see if the provided slice or string matches a static slice.
|
162
|
-
// SliceArgs
|
163
|
-
// case, hash is the pre-computed hash value.
|
162
|
+
// SliceArgs is either a const grpc_slice& or const pair<const char*, size_t>&.
|
163
|
+
// In either case, hash is the pre-computed hash value.
|
164
164
|
//
|
165
165
|
// Returns: a matching static slice, or null.
|
166
|
-
template <
|
166
|
+
template <typename SliceArgs>
|
167
167
|
static const grpc_core::StaticMetadataSlice* MatchStaticSlice(
|
168
|
-
uint32_t hash, SliceArgs
|
168
|
+
uint32_t hash, const SliceArgs& args) {
|
169
169
|
for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) {
|
170
170
|
static_metadata_hash_ent ent =
|
171
171
|
static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)];
|
172
172
|
const grpc_core::StaticMetadataSlice* static_slice_table =
|
173
173
|
grpc_static_slice_table();
|
174
174
|
if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT &&
|
175
|
-
static_slice_table[ent.idx]
|
175
|
+
static_slice_table[ent.idx] == args) {
|
176
176
|
return &static_slice_table[ent.idx];
|
177
177
|
}
|
178
178
|
}
|
@@ -182,8 +182,12 @@ static const grpc_core::StaticMetadataSlice* MatchStaticSlice(
|
|
182
182
|
// Helper methods to enable us to select appropriately overloaded slice methods
|
183
183
|
// whether we're dealing with a slice, or a buffer with length, when interning
|
184
184
|
// strings. Helpers for FindOrCreateInternedSlice().
|
185
|
-
static const
|
186
|
-
|
185
|
+
static const char* GetBuffer(const std::pair<const char*, size_t>& buflen) {
|
186
|
+
return buflen.first;
|
187
|
+
}
|
188
|
+
static size_t GetLength(const std::pair<const char*, size_t>& buflen) {
|
189
|
+
return buflen.second;
|
190
|
+
}
|
187
191
|
static const void* GetBuffer(const grpc_slice& slice) {
|
188
192
|
return GRPC_SLICE_START_PTR(slice);
|
189
193
|
}
|
@@ -192,19 +196,19 @@ static size_t GetLength(const grpc_slice& slice) {
|
|
192
196
|
}
|
193
197
|
|
194
198
|
// Creates an interned slice for a string that does not currently exist in the
|
195
|
-
// intern table. SliceArgs
|
196
|
-
//
|
197
|
-
// hold the shard lock. Helper for FindOrCreateInternedSlice().
|
199
|
+
// intern table. SliceArgs is either a const grpc_slice& or a const
|
200
|
+
// pair<const char*, size_t>&. Hash is the pre-computed hash value. We must
|
201
|
+
// already hold the shard lock. Helper for FindOrCreateInternedSlice().
|
198
202
|
//
|
199
203
|
// Returns: a newly interned slice.
|
200
|
-
template <
|
204
|
+
template <typename SliceArgs>
|
201
205
|
static InternedSliceRefcount* InternNewStringLocked(slice_shard* shard,
|
202
206
|
size_t shard_idx,
|
203
207
|
uint32_t hash,
|
204
|
-
SliceArgs
|
208
|
+
const SliceArgs& args) {
|
205
209
|
/* string data goes after the internal_string header */
|
206
|
-
size_t len = GetLength(
|
207
|
-
const void* buffer = GetBuffer(
|
210
|
+
size_t len = GetLength(args);
|
211
|
+
const void* buffer = GetBuffer(args);
|
208
212
|
InternedSliceRefcount* s =
|
209
213
|
static_cast<InternedSliceRefcount*>(gpr_malloc(sizeof(*s) + len));
|
210
214
|
new (s) grpc_core::InternedSliceRefcount(len, hash, shard->strs[shard_idx]);
|
@@ -227,16 +231,15 @@ static InternedSliceRefcount* InternNewStringLocked(slice_shard* shard,
|
|
227
231
|
// shard lock. Helper for FindOrCreateInternedSlice().
|
228
232
|
//
|
229
233
|
// Returns: a pre-existing matching static slice, or null.
|
230
|
-
template <
|
234
|
+
template <typename SliceArgs>
|
231
235
|
static InternedSliceRefcount* MatchInternedSliceLocked(uint32_t hash,
|
232
236
|
size_t idx,
|
233
|
-
SliceArgs
|
237
|
+
const SliceArgs& args) {
|
234
238
|
InternedSliceRefcount* s;
|
235
239
|
slice_shard* shard = &g_shards[SHARD_IDX(hash)];
|
236
240
|
/* search for an existing string */
|
237
241
|
for (s = shard->strs[idx]; s; s = s->bucket_next) {
|
238
|
-
if (s->hash == hash &&
|
239
|
-
grpc_core::InternedSlice(s).Equals(std::forward<SliceArgs>(args)...)) {
|
242
|
+
if (s->hash == hash && grpc_core::InternedSlice(s) == args) {
|
240
243
|
if (s->refcnt.RefIfNonZero()) {
|
241
244
|
return s;
|
242
245
|
}
|
@@ -248,22 +251,20 @@ static InternedSliceRefcount* MatchInternedSliceLocked(uint32_t hash,
|
|
248
251
|
// Attempt to see if the provided slice or string matches an existing interned
|
249
252
|
// slice, and failing that, create an interned slice with its contents. Returns
|
250
253
|
// either the existing matching interned slice or the newly created one.
|
251
|
-
// SliceArgs
|
252
|
-
// case, hash is the pre-computed hash value. We do not hold the
|
253
|
-
// here, but do take it.
|
254
|
+
// SliceArgs is either a const grpc_slice& or const pair<const char*, size_t>&.
|
255
|
+
// In either case, hash is the pre-computed hash value. We do not hold the
|
256
|
+
// shard lock here, but do take it.
|
254
257
|
//
|
255
258
|
// Returns: an interned slice, either pre-existing/matched or newly created.
|
256
|
-
template <
|
259
|
+
template <typename SliceArgs>
|
257
260
|
static InternedSliceRefcount* FindOrCreateInternedSlice(uint32_t hash,
|
258
|
-
SliceArgs
|
261
|
+
const SliceArgs& args) {
|
259
262
|
slice_shard* shard = &g_shards[SHARD_IDX(hash)];
|
260
263
|
gpr_mu_lock(&shard->mu);
|
261
264
|
const size_t idx = TABLE_IDX(hash, shard->capacity);
|
262
|
-
InternedSliceRefcount* s =
|
263
|
-
MatchInternedSliceLocked(hash, idx, std::forward<SliceArgs>(args)...);
|
265
|
+
InternedSliceRefcount* s = MatchInternedSliceLocked(hash, idx, args);
|
264
266
|
if (s == nullptr) {
|
265
|
-
s = InternNewStringLocked(shard, idx, hash,
|
266
|
-
std::forward<SliceArgs>(args)...);
|
267
|
+
s = InternNewStringLocked(shard, idx, hash, args);
|
267
268
|
}
|
268
269
|
gpr_mu_unlock(&shard->mu);
|
269
270
|
return s;
|
@@ -277,12 +278,13 @@ grpc_core::ManagedMemorySlice::ManagedMemorySlice(const char* string,
|
|
277
278
|
size_t len) {
|
278
279
|
GPR_TIMER_SCOPE("grpc_slice_intern", 0);
|
279
280
|
const uint32_t hash = gpr_murmur_hash3(string, len, g_hash_seed);
|
280
|
-
const StaticMetadataSlice* static_slice =
|
281
|
+
const StaticMetadataSlice* static_slice =
|
282
|
+
MatchStaticSlice(hash, std::pair<const char*, size_t>(string, len));
|
281
283
|
if (static_slice) {
|
282
284
|
*this = *static_slice;
|
283
285
|
} else {
|
284
|
-
*this =
|
285
|
-
|
286
|
+
*this = grpc_core::InternedSlice(FindOrCreateInternedSlice(
|
287
|
+
hash, std::pair<const char*, size_t>(string, len)));
|
286
288
|
}
|
287
289
|
}
|
288
290
|
|
@@ -303,13 +305,14 @@ grpc_core::ManagedMemorySlice::ManagedMemorySlice(const grpc_slice* slice_ptr) {
|
|
303
305
|
}
|
304
306
|
|
305
307
|
void grpc_test_only_set_slice_hash_seed(uint32_t seed) {
|
306
|
-
g_hash_seed = seed;
|
307
|
-
g_forced_hash_seed =
|
308
|
+
grpc_core::g_hash_seed = seed;
|
309
|
+
grpc_core::g_forced_hash_seed = true;
|
308
310
|
}
|
309
311
|
|
310
312
|
void grpc_slice_intern_init(void) {
|
311
|
-
if (!g_forced_hash_seed) {
|
312
|
-
g_hash_seed =
|
313
|
+
if (!grpc_core::g_forced_hash_seed) {
|
314
|
+
grpc_core::g_hash_seed =
|
315
|
+
static_cast<uint32_t>(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
|
313
316
|
}
|
314
317
|
for (size_t i = 0; i < SHARD_COUNT; i++) {
|
315
318
|
slice_shard* shard = &g_shards[i];
|
@@ -36,7 +36,6 @@
|
|
36
36
|
// Interned slices have specific fast-path operations for hashing. To inline
|
37
37
|
// these operations, we need to forward declare them here.
|
38
38
|
extern uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
|
39
|
-
extern uint32_t g_hash_seed;
|
40
39
|
|
41
40
|
// grpc_slice_refcount : A reference count for grpc_slice.
|
42
41
|
//
|
@@ -259,7 +258,8 @@ inline uint32_t grpc_slice_refcount::Hash(const grpc_slice& slice) {
|
|
259
258
|
break;
|
260
259
|
}
|
261
260
|
return gpr_murmur_hash3(grpc_refcounted_slice_data(slice),
|
262
|
-
grpc_refcounted_slice_length(slice),
|
261
|
+
grpc_refcounted_slice_length(slice),
|
262
|
+
grpc_core::g_hash_seed);
|
263
263
|
}
|
264
264
|
|
265
265
|
inline const grpc_slice& grpc_slice_ref_internal(const grpc_slice& slice) {
|
@@ -327,7 +327,7 @@ inline uint32_t grpc_slice_hash_refcounted(const grpc_slice& s) {
|
|
327
327
|
|
328
328
|
inline uint32_t grpc_slice_default_hash_internal(const grpc_slice& s) {
|
329
329
|
return gpr_murmur_hash3(GRPC_SLICE_START_PTR(s), GRPC_SLICE_LENGTH(s),
|
330
|
-
g_hash_seed);
|
330
|
+
grpc_core::g_hash_seed);
|
331
331
|
}
|
332
332
|
|
333
333
|
inline uint32_t grpc_slice_hash_internal(const grpc_slice& s) {
|
@@ -25,6 +25,12 @@
|
|
25
25
|
|
26
26
|
#include <grpc/slice.h>
|
27
27
|
|
28
|
+
#include "src/core/lib/gpr/murmur_hash.h"
|
29
|
+
|
30
|
+
namespace grpc_core {
|
31
|
+
extern uint32_t g_hash_seed;
|
32
|
+
} // namespace grpc_core
|
33
|
+
|
28
34
|
// When we compare two slices, and we know the latter is not inlined, we can
|
29
35
|
// short circuit our comparison operator. We specifically use differs()
|
30
36
|
// semantics instead of equals() semantics due to more favourable code
|
@@ -101,15 +107,16 @@ struct ManagedMemorySlice : public grpc_slice {
|
|
101
107
|
explicit ManagedMemorySlice(const char* string);
|
102
108
|
ManagedMemorySlice(const char* buf, size_t len);
|
103
109
|
explicit ManagedMemorySlice(const grpc_slice* slice);
|
104
|
-
bool
|
110
|
+
bool operator==(const grpc_slice& other) const {
|
105
111
|
if (refcount == other.refcount) {
|
106
112
|
return true;
|
107
113
|
}
|
108
114
|
return !grpc_slice_differs_refcounted(other, *this);
|
109
115
|
}
|
110
|
-
bool
|
111
|
-
|
112
|
-
|
116
|
+
bool operator!=(const grpc_slice& other) const { return !(*this == other); }
|
117
|
+
bool operator==(std::pair<const char*, size_t> buflen) const {
|
118
|
+
return data.refcounted.length == buflen.second && buflen.first != nullptr &&
|
119
|
+
memcmp(buflen.first, data.refcounted.bytes, buflen.second) == 0;
|
113
120
|
}
|
114
121
|
};
|
115
122
|
struct UnmanagedMemorySlice : public grpc_slice {
|
@@ -150,6 +157,16 @@ struct ExternallyManagedSlice : public UnmanagedMemorySlice {
|
|
150
157
|
data.refcounted.length = length;
|
151
158
|
data.refcounted.bytes = bytes;
|
152
159
|
}
|
160
|
+
bool operator==(const grpc_slice& other) const {
|
161
|
+
return data.refcounted.length == GRPC_SLICE_LENGTH(other) &&
|
162
|
+
memcmp(data.refcounted.bytes, GRPC_SLICE_START_PTR(other),
|
163
|
+
data.refcounted.length) == 0;
|
164
|
+
}
|
165
|
+
bool operator!=(const grpc_slice& other) const { return !(*this == other); }
|
166
|
+
uint32_t Hash() {
|
167
|
+
return gpr_murmur_hash3(data.refcounted.bytes, data.refcounted.length,
|
168
|
+
g_hash_seed);
|
169
|
+
}
|
153
170
|
};
|
154
171
|
|
155
172
|
struct StaticMetadataSlice : public ManagedMemorySlice {
|
@@ -44,6 +44,10 @@ class SliceWeakHashTable : public RefCounted<SliceWeakHashTable<T, Size>> {
|
|
44
44
|
return MakeRefCounted<SliceWeakHashTable<T, Size>>();
|
45
45
|
}
|
46
46
|
|
47
|
+
/// Use Create function instead of using this directly.
|
48
|
+
SliceWeakHashTable() = default;
|
49
|
+
~SliceWeakHashTable() = default;
|
50
|
+
|
47
51
|
/// Add a mapping from \a key to \a value, taking ownership of \a key. This
|
48
52
|
/// operation will always succeed. It may discard older entries.
|
49
53
|
void Add(const grpc_slice& key, T value) {
|
@@ -61,12 +65,6 @@ class SliceWeakHashTable : public RefCounted<SliceWeakHashTable<T, Size>> {
|
|
61
65
|
}
|
62
66
|
|
63
67
|
private:
|
64
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
|
65
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
66
|
-
|
67
|
-
SliceWeakHashTable() = default;
|
68
|
-
~SliceWeakHashTable() = default;
|
69
|
-
|
70
68
|
/// The type of the table "rows".
|
71
69
|
class Entry {
|
72
70
|
public:
|
@@ -1131,8 +1131,7 @@ static size_t batch_slot_for_op(grpc_op_type type) {
|
|
1131
1131
|
}
|
1132
1132
|
|
1133
1133
|
static batch_control* reuse_or_allocate_batch_control(grpc_call* call,
|
1134
|
-
const grpc_op* ops
|
1135
|
-
size_t num_ops) {
|
1134
|
+
const grpc_op* ops) {
|
1136
1135
|
size_t slot_idx = batch_slot_for_op(ops[0].op);
|
1137
1136
|
batch_control** pslot = &call->active_batches[slot_idx];
|
1138
1137
|
batch_control* bctl;
|
@@ -1268,6 +1267,7 @@ static void continue_receiving_slices(batch_control* bctl) {
|
|
1268
1267
|
*call->receiving_buffer = nullptr;
|
1269
1268
|
call->receiving_message = 0;
|
1270
1269
|
finish_batch_step(bctl);
|
1270
|
+
GRPC_ERROR_UNREF(error);
|
1271
1271
|
return;
|
1272
1272
|
}
|
1273
1273
|
} else {
|
@@ -1579,7 +1579,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
|
|
1579
1579
|
goto done;
|
1580
1580
|
}
|
1581
1581
|
|
1582
|
-
bctl = reuse_or_allocate_batch_control(call, ops
|
1582
|
+
bctl = reuse_or_allocate_batch_control(call, ops);
|
1583
1583
|
if (bctl == nullptr) {
|
1584
1584
|
return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
|
1585
1585
|
}
|
@@ -257,6 +257,13 @@ grpc_channel* grpc_channel_create(const char* target,
|
|
257
257
|
get_default_authority(input_args);
|
258
258
|
grpc_channel_args* args =
|
259
259
|
build_channel_args(input_args, default_authority.get());
|
260
|
+
if (grpc_channel_stack_type_is_client(channel_stack_type)) {
|
261
|
+
auto channel_args_mutator =
|
262
|
+
grpc_channel_args_get_client_channel_creation_mutator();
|
263
|
+
if (channel_args_mutator != nullptr) {
|
264
|
+
args = channel_args_mutator(target, args, channel_stack_type);
|
265
|
+
}
|
266
|
+
}
|
260
267
|
grpc_channel_stack_builder_set_channel_arguments(builder, args);
|
261
268
|
grpc_channel_args_destroy(args);
|
262
269
|
grpc_channel_stack_builder_set_target(builder, target);
|
@@ -210,14 +210,14 @@ struct cq_vtable {
|
|
210
210
|
|
211
211
|
namespace {
|
212
212
|
|
213
|
-
/* Queue that holds the cq_completion_events. Internally uses
|
214
|
-
* (a lockfree multiproducer single consumer
|
215
|
-
* to support multiple consumers.
|
213
|
+
/* Queue that holds the cq_completion_events. Internally uses
|
214
|
+
* MultiProducerSingleConsumerQueue (a lockfree multiproducer single consumer
|
215
|
+
* queue). It uses a queue_lock to support multiple consumers.
|
216
216
|
* Only used in completion queues whose completion_type is GRPC_CQ_NEXT */
|
217
217
|
class CqEventQueue {
|
218
218
|
public:
|
219
|
-
CqEventQueue()
|
220
|
-
~CqEventQueue()
|
219
|
+
CqEventQueue() = default;
|
220
|
+
~CqEventQueue() = default;
|
221
221
|
|
222
222
|
/* Note: The counter is not incremented/decremented atomically with push/pop.
|
223
223
|
* The count is only eventually consistent */
|
@@ -232,7 +232,7 @@ class CqEventQueue {
|
|
232
232
|
/* Spinlock to serialize consumers i.e pop() operations */
|
233
233
|
gpr_spinlock queue_lock_ = GPR_SPINLOCK_INITIALIZER;
|
234
234
|
|
235
|
-
|
235
|
+
grpc_core::MultiProducerSingleConsumerQueue queue_;
|
236
236
|
|
237
237
|
/* A lazy counter of number of items in the queue. This is NOT atomically
|
238
238
|
incremented/decremented along with push/pop operations and hence is only
|
@@ -462,7 +462,8 @@ int grpc_completion_queue_thread_local_cache_flush(grpc_completion_queue* cq,
|
|
462
462
|
}
|
463
463
|
|
464
464
|
bool CqEventQueue::Push(grpc_cq_completion* c) {
|
465
|
-
|
465
|
+
queue_.Push(
|
466
|
+
reinterpret_cast<grpc_core::MultiProducerSingleConsumerQueue::Node*>(c));
|
466
467
|
return num_queue_items_.FetchAdd(1, grpc_core::MemoryOrder::RELAXED) == 0;
|
467
468
|
}
|
468
469
|
|
@@ -473,8 +474,7 @@ grpc_cq_completion* CqEventQueue::Pop() {
|
|
473
474
|
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES();
|
474
475
|
|
475
476
|
bool is_empty = false;
|
476
|
-
c = reinterpret_cast<grpc_cq_completion*>(
|
477
|
-
gpr_mpscq_pop_and_check_end(&queue_, &is_empty));
|
477
|
+
c = reinterpret_cast<grpc_cq_completion*>(queue_.PopAndCheckEnd(&is_empty));
|
478
478
|
gpr_spinlock_unlock(&queue_lock_);
|
479
479
|
|
480
480
|
if (c == nullptr && !is_empty) {
|
@@ -1007,8 +1007,9 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
1007
1007
|
|
1008
1008
|
if (cqd->pending_events.Load(grpc_core::MemoryOrder::ACQUIRE) == 0) {
|
1009
1009
|
/* Before returning, check if the queue has any items left over (since
|
1010
|
-
|
1011
|
-
empty. If so, keep retrying but do not
|
1010
|
+
MultiProducerSingleConsumerQueue::Pop() can sometimes return NULL
|
1011
|
+
even if the queue is not empty. If so, keep retrying but do not
|
1012
|
+
return GRPC_QUEUE_SHUTDOWN */
|
1012
1013
|
if (cqd->queue.num_items() > 0) {
|
1013
1014
|
/* Go to the beginning of the loop. No point doing a poll because
|
1014
1015
|
(cq->shutdown == true) is only possible when there is no pending
|
@@ -24,8 +24,9 @@
|
|
24
24
|
#include <grpc/support/port_platform.h>
|
25
25
|
|
26
26
|
#include <grpc/grpc.h>
|
27
|
+
|
27
28
|
#include "src/core/lib/debug/trace.h"
|
28
|
-
#include "src/core/lib/gprpp/
|
29
|
+
#include "src/core/lib/gprpp/manual_constructor.h"
|
29
30
|
#include "src/core/lib/iomgr/pollset.h"
|
30
31
|
|
31
32
|
/* These trace flags default to 1. The corresponding lines are only traced
|
@@ -36,7 +37,8 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_pending_tags;
|
|
36
37
|
extern grpc_core::DebugOnlyTraceFlag grpc_trace_cq_refcount;
|
37
38
|
|
38
39
|
typedef struct grpc_cq_completion {
|
39
|
-
|
40
|
+
grpc_core::ManualConstructor<grpc_core::MultiProducerSingleConsumerQueue>
|
41
|
+
node;
|
40
42
|
|
41
43
|
/** user supplied tag */
|
42
44
|
void* tag;
|
@@ -32,6 +32,7 @@
|
|
32
32
|
#include "src/core/lib/surface/call.h"
|
33
33
|
#include "src/core/lib/surface/channel.h"
|
34
34
|
#include "src/core/lib/surface/lame_client.h"
|
35
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
35
36
|
#include "src/core/lib/transport/static_metadata.h"
|
36
37
|
|
37
38
|
namespace grpc_core {
|
@@ -39,15 +40,19 @@ namespace grpc_core {
|
|
39
40
|
namespace {
|
40
41
|
|
41
42
|
struct CallData {
|
42
|
-
|
43
|
+
CallCombiner* call_combiner;
|
43
44
|
grpc_linked_mdelem status;
|
44
45
|
grpc_linked_mdelem details;
|
45
|
-
|
46
|
+
Atomic<bool> filled_metadata;
|
46
47
|
};
|
47
48
|
|
48
49
|
struct ChannelData {
|
50
|
+
ChannelData() : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {}
|
51
|
+
|
49
52
|
grpc_status_code error_code;
|
50
53
|
const char* error_message;
|
54
|
+
Mutex mu;
|
55
|
+
ConnectivityStateTracker state_tracker;
|
51
56
|
};
|
52
57
|
|
53
58
|
static void fill_metadata(grpc_call_element* elem, grpc_metadata_batch* mdb) {
|
@@ -94,10 +99,16 @@ static void lame_get_channel_info(grpc_channel_element* elem,
|
|
94
99
|
|
95
100
|
static void lame_start_transport_op(grpc_channel_element* elem,
|
96
101
|
grpc_transport_op* op) {
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
102
|
+
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
103
|
+
{
|
104
|
+
MutexLock lock(&chand->mu);
|
105
|
+
if (op->start_connectivity_watch != nullptr) {
|
106
|
+
chand->state_tracker.AddWatcher(op->start_connectivity_watch_state,
|
107
|
+
std::move(op->start_connectivity_watch));
|
108
|
+
}
|
109
|
+
if (op->stop_connectivity_watch != nullptr) {
|
110
|
+
chand->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
|
111
|
+
}
|
101
112
|
}
|
102
113
|
if (op->send_ping.on_initiate != nullptr) {
|
103
114
|
GRPC_CLOSURE_SCHED(
|
@@ -115,27 +126,31 @@ static void lame_start_transport_op(grpc_channel_element* elem,
|
|
115
126
|
}
|
116
127
|
}
|
117
128
|
|
118
|
-
static grpc_error*
|
119
|
-
|
129
|
+
static grpc_error* lame_init_call_elem(grpc_call_element* elem,
|
130
|
+
const grpc_call_element_args* args) {
|
120
131
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
121
132
|
calld->call_combiner = args->call_combiner;
|
122
133
|
return GRPC_ERROR_NONE;
|
123
134
|
}
|
124
135
|
|
125
|
-
static void
|
126
|
-
|
127
|
-
|
136
|
+
static void lame_destroy_call_elem(grpc_call_element* elem,
|
137
|
+
const grpc_call_final_info* final_info,
|
138
|
+
grpc_closure* then_schedule_closure) {
|
128
139
|
GRPC_CLOSURE_SCHED(then_schedule_closure, GRPC_ERROR_NONE);
|
129
140
|
}
|
130
141
|
|
131
|
-
static grpc_error*
|
132
|
-
|
142
|
+
static grpc_error* lame_init_channel_elem(grpc_channel_element* elem,
|
143
|
+
grpc_channel_element_args* args) {
|
133
144
|
GPR_ASSERT(args->is_first);
|
134
145
|
GPR_ASSERT(args->is_last);
|
146
|
+
new (elem->channel_data) ChannelData;
|
135
147
|
return GRPC_ERROR_NONE;
|
136
148
|
}
|
137
149
|
|
138
|
-
static void
|
150
|
+
static void lame_destroy_channel_elem(grpc_channel_element* elem) {
|
151
|
+
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
152
|
+
chand->~ChannelData();
|
153
|
+
}
|
139
154
|
|
140
155
|
} // namespace
|
141
156
|
|
@@ -145,12 +160,12 @@ const grpc_channel_filter grpc_lame_filter = {
|
|
145
160
|
grpc_core::lame_start_transport_stream_op_batch,
|
146
161
|
grpc_core::lame_start_transport_op,
|
147
162
|
sizeof(grpc_core::CallData),
|
148
|
-
grpc_core::
|
163
|
+
grpc_core::lame_init_call_elem,
|
149
164
|
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
150
|
-
grpc_core::
|
165
|
+
grpc_core::lame_destroy_call_elem,
|
151
166
|
sizeof(grpc_core::ChannelData),
|
152
|
-
grpc_core::
|
153
|
-
grpc_core::
|
167
|
+
grpc_core::lame_init_channel_elem,
|
168
|
+
grpc_core::lame_destroy_channel_elem,
|
154
169
|
grpc_core::lame_get_channel_info,
|
155
170
|
"lame-client",
|
156
171
|
};
|