grpc 1.43.1 → 1.44.0.pre2
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 +84 -64
- data/include/grpc/grpc_security.h +10 -0
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +6 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
- data/src/core/ext/filters/client_channel/client_channel.h +8 -8
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- 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/pick_first/pick_first.cc +43 -29
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
- 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 +82 -73
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
- data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
- data/src/core/ext/filters/client_channel/subchannel.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
- data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
- data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
- data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
- data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
- data/src/core/ext/xds/upb_utils.h +65 -0
- data/src/core/ext/xds/xds_api.cc +81 -3458
- data/src/core/ext/xds/xds_api.h +56 -611
- data/src/core/ext/xds/xds_bootstrap.cc +189 -125
- data/src/core/ext/xds/xds_bootstrap.h +20 -15
- data/src/core/ext/xds/xds_certificate_provider.h +1 -0
- data/src/core/ext/xds/xds_channel_creds.cc +108 -0
- data/src/core/ext/xds/xds_channel_creds.h +50 -0
- data/src/core/ext/xds/xds_client.cc +584 -994
- data/src/core/ext/xds/xds_client.h +78 -135
- data/src/core/ext/xds/xds_cluster.cc +451 -0
- data/src/core/ext/xds/xds_cluster.h +111 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +110 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_filters.cc +5 -0
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1036 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +993 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +11 -8
- data/src/core/ext/xds/xds_routing.h +8 -5
- data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
- data/src/core/lib/address_utils/parse_address.cc +20 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/backoff/backoff.cc +4 -30
- data/src/core/lib/backoff/backoff.h +3 -3
- data/src/core/lib/channel/channel_args.cc +0 -1
- data/src/core/lib/channel/channel_stack.cc +8 -0
- data/src/core/lib/channel/channel_stack.h +1 -1
- data/src/core/lib/channel/channel_stack_builder.cc +5 -9
- data/src/core/lib/channel/channel_stack_builder.h +4 -7
- data/src/core/lib/channel/channelz.cc +1 -0
- data/src/core/lib/compression/compression.cc +19 -111
- data/src/core/lib/compression/compression_internal.cc +142 -202
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/gpr/useful.h +4 -0
- data/src/core/lib/gprpp/bitset.h +7 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/status_helper.cc +20 -28
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +11 -0
- data/src/core/lib/http/httpcli.cc +37 -46
- data/src/core/lib/http/httpcli.h +3 -15
- data/src/core/lib/iomgr/call_combiner.cc +15 -4
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/error.cc +2 -0
- data/src/core/lib/iomgr/error.h +3 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/exec_ctx.cc +22 -9
- data/src/core/lib/iomgr/executor.cc +10 -1
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
- data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.h +49 -20
- data/src/core/lib/promise/detail/status.h +5 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.h +0 -1
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
- data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
- data/src/core/lib/security/authorization/evaluate_args.h +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +170 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
- data/src/core/lib/security/credentials/credentials.h +10 -20
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +0 -4
- data/src/core/lib/security/security_connector/security_connector.h +5 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
- data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
- data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
- data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
- data/src/core/{ext → lib}/service_config/service_config.h +4 -4
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
- data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
- data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
- data/src/core/lib/slice/slice.cc +3 -1
- data/src/core/lib/slice/slice.h +43 -13
- data/src/core/lib/slice/slice_intern.cc +3 -101
- data/src/core/lib/slice/slice_internal.h +1 -2
- data/src/core/lib/slice/slice_refcount.h +4 -13
- data/src/core/lib/slice/slice_refcount_base.h +0 -16
- data/src/core/lib/surface/call.cc +140 -382
- data/src/core/lib/surface/call.h +4 -4
- data/src/core/lib/surface/channel.cc +42 -44
- data/src/core/lib/surface/channel.h +4 -4
- data/src/core/lib/surface/init.cc +0 -2
- data/src/core/lib/surface/lame_client.cc +0 -1
- data/src/core/lib/surface/server.cc +12 -29
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.h +14 -0
- data/src/core/lib/transport/metadata_batch.h +799 -717
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +95 -92
- data/src/core/lib/transport/timeout_encoding.cc +200 -66
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +6 -39
- data/src/core/lib/uri/uri_parser.cc +223 -53
- data/src/core/lib/uri/uri_parser.h +36 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
- data/src/core/tsi/ssl_transport_security.cc +53 -13
- data/src/core/tsi/ssl_transport_security.h +18 -6
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +149 -77
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -140
- data/src/core/lib/compression/compression_args.h +0 -58
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/slice/static_slice.cc +0 -377
- data/src/core/lib/slice/static_slice.h +0 -300
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/metadata_batch.cc +0 -99
- data/src/core/lib/transport/static_metadata.cc +0 -1032
- data/src/core/lib/transport/static_metadata.h +0 -322
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
@@ -23,61 +23,64 @@
|
|
23
23
|
|
24
24
|
#include <stddef.h>
|
25
25
|
|
26
|
-
#include "
|
27
|
-
|
28
|
-
#ifdef GRPC_WINSOCK_SOCKET
|
29
|
-
#include <ws2tcpip.h>
|
30
|
-
#endif
|
31
|
-
|
32
|
-
#if defined(GRPC_POSIX_SOCKET) || defined(GRPC_CFSTREAM)
|
33
|
-
#include <sys/socket.h>
|
34
|
-
#endif
|
26
|
+
#include "absl/status/statusor.h"
|
35
27
|
|
28
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
36
29
|
#include "src/core/lib/iomgr/pollset_set.h"
|
30
|
+
#include "src/core/lib/iomgr/port.h"
|
31
|
+
#include "src/core/lib/iomgr/resolved_address.h"
|
37
32
|
|
38
33
|
#define GRPC_MAX_SOCKADDR_SIZE 128
|
39
34
|
|
40
|
-
struct grpc_resolved_address {
|
41
|
-
char addr[GRPC_MAX_SOCKADDR_SIZE];
|
42
|
-
socklen_t len;
|
43
|
-
};
|
44
|
-
struct grpc_resolved_addresses {
|
45
|
-
size_t naddrs;
|
46
|
-
grpc_resolved_address* addrs;
|
47
|
-
};
|
48
|
-
|
49
35
|
namespace grpc_core {
|
50
36
|
extern const char* kDefaultSecurePort;
|
51
37
|
constexpr int kDefaultSecurePortInt = 443;
|
52
|
-
} // namespace grpc_core
|
53
|
-
|
54
|
-
typedef struct grpc_address_resolver_vtable {
|
55
|
-
void (*resolve_address)(const char* addr, const char* default_port,
|
56
|
-
grpc_pollset_set* interested_parties,
|
57
|
-
grpc_closure* on_done,
|
58
|
-
grpc_resolved_addresses** addresses);
|
59
|
-
grpc_error_handle (*blocking_resolve_address)(
|
60
|
-
const char* name, const char* default_port,
|
61
|
-
grpc_resolved_addresses** addresses);
|
62
|
-
} grpc_address_resolver_vtable;
|
63
38
|
|
64
|
-
|
39
|
+
// A singleton class used for async and blocking DNS resolution
|
40
|
+
class DNSResolver {
|
41
|
+
public:
|
42
|
+
// Tracks a single asynchronous DNS resolution attempt. The DNS
|
43
|
+
// resolution should be arranged to be cancelled as soon as possible
|
44
|
+
// when Orphan is called.
|
45
|
+
class Request : public InternallyRefCounted<Request> {
|
46
|
+
public:
|
47
|
+
// Begins async DNS resolution
|
48
|
+
virtual void Start() = 0;
|
49
|
+
};
|
50
|
+
|
51
|
+
virtual ~DNSResolver() {}
|
52
|
+
|
53
|
+
// Asynchronously resolve name. Use \a default_port if a port isn't designated
|
54
|
+
// in \a name, otherwise use the port in \a name. On completion, \a on_done is
|
55
|
+
// invoked with the result.
|
56
|
+
//
|
57
|
+
// Note for implementations: calls may acquire locks in \a on_done which
|
58
|
+
// were previously held while calling Request::Start(). Therefore,
|
59
|
+
// implementations must not invoke \a on_done inline from the call to
|
60
|
+
// Request::Start(). The DNSCallbackExecCtxScheduler utility may help address
|
61
|
+
// this.
|
62
|
+
virtual OrphanablePtr<Request> ResolveName(
|
63
|
+
absl::string_view name, absl::string_view default_port,
|
64
|
+
grpc_pollset_set* interested_parties,
|
65
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
66
|
+
on_done) GRPC_MUST_USE_RESULT = 0;
|
67
|
+
|
68
|
+
// Resolve name in a blocking fashion. Use \a default_port if a port isn't
|
69
|
+
// designated in \a name, otherwise use the port in \a name.
|
70
|
+
virtual absl::StatusOr<std::vector<grpc_resolved_address>>
|
71
|
+
ResolveNameBlocking(absl::string_view name,
|
72
|
+
absl::string_view default_port) = 0;
|
73
|
+
};
|
65
74
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
void
|
70
|
-
grpc_pollset_set* interested_parties,
|
71
|
-
grpc_closure* on_done,
|
72
|
-
grpc_resolved_addresses** addresses);
|
75
|
+
// Override the active DNS resolver which should be used for all DNS
|
76
|
+
// resolution in gRPC. Note this should only be used during library
|
77
|
+
// initialization or within tests.
|
78
|
+
void SetDNSResolver(DNSResolver* resolver);
|
73
79
|
|
74
|
-
|
75
|
-
|
80
|
+
// Get the singleton DNS resolver instance which should be used for all
|
81
|
+
// DNS resolution in gRPC.
|
82
|
+
DNSResolver* GetDNSResolver();
|
76
83
|
|
77
|
-
|
78
|
-
result must be freed with grpc_resolved_addresses_destroy. */
|
79
|
-
grpc_error_handle grpc_blocking_resolve_address(
|
80
|
-
const char* name, const char* default_port,
|
81
|
-
grpc_resolved_addresses** addresses);
|
84
|
+
} // namespace grpc_core
|
82
85
|
|
83
86
|
#endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_H */
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -22,6 +20,7 @@
|
|
22
20
|
|
23
21
|
#include <string.h>
|
24
22
|
|
23
|
+
#include <cstdio>
|
25
24
|
#include <string>
|
26
25
|
|
27
26
|
#include "absl/strings/str_format.h"
|
@@ -35,135 +34,158 @@
|
|
35
34
|
#include "src/core/lib/gprpp/host_port.h"
|
36
35
|
#include "src/core/lib/iomgr/iomgr_custom.h"
|
37
36
|
#include "src/core/lib/iomgr/port.h"
|
37
|
+
#include "src/core/lib/iomgr/resolve_address_impl.h"
|
38
|
+
#include "src/core/lib/transport/error_utils.h"
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
std::string host;
|
43
|
-
std::string port;
|
44
|
-
};
|
45
|
-
|
46
|
-
static grpc_custom_resolver_vtable* resolve_address_vtable = nullptr;
|
47
|
-
|
48
|
-
static int retry_named_port_failure(grpc_custom_resolver* r,
|
49
|
-
grpc_resolved_addresses** res) {
|
50
|
-
// This loop is copied from resolve_address_posix.c
|
51
|
-
const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
|
52
|
-
for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
|
53
|
-
if (r->port == svc[i][0]) {
|
54
|
-
r->port = svc[i][1];
|
55
|
-
if (res) {
|
56
|
-
grpc_error_handle error = resolve_address_vtable->resolve(
|
57
|
-
r->host.c_str(), r->port.c_str(), res);
|
58
|
-
if (error != GRPC_ERROR_NONE) {
|
59
|
-
GRPC_ERROR_UNREF(error);
|
60
|
-
return 0;
|
61
|
-
}
|
62
|
-
} else {
|
63
|
-
resolve_address_vtable->resolve_async(r, r->host.c_str(),
|
64
|
-
r->port.c_str());
|
65
|
-
}
|
66
|
-
return 1;
|
67
|
-
}
|
40
|
+
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addresses) {
|
41
|
+
if (addresses != nullptr) {
|
42
|
+
gpr_free(addresses->addrs);
|
68
43
|
}
|
69
|
-
|
44
|
+
gpr_free(addresses);
|
70
45
|
}
|
71
46
|
|
72
|
-
void grpc_custom_resolve_callback(grpc_custom_resolver*
|
47
|
+
void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,
|
73
48
|
grpc_resolved_addresses* result,
|
74
49
|
grpc_error_handle error) {
|
75
50
|
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
|
76
51
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
77
52
|
grpc_core::ExecCtx exec_ctx;
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
}
|
83
|
-
|
84
|
-
|
53
|
+
grpc_core::CustomDNSResolver::Request* request =
|
54
|
+
grpc_core::CustomDNSResolver::Request::FromC(resolver);
|
55
|
+
if (error != GRPC_ERROR_NONE) {
|
56
|
+
request->ResolveCallback(grpc_error_to_absl_status(error));
|
57
|
+
} else {
|
58
|
+
std::vector<grpc_resolved_address> addresses;
|
59
|
+
for (size_t i = 0; i < result->naddrs; i++) {
|
60
|
+
addresses.push_back(result->addrs[i]);
|
61
|
+
}
|
62
|
+
request->ResolveCallback(std::move(addresses));
|
63
|
+
grpc_resolved_addresses_destroy(result);
|
85
64
|
}
|
86
|
-
|
65
|
+
GRPC_ERROR_UNREF(error);
|
87
66
|
}
|
88
67
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
68
|
+
namespace grpc_core {
|
69
|
+
|
70
|
+
namespace {
|
71
|
+
|
72
|
+
absl::Status TrySplitHostPort(absl::string_view name,
|
73
|
+
absl::string_view default_port, std::string* host,
|
74
|
+
std::string* port) {
|
75
|
+
// parse name, splitting it into host and port parts
|
76
|
+
SplitHostPort(name, host, port);
|
95
77
|
if (host->empty()) {
|
96
|
-
return
|
78
|
+
return absl::UnknownError(
|
97
79
|
absl::StrFormat("unparseable host:port: '%s'", name));
|
98
80
|
}
|
99
81
|
if (port->empty()) {
|
100
82
|
// TODO(murgatroid99): add tests for this case
|
101
83
|
if (default_port == nullptr) {
|
102
|
-
return
|
103
|
-
|
84
|
+
return absl::UnknownError(absl::StrFormat("no port in name '%s'", name));
|
85
|
+
}
|
86
|
+
*port = std::string(default_port);
|
87
|
+
}
|
88
|
+
return absl::OkStatus();
|
89
|
+
}
|
90
|
+
|
91
|
+
absl::StatusOr<std::string> NamedPortToNumeric(absl::string_view named_port) {
|
92
|
+
if (named_port == "http") {
|
93
|
+
return "80";
|
94
|
+
} else if (named_port == "https") {
|
95
|
+
return "443";
|
96
|
+
} else {
|
97
|
+
return absl::UnknownError(absl::StrCat("unknown named port: ", named_port));
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
} // namespace
|
102
|
+
|
103
|
+
void CustomDNSResolver::Request::ResolveCallback(
|
104
|
+
absl::StatusOr<std::vector<grpc_resolved_address>> result) {
|
105
|
+
if (!result.ok()) {
|
106
|
+
auto numeric_port_or = NamedPortToNumeric(port_);
|
107
|
+
if (numeric_port_or.ok()) {
|
108
|
+
port_ = *numeric_port_or;
|
109
|
+
resolve_address_vtable_->resolve_async(c_ptr(), host_.c_str(),
|
110
|
+
port_.c_str());
|
111
|
+
// keep holding ref for active resolution
|
112
|
+
return;
|
104
113
|
}
|
105
|
-
*port = default_port;
|
106
114
|
}
|
107
|
-
|
115
|
+
// since we can't guarantee that we're not being called inline from
|
116
|
+
// Start(), run the callback on the ExecCtx.
|
117
|
+
new DNSCallbackExecCtxScheduler(std::move(on_done_), std::move(result));
|
118
|
+
Unref();
|
108
119
|
}
|
109
120
|
|
110
|
-
|
111
|
-
|
112
|
-
|
121
|
+
namespace {
|
122
|
+
CustomDNSResolver* g_custom_dns_resolver;
|
123
|
+
} // namespace
|
124
|
+
|
125
|
+
// Creates the global custom resolver with the specified vtable.
|
126
|
+
void CustomDNSResolver::Create(grpc_custom_resolver_vtable* vtable) {
|
127
|
+
if (g_custom_dns_resolver != nullptr) return;
|
128
|
+
g_custom_dns_resolver = new CustomDNSResolver(vtable);
|
129
|
+
}
|
130
|
+
|
131
|
+
// Gets the singleton instance.
|
132
|
+
CustomDNSResolver* CustomDNSResolver::Get() { return g_custom_dns_resolver; }
|
133
|
+
|
134
|
+
absl::StatusOr<std::vector<grpc_resolved_address>>
|
135
|
+
CustomDNSResolver::ResolveNameBlocking(absl::string_view name,
|
136
|
+
absl::string_view default_port) {
|
113
137
|
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
|
114
138
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
139
|
+
std::string host;
|
140
|
+
std::string port;
|
141
|
+
absl::Status parse_status =
|
142
|
+
TrySplitHostPort(name, default_port, &host, &port);
|
143
|
+
if (!parse_status.ok()) {
|
144
|
+
return parse_status;
|
120
145
|
}
|
121
146
|
|
122
|
-
|
147
|
+
// Call getaddrinfo
|
148
|
+
ExecCtx* curr = ExecCtx::Get();
|
149
|
+
ExecCtx::Set(nullptr);
|
123
150
|
grpc_resolved_addresses* addrs;
|
124
|
-
|
125
|
-
|
126
|
-
err = resolve_address_vtable->resolve(resolver.host.c_str(),
|
127
|
-
resolver.port.c_str(), &addrs);
|
151
|
+
grpc_error_handle err =
|
152
|
+
resolve_address_vtable_->resolve(host.c_str(), port.c_str(), &addrs);
|
128
153
|
if (err != GRPC_ERROR_NONE) {
|
129
|
-
|
154
|
+
auto numeric_port_or = NamedPortToNumeric(port);
|
155
|
+
if (numeric_port_or.ok()) {
|
156
|
+
port = *numeric_port_or;
|
130
157
|
GRPC_ERROR_UNREF(err);
|
131
|
-
err =
|
158
|
+
err =
|
159
|
+
resolve_address_vtable_->resolve(host.c_str(), port.c_str(), &addrs);
|
132
160
|
}
|
133
161
|
}
|
134
|
-
|
162
|
+
ExecCtx::Set(curr);
|
135
163
|
if (err == GRPC_ERROR_NONE) {
|
136
|
-
|
164
|
+
GPR_ASSERT(addrs != nullptr);
|
165
|
+
std::vector<grpc_resolved_address> result;
|
166
|
+
for (size_t i = 0; i < addrs->naddrs; i++) {
|
167
|
+
result.push_back(addrs->addrs[i]);
|
168
|
+
}
|
169
|
+
grpc_resolved_addresses_destroy(addrs);
|
170
|
+
return result;
|
137
171
|
}
|
138
|
-
|
172
|
+
auto error_result = grpc_error_to_absl_status(err);
|
173
|
+
GRPC_ERROR_UNREF(err);
|
174
|
+
return error_result;
|
139
175
|
}
|
140
176
|
|
141
|
-
|
142
|
-
grpc_pollset_set* /*interested_parties*/,
|
143
|
-
grpc_closure* on_done,
|
144
|
-
grpc_resolved_addresses** addrs) {
|
177
|
+
void CustomDNSResolver::Request::Start() {
|
145
178
|
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
179
|
+
absl::Status parse_status =
|
180
|
+
TrySplitHostPort(name_, default_port_, &host_, &port_);
|
181
|
+
if (!parse_status.ok()) {
|
182
|
+
new DNSCallbackExecCtxScheduler(std::move(on_done_),
|
183
|
+
std::move(parse_status));
|
151
184
|
return;
|
152
185
|
}
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
r->host = std::move(host);
|
157
|
-
r->port = std::move(port);
|
158
|
-
|
159
|
-
/* Call getaddrinfo */
|
160
|
-
resolve_address_vtable->resolve_async(r, r->host.c_str(), r->port.c_str());
|
186
|
+
// Call getaddrinfo
|
187
|
+
Ref().release(); // ref held by resolution
|
188
|
+
resolve_address_vtable_->resolve_async(c_ptr(), host_.c_str(), port_.c_str());
|
161
189
|
}
|
162
190
|
|
163
|
-
|
164
|
-
resolve_address_impl, blocking_resolve_address_impl};
|
165
|
-
|
166
|
-
void grpc_custom_resolver_init(grpc_custom_resolver_vtable* impl) {
|
167
|
-
resolve_address_vtable = impl;
|
168
|
-
grpc_set_resolver_impl(&custom_resolver_vtable);
|
169
|
-
}
|
191
|
+
} // namespace grpc_core
|
@@ -1,30 +1,43 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#ifndef GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_CUSTOM_H
|
20
18
|
#define GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_CUSTOM_H
|
21
19
|
|
22
20
|
#include <grpc/support/port_platform.h>
|
23
21
|
|
22
|
+
#include <grpc/support/sync.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/gprpp/cpp_impl_of.h"
|
24
25
|
#include "src/core/lib/iomgr/port.h"
|
25
26
|
#include "src/core/lib/iomgr/resolve_address.h"
|
26
27
|
#include "src/core/lib/iomgr/sockaddr.h"
|
27
28
|
|
29
|
+
// User-configured custom DNS resolution APIs
|
30
|
+
|
31
|
+
// TODO(apolcyn): This type could be deleted as a part of converting
|
32
|
+
// this grpc_custom_resolver API to C++.
|
33
|
+
struct grpc_resolved_addresses {
|
34
|
+
size_t naddrs;
|
35
|
+
grpc_resolved_address* addrs;
|
36
|
+
};
|
37
|
+
|
38
|
+
// Destroy resolved addresses
|
39
|
+
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addresses);
|
40
|
+
|
28
41
|
typedef struct grpc_custom_resolver grpc_custom_resolver;
|
29
42
|
|
30
43
|
typedef struct grpc_custom_resolver_vtable {
|
@@ -34,11 +47,80 @@ typedef struct grpc_custom_resolver_vtable {
|
|
34
47
|
const char* port);
|
35
48
|
} grpc_custom_resolver_vtable;
|
36
49
|
|
50
|
+
// TODO(apolcyn): as a part of converting this API to C++,
|
51
|
+
// callers of \a grpc_custom_resolve_callback could instead just invoke
|
52
|
+
// CustomDNSResolver::Request::ResolveCallback directly.
|
37
53
|
void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,
|
38
54
|
grpc_resolved_addresses* result,
|
39
55
|
grpc_error_handle error);
|
40
56
|
|
41
|
-
|
42
|
-
|
57
|
+
// Internal APIs
|
58
|
+
|
59
|
+
namespace grpc_core {
|
60
|
+
|
61
|
+
class CustomDNSResolver : public DNSResolver {
|
62
|
+
public:
|
63
|
+
class Request : public DNSResolver::Request,
|
64
|
+
public CppImplOf<Request, grpc_custom_resolver> {
|
65
|
+
public:
|
66
|
+
Request(
|
67
|
+
absl::string_view name, absl::string_view default_port,
|
68
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
69
|
+
on_done,
|
70
|
+
const grpc_custom_resolver_vtable* resolve_address_vtable)
|
71
|
+
: name_(name),
|
72
|
+
default_port_(default_port),
|
73
|
+
on_done_(std::move(on_done)),
|
74
|
+
resolve_address_vtable_(resolve_address_vtable) {}
|
75
|
+
|
76
|
+
// Starts the resolution
|
77
|
+
void Start() override;
|
78
|
+
|
79
|
+
// This is a no-op for the native resolver. Note
|
80
|
+
// that no I/O polling is required for the resolution to finish.
|
81
|
+
void Orphan() override { Unref(); }
|
82
|
+
|
83
|
+
// Continues async resolution with the results passed first in to
|
84
|
+
// grpc_custom_resolve_callback.
|
85
|
+
void ResolveCallback(
|
86
|
+
absl::StatusOr<std::vector<grpc_resolved_address>> result);
|
87
|
+
|
88
|
+
private:
|
89
|
+
const std::string name_;
|
90
|
+
const std::string default_port_;
|
91
|
+
std::string host_;
|
92
|
+
std::string port_;
|
93
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
94
|
+
on_done_;
|
95
|
+
// user-defined DNS methods
|
96
|
+
const grpc_custom_resolver_vtable* resolve_address_vtable_;
|
97
|
+
};
|
98
|
+
|
99
|
+
// Creates the global custom resolver with the specified vtable.
|
100
|
+
static void Create(grpc_custom_resolver_vtable* vtable);
|
101
|
+
|
102
|
+
// Gets the singleton instance.
|
103
|
+
static CustomDNSResolver* Get();
|
104
|
+
|
105
|
+
explicit CustomDNSResolver(const grpc_custom_resolver_vtable* vtable)
|
106
|
+
: resolve_address_vtable_(vtable) {}
|
107
|
+
|
108
|
+
OrphanablePtr<DNSResolver::Request> ResolveName(
|
109
|
+
absl::string_view name, absl::string_view default_port,
|
110
|
+
grpc_pollset_set* /* interested_parties */,
|
111
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
112
|
+
on_done) override {
|
113
|
+
return MakeOrphanable<Request>(name, default_port, std::move(on_done),
|
114
|
+
resolve_address_vtable_);
|
115
|
+
}
|
116
|
+
|
117
|
+
absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
|
118
|
+
absl::string_view name, absl::string_view default_port) override;
|
119
|
+
|
120
|
+
private:
|
121
|
+
// user-defined DNS methods
|
122
|
+
const grpc_custom_resolver_vtable* resolve_address_vtable_;
|
123
|
+
};
|
43
124
|
|
125
|
+
} // namespace grpc_core
|
44
126
|
#endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_CUSTOM_H */
|
@@ -0,0 +1,59 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2015 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_IMPL_H
|
18
|
+
#define GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_IMPL_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <stddef.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/iomgr/port.h"
|
25
|
+
#include "src/core/lib/iomgr/resolve_address.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
// A fire and forget class used by DNSResolver::Request implementations to
|
30
|
+
// schedule DNS resolution callbacks on the ExecCtx, which is frequently
|
31
|
+
// necessary to avoid lock inversion related problems.
|
32
|
+
class DNSCallbackExecCtxScheduler {
|
33
|
+
public:
|
34
|
+
DNSCallbackExecCtxScheduler(
|
35
|
+
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
36
|
+
on_done,
|
37
|
+
absl::StatusOr<std::vector<grpc_resolved_address>> param)
|
38
|
+
: on_done_(std::move(on_done)), param_(std::move(param)) {
|
39
|
+
GRPC_CLOSURE_INIT(&closure_, RunCallback, this, grpc_schedule_on_exec_ctx);
|
40
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
41
|
+
}
|
42
|
+
|
43
|
+
private:
|
44
|
+
static void RunCallback(void* arg, grpc_error_handle /* error */) {
|
45
|
+
DNSCallbackExecCtxScheduler* self =
|
46
|
+
static_cast<DNSCallbackExecCtxScheduler*>(arg);
|
47
|
+
self->on_done_(std::move(self->param_));
|
48
|
+
delete self;
|
49
|
+
}
|
50
|
+
|
51
|
+
const std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
52
|
+
on_done_;
|
53
|
+
absl::StatusOr<std::vector<grpc_resolved_address>> param_;
|
54
|
+
grpc_closure closure_;
|
55
|
+
};
|
56
|
+
|
57
|
+
} // namespace grpc_core
|
58
|
+
|
59
|
+
#endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_IMPL_H */
|