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
@@ -77,12 +77,11 @@ struct HandshakerArgs {
|
|
77
77
|
class Handshaker : public RefCounted<Handshaker> {
|
78
78
|
public:
|
79
79
|
virtual ~Handshaker() = default;
|
80
|
-
virtual void Shutdown(grpc_error* why)
|
80
|
+
virtual void Shutdown(grpc_error* why) = 0;
|
81
81
|
virtual void DoHandshake(grpc_tcp_server_acceptor* acceptor,
|
82
82
|
grpc_closure* on_handshake_done,
|
83
|
-
HandshakerArgs* args)
|
84
|
-
virtual const char* name() const
|
85
|
-
GRPC_ABSTRACT_BASE_CLASS
|
83
|
+
HandshakerArgs* args) = 0;
|
84
|
+
virtual const char* name() const = 0;
|
86
85
|
};
|
87
86
|
|
88
87
|
//
|
@@ -33,10 +33,8 @@ class HandshakerFactory {
|
|
33
33
|
public:
|
34
34
|
virtual void AddHandshakers(const grpc_channel_args* args,
|
35
35
|
grpc_pollset_set* interested_parties,
|
36
|
-
HandshakeManager* handshake_mgr)
|
36
|
+
HandshakeManager* handshake_mgr) = 0;
|
37
37
|
virtual ~HandshakerFactory() = default;
|
38
|
-
|
39
|
-
GRPC_ABSTRACT_BASE_CLASS
|
40
38
|
};
|
41
39
|
|
42
40
|
} // namespace grpc_core
|
data/src/core/lib/debug/trace.h
CHANGED
@@ -116,12 +116,13 @@ typedef TraceFlag DebugOnlyTraceFlag;
|
|
116
116
|
#else
|
117
117
|
class DebugOnlyTraceFlag {
|
118
118
|
public:
|
119
|
-
constexpr DebugOnlyTraceFlag(bool default_enabled
|
119
|
+
constexpr DebugOnlyTraceFlag(bool /*default_enabled*/, const char* /*name*/) {
|
120
|
+
}
|
120
121
|
constexpr bool enabled() const { return false; }
|
121
122
|
constexpr const char* name() const { return "DebugOnlyTraceFlag"; }
|
122
123
|
|
123
124
|
private:
|
124
|
-
void set_enabled(bool enabled) {}
|
125
|
+
void set_enabled(bool /*enabled*/) {}
|
125
126
|
};
|
126
127
|
#endif
|
127
128
|
|
data/src/core/lib/gprpp/arena.cc
CHANGED
@@ -64,14 +64,14 @@ Arena* Arena::Create(size_t initial_size) {
|
|
64
64
|
return new (ArenaStorage(initial_size)) Arena(initial_size);
|
65
65
|
}
|
66
66
|
|
67
|
-
|
68
|
-
|
67
|
+
std::pair<Arena*, void*> Arena::CreateWithAlloc(size_t initial_size,
|
68
|
+
size_t alloc_size) {
|
69
69
|
static constexpr size_t base_size =
|
70
70
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(Arena));
|
71
71
|
auto* new_arena =
|
72
72
|
new (ArenaStorage(initial_size)) Arena(initial_size, alloc_size);
|
73
73
|
void* first_alloc = reinterpret_cast<char*>(new_arena) + base_size;
|
74
|
-
return
|
74
|
+
return std::make_pair(new_arena, first_alloc);
|
75
75
|
}
|
76
76
|
|
77
77
|
size_t Arena::Destroy() {
|
data/src/core/lib/gprpp/arena.h
CHANGED
@@ -36,7 +36,6 @@
|
|
36
36
|
#include "src/core/lib/gpr/alloc.h"
|
37
37
|
#include "src/core/lib/gpr/spinlock.h"
|
38
38
|
#include "src/core/lib/gprpp/atomic.h"
|
39
|
-
#include "src/core/lib/gprpp/pair.h"
|
40
39
|
|
41
40
|
#include <stddef.h>
|
42
41
|
|
@@ -50,8 +49,8 @@ class Arena {
|
|
50
49
|
// Create an arena, with \a initial_size bytes in the first allocated buffer,
|
51
50
|
// and return both a void pointer to the returned arena and a void* with the
|
52
51
|
// first allocation.
|
53
|
-
static
|
54
|
-
|
52
|
+
static std::pair<Arena*, void*> CreateWithAlloc(size_t initial_size,
|
53
|
+
size_t alloc_size);
|
55
54
|
|
56
55
|
// Destroy an arena, returning the total number of bytes allocated.
|
57
56
|
size_t Destroy();
|
@@ -107,6 +107,10 @@ class InlinedVector {
|
|
107
107
|
return true;
|
108
108
|
}
|
109
109
|
|
110
|
+
bool operator!=(const InlinedVector& other) const {
|
111
|
+
return !(*this == other);
|
112
|
+
}
|
113
|
+
|
110
114
|
void reserve(size_t capacity) {
|
111
115
|
if (capacity > capacity_) {
|
112
116
|
T* new_dynamic =
|
@@ -121,6 +125,11 @@ class InlinedVector {
|
|
121
125
|
}
|
122
126
|
}
|
123
127
|
|
128
|
+
void resize(size_t new_size) {
|
129
|
+
while (new_size > size_) emplace_back();
|
130
|
+
while (new_size < size_) pop_back();
|
131
|
+
}
|
132
|
+
|
124
133
|
template <typename... Args>
|
125
134
|
void emplace_back(Args&&... args) {
|
126
135
|
if (size_ == capacity_) {
|
data/src/core/lib/gprpp/map.h
CHANGED
@@ -26,19 +26,18 @@
|
|
26
26
|
#include <algorithm>
|
27
27
|
#include <functional>
|
28
28
|
#include <iterator>
|
29
|
-
|
30
|
-
#if GRPC_USE_CPP_STD_LIB
|
31
29
|
#include <map>
|
32
|
-
#endif
|
33
30
|
|
34
31
|
#include "src/core/lib/gpr/useful.h"
|
35
32
|
#include "src/core/lib/gprpp/memory.h"
|
36
|
-
#include "src/core/lib/gprpp/pair.h"
|
37
33
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
38
34
|
#include "src/core/lib/gprpp/string_view.h"
|
39
35
|
|
40
36
|
namespace grpc_core {
|
41
37
|
|
38
|
+
template <class Key, class T, class Compare = std::less<Key>>
|
39
|
+
using Map = std::map<Key, T, Compare, Allocator<std::pair<const Key, T>>>;
|
40
|
+
|
42
41
|
struct StringLess {
|
43
42
|
bool operator()(const char* a, const char* b) const {
|
44
43
|
return strcmp(a, b) < 0;
|
@@ -62,503 +61,6 @@ struct RefCountedPtrLess {
|
|
62
61
|
}
|
63
62
|
};
|
64
63
|
|
65
|
-
#if GRPC_USE_CPP_STD_LIB
|
66
|
-
|
67
|
-
template <class Key, class T, class Compare = std::less<Key>>
|
68
|
-
using Map = std::map<Key, T, Compare>;
|
69
|
-
|
70
|
-
#else // GRPC_USE_CPP_STD_LIB
|
71
|
-
|
72
|
-
namespace testing {
|
73
|
-
class MapTest;
|
74
|
-
}
|
75
|
-
|
76
|
-
// Alternative map implementation for grpc_core
|
77
|
-
template <class Key, class T, class Compare = std::less<Key>>
|
78
|
-
class Map {
|
79
|
-
public:
|
80
|
-
typedef Key key_type;
|
81
|
-
typedef T mapped_type;
|
82
|
-
typedef Pair<key_type, mapped_type> value_type;
|
83
|
-
typedef Compare key_compare;
|
84
|
-
class iterator;
|
85
|
-
class const_iterator;
|
86
|
-
|
87
|
-
Map() = default;
|
88
|
-
~Map() { clear(); }
|
89
|
-
|
90
|
-
// Movable.
|
91
|
-
Map(Map&& other) : root_(other.root_), size_(other.size_) {
|
92
|
-
other.root_ = nullptr;
|
93
|
-
other.size_ = 0;
|
94
|
-
}
|
95
|
-
Map& operator=(Map&& other) {
|
96
|
-
if (this != &other) {
|
97
|
-
clear();
|
98
|
-
root_ = other.root_;
|
99
|
-
size_ = other.size_;
|
100
|
-
other.root_ = nullptr;
|
101
|
-
other.size_ = 0;
|
102
|
-
}
|
103
|
-
return *this;
|
104
|
-
}
|
105
|
-
|
106
|
-
// Copyable.
|
107
|
-
Map(const Map& other) {
|
108
|
-
for (const auto& p : other) {
|
109
|
-
emplace(p);
|
110
|
-
}
|
111
|
-
}
|
112
|
-
Map& operator=(const Map& other) {
|
113
|
-
if (this != &other) {
|
114
|
-
clear();
|
115
|
-
for (const auto& p : other) {
|
116
|
-
emplace(p);
|
117
|
-
}
|
118
|
-
}
|
119
|
-
return *this;
|
120
|
-
}
|
121
|
-
|
122
|
-
T& operator[](key_type&& key);
|
123
|
-
T& operator[](const key_type& key);
|
124
|
-
iterator find(const key_type& k);
|
125
|
-
size_t erase(const key_type& key);
|
126
|
-
// Removes the current entry and points to the next one
|
127
|
-
iterator erase(iterator iter);
|
128
|
-
|
129
|
-
size_t size() const { return size_; }
|
130
|
-
|
131
|
-
template <class... Args>
|
132
|
-
Pair<iterator, bool> emplace(Args&&... args);
|
133
|
-
|
134
|
-
Pair<iterator, bool> insert(value_type&& pair) {
|
135
|
-
return emplace(std::move(pair));
|
136
|
-
}
|
137
|
-
|
138
|
-
Pair<iterator, bool> insert(const value_type& pair) { return emplace(pair); }
|
139
|
-
|
140
|
-
bool empty() const { return root_ == nullptr; }
|
141
|
-
|
142
|
-
void clear() {
|
143
|
-
auto iter = begin();
|
144
|
-
while (!empty()) {
|
145
|
-
iter = erase(iter);
|
146
|
-
}
|
147
|
-
}
|
148
|
-
|
149
|
-
iterator begin() {
|
150
|
-
Entry* curr = GetMinEntry(root_);
|
151
|
-
return iterator(this, curr);
|
152
|
-
}
|
153
|
-
|
154
|
-
iterator end() { return iterator(this, nullptr); }
|
155
|
-
|
156
|
-
const_iterator begin() const {
|
157
|
-
Entry* curr = GetMinEntry(root_);
|
158
|
-
return const_iterator(this, curr);
|
159
|
-
}
|
160
|
-
|
161
|
-
const_iterator end() const { return const_iterator(this, nullptr); }
|
162
|
-
|
163
|
-
iterator lower_bound(const Key& k) {
|
164
|
-
// This is a workaround for "const key_compare compare;"
|
165
|
-
// because some versions of compilers cannot build this by requiring
|
166
|
-
// a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
|
167
|
-
key_compare compare_tmp;
|
168
|
-
const key_compare& compare = compare_tmp;
|
169
|
-
return std::find_if(begin(), end(), [&k, &compare](const value_type& v) {
|
170
|
-
return !compare(v.first, k);
|
171
|
-
});
|
172
|
-
}
|
173
|
-
|
174
|
-
private:
|
175
|
-
friend class testing::MapTest;
|
176
|
-
struct Entry {
|
177
|
-
explicit Entry(value_type&& pair) : pair(std::move(pair)) {}
|
178
|
-
value_type pair;
|
179
|
-
Entry* left = nullptr;
|
180
|
-
Entry* right = nullptr;
|
181
|
-
int32_t height = 1;
|
182
|
-
};
|
183
|
-
|
184
|
-
static int32_t EntryHeight(const Entry* e) {
|
185
|
-
return e == nullptr ? 0 : e->height;
|
186
|
-
}
|
187
|
-
|
188
|
-
static Entry* GetMinEntry(Entry* e);
|
189
|
-
Entry* InOrderSuccessor(const Entry* e) const;
|
190
|
-
static Entry* RotateLeft(Entry* e);
|
191
|
-
static Entry* RotateRight(Entry* e);
|
192
|
-
static Entry* RebalanceTreeAfterInsertion(Entry* root, const key_type& k);
|
193
|
-
static Entry* RebalanceTreeAfterDeletion(Entry* root);
|
194
|
-
// Returns a pair with the first value being an iterator pointing to the
|
195
|
-
// inserted entry and the second value being the new root of the subtree
|
196
|
-
// after a rebalance
|
197
|
-
Pair<iterator, Entry*> InsertRecursive(Entry* root, value_type&& p);
|
198
|
-
// Returns a pair with the first value being an iterator pointing to the
|
199
|
-
// successor of the deleted entry and the second value being the new root of
|
200
|
-
// the subtree after a rebalance
|
201
|
-
Pair<iterator, Entry*> RemoveRecursive(Entry* root, const key_type& k);
|
202
|
-
// Return 0 if lhs = rhs
|
203
|
-
// 1 if lhs > rhs
|
204
|
-
// -1 if lhs < rhs
|
205
|
-
static int CompareKeys(const Key& lhs, const Key& rhs);
|
206
|
-
|
207
|
-
Entry* root_ = nullptr;
|
208
|
-
size_t size_ = 0;
|
209
|
-
};
|
210
|
-
|
211
|
-
template <class Key, class T, class Compare>
|
212
|
-
class Map<Key, T, Compare>::iterator
|
213
|
-
: public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
|
214
|
-
Pair<Key, T>*, Pair<Key, T>&> {
|
215
|
-
public:
|
216
|
-
iterator(const iterator& iter) : curr_(iter.curr_), map_(iter.map_) {}
|
217
|
-
bool operator==(const iterator& rhs) const { return (curr_ == rhs.curr_); }
|
218
|
-
bool operator!=(const iterator& rhs) const { return (curr_ != rhs.curr_); }
|
219
|
-
|
220
|
-
iterator& operator++() {
|
221
|
-
curr_ = map_->InOrderSuccessor(curr_);
|
222
|
-
return *this;
|
223
|
-
}
|
224
|
-
|
225
|
-
iterator operator++(int) {
|
226
|
-
Entry* prev = curr_;
|
227
|
-
curr_ = map_->InOrderSuccessor(curr_);
|
228
|
-
return iterator(map_, prev);
|
229
|
-
}
|
230
|
-
|
231
|
-
iterator& operator=(const iterator& other) {
|
232
|
-
if (this != &other) {
|
233
|
-
this->curr_ = other.curr_;
|
234
|
-
this->map_ = other.map_;
|
235
|
-
}
|
236
|
-
return *this;
|
237
|
-
}
|
238
|
-
|
239
|
-
// operator*()
|
240
|
-
value_type& operator*() { return curr_->pair; }
|
241
|
-
const value_type& operator*() const { return curr_->pair; }
|
242
|
-
|
243
|
-
// operator->()
|
244
|
-
value_type* operator->() { return &curr_->pair; }
|
245
|
-
value_type const* operator->() const { return &curr_->pair; }
|
246
|
-
|
247
|
-
private:
|
248
|
-
friend class Map<key_type, mapped_type, key_compare>;
|
249
|
-
using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
|
250
|
-
iterator(GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
|
251
|
-
Entry* curr_;
|
252
|
-
GrpcMap* map_;
|
253
|
-
};
|
254
|
-
|
255
|
-
template <class Key, class T, class Compare>
|
256
|
-
class Map<Key, T, Compare>::const_iterator
|
257
|
-
: public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
|
258
|
-
Pair<Key, T>*, Pair<Key, T>&> {
|
259
|
-
public:
|
260
|
-
const_iterator(const const_iterator& iter)
|
261
|
-
: curr_(iter.curr_), map_(iter.map_) {}
|
262
|
-
bool operator==(const const_iterator& rhs) const {
|
263
|
-
return (curr_ == rhs.curr_);
|
264
|
-
}
|
265
|
-
bool operator!=(const const_iterator& rhs) const {
|
266
|
-
return (curr_ != rhs.curr_);
|
267
|
-
}
|
268
|
-
|
269
|
-
const_iterator& operator++() {
|
270
|
-
curr_ = map_->InOrderSuccessor(curr_);
|
271
|
-
return *this;
|
272
|
-
}
|
273
|
-
|
274
|
-
const_iterator operator++(int) {
|
275
|
-
Entry* prev = curr_;
|
276
|
-
curr_ = map_->InOrderSuccessor(curr_);
|
277
|
-
return const_iterator(map_, prev);
|
278
|
-
}
|
279
|
-
|
280
|
-
const_iterator& operator=(const const_iterator& other) {
|
281
|
-
if (this != &other) {
|
282
|
-
this->curr_ = other.curr_;
|
283
|
-
this->map_ = other.map_;
|
284
|
-
}
|
285
|
-
return *this;
|
286
|
-
}
|
287
|
-
|
288
|
-
// operator*()
|
289
|
-
const value_type& operator*() const { return curr_->pair; }
|
290
|
-
|
291
|
-
// operator->()
|
292
|
-
const value_type* operator->() const { return &curr_->pair; }
|
293
|
-
|
294
|
-
private:
|
295
|
-
friend class Map<key_type, mapped_type, key_compare>;
|
296
|
-
using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
|
297
|
-
const_iterator(const GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
|
298
|
-
Entry* curr_;
|
299
|
-
const GrpcMap* map_;
|
300
|
-
};
|
301
|
-
|
302
|
-
template <class Key, class T, class Compare>
|
303
|
-
T& Map<Key, T, Compare>::operator[](key_type&& key) {
|
304
|
-
auto iter = find(key);
|
305
|
-
if (iter == end()) {
|
306
|
-
return emplace(std::move(key), T()).first->second;
|
307
|
-
}
|
308
|
-
return iter->second;
|
309
|
-
}
|
310
|
-
|
311
|
-
template <class Key, class T, class Compare>
|
312
|
-
T& Map<Key, T, Compare>::operator[](const key_type& key) {
|
313
|
-
auto iter = find(key);
|
314
|
-
if (iter == end()) {
|
315
|
-
return emplace(key, T()).first->second;
|
316
|
-
}
|
317
|
-
return iter->second;
|
318
|
-
}
|
319
|
-
|
320
|
-
template <class Key, class T, class Compare>
|
321
|
-
typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::find(
|
322
|
-
const key_type& k) {
|
323
|
-
Entry* iter = root_;
|
324
|
-
while (iter != nullptr) {
|
325
|
-
int comp = CompareKeys(iter->pair.first, k);
|
326
|
-
if (comp == 0) {
|
327
|
-
return iterator(this, iter);
|
328
|
-
} else if (comp < 0) {
|
329
|
-
iter = iter->right;
|
330
|
-
} else {
|
331
|
-
iter = iter->left;
|
332
|
-
}
|
333
|
-
}
|
334
|
-
return end();
|
335
|
-
}
|
336
|
-
|
337
|
-
template <class Key, class T, class Compare>
|
338
|
-
template <class... Args>
|
339
|
-
typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator, bool>
|
340
|
-
Map<Key, T, Compare>::emplace(Args&&... args) {
|
341
|
-
Pair<key_type, mapped_type> pair(std::forward<Args>(args)...);
|
342
|
-
iterator ret = find(pair.first);
|
343
|
-
bool insertion = false;
|
344
|
-
if (ret == end()) {
|
345
|
-
Pair<iterator, Entry*> p = InsertRecursive(root_, std::move(pair));
|
346
|
-
root_ = p.second;
|
347
|
-
ret = p.first;
|
348
|
-
insertion = true;
|
349
|
-
size_++;
|
350
|
-
}
|
351
|
-
return MakePair(ret, insertion);
|
352
|
-
}
|
353
|
-
|
354
|
-
template <class Key, class T, class Compare>
|
355
|
-
size_t Map<Key, T, Compare>::erase(const key_type& key) {
|
356
|
-
iterator it = find(key);
|
357
|
-
if (it == end()) return 0;
|
358
|
-
erase(it);
|
359
|
-
return 1;
|
360
|
-
}
|
361
|
-
|
362
|
-
// TODO(mhaidry): Modify erase to use the iterator location
|
363
|
-
// to create an efficient erase method
|
364
|
-
template <class Key, class T, class Compare>
|
365
|
-
typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::erase(
|
366
|
-
iterator iter) {
|
367
|
-
if (iter == end()) return iter;
|
368
|
-
key_type& del_key = iter->first;
|
369
|
-
Pair<iterator, Entry*> ret = RemoveRecursive(root_, del_key);
|
370
|
-
root_ = ret.second;
|
371
|
-
size_--;
|
372
|
-
return ret.first;
|
373
|
-
}
|
374
|
-
|
375
|
-
template <class Key, class T, class Compare>
|
376
|
-
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::InOrderSuccessor(
|
377
|
-
const Entry* e) const {
|
378
|
-
if (e->right != nullptr) {
|
379
|
-
return GetMinEntry(e->right);
|
380
|
-
}
|
381
|
-
Entry* successor = nullptr;
|
382
|
-
Entry* iter = root_;
|
383
|
-
while (iter != nullptr) {
|
384
|
-
int comp = CompareKeys(iter->pair.first, e->pair.first);
|
385
|
-
if (comp > 0) {
|
386
|
-
successor = iter;
|
387
|
-
iter = iter->left;
|
388
|
-
} else if (comp < 0) {
|
389
|
-
iter = iter->right;
|
390
|
-
} else
|
391
|
-
break;
|
392
|
-
}
|
393
|
-
return successor;
|
394
|
-
}
|
395
|
-
|
396
|
-
// Returns a pair with the first value being an iterator pointing to the
|
397
|
-
// inserted entry and the second value being the new root of the subtree
|
398
|
-
// after a rebalance
|
399
|
-
template <class Key, class T, class Compare>
|
400
|
-
typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
|
401
|
-
typename Map<Key, T, Compare>::Entry*>
|
402
|
-
Map<Key, T, Compare>::InsertRecursive(Entry* root, value_type&& p) {
|
403
|
-
if (root == nullptr) {
|
404
|
-
Entry* e = New<Entry>(std::move(p));
|
405
|
-
return MakePair(iterator(this, e), e);
|
406
|
-
}
|
407
|
-
int comp = CompareKeys(root->pair.first, p.first);
|
408
|
-
if (comp > 0) {
|
409
|
-
Pair<iterator, Entry*> ret = InsertRecursive(root->left, std::move(p));
|
410
|
-
root->left = ret.second;
|
411
|
-
ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
|
412
|
-
return ret;
|
413
|
-
} else if (comp < 0) {
|
414
|
-
Pair<iterator, Entry*> ret = InsertRecursive(root->right, std::move(p));
|
415
|
-
root->right = ret.second;
|
416
|
-
ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
|
417
|
-
return ret;
|
418
|
-
} else {
|
419
|
-
root->pair = std::move(p);
|
420
|
-
return MakePair(iterator(this, root), root);
|
421
|
-
}
|
422
|
-
}
|
423
|
-
|
424
|
-
template <class Key, class T, class Compare>
|
425
|
-
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::GetMinEntry(
|
426
|
-
Entry* e) {
|
427
|
-
if (e != nullptr) {
|
428
|
-
while (e->left != nullptr) {
|
429
|
-
e = e->left;
|
430
|
-
}
|
431
|
-
}
|
432
|
-
return e;
|
433
|
-
}
|
434
|
-
|
435
|
-
template <class Key, class T, class Compare>
|
436
|
-
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateLeft(
|
437
|
-
Entry* e) {
|
438
|
-
Entry* rightChild = e->right;
|
439
|
-
Entry* rightLeftChild = rightChild->left;
|
440
|
-
rightChild->left = e;
|
441
|
-
e->right = rightLeftChild;
|
442
|
-
e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
|
443
|
-
rightChild->height = 1 + GPR_MAX(EntryHeight(rightChild->left),
|
444
|
-
EntryHeight(rightChild->right));
|
445
|
-
return rightChild;
|
446
|
-
}
|
447
|
-
|
448
|
-
template <class Key, class T, class Compare>
|
449
|
-
typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateRight(
|
450
|
-
Entry* e) {
|
451
|
-
Entry* leftChild = e->left;
|
452
|
-
Entry* leftRightChild = leftChild->right;
|
453
|
-
leftChild->right = e;
|
454
|
-
e->left = leftRightChild;
|
455
|
-
e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
|
456
|
-
leftChild->height =
|
457
|
-
1 + GPR_MAX(EntryHeight(leftChild->left), EntryHeight(leftChild->right));
|
458
|
-
return leftChild;
|
459
|
-
}
|
460
|
-
|
461
|
-
template <class Key, class T, class Compare>
|
462
|
-
typename Map<Key, T, Compare>::Entry*
|
463
|
-
Map<Key, T, Compare>::RebalanceTreeAfterInsertion(Entry* root,
|
464
|
-
const key_type& k) {
|
465
|
-
root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
|
466
|
-
int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
|
467
|
-
if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) > 0) {
|
468
|
-
return RotateRight(root);
|
469
|
-
}
|
470
|
-
if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) < 0) {
|
471
|
-
return RotateLeft(root);
|
472
|
-
}
|
473
|
-
if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) < 0) {
|
474
|
-
root->left = RotateLeft(root->left);
|
475
|
-
return RotateRight(root);
|
476
|
-
}
|
477
|
-
if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) > 0) {
|
478
|
-
root->right = RotateRight(root->right);
|
479
|
-
return RotateLeft(root);
|
480
|
-
}
|
481
|
-
return root;
|
482
|
-
}
|
483
|
-
|
484
|
-
template <class Key, class T, class Compare>
|
485
|
-
typename Map<Key, T, Compare>::Entry*
|
486
|
-
Map<Key, T, Compare>::RebalanceTreeAfterDeletion(Entry* root) {
|
487
|
-
root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
|
488
|
-
int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
|
489
|
-
if (heightDifference > 1) {
|
490
|
-
int leftHeightDifference =
|
491
|
-
EntryHeight(root->left->left) - EntryHeight(root->left->right);
|
492
|
-
if (leftHeightDifference < 0) {
|
493
|
-
root->left = RotateLeft(root->left);
|
494
|
-
}
|
495
|
-
return RotateRight(root);
|
496
|
-
}
|
497
|
-
if (heightDifference < -1) {
|
498
|
-
int rightHeightDifference =
|
499
|
-
EntryHeight(root->right->left) - EntryHeight(root->right->right);
|
500
|
-
if (rightHeightDifference > 0) {
|
501
|
-
root->right = RotateRight(root->right);
|
502
|
-
}
|
503
|
-
return RotateLeft(root);
|
504
|
-
}
|
505
|
-
return root;
|
506
|
-
}
|
507
|
-
|
508
|
-
template <class Key, class T, class Compare>
|
509
|
-
typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
|
510
|
-
typename Map<Key, T, Compare>::Entry*>
|
511
|
-
Map<Key, T, Compare>::RemoveRecursive(Entry* root, const key_type& k) {
|
512
|
-
Pair<iterator, Entry*> ret = MakePair(end(), root);
|
513
|
-
if (root == nullptr) return ret;
|
514
|
-
int comp = CompareKeys(root->pair.first, k);
|
515
|
-
if (comp > 0) {
|
516
|
-
ret = RemoveRecursive(root->left, k);
|
517
|
-
root->left = ret.second;
|
518
|
-
} else if (comp < 0) {
|
519
|
-
ret = RemoveRecursive(root->right, k);
|
520
|
-
root->right = ret.second;
|
521
|
-
} else {
|
522
|
-
Entry* entry;
|
523
|
-
Entry* successor = InOrderSuccessor(root);
|
524
|
-
if (root->left == nullptr) {
|
525
|
-
entry = root->right;
|
526
|
-
Delete(root);
|
527
|
-
return MakePair(iterator(this, successor), entry);
|
528
|
-
} else if (root->right == nullptr) {
|
529
|
-
entry = root->left;
|
530
|
-
Delete(root);
|
531
|
-
return MakePair(iterator(this, successor), entry);
|
532
|
-
} else {
|
533
|
-
entry = successor;
|
534
|
-
root->pair.swap(entry->pair);
|
535
|
-
ret = RemoveRecursive(root->right, entry->pair.first);
|
536
|
-
root->right = ret.second;
|
537
|
-
ret.first = iterator(this, root);
|
538
|
-
}
|
539
|
-
}
|
540
|
-
return MakePair(ret.first, RebalanceTreeAfterDeletion(root));
|
541
|
-
}
|
542
|
-
|
543
|
-
template <class Key, class T, class Compare>
|
544
|
-
int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
|
545
|
-
const key_type& rhs) {
|
546
|
-
// This is a workaround for "const key_compare compare;"
|
547
|
-
// because some versions of compilers cannot build this by requiring
|
548
|
-
// a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
|
549
|
-
key_compare compare_tmp;
|
550
|
-
const key_compare& compare = compare_tmp;
|
551
|
-
bool left_comparison = compare(lhs, rhs);
|
552
|
-
bool right_comparison = compare(rhs, lhs);
|
553
|
-
// Both values are equal
|
554
|
-
if (!left_comparison && !right_comparison) {
|
555
|
-
return 0;
|
556
|
-
}
|
557
|
-
return left_comparison ? -1 : 1;
|
558
|
-
}
|
559
|
-
|
560
|
-
#endif // GRPC_USE_CPP_STD_LIB
|
561
|
-
|
562
64
|
} // namespace grpc_core
|
563
65
|
|
564
66
|
#endif /* GRPC_CORE_LIB_GPRPP_MAP_H */
|