grpc 1.37.1 → 1.39.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 +96 -59
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +48 -0
- data/include/grpc/event_engine/event_engine.h +334 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +91 -0
- data/include/grpc/grpc.h +11 -4
- data/include/grpc/grpc_security.h +32 -0
- data/include/grpc/grpc_security_constants.h +15 -0
- data/include/grpc/impl/codegen/grpc_types.h +28 -13
- data/include/grpc/impl/codegen/port_platform.h +22 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- 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_event_engine.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +348 -199
- data/src/core/ext/xds/xds_api.h +21 -12
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/channelz.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/event_engine/endpoint_config.cc +46 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -0
- data/src/core/lib/event_engine/slice_allocator.cc +89 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +183 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +168 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
- data/src/core/lib/iomgr/event_engine/closure.h +33 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
- data/src/core/lib/iomgr/exec_ctx.cc +12 -4
- data/src/core/lib/iomgr/exec_ctx.h +4 -5
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
- data/src/core/lib/iomgr/executor/threadpool.h +2 -2
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +7 -7
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_uv.cc +3 -1
- data/src/core/lib/iomgr/pollset_uv.h +5 -1
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -5
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +8 -4
- data/src/core/lib/iomgr/resolve_address.h +12 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/sockaddr.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +15 -2
- data/src/core/lib/iomgr/socket_mutator.h +26 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +78 -73
- data/src/core/lib/iomgr/tcp_posix.h +8 -0
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
- data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer.h +6 -1
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/authorization/authorization_engine.h +44 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
- data/src/core/lib/security/authorization/evaluate_args.h +91 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +13 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +68 -69
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -2
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/init.h +10 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +21 -10
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +6 -4
- data/src/core/lib/transport/transport_op_string.cc +6 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/crypt/gsec.h +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +483 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +94 -46
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -0,0 +1,589 @@
|
|
1
|
+
// Copyright 2020 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef ABSL_STRINGS_INTERNAL_CORD_REP_RING_H_
|
16
|
+
#define ABSL_STRINGS_INTERNAL_CORD_REP_RING_H_
|
17
|
+
|
18
|
+
#include <cassert>
|
19
|
+
#include <cstddef>
|
20
|
+
#include <cstdint>
|
21
|
+
#include <iosfwd>
|
22
|
+
#include <limits>
|
23
|
+
#include <memory>
|
24
|
+
|
25
|
+
#include "absl/container/internal/layout.h"
|
26
|
+
#include "absl/strings/internal/cord_internal.h"
|
27
|
+
#include "absl/strings/internal/cord_rep_flat.h"
|
28
|
+
|
29
|
+
namespace absl {
|
30
|
+
ABSL_NAMESPACE_BEGIN
|
31
|
+
namespace cord_internal {
|
32
|
+
|
33
|
+
// See https://bugs.llvm.org/show_bug.cgi?id=48477
|
34
|
+
#ifdef __clang__
|
35
|
+
#pragma clang diagnostic push
|
36
|
+
#pragma clang diagnostic ignored "-Wshadow"
|
37
|
+
#if __has_warning("-Wshadow-field")
|
38
|
+
#pragma clang diagnostic ignored "-Wshadow-field"
|
39
|
+
#endif
|
40
|
+
#endif
|
41
|
+
|
42
|
+
// All operations modifying a ring buffer are implemented as static methods
|
43
|
+
// requiring a CordRepRing instance with a reference adopted by the method.
|
44
|
+
//
|
45
|
+
// The methods return the modified ring buffer, which may be equal to the input
|
46
|
+
// if the input was not shared, and having large enough capacity to accommodate
|
47
|
+
// any newly added node(s). Otherwise, a copy of the input rep with the new
|
48
|
+
// node(s) added is returned.
|
49
|
+
//
|
50
|
+
// Any modification on non shared ring buffers with enough capacity will then
|
51
|
+
// require minimum atomic operations. Caller should where possible provide
|
52
|
+
// reasonable `extra` hints for both anticipated extra `flat` byte space, as
|
53
|
+
// well as anticipated extra nodes required for complex operations.
|
54
|
+
//
|
55
|
+
// Example of code creating a ring buffer, adding some data to it,
|
56
|
+
// and discarding the buffer when done:
|
57
|
+
//
|
58
|
+
// void FunWithRings() {
|
59
|
+
// // Create ring with 3 flats
|
60
|
+
// CordRep* flat = CreateFlat("Hello");
|
61
|
+
// CordRepRing* ring = CordRepRing::Create(flat, 2);
|
62
|
+
// ring = CordRepRing::Append(ring, CreateFlat(" "));
|
63
|
+
// ring = CordRepRing::Append(ring, CreateFlat("world"));
|
64
|
+
// DoSomethingWithRing(ring);
|
65
|
+
// CordRep::Unref(ring);
|
66
|
+
// }
|
67
|
+
//
|
68
|
+
// Example of code Copying an existing ring buffer and modifying it:
|
69
|
+
//
|
70
|
+
// void MoreFunWithRings(CordRepRing* src) {
|
71
|
+
// CordRepRing* ring = CordRep::Ref(src)->ring();
|
72
|
+
// ring = CordRepRing::Append(ring, CreateFlat("Hello"));
|
73
|
+
// ring = CordRepRing::Append(ring, CreateFlat(" "));
|
74
|
+
// ring = CordRepRing::Append(ring, CreateFlat("world"));
|
75
|
+
// DoSomethingWithRing(ring);
|
76
|
+
// CordRep::Unref(ring);
|
77
|
+
// }
|
78
|
+
//
|
79
|
+
class CordRepRing : public CordRep {
|
80
|
+
public:
|
81
|
+
// `pos_type` represents a 'logical position'. A CordRepRing instance has a
|
82
|
+
// `begin_pos` (default 0), and each node inside the buffer will have an
|
83
|
+
// `end_pos` which is the `end_pos` of the previous node (or `begin_pos`) plus
|
84
|
+
// this node's length. The purpose is to allow for a binary search on this
|
85
|
+
// position, while allowing O(1) prepend and append operations.
|
86
|
+
using pos_type = size_t;
|
87
|
+
|
88
|
+
// `index_type` is the type for the `head`, `tail` and `capacity` indexes.
|
89
|
+
// Ring buffers are limited to having no more than four billion entries.
|
90
|
+
using index_type = uint32_t;
|
91
|
+
|
92
|
+
// `offset_type` is the type for the data offset inside a child rep's data.
|
93
|
+
using offset_type = uint32_t;
|
94
|
+
|
95
|
+
// Position holds the node index and relative offset into the node for
|
96
|
+
// some physical offset in the contained data as returned by the Find()
|
97
|
+
// and FindTail() methods.
|
98
|
+
struct Position {
|
99
|
+
index_type index;
|
100
|
+
size_t offset;
|
101
|
+
};
|
102
|
+
|
103
|
+
// The maximum # of child nodes that can be hosted inside a CordRepRing.
|
104
|
+
static constexpr size_t kMaxCapacity = (std::numeric_limits<uint32_t>::max)();
|
105
|
+
|
106
|
+
// CordRepring can not be default constructed, moved, copied or assigned.
|
107
|
+
CordRepRing() = delete;
|
108
|
+
CordRepRing(const CordRepRing&) = delete;
|
109
|
+
CordRepRing& operator=(const CordRepRing&) = delete;
|
110
|
+
|
111
|
+
// Returns true if this instance is valid, false if some or all of the
|
112
|
+
// invariants are broken. Intended for debug purposes only.
|
113
|
+
// `output` receives an explanation of the broken invariants.
|
114
|
+
bool IsValid(std::ostream& output) const;
|
115
|
+
|
116
|
+
// Returns the size in bytes for a CordRepRing with `capacity' entries.
|
117
|
+
static constexpr size_t AllocSize(size_t capacity);
|
118
|
+
|
119
|
+
// Returns the distance in bytes from `pos` to `end_pos`.
|
120
|
+
static constexpr size_t Distance(pos_type pos, pos_type end_pos);
|
121
|
+
|
122
|
+
// Creates a new ring buffer from the provided `rep`. Adopts a reference
|
123
|
+
// on `rep`. The returned ring buffer has a capacity of at least `extra + 1`
|
124
|
+
static CordRepRing* Create(CordRep* child, size_t extra = 0);
|
125
|
+
|
126
|
+
// `head`, `tail` and `capacity` indexes defining the ring buffer boundaries.
|
127
|
+
index_type head() const { return head_; }
|
128
|
+
index_type tail() const { return tail_; }
|
129
|
+
index_type capacity() const { return capacity_; }
|
130
|
+
|
131
|
+
// Returns the number of entries in this instance.
|
132
|
+
index_type entries() const { return entries(head_, tail_); }
|
133
|
+
|
134
|
+
// Returns the logical begin position of this instance.
|
135
|
+
pos_type begin_pos() const { return begin_pos_; }
|
136
|
+
|
137
|
+
// Returns the number of entries for a given head-tail range.
|
138
|
+
// Requires `head` and `tail` values to be less than `capacity()`.
|
139
|
+
index_type entries(index_type head, index_type tail) const {
|
140
|
+
assert(head < capacity_ && tail < capacity_);
|
141
|
+
return tail - head + ((tail > head) ? 0 : capacity_);
|
142
|
+
}
|
143
|
+
|
144
|
+
// Returns the logical end position of entry `index`.
|
145
|
+
pos_type const& entry_end_pos(index_type index) const {
|
146
|
+
assert(IsValidIndex(index));
|
147
|
+
return Layout::Partial().Pointer<0>(data_)[index];
|
148
|
+
}
|
149
|
+
|
150
|
+
// Returns the child pointer of entry `index`.
|
151
|
+
CordRep* const& entry_child(index_type index) const {
|
152
|
+
assert(IsValidIndex(index));
|
153
|
+
return Layout::Partial(capacity()).Pointer<1>(data_)[index];
|
154
|
+
}
|
155
|
+
|
156
|
+
// Returns the data offset of entry `index`
|
157
|
+
offset_type const& entry_data_offset(index_type index) const {
|
158
|
+
assert(IsValidIndex(index));
|
159
|
+
return Layout::Partial(capacity(), capacity()).Pointer<2>(data_)[index];
|
160
|
+
}
|
161
|
+
|
162
|
+
// Appends the provided child node to the `rep` instance.
|
163
|
+
// Adopts a reference from `rep` and `child` which may not be null.
|
164
|
+
// If the provided child is a FLAT or EXTERNAL node, or a SUBSTRING node
|
165
|
+
// containing a FLAT or EXTERNAL node, then flat or external the node is added
|
166
|
+
// 'as is', with an offset added for the SUBSTRING case.
|
167
|
+
// If the provided child is a RING or CONCAT tree, or a SUBSTRING of a RING or
|
168
|
+
// CONCAT tree, then all child nodes not excluded by any start offset or
|
169
|
+
// length values are added recursively.
|
170
|
+
static CordRepRing* Append(CordRepRing* rep, CordRep* child);
|
171
|
+
|
172
|
+
// Appends the provided string data to the `rep` instance.
|
173
|
+
// This function will attempt to utilize any remaining capacity in the last
|
174
|
+
// node of the input if that node is not shared (directly or indirectly), and
|
175
|
+
// of type FLAT. Remaining data will be added as one or more FLAT nodes.
|
176
|
+
// Any last node added to the ring buffer will be allocated with up to
|
177
|
+
// `extra` bytes of capacity for (anticipated) subsequent append actions.
|
178
|
+
static CordRepRing* Append(CordRepRing* rep, string_view data,
|
179
|
+
size_t extra = 0);
|
180
|
+
|
181
|
+
// Prepends the provided child node to the `rep` instance.
|
182
|
+
// Adopts a reference from `rep` and `child` which may not be null.
|
183
|
+
// If the provided child is a FLAT or EXTERNAL node, or a SUBSTRING node
|
184
|
+
// containing a FLAT or EXTERNAL node, then flat or external the node is
|
185
|
+
// prepended 'as is', with an optional offset added for the SUBSTRING case.
|
186
|
+
// If the provided child is a RING or CONCAT tree, or a SUBSTRING of a RING
|
187
|
+
// or CONCAT tree, then all child nodes not excluded by any start offset or
|
188
|
+
// length values are added recursively.
|
189
|
+
static CordRepRing* Prepend(CordRepRing* rep, CordRep* child);
|
190
|
+
|
191
|
+
// Prepends the provided string data to the `rep` instance.
|
192
|
+
// This function will attempt to utilize any remaining capacity in the first
|
193
|
+
// node of the input if that node is not shared (directly or indirectly), and
|
194
|
+
// of type FLAT. Remaining data will be added as one or more FLAT nodes.
|
195
|
+
// Any first node prepnded to the ring buffer will be allocated with up to
|
196
|
+
// `extra` bytes of capacity for (anticipated) subsequent prepend actions.
|
197
|
+
static CordRepRing* Prepend(CordRepRing* rep, string_view data,
|
198
|
+
size_t extra = 0);
|
199
|
+
|
200
|
+
// Returns a span referencing potentially unused capacity in the last node.
|
201
|
+
// The returned span may be empty if no such capacity is available, or if the
|
202
|
+
// current instance is shared. Else, a span of size `n <= size` is returned.
|
203
|
+
// If non empty, the ring buffer is adjusted to the new length, with the newly
|
204
|
+
// added capacity left uninitialized. Callers should assign a value to the
|
205
|
+
// entire span before any other operations on this instance.
|
206
|
+
Span<char> GetAppendBuffer(size_t size);
|
207
|
+
|
208
|
+
// Returns a span referencing potentially unused capacity in the first node.
|
209
|
+
// This function is identical to GetAppendBuffer except that it returns a span
|
210
|
+
// referencing up to `size` capacity directly before the existing data.
|
211
|
+
Span<char> GetPrependBuffer(size_t size);
|
212
|
+
|
213
|
+
// Returns a cord ring buffer containing `length` bytes of data starting at
|
214
|
+
// `offset`. If the input is not shared, this function will remove all head
|
215
|
+
// and tail child nodes outside of the requested range, and adjust the new
|
216
|
+
// head and tail nodes as required. If the input is shared, this function
|
217
|
+
// returns a new instance sharing some or all of the nodes from the input.
|
218
|
+
static CordRepRing* SubRing(CordRepRing* r, size_t offset, size_t length,
|
219
|
+
size_t extra = 0);
|
220
|
+
|
221
|
+
// Returns a cord ring buffer with the first `length` bytes removed.
|
222
|
+
// If the input is not shared, this function will remove all head child nodes
|
223
|
+
// fully inside the first `length` bytes, and adjust the new head as required.
|
224
|
+
// If the input is shared, this function returns a new instance sharing some
|
225
|
+
// or all of the nodes from the input.
|
226
|
+
static CordRepRing* RemoveSuffix(CordRepRing* r, size_t length,
|
227
|
+
size_t extra = 0);
|
228
|
+
|
229
|
+
// Returns a cord ring buffer with the last `length` bytes removed.
|
230
|
+
// If the input is not shared, this function will remove all head child nodes
|
231
|
+
// fully inside the first `length` bytes, and adjust the new head as required.
|
232
|
+
// If the input is shared, this function returns a new instance sharing some
|
233
|
+
// or all of the nodes from the input.
|
234
|
+
static CordRepRing* RemovePrefix(CordRepRing* r, size_t len,
|
235
|
+
size_t extra = 0);
|
236
|
+
|
237
|
+
// Returns the character at `offset`. Requires that `offset < length`.
|
238
|
+
char GetCharacter(size_t offset) const;
|
239
|
+
|
240
|
+
// Testing only: set capacity to requested capacity.
|
241
|
+
void SetCapacityForTesting(size_t capacity);
|
242
|
+
|
243
|
+
// Returns the CordRep data pointer for the provided CordRep.
|
244
|
+
// Requires that the provided `rep` is either a FLAT or EXTERNAL CordRep.
|
245
|
+
static const char* GetLeafData(const CordRep* rep);
|
246
|
+
|
247
|
+
// Returns the CordRep data pointer for the provided CordRep.
|
248
|
+
// Requires that `rep` is either a FLAT, EXTERNAL, or SUBSTRING CordRep.
|
249
|
+
static const char* GetRepData(const CordRep* rep);
|
250
|
+
|
251
|
+
// Advances the provided position, wrapping around capacity as needed.
|
252
|
+
// Requires `index` < capacity()
|
253
|
+
inline index_type advance(index_type index) const;
|
254
|
+
|
255
|
+
// Advances the provided position by 'n`, wrapping around capacity as needed.
|
256
|
+
// Requires `index` < capacity() and `n` <= capacity.
|
257
|
+
inline index_type advance(index_type index, index_type n) const;
|
258
|
+
|
259
|
+
// Retreats the provided position, wrapping around 0 as needed.
|
260
|
+
// Requires `index` < capacity()
|
261
|
+
inline index_type retreat(index_type index) const;
|
262
|
+
|
263
|
+
// Retreats the provided position by 'n', wrapping around 0 as needed.
|
264
|
+
// Requires `index` < capacity()
|
265
|
+
inline index_type retreat(index_type index, index_type n) const;
|
266
|
+
|
267
|
+
// Returns the logical begin position of entry `index`
|
268
|
+
pos_type const& entry_begin_pos(index_type index) const {
|
269
|
+
return (index == head_) ? begin_pos_ : entry_end_pos(retreat(index));
|
270
|
+
}
|
271
|
+
|
272
|
+
// Returns the physical start offset of entry `index`
|
273
|
+
size_t entry_start_offset(index_type index) const {
|
274
|
+
return Distance(begin_pos_, entry_begin_pos(index));
|
275
|
+
}
|
276
|
+
|
277
|
+
// Returns the physical end offset of entry `index`
|
278
|
+
size_t entry_end_offset(index_type index) const {
|
279
|
+
return Distance(begin_pos_, entry_end_pos(index));
|
280
|
+
}
|
281
|
+
|
282
|
+
// Returns the data length for entry `index`
|
283
|
+
size_t entry_length(index_type index) const {
|
284
|
+
return Distance(entry_begin_pos(index), entry_end_pos(index));
|
285
|
+
}
|
286
|
+
|
287
|
+
// Returns the data for entry `index`
|
288
|
+
absl::string_view entry_data(index_type index) const;
|
289
|
+
|
290
|
+
// Returns the position for `offset` as {index, prefix}. `index` holds the
|
291
|
+
// index of the entry at the specified offset and `prefix` holds the relative
|
292
|
+
// offset inside that entry.
|
293
|
+
// Requires `offset` < length.
|
294
|
+
//
|
295
|
+
// For example we can implement GetCharacter(offset) as:
|
296
|
+
// char GetCharacter(size_t offset) {
|
297
|
+
// Position pos = this->Find(offset);
|
298
|
+
// return this->entry_data(pos.pos)[pos.offset];
|
299
|
+
// }
|
300
|
+
inline Position Find(size_t offset) const;
|
301
|
+
|
302
|
+
// Find starting at `head`
|
303
|
+
inline Position Find(index_type head, size_t offset) const;
|
304
|
+
|
305
|
+
// Returns the tail position for `offset` as {tail index, suffix}.
|
306
|
+
// `tail index` holds holds the index of the entry holding the offset directly
|
307
|
+
// before 'offset` advanced by one. 'suffix` holds the relative offset from
|
308
|
+
// that relative offset in the entry to the end of the entry.
|
309
|
+
// For example, FindTail(length) will return {tail(), 0}, FindTail(length - 5)
|
310
|
+
// will return {retreat(tail), 5)} provided the preceding entry contains at
|
311
|
+
// least 5 bytes of data.
|
312
|
+
// Requires offset >= 1 && offset <= length.
|
313
|
+
//
|
314
|
+
// This function is very useful in functions that need to clip the end of some
|
315
|
+
// ring buffer such as 'RemovePrefix'.
|
316
|
+
// For example, we could implement RemovePrefix for non shared instances as:
|
317
|
+
// void RemoveSuffix(size_t n) {
|
318
|
+
// Position pos = FindTail(length - n);
|
319
|
+
// UnrefEntries(pos.pos, this->tail_);
|
320
|
+
// this->tail_ = pos.pos;
|
321
|
+
// entry(retreat(pos.pos)).end_pos -= pos.offset;
|
322
|
+
// }
|
323
|
+
inline Position FindTail(size_t offset) const;
|
324
|
+
|
325
|
+
// Find tail starting at `head`
|
326
|
+
inline Position FindTail(index_type head, size_t offset) const;
|
327
|
+
|
328
|
+
// Invokes f(index_type index) for each entry inside the range [head, tail>
|
329
|
+
template <typename F>
|
330
|
+
void ForEach(index_type head, index_type tail, F&& f) const {
|
331
|
+
index_type n1 = (tail > head) ? tail : capacity_;
|
332
|
+
for (index_type i = head; i < n1; ++i) f(i);
|
333
|
+
if (tail <= head) {
|
334
|
+
for (index_type i = 0; i < tail; ++i) f(i);
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
// Invokes f(index_type index) for each entry inside this instance.
|
339
|
+
template <typename F>
|
340
|
+
void ForEach(F&& f) const {
|
341
|
+
ForEach(head_, tail_, std::forward<F>(f));
|
342
|
+
}
|
343
|
+
|
344
|
+
// Dump this instance's data tp stream `s` in human readable format, excluding
|
345
|
+
// the actual data content itself. Intended for debug purposes only.
|
346
|
+
friend std::ostream& operator<<(std::ostream& s, const CordRepRing& rep);
|
347
|
+
|
348
|
+
private:
|
349
|
+
enum class AddMode { kAppend, kPrepend };
|
350
|
+
|
351
|
+
using Layout = container_internal::Layout<pos_type, CordRep*, offset_type>;
|
352
|
+
|
353
|
+
class Filler;
|
354
|
+
class Transaction;
|
355
|
+
class CreateTransaction;
|
356
|
+
|
357
|
+
static constexpr size_t kLayoutAlignment = Layout::Partial().Alignment();
|
358
|
+
|
359
|
+
// Creates a new CordRepRing.
|
360
|
+
explicit CordRepRing(index_type capacity) : capacity_(capacity) {}
|
361
|
+
|
362
|
+
// Returns true if `index` is a valid index into this instance.
|
363
|
+
bool IsValidIndex(index_type index) const;
|
364
|
+
|
365
|
+
// Debug use only: validates the provided CordRepRing invariants.
|
366
|
+
// Verification of all CordRepRing methods can be enabled by defining
|
367
|
+
// EXTRA_CORD_RING_VALIDATION, i.e.: `--copts=-DEXTRA_CORD_RING_VALIDATION`
|
368
|
+
// Verification is VERY expensive, so only do it for debugging purposes.
|
369
|
+
static CordRepRing* Validate(CordRepRing* rep, const char* file = nullptr,
|
370
|
+
int line = 0);
|
371
|
+
|
372
|
+
// Allocates a CordRepRing large enough to hold `capacity + extra' entries.
|
373
|
+
// The returned capacity may be larger if the allocated memory allows for it.
|
374
|
+
// The maximum capacity of a CordRepRing is capped at kMaxCapacity.
|
375
|
+
// Throws `std::length_error` if `capacity + extra' exceeds kMaxCapacity.
|
376
|
+
static CordRepRing* New(size_t capacity, size_t extra);
|
377
|
+
|
378
|
+
// Deallocates (but does not destroy) the provided ring buffer.
|
379
|
+
static void Delete(CordRepRing* rep);
|
380
|
+
|
381
|
+
// Destroys the provided ring buffer, decrementing the reference count of all
|
382
|
+
// contained child CordReps. The provided 1\`rep` should have a ref count of
|
383
|
+
// one (pre decrement destroy call observing `refcount.IsOne()`) or zero (post
|
384
|
+
// decrement destroy call observing `!refcount.Decrement()`).
|
385
|
+
static void Destroy(CordRepRing* rep);
|
386
|
+
|
387
|
+
// Returns a mutable reference to the logical end position array.
|
388
|
+
pos_type* entry_end_pos() {
|
389
|
+
return Layout::Partial().Pointer<0>(data_);
|
390
|
+
}
|
391
|
+
|
392
|
+
// Returns a mutable reference to the child pointer array.
|
393
|
+
CordRep** entry_child() {
|
394
|
+
return Layout::Partial(capacity()).Pointer<1>(data_);
|
395
|
+
}
|
396
|
+
|
397
|
+
// Returns a mutable reference to the data offset array.
|
398
|
+
offset_type* entry_data_offset() {
|
399
|
+
return Layout::Partial(capacity(), capacity()).Pointer<2>(data_);
|
400
|
+
}
|
401
|
+
|
402
|
+
// Find implementations for the non fast path 0 / length cases.
|
403
|
+
Position FindSlow(index_type head, size_t offset) const;
|
404
|
+
Position FindTailSlow(index_type head, size_t offset) const;
|
405
|
+
|
406
|
+
// Finds the index of the first node that is inside a reasonable distance
|
407
|
+
// of the node at `offset` from which we can continue with a linear search.
|
408
|
+
template <bool wrap>
|
409
|
+
index_type FindBinary(index_type head, index_type tail, size_t offset) const;
|
410
|
+
|
411
|
+
// Fills the current (initialized) instance from the provided source, copying
|
412
|
+
// entries [head, tail). Adds a reference to copied entries if `ref` is true.
|
413
|
+
template <bool ref>
|
414
|
+
void Fill(const CordRepRing* src, index_type head, index_type tail);
|
415
|
+
|
416
|
+
// Create a copy of 'rep', copying all entries [head, tail), allocating room
|
417
|
+
// for `extra` entries. Adds a reference on all copied entries.
|
418
|
+
static CordRepRing* Copy(CordRepRing* rep, index_type head, index_type tail,
|
419
|
+
size_t extra = 0);
|
420
|
+
|
421
|
+
// Returns a Mutable CordRepRing reference from `rep` with room for at least
|
422
|
+
// `extra` additional nodes. Adopts a reference count from `rep`.
|
423
|
+
// This function will return `rep` if, and only if:
|
424
|
+
// - rep.entries + extra <= rep.capacity
|
425
|
+
// - rep.refcount == 1
|
426
|
+
// Otherwise, this function will create a new copy of `rep` with additional
|
427
|
+
// capacity to satisfy `extra` extra nodes, and unref the old `rep` instance.
|
428
|
+
//
|
429
|
+
// If a new CordRepRing can not be allocated, or the new capacity would exceed
|
430
|
+
// the maxmimum capacity, then the input is consumed only, and an exception is
|
431
|
+
// thrown.
|
432
|
+
static CordRepRing* Mutable(CordRepRing* rep, size_t extra);
|
433
|
+
|
434
|
+
// Slow path for Append(CordRepRing* rep, CordRep* child). This function is
|
435
|
+
// exercised if the provided `child` in Append() is not a leaf node, i.e., a
|
436
|
+
// ring buffer or old (concat) cord tree.
|
437
|
+
static CordRepRing* AppendSlow(CordRepRing* rep, CordRep* child);
|
438
|
+
|
439
|
+
// Appends the provided leaf node. Requires `child` to be FLAT or EXTERNAL.
|
440
|
+
static CordRepRing* AppendLeaf(CordRepRing* rep, CordRep* child,
|
441
|
+
size_t offset, size_t length);
|
442
|
+
|
443
|
+
// Prepends the provided leaf node. Requires `child` to be FLAT or EXTERNAL.
|
444
|
+
static CordRepRing* PrependLeaf(CordRepRing* rep, CordRep* child,
|
445
|
+
size_t offset, size_t length);
|
446
|
+
|
447
|
+
// Slow path for Prepend(CordRepRing* rep, CordRep* child). This function is
|
448
|
+
// exercised if the provided `child` in Prepend() is not a leaf node, i.e., a
|
449
|
+
// ring buffer or old (concat) cord tree.
|
450
|
+
static CordRepRing* PrependSlow(CordRepRing* rep, CordRep* child);
|
451
|
+
|
452
|
+
// Slow path for Create(CordRep* child, size_t extra). This function is
|
453
|
+
// exercised if the provided `child` in Prepend() is not a leaf node, i.e., a
|
454
|
+
// ring buffer or old (concat) cord tree.
|
455
|
+
static CordRepRing* CreateSlow(CordRep* child, size_t extra);
|
456
|
+
|
457
|
+
// Creates a new ring buffer from the provided `child` leaf node. Requires
|
458
|
+
// `child` to be FLAT or EXTERNAL. on `rep`.
|
459
|
+
// The returned ring buffer has a capacity of at least `1 + extra`
|
460
|
+
static CordRepRing* CreateFromLeaf(CordRep* child, size_t offset,
|
461
|
+
size_t length, size_t extra);
|
462
|
+
|
463
|
+
// Appends or prepends (depending on AddMode) the ring buffer in `ring' to
|
464
|
+
// `rep` starting at `offset` with length `length`.
|
465
|
+
template <AddMode mode>
|
466
|
+
static CordRepRing* AddRing(CordRepRing* rep, CordRepRing* ring,
|
467
|
+
size_t offset, size_t length);
|
468
|
+
|
469
|
+
// Increases the data offset for entry `index` by `n`.
|
470
|
+
void AddDataOffset(index_type index, size_t n);
|
471
|
+
|
472
|
+
// Descreases the length for entry `index` by `n`.
|
473
|
+
void SubLength(index_type index, size_t n);
|
474
|
+
|
475
|
+
index_type head_;
|
476
|
+
index_type tail_;
|
477
|
+
index_type capacity_;
|
478
|
+
pos_type begin_pos_;
|
479
|
+
|
480
|
+
alignas(kLayoutAlignment) char data_[kLayoutAlignment];
|
481
|
+
|
482
|
+
friend struct CordRep;
|
483
|
+
};
|
484
|
+
|
485
|
+
constexpr size_t CordRepRing::AllocSize(size_t capacity) {
|
486
|
+
return sizeof(CordRepRing) - sizeof(data_) +
|
487
|
+
Layout(capacity, capacity, capacity).AllocSize();
|
488
|
+
}
|
489
|
+
|
490
|
+
inline constexpr size_t CordRepRing::Distance(pos_type pos, pos_type end_pos) {
|
491
|
+
return (end_pos - pos);
|
492
|
+
}
|
493
|
+
|
494
|
+
inline const char* CordRepRing::GetLeafData(const CordRep* rep) {
|
495
|
+
return rep->tag != EXTERNAL ? rep->flat()->Data() : rep->external()->base;
|
496
|
+
}
|
497
|
+
|
498
|
+
inline const char* CordRepRing::GetRepData(const CordRep* rep) {
|
499
|
+
if (rep->tag >= FLAT) return rep->flat()->Data();
|
500
|
+
if (rep->tag == EXTERNAL) return rep->external()->base;
|
501
|
+
return GetLeafData(rep->substring()->child) + rep->substring()->start;
|
502
|
+
}
|
503
|
+
|
504
|
+
inline CordRepRing::index_type CordRepRing::advance(index_type index) const {
|
505
|
+
assert(index < capacity_);
|
506
|
+
return ++index == capacity_ ? 0 : index;
|
507
|
+
}
|
508
|
+
|
509
|
+
inline CordRepRing::index_type CordRepRing::advance(index_type index,
|
510
|
+
index_type n) const {
|
511
|
+
assert(index < capacity_ && n <= capacity_);
|
512
|
+
return (index += n) >= capacity_ ? index - capacity_ : index;
|
513
|
+
}
|
514
|
+
|
515
|
+
inline CordRepRing::index_type CordRepRing::retreat(index_type index) const {
|
516
|
+
assert(index < capacity_);
|
517
|
+
return (index > 0 ? index : capacity_) - 1;
|
518
|
+
}
|
519
|
+
|
520
|
+
inline CordRepRing::index_type CordRepRing::retreat(index_type index,
|
521
|
+
index_type n) const {
|
522
|
+
assert(index < capacity_ && n <= capacity_);
|
523
|
+
return index >= n ? index - n : capacity_ - n + index;
|
524
|
+
}
|
525
|
+
|
526
|
+
inline absl::string_view CordRepRing::entry_data(index_type index) const {
|
527
|
+
size_t data_offset = entry_data_offset(index);
|
528
|
+
return {GetRepData(entry_child(index)) + data_offset, entry_length(index)};
|
529
|
+
}
|
530
|
+
|
531
|
+
inline bool CordRepRing::IsValidIndex(index_type index) const {
|
532
|
+
if (index >= capacity_) return false;
|
533
|
+
return (tail_ > head_) ? (index >= head_ && index < tail_)
|
534
|
+
: (index >= head_ || index < tail_);
|
535
|
+
}
|
536
|
+
|
537
|
+
#ifndef EXTRA_CORD_RING_VALIDATION
|
538
|
+
inline CordRepRing* CordRepRing::Validate(CordRepRing* rep,
|
539
|
+
const char* /*file*/, int /*line*/) {
|
540
|
+
return rep;
|
541
|
+
}
|
542
|
+
#endif
|
543
|
+
|
544
|
+
inline CordRepRing::Position CordRepRing::Find(size_t offset) const {
|
545
|
+
assert(offset < length);
|
546
|
+
return (offset == 0) ? Position{head_, 0} : FindSlow(head_, offset);
|
547
|
+
}
|
548
|
+
|
549
|
+
inline CordRepRing::Position CordRepRing::Find(index_type head,
|
550
|
+
size_t offset) const {
|
551
|
+
assert(offset < length);
|
552
|
+
assert(IsValidIndex(head) && offset >= entry_start_offset(head));
|
553
|
+
return (offset == 0) ? Position{head_, 0} : FindSlow(head, offset);
|
554
|
+
}
|
555
|
+
|
556
|
+
inline CordRepRing::Position CordRepRing::FindTail(size_t offset) const {
|
557
|
+
assert(offset > 0 && offset <= length);
|
558
|
+
return (offset == length) ? Position{tail_, 0} : FindTailSlow(head_, offset);
|
559
|
+
}
|
560
|
+
|
561
|
+
inline CordRepRing::Position CordRepRing::FindTail(index_type head,
|
562
|
+
size_t offset) const {
|
563
|
+
assert(offset > 0 && offset <= length);
|
564
|
+
assert(IsValidIndex(head) && offset >= entry_start_offset(head) + 1);
|
565
|
+
return (offset == length) ? Position{tail_, 0} : FindTailSlow(head, offset);
|
566
|
+
}
|
567
|
+
|
568
|
+
// Now that CordRepRing is defined, we can define CordRep's helper casts:
|
569
|
+
inline CordRepRing* CordRep::ring() {
|
570
|
+
assert(tag == RING);
|
571
|
+
return static_cast<CordRepRing*>(this);
|
572
|
+
}
|
573
|
+
|
574
|
+
inline const CordRepRing* CordRep::ring() const {
|
575
|
+
assert(tag == RING);
|
576
|
+
return static_cast<const CordRepRing*>(this);
|
577
|
+
}
|
578
|
+
|
579
|
+
std::ostream& operator<<(std::ostream& s, const CordRepRing& rep);
|
580
|
+
|
581
|
+
#ifdef __clang__
|
582
|
+
#pragma clang diagnostic pop
|
583
|
+
#endif
|
584
|
+
|
585
|
+
} // namespace cord_internal
|
586
|
+
ABSL_NAMESPACE_END
|
587
|
+
} // namespace absl
|
588
|
+
|
589
|
+
#endif // ABSL_STRINGS_INTERNAL_CORD_REP_RING_H_
|