grpc 1.55.0 → 1.56.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 +100 -68
- data/include/grpc/event_engine/event_engine.h +4 -3
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/json.h +218 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
- data/src/core/ext/filters/client_channel/client_channel.h +6 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
- data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
- data/src/core/ext/filters/client_channel/config_selector.h +9 -24
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
- data/src/core/ext/filters/client_channel/subchannel.h +3 -43
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -9
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
- data/src/core/ext/xds/xds_api.cc +9 -6
- data/src/core/ext/xds/xds_api.h +3 -2
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
- data/src/core/ext/xds/xds_client.cc +5 -4
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_cluster.cc +20 -19
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
- data/src/core/ext/xds/xds_common_types.cc +3 -1
- data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
- data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
- data/src/core/ext/xds/xds_http_filters.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
- data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
- data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
- data/src/core/ext/xds/xds_listener.cc +1 -0
- data/src/core/ext/xds/xds_route_config.cc +40 -3
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
- data/src/core/lib/avl/avl.h +5 -0
- data/src/core/lib/channel/channel_args.cc +80 -22
- data/src/core/lib/channel/channel_args.h +34 -1
- data/src/core/lib/channel/channel_trace.cc +16 -12
- data/src/core/lib/channel/channelz.cc +159 -132
- data/src/core/lib/channel/channelz.h +42 -35
- data/src/core/lib/channel/channelz_registry.cc +23 -20
- data/src/core/lib/channel/connected_channel.cc +17 -6
- data/src/core/lib/channel/promise_based_filter.cc +0 -4
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression_internal.cc +2 -5
- data/src/core/lib/config/config_vars.cc +20 -18
- data/src/core/lib/config/config_vars.h +4 -4
- data/src/core/lib/config/load_config.cc +13 -0
- data/src/core/lib/config/load_config.h +6 -0
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/stats_data.h +1 -1
- data/src/core/lib/debug/trace.cc +24 -55
- data/src/core/lib/debug/trace.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/default_event_engine.cc +13 -1
- data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
- data/src/core/lib/event_engine/poller.h +2 -2
- data/src/core/lib/event_engine/posix.h +4 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/shim.cc +7 -1
- data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
- data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
- data/src/core/lib/event_engine/windows/iocp.cc +4 -3
- data/src/core/lib/event_engine/windows/iocp.h +3 -3
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/win_socket.h +4 -4
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
- data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
- data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +38 -7
- data/src/core/lib/experiments/config.h +16 -0
- data/src/core/lib/experiments/experiments.cc +67 -20
- data/src/core/lib/experiments/experiments.h +27 -21
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gprpp/crash.cc +10 -0
- data/src/core/lib/gprpp/crash.h +3 -0
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +29 -6
- data/src/core/lib/gprpp/time.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
- data/src/core/lib/iomgr/ev_apple.cc +12 -12
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
- data/src/core/lib/iomgr/iocp_windows.cc +24 -3
- data/src/core/lib/iomgr/iocp_windows.h +11 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
- data/src/core/lib/iomgr/socket_windows.cc +61 -7
- data/src/core/lib/iomgr/socket_windows.h +9 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
- data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
- data/src/core/lib/json/json.h +2 -166
- data/src/core/lib/json/json_object_loader.cc +8 -9
- data/src/core/lib/json/json_object_loader.h +25 -18
- data/src/core/lib/json/json_reader.cc +13 -6
- data/src/core/lib/json/json_util.cc +6 -11
- data/src/core/lib/json/json_writer.cc +7 -8
- data/src/core/lib/load_balancing/lb_policy.h +13 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/matchers/matchers.h +2 -1
- data/src/core/lib/promise/activity.cc +5 -0
- data/src/core/lib/promise/activity.h +10 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/party.cc +31 -13
- data/src/core/lib/promise/party.h +11 -2
- data/src/core/lib/promise/pipe.h +9 -2
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/sleep.cc +2 -1
- data/src/core/lib/resolver/server_address.cc +0 -8
- data/src/core/lib/resolver/server_address.h +0 -6
- data/src/core/lib/resource_quota/memory_quota.cc +7 -7
- data/src/core/lib/resource_quota/memory_quota.h +1 -2
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
- data/src/core/lib/security/authorization/rbac_policy.h +19 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
- data/src/core/lib/security/util/json_util.cc +1 -0
- data/src/core/lib/service_config/service_config_call_data.h +49 -20
- data/src/core/lib/service_config/service_config_impl.cc +2 -1
- data/src/core/lib/surface/call.cc +38 -23
- data/src/core/lib/surface/completion_queue.cc +6 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/batch_builder.cc +15 -12
- data/src/core/lib/transport/batch_builder.h +39 -35
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +8 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- metadata +48 -12
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology.
|
3
2
|
*
|
4
3
|
* Permission to use, copy, modify, and distribute this
|
@@ -39,30 +38,6 @@
|
|
39
38
|
#include "ares_nowarn.h"
|
40
39
|
#include "ares_private.h"
|
41
40
|
|
42
|
-
#ifdef WATT32
|
43
|
-
#undef WIN32
|
44
|
-
#endif
|
45
|
-
|
46
|
-
struct host_query {
|
47
|
-
/* Arguments passed to ares_gethostbyname() */
|
48
|
-
ares_channel channel;
|
49
|
-
char *name;
|
50
|
-
ares_host_callback callback;
|
51
|
-
void *arg;
|
52
|
-
int sent_family; /* this family is what was is being used */
|
53
|
-
int want_family; /* this family is what is asked for in the API */
|
54
|
-
const char *remaining_lookups;
|
55
|
-
int timeouts;
|
56
|
-
};
|
57
|
-
|
58
|
-
static void next_lookup(struct host_query *hquery, int status_code);
|
59
|
-
static void host_callback(void *arg, int status, int timeouts,
|
60
|
-
unsigned char *abuf, int alen);
|
61
|
-
static void end_hquery(struct host_query *hquery, int status,
|
62
|
-
struct hostent *host);
|
63
|
-
static int fake_hostent(const char *name, int family,
|
64
|
-
ares_host_callback callback, void *arg);
|
65
|
-
static int file_lookup(const char *name, int family, struct hostent **host);
|
66
41
|
static void sort_addresses(struct hostent *host,
|
67
42
|
const struct apattern *sortlist, int nsort);
|
68
43
|
static void sort6_addresses(struct hostent *host,
|
@@ -72,252 +47,182 @@ static int get_address_index(const struct in_addr *addr,
|
|
72
47
|
static int get6_address_index(const struct ares_in6_addr *addr,
|
73
48
|
const struct apattern *sortlist, int nsort);
|
74
49
|
|
75
|
-
|
76
|
-
|
50
|
+
struct host_query {
|
51
|
+
ares_host_callback callback;
|
52
|
+
void *arg;
|
53
|
+
ares_channel channel;
|
54
|
+
};
|
55
|
+
|
56
|
+
static void ares_gethostbyname_callback(void *arg, int status, int timeouts,
|
57
|
+
struct ares_addrinfo *result)
|
77
58
|
{
|
78
|
-
struct
|
79
|
-
|
80
|
-
/* Right now we only know how to look up Internet addresses - and unspec
|
81
|
-
means try both basically. */
|
82
|
-
switch (family) {
|
83
|
-
case AF_INET:
|
84
|
-
case AF_INET6:
|
85
|
-
case AF_UNSPEC:
|
86
|
-
break;
|
87
|
-
default:
|
88
|
-
callback(arg, ARES_ENOTIMP, 0, NULL);
|
89
|
-
return;
|
90
|
-
}
|
59
|
+
struct hostent *hostent = NULL;
|
60
|
+
struct host_query *ghbn_arg = arg;
|
91
61
|
|
92
|
-
|
93
|
-
if (ares__is_onion_domain(name))
|
62
|
+
if (status == ARES_SUCCESS)
|
94
63
|
{
|
95
|
-
|
96
|
-
|
64
|
+
status = ares__addrinfo2hostent(result, AF_UNSPEC, &hostent);
|
65
|
+
}
|
66
|
+
|
67
|
+
/* addrinfo2hostent will only return ENODATA if there are no addresses _and_
|
68
|
+
* no cname/aliases. However, gethostbyname will return ENODATA even if there
|
69
|
+
* is cname/alias data */
|
70
|
+
if (status == ARES_SUCCESS && hostent &&
|
71
|
+
(!hostent->h_addr_list || !hostent->h_addr_list[0]))
|
72
|
+
{
|
73
|
+
status = ARES_ENODATA;
|
74
|
+
}
|
75
|
+
|
76
|
+
if (status == ARES_SUCCESS && ghbn_arg->channel->nsort && hostent)
|
77
|
+
{
|
78
|
+
if (hostent->h_addrtype == AF_INET6)
|
79
|
+
sort6_addresses(hostent, ghbn_arg->channel->sortlist,
|
80
|
+
ghbn_arg->channel->nsort);
|
81
|
+
if (hostent->h_addrtype == AF_INET)
|
82
|
+
sort_addresses(hostent, ghbn_arg->channel->sortlist,
|
83
|
+
ghbn_arg->channel->nsort);
|
97
84
|
}
|
98
85
|
|
99
|
-
|
86
|
+
ghbn_arg->callback(ghbn_arg->arg, status, timeouts, hostent);
|
87
|
+
|
88
|
+
ares_freeaddrinfo(result);
|
89
|
+
ares_free(ghbn_arg);
|
90
|
+
ares_free_hostent(hostent);
|
91
|
+
}
|
92
|
+
|
93
|
+
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
94
|
+
ares_host_callback callback, void *arg)
|
95
|
+
{
|
96
|
+
const struct ares_addrinfo_hints hints = { ARES_AI_CANONNAME, family, 0, 0 };
|
97
|
+
struct host_query *ghbn_arg;
|
98
|
+
|
99
|
+
if (!callback)
|
100
100
|
return;
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
if (!hquery)
|
102
|
+
ghbn_arg = ares_malloc(sizeof(*ghbn_arg));
|
103
|
+
if (!ghbn_arg)
|
105
104
|
{
|
106
105
|
callback(arg, ARES_ENOMEM, 0, NULL);
|
107
106
|
return;
|
108
107
|
}
|
109
|
-
hquery->channel = channel;
|
110
|
-
hquery->name = ares_strdup(name);
|
111
|
-
hquery->want_family = family;
|
112
|
-
hquery->sent_family = -1; /* nothing is sent yet */
|
113
|
-
if (!hquery->name) {
|
114
|
-
ares_free(hquery);
|
115
|
-
callback(arg, ARES_ENOMEM, 0, NULL);
|
116
|
-
return;
|
117
|
-
}
|
118
|
-
hquery->callback = callback;
|
119
|
-
hquery->arg = arg;
|
120
|
-
hquery->remaining_lookups = channel->lookups;
|
121
|
-
hquery->timeouts = 0;
|
122
108
|
|
123
|
-
|
124
|
-
|
109
|
+
ghbn_arg->callback=callback;
|
110
|
+
ghbn_arg->arg=arg;
|
111
|
+
ghbn_arg->channel=channel;
|
112
|
+
|
113
|
+
ares_getaddrinfo(channel, name, NULL, &hints, ares_gethostbyname_callback,
|
114
|
+
ghbn_arg);
|
125
115
|
}
|
126
116
|
|
127
|
-
|
117
|
+
|
118
|
+
static void sort_addresses(struct hostent *host,
|
119
|
+
const struct apattern *sortlist, int nsort)
|
128
120
|
{
|
129
|
-
|
130
|
-
|
131
|
-
int status = status_code;
|
121
|
+
struct in_addr a1, a2;
|
122
|
+
int i1, i2, ind1, ind2;
|
132
123
|
|
133
|
-
|
124
|
+
/* This is a simple insertion sort, not optimized at all. i1 walks
|
125
|
+
* through the address list, with the loop invariant that everything
|
126
|
+
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
|
127
|
+
* back through the list (via i2) until it is in sorted order.
|
128
|
+
*/
|
129
|
+
for (i1 = 0; host->h_addr_list[i1]; i1++)
|
134
130
|
{
|
135
|
-
|
131
|
+
memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
|
132
|
+
ind1 = get_address_index(&a1, sortlist, nsort);
|
133
|
+
for (i2 = i1 - 1; i2 >= 0; i2--)
|
136
134
|
{
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
/* if inet6 or unspec, start out with AAAA */
|
143
|
-
hquery->sent_family = AF_INET6;
|
144
|
-
ares_search(hquery->channel, hquery->name, C_IN, T_AAAA,
|
145
|
-
host_callback, hquery);
|
146
|
-
}
|
147
|
-
else {
|
148
|
-
hquery->sent_family = AF_INET;
|
149
|
-
ares_search(hquery->channel, hquery->name, C_IN, T_A,
|
150
|
-
host_callback, hquery);
|
151
|
-
}
|
152
|
-
return;
|
153
|
-
|
154
|
-
case 'f':
|
155
|
-
/* Host file lookup */
|
156
|
-
status = file_lookup(hquery->name, hquery->want_family, &host);
|
157
|
-
|
158
|
-
/* this status check below previously checked for !ARES_ENOTFOUND,
|
159
|
-
but we should not assume that this single error code is the one
|
160
|
-
that can occur, as that is in fact no longer the case */
|
161
|
-
if (status == ARES_SUCCESS)
|
162
|
-
{
|
163
|
-
end_hquery(hquery, status, host);
|
164
|
-
return;
|
165
|
-
}
|
166
|
-
status = status_code; /* Use original status code */
|
167
|
-
break;
|
135
|
+
memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
|
136
|
+
ind2 = get_address_index(&a2, sortlist, nsort);
|
137
|
+
if (ind2 <= ind1)
|
138
|
+
break;
|
139
|
+
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
|
168
140
|
}
|
141
|
+
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
|
169
142
|
}
|
170
|
-
end_hquery(hquery, status, NULL);
|
171
143
|
}
|
172
144
|
|
173
|
-
|
174
|
-
|
145
|
+
/* Find the first entry in sortlist which matches addr. Return nsort
|
146
|
+
* if none of them match.
|
147
|
+
*/
|
148
|
+
static int get_address_index(const struct in_addr *addr,
|
149
|
+
const struct apattern *sortlist,
|
150
|
+
int nsort)
|
175
151
|
{
|
176
|
-
|
177
|
-
ares_channel channel = hquery->channel;
|
178
|
-
struct hostent *host = NULL;
|
152
|
+
int i;
|
179
153
|
|
180
|
-
|
181
|
-
if (status == ARES_SUCCESS)
|
154
|
+
for (i = 0; i < nsort; i++)
|
182
155
|
{
|
183
|
-
if (
|
156
|
+
if (sortlist[i].family != AF_INET)
|
157
|
+
continue;
|
158
|
+
if (sortlist[i].type == PATTERN_MASK)
|
184
159
|
{
|
185
|
-
|
186
|
-
|
187
|
-
|
160
|
+
if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
|
161
|
+
== sortlist[i].addrV4.s_addr)
|
162
|
+
break;
|
188
163
|
}
|
189
|
-
else
|
164
|
+
else
|
190
165
|
{
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
hquery->want_family == AF_UNSPEC) {
|
195
|
-
/* The query returned something but either there were no AAAA
|
196
|
-
records (e.g. just CNAME) or the response was malformed. Try
|
197
|
-
looking up A instead. */
|
198
|
-
if (host)
|
199
|
-
ares_free_hostent(host);
|
200
|
-
hquery->sent_family = AF_INET;
|
201
|
-
ares_search(hquery->channel, hquery->name, C_IN, T_A,
|
202
|
-
host_callback, hquery);
|
203
|
-
return;
|
204
|
-
}
|
205
|
-
if (host && channel->nsort)
|
206
|
-
sort6_addresses(host, channel->sortlist, channel->nsort);
|
166
|
+
if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
|
167
|
+
sortlist[i].mask.bits))
|
168
|
+
break;
|
207
169
|
}
|
208
|
-
if (status == ARES_SUCCESS && host && host->h_addr_list[0] == NULL)
|
209
|
-
{
|
210
|
-
/* The query returned something but had no A/AAAA record
|
211
|
-
(even after potentially retrying AAAA with A)
|
212
|
-
so we should treat this as an error */
|
213
|
-
status = ARES_ENODATA;
|
214
|
-
}
|
215
|
-
end_hquery(hquery, status, host);
|
216
|
-
}
|
217
|
-
else if ((status == ARES_ENODATA || status == ARES_EBADRESP ||
|
218
|
-
status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 &&
|
219
|
-
hquery->want_family == AF_UNSPEC))
|
220
|
-
{
|
221
|
-
/* The AAAA query yielded no useful result. Now look up an A instead. */
|
222
|
-
hquery->sent_family = AF_INET;
|
223
|
-
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
224
|
-
hquery);
|
225
170
|
}
|
226
|
-
|
227
|
-
end_hquery(hquery, status, NULL);
|
228
|
-
else
|
229
|
-
next_lookup(hquery, status);
|
171
|
+
return i;
|
230
172
|
}
|
231
173
|
|
232
|
-
static void
|
233
|
-
|
174
|
+
static void sort6_addresses(struct hostent *host,
|
175
|
+
const struct apattern *sortlist, int nsort)
|
234
176
|
{
|
235
|
-
|
236
|
-
|
237
|
-
ares_free_hostent(host);
|
238
|
-
ares_free(hquery->name);
|
239
|
-
ares_free(hquery);
|
240
|
-
}
|
177
|
+
struct ares_in6_addr a1, a2;
|
178
|
+
int i1, i2, ind1, ind2;
|
241
179
|
|
242
|
-
/*
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
struct hostent hostent;
|
249
|
-
char *aliases[1] = { NULL };
|
250
|
-
char *addrs[2];
|
251
|
-
int result = 0;
|
252
|
-
struct in_addr in;
|
253
|
-
struct ares_in6_addr in6;
|
254
|
-
|
255
|
-
if (family == AF_INET || family == AF_UNSPEC)
|
180
|
+
/* This is a simple insertion sort, not optimized at all. i1 walks
|
181
|
+
* through the address list, with the loop invariant that everything
|
182
|
+
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
|
183
|
+
* back through the list (via i2) until it is in sorted order.
|
184
|
+
*/
|
185
|
+
for (i1 = 0; host->h_addr_list[i1]; i1++)
|
256
186
|
{
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
for (p = name; *p; p++)
|
187
|
+
memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
|
188
|
+
ind1 = get6_address_index(&a1, sortlist, nsort);
|
189
|
+
for (i2 = i1 - 1; i2 >= 0; i2--)
|
261
190
|
{
|
262
|
-
|
263
|
-
|
191
|
+
memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
|
192
|
+
ind2 = get6_address_index(&a2, sortlist, nsort);
|
193
|
+
if (ind2 <= ind1)
|
264
194
|
break;
|
265
|
-
|
266
|
-
numdots++;
|
267
|
-
}
|
195
|
+
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
|
268
196
|
}
|
269
|
-
|
270
|
-
/* if we don't have 3 dots, it is illegal
|
271
|
-
* (although inet_pton doesn't think so).
|
272
|
-
*/
|
273
|
-
if (numdots != 3 || !valid) {
|
274
|
-
result = 0;
|
275
|
-
} else {
|
276
|
-
result = (ares_inet_pton(AF_INET, name, &in) < 1 ? 0 : 1);
|
277
|
-
}
|
278
|
-
|
279
|
-
/*
|
280
|
-
* Set address family in case of failure,
|
281
|
-
* as we will try to convert it later afterwards
|
282
|
-
*/
|
283
|
-
family = result ? AF_INET : AF_INET6;
|
197
|
+
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
|
284
198
|
}
|
285
|
-
|
286
|
-
result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1);
|
199
|
+
}
|
287
200
|
|
288
|
-
|
289
|
-
|
201
|
+
/* Find the first entry in sortlist which matches addr. Return nsort
|
202
|
+
* if none of them match.
|
203
|
+
*/
|
204
|
+
static int get6_address_index(const struct ares_in6_addr *addr,
|
205
|
+
const struct apattern *sortlist,
|
206
|
+
int nsort)
|
207
|
+
{
|
208
|
+
int i;
|
290
209
|
|
291
|
-
|
292
|
-
{
|
293
|
-
hostent.h_length = (int)sizeof(struct in_addr);
|
294
|
-
addrs[0] = (char *)∈
|
295
|
-
}
|
296
|
-
else if (family == AF_INET6)
|
297
|
-
{
|
298
|
-
hostent.h_length = (int)sizeof(struct ares_in6_addr);
|
299
|
-
addrs[0] = (char *)&in6;
|
300
|
-
}
|
301
|
-
/* Duplicate the name, to avoid a constness violation. */
|
302
|
-
hostent.h_name = ares_strdup(name);
|
303
|
-
if (!hostent.h_name)
|
210
|
+
for (i = 0; i < nsort; i++)
|
304
211
|
{
|
305
|
-
|
306
|
-
|
212
|
+
if (sortlist[i].family != AF_INET6)
|
213
|
+
continue;
|
214
|
+
if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits))
|
215
|
+
break;
|
307
216
|
}
|
217
|
+
return i;
|
218
|
+
}
|
308
219
|
|
309
|
-
/* Fill in the rest of the host structure and terminate the query. */
|
310
|
-
addrs[1] = NULL;
|
311
|
-
hostent.h_aliases = aliases;
|
312
|
-
hostent.h_addrtype = aresx_sitoss(family);
|
313
|
-
hostent.h_addr_list = addrs;
|
314
|
-
callback(arg, ARES_SUCCESS, 0, &hostent);
|
315
220
|
|
316
|
-
ares_free((char *)(hostent.h_name));
|
317
|
-
return 1;
|
318
|
-
}
|
319
221
|
|
320
|
-
|
222
|
+
static int file_lookup(const char *name, int family, struct hostent **host);
|
223
|
+
|
224
|
+
/* I really have no idea why this is exposed as a public function, but since
|
225
|
+
* it is, we can't kill this legacy function. */
|
321
226
|
int ares_gethostbyname_file(ares_channel channel, const char *name,
|
322
227
|
int family, struct hostent **host)
|
323
228
|
{
|
@@ -431,104 +336,3 @@ static int file_lookup(const char *name, int family, struct hostent **host)
|
|
431
336
|
return status;
|
432
337
|
}
|
433
338
|
|
434
|
-
static void sort_addresses(struct hostent *host,
|
435
|
-
const struct apattern *sortlist, int nsort)
|
436
|
-
{
|
437
|
-
struct in_addr a1, a2;
|
438
|
-
int i1, i2, ind1, ind2;
|
439
|
-
|
440
|
-
/* This is a simple insertion sort, not optimized at all. i1 walks
|
441
|
-
* through the address list, with the loop invariant that everything
|
442
|
-
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
|
443
|
-
* back through the list (via i2) until it is in sorted order.
|
444
|
-
*/
|
445
|
-
for (i1 = 0; host->h_addr_list[i1]; i1++)
|
446
|
-
{
|
447
|
-
memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
|
448
|
-
ind1 = get_address_index(&a1, sortlist, nsort);
|
449
|
-
for (i2 = i1 - 1; i2 >= 0; i2--)
|
450
|
-
{
|
451
|
-
memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
|
452
|
-
ind2 = get_address_index(&a2, sortlist, nsort);
|
453
|
-
if (ind2 <= ind1)
|
454
|
-
break;
|
455
|
-
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
|
456
|
-
}
|
457
|
-
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
|
458
|
-
}
|
459
|
-
}
|
460
|
-
|
461
|
-
/* Find the first entry in sortlist which matches addr. Return nsort
|
462
|
-
* if none of them match.
|
463
|
-
*/
|
464
|
-
static int get_address_index(const struct in_addr *addr,
|
465
|
-
const struct apattern *sortlist,
|
466
|
-
int nsort)
|
467
|
-
{
|
468
|
-
int i;
|
469
|
-
|
470
|
-
for (i = 0; i < nsort; i++)
|
471
|
-
{
|
472
|
-
if (sortlist[i].family != AF_INET)
|
473
|
-
continue;
|
474
|
-
if (sortlist[i].type == PATTERN_MASK)
|
475
|
-
{
|
476
|
-
if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
|
477
|
-
== sortlist[i].addrV4.s_addr)
|
478
|
-
break;
|
479
|
-
}
|
480
|
-
else
|
481
|
-
{
|
482
|
-
if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
|
483
|
-
sortlist[i].mask.bits))
|
484
|
-
break;
|
485
|
-
}
|
486
|
-
}
|
487
|
-
return i;
|
488
|
-
}
|
489
|
-
|
490
|
-
static void sort6_addresses(struct hostent *host,
|
491
|
-
const struct apattern *sortlist, int nsort)
|
492
|
-
{
|
493
|
-
struct ares_in6_addr a1, a2;
|
494
|
-
int i1, i2, ind1, ind2;
|
495
|
-
|
496
|
-
/* This is a simple insertion sort, not optimized at all. i1 walks
|
497
|
-
* through the address list, with the loop invariant that everything
|
498
|
-
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
|
499
|
-
* back through the list (via i2) until it is in sorted order.
|
500
|
-
*/
|
501
|
-
for (i1 = 0; host->h_addr_list[i1]; i1++)
|
502
|
-
{
|
503
|
-
memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
|
504
|
-
ind1 = get6_address_index(&a1, sortlist, nsort);
|
505
|
-
for (i2 = i1 - 1; i2 >= 0; i2--)
|
506
|
-
{
|
507
|
-
memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
|
508
|
-
ind2 = get6_address_index(&a2, sortlist, nsort);
|
509
|
-
if (ind2 <= ind1)
|
510
|
-
break;
|
511
|
-
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
|
512
|
-
}
|
513
|
-
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
|
514
|
-
}
|
515
|
-
}
|
516
|
-
|
517
|
-
/* Find the first entry in sortlist which matches addr. Return nsort
|
518
|
-
* if none of them match.
|
519
|
-
*/
|
520
|
-
static int get6_address_index(const struct ares_in6_addr *addr,
|
521
|
-
const struct apattern *sortlist,
|
522
|
-
int nsort)
|
523
|
-
{
|
524
|
-
int i;
|
525
|
-
|
526
|
-
for (i = 0; i < nsort; i++)
|
527
|
-
{
|
528
|
-
if (sortlist[i].family != AF_INET6)
|
529
|
-
continue;
|
530
|
-
if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits))
|
531
|
-
break;
|
532
|
-
}
|
533
|
-
return i;
|
534
|
-
}
|