grpc 1.18.0 → 1.22.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 +4731 -7404
- data/etc/roots.pem +146 -0
- data/include/grpc/grpc.h +11 -6
- data/include/grpc/grpc_security.h +297 -4
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +30 -7
- data/include/grpc/impl/codegen/port_platform.h +88 -7
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/slice.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
- data/src/core/ext/filters/client_channel/client_channel.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
- data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
- data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
- data/src/core/ext/filters/client_channel/resolver.cc +54 -1
- data/src/core/ext/filters/client_channel/resolver.h +52 -23
- data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -54
- data/src/core/ext/filters/client_channel/server_address.h +1 -13
- data/src/core/ext/filters/client_channel/service_config.cc +329 -0
- data/src/core/ext/filters/client_channel/service_config.h +205 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
- data/src/core/ext/filters/client_channel/subchannel.h +295 -128
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
- data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
- data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
- data/src/core/lib/channel/channel_args.cc +2 -101
- data/src/core/lib/channel/channel_args.h +3 -37
- data/src/core/lib/channel/channel_stack.h +10 -6
- data/src/core/lib/channel/channel_trace.cc +4 -4
- data/src/core/lib/channel/channel_trace.h +4 -4
- data/src/core/lib/channel/channelz.cc +168 -38
- data/src/core/lib/channel/channelz.h +40 -44
- data/src/core/lib/channel/channelz_registry.cc +75 -107
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +151 -218
- data/src/core/lib/channel/handshaker.h +110 -101
- data/src/core/lib/channel/handshaker_factory.h +11 -19
- data/src/core/lib/channel/handshaker_registry.cc +67 -51
- data/src/core/lib/channel/handshaker_registry.h +21 -16
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +14 -9
- data/src/core/lib/compression/compression_args.cc +127 -0
- data/src/core/lib/compression/compression_args.h +55 -0
- data/src/core/lib/compression/compression_internal.cc +16 -12
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/debug/trace.cc +13 -7
- data/src/core/lib/debug/trace.h +14 -1
- data/src/core/lib/gpr/arena.h +13 -9
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +6 -1
- data/src/core/lib/gpr/env_posix.cc +5 -0
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_posix.cc +2 -1
- data/src/core/lib/gpr/string.cc +20 -7
- data/src/core/lib/gpr/string.h +10 -3
- data/src/core/lib/gpr/sync_posix.cc +65 -4
- data/src/core/lib/gpr/time.cc +8 -0
- data/src/core/lib/gpr/time_posix.cc +21 -2
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +121 -0
- data/src/core/lib/gprpp/atomic.h +75 -5
- data/src/core/lib/gprpp/fork.cc +13 -32
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +436 -0
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/optional.h +48 -0
- data/src/core/lib/gprpp/orphanable.h +6 -5
- data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
- data/src/core/lib/gprpp/ref_counted.h +36 -17
- data/src/core/lib/gprpp/sync.h +126 -0
- data/src/core/lib/gprpp/thd.h +42 -7
- data/src/core/lib/gprpp/thd_posix.cc +31 -13
- data/src/core/lib/gprpp/thd_windows.cc +47 -34
- data/src/core/lib/http/httpcli.cc +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +13 -15
- data/src/core/lib/http/parser.cc +3 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/buffer_list.cc +182 -24
- data/src/core/lib/iomgr/buffer_list.h +72 -10
- data/src/core/lib/iomgr/call_combiner.cc +84 -90
- data/src/core/lib/iomgr/call_combiner.h +75 -82
- data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
- data/src/core/lib/iomgr/cfstream_handle.h +86 -0
- data/src/core/lib/iomgr/combiner.cc +11 -3
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +3 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +21 -17
- data/src/core/lib/iomgr/error.h +36 -6
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
- data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
- data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
- data/src/core/lib/iomgr/ev_posix.cc +29 -19
- data/src/core/lib/iomgr/ev_posix.h +19 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -0
- data/src/core/lib/iomgr/exec_ctx.h +137 -8
- data/src/core/lib/iomgr/executor.cc +147 -95
- data/src/core/lib/iomgr/executor.h +55 -49
- data/src/core/lib/iomgr/fork_posix.cc +6 -5
- data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.h +105 -3
- data/src/core/lib/iomgr/iomgr.cc +20 -13
- data/src/core/lib/iomgr/iomgr.h +15 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
- data/src/core/lib/iomgr/iomgr_internal.h +12 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -4
- data/src/core/lib/iomgr/port.h +35 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
- data/src/core/lib/iomgr/resource_quota.cc +40 -37
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
- data/src/core/lib/iomgr/socket_windows.cc +19 -0
- data/src/core/lib/iomgr/socket_windows.h +8 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +10 -14
- data/src/core/lib/iomgr/tcp_posix.cc +256 -140
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
- data/src/core/lib/iomgr/tcp_uv.cc +5 -7
- data/src/core/lib/iomgr/tcp_windows.cc +8 -14
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -16
- data/src/core/lib/iomgr/timer_manager.cc +20 -11
- data/src/core/lib/iomgr/udp_server.cc +8 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- data/src/core/lib/json/json.cc +1 -4
- data/src/core/lib/profiling/basic_timers.cc +10 -4
- data/src/core/lib/security/context/security_context.cc +6 -7
- data/src/core/lib/security/context/security_context.h +3 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
- data/src/core/lib/security/credentials/credentials.h +9 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/security_connector.cc +0 -1
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
- data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
- data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
- data/src/core/lib/security/transport/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
- data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
- data/src/core/lib/security/transport/security_handshaker.cc +271 -303
- data/src/core/lib/security/transport/security_handshaker.h +11 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +174 -122
- data/src/core/lib/slice/slice_buffer.cc +54 -21
- data/src/core/lib/slice/slice_hash_table.h +4 -4
- data/src/core/lib/slice/slice_intern.cc +49 -107
- data/src/core/lib/slice/slice_internal.h +264 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +7 -2
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/completion_queue.cc +221 -216
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +82 -33
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +5 -7
- data/src/core/lib/surface/server.cc +42 -47
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +10 -40
- data/src/core/lib/transport/connectivity_state.h +0 -8
- data/src/core/lib/transport/error_utils.cc +12 -0
- data/src/core/lib/transport/metadata.cc +258 -267
- data/src/core/lib/transport/metadata.h +227 -16
- data/src/core/lib/transport/metadata_batch.cc +1 -1
- data/src/core/lib/transport/metadata_batch.h +1 -1
- data/src/core/lib/transport/static_metadata.cc +477 -399
- data/src/core/lib/transport/static_metadata.h +273 -182
- data/src/core/lib/transport/status_metadata.cc +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -1
- data/src/core/lib/transport/transport.cc +39 -72
- data/src/core/lib/transport/transport.h +59 -24
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +12 -10
- data/src/core/tsi/ssl_transport_security.h +24 -4
- data/src/ruby/bin/math_pb.rb +18 -16
- data/src/ruby/ext/grpc/extconf.rb +12 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_channel.c +14 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +23 -24
- data/src/ruby/ext/grpc/rb_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
- data/src/ruby/ext/grpc/rb_server.c +8 -4
- data/src/ruby/lib/grpc/errors.rb +22 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/spec/errors_spec.rb +141 -0
- data/third_party/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- metadata +83 -48
- data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
- data/src/core/ext/filters/client_channel/request_routing.h +0 -177
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
- data/src/core/lib/channel/handshaker_factory.cc +0 -42
- data/src/core/lib/gpr/arena.cc +0 -192
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
@@ -30,15 +30,29 @@ fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL;
|
|
30
30
|
fpGetBestRoute2_t ares_fpGetBestRoute2 = ZERO_NULL;
|
31
31
|
#endif
|
32
32
|
|
33
|
+
#if defined(ANDROID) || defined(__ANDROID__)
|
34
|
+
#include "ares_android.h"
|
35
|
+
#endif
|
36
|
+
|
33
37
|
/* library-private global vars with source visibility restricted to this file */
|
34
38
|
|
35
39
|
static unsigned int ares_initialized;
|
36
40
|
static int ares_init_flags;
|
37
41
|
|
38
42
|
/* library-private global vars with visibility across the whole library */
|
39
|
-
|
40
|
-
|
41
|
-
void
|
43
|
+
#if defined(WIN32)
|
44
|
+
/* We need indirections to handle Windows DLL rules. */
|
45
|
+
static void *default_malloc(size_t size) { return malloc(size); }
|
46
|
+
static void *default_realloc(void *p, size_t size) { return realloc(p, size); }
|
47
|
+
static void default_free(void *p) { free(p); }
|
48
|
+
#else
|
49
|
+
# define default_malloc malloc
|
50
|
+
# define default_realloc realloc
|
51
|
+
# define default_free free
|
52
|
+
#endif
|
53
|
+
void *(*ares_malloc)(size_t size) = default_malloc;
|
54
|
+
void *(*ares_realloc)(void *ptr, size_t size) = default_realloc;
|
55
|
+
void (*ares_free)(void *ptr) = default_free;
|
42
56
|
|
43
57
|
#ifdef USE_WINSOCK
|
44
58
|
static HMODULE hnd_iphlpapi;
|
@@ -160,6 +174,10 @@ void ares_library_cleanup(void)
|
|
160
174
|
if (ares_init_flags & ARES_LIB_INIT_WIN32)
|
161
175
|
ares_win32_cleanup();
|
162
176
|
|
177
|
+
#if defined(ANDROID) || defined(__ANDROID__)
|
178
|
+
ares_library_cleanup_android();
|
179
|
+
#endif
|
180
|
+
|
163
181
|
ares_init_flags = ARES_LIB_INIT_NONE;
|
164
182
|
ares_malloc = malloc;
|
165
183
|
ares_realloc = realloc;
|
@@ -153,6 +153,9 @@ int ares_set_servers(ares_channel channel,
|
|
153
153
|
if (!channel)
|
154
154
|
return ARES_ENODATA;
|
155
155
|
|
156
|
+
if (!ares__is_list_empty(&channel->all_queries))
|
157
|
+
return ARES_ENOTIMP;
|
158
|
+
|
156
159
|
ares__destroy_servers_state(channel);
|
157
160
|
|
158
161
|
for (srvr = servers; srvr; srvr = srvr->next)
|
@@ -202,6 +205,9 @@ int ares_set_servers_ports(ares_channel channel,
|
|
202
205
|
if (!channel)
|
203
206
|
return ARES_ENODATA;
|
204
207
|
|
208
|
+
if (!ares__is_list_empty(&channel->all_queries))
|
209
|
+
return ARES_ENOTIMP;
|
210
|
+
|
205
211
|
ares__destroy_servers_state(channel);
|
206
212
|
|
207
213
|
for (srvr = servers; srvr; srvr = srvr->next)
|
@@ -258,8 +264,6 @@ static int set_servers_csv(ares_channel channel,
|
|
258
264
|
if (!channel)
|
259
265
|
return ARES_ENODATA;
|
260
266
|
|
261
|
-
ares__destroy_servers_state(channel);
|
262
|
-
|
263
267
|
i = strlen(_csv);
|
264
268
|
if (i == 0)
|
265
269
|
return ARES_SUCCESS; /* blank all servers */
|
@@ -110,18 +110,19 @@ ares_parse_naptr_reply (const unsigned char *abuf, int alen,
|
|
110
110
|
status = ARES_EBADRESP;
|
111
111
|
break;
|
112
112
|
}
|
113
|
-
/* RR must contain at least 7 bytes = 2 x int16 + 3 x name */
|
114
|
-
if (rr_len < 7)
|
115
|
-
{
|
116
|
-
status = ARES_EBADRESP;
|
117
|
-
break;
|
118
|
-
}
|
119
113
|
|
120
114
|
/* Check if we are really looking at a NAPTR record */
|
121
115
|
if (rr_class == C_IN && rr_type == T_NAPTR)
|
122
116
|
{
|
123
117
|
/* parse the NAPTR record itself */
|
124
118
|
|
119
|
+
/* RR must contain at least 7 bytes = 2 x int16 + 3 x name */
|
120
|
+
if (rr_len < 7)
|
121
|
+
{
|
122
|
+
status = ARES_EBADRESP;
|
123
|
+
break;
|
124
|
+
}
|
125
|
+
|
125
126
|
/* Allocate storage for this NAPTR answer appending it to the list */
|
126
127
|
naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY);
|
127
128
|
if (!naptr_curr)
|
@@ -52,6 +52,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|
52
52
|
int aliascnt = 0;
|
53
53
|
int alias_alloc = 8;
|
54
54
|
char ** aliases;
|
55
|
+
size_t rr_data_len;
|
55
56
|
|
56
57
|
/* Set *host to NULL for all failure cases. */
|
57
58
|
*host = NULL;
|
@@ -124,14 +125,15 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|
124
125
|
if (hostname)
|
125
126
|
ares_free(hostname);
|
126
127
|
hostname = rr_data;
|
127
|
-
|
128
|
+
rr_data_len = strlen(rr_data)+1;
|
129
|
+
aliases[aliascnt] = ares_malloc(rr_data_len * sizeof(char));
|
128
130
|
if (!aliases[aliascnt])
|
129
131
|
{
|
130
132
|
ares_free(rr_name);
|
131
133
|
status = ARES_ENOMEM;
|
132
134
|
break;
|
133
135
|
}
|
134
|
-
strncpy(aliases[aliascnt], rr_data,
|
136
|
+
strncpy(aliases[aliascnt], rr_data, rr_data_len);
|
135
137
|
aliascnt++;
|
136
138
|
if (aliascnt >= alias_alloc) {
|
137
139
|
char **ptr;
|
@@ -36,6 +36,10 @@ win_platform ares__getplatform(void)
|
|
36
36
|
|
37
37
|
memset(&OsvEx, 0, sizeof(OsvEx));
|
38
38
|
OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
39
|
+
#ifdef _MSC_VER
|
40
|
+
#pragma warning(push)
|
41
|
+
#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */
|
42
|
+
#endif
|
39
43
|
if (!GetVersionEx((void *)&OsvEx))
|
40
44
|
{
|
41
45
|
memset(&OsvEx, 0, sizeof(OsvEx));
|
@@ -43,6 +47,9 @@ win_platform ares__getplatform(void)
|
|
43
47
|
if (!GetVersionEx((void *)&OsvEx))
|
44
48
|
return WIN_UNKNOWN;
|
45
49
|
}
|
50
|
+
#ifdef _MSC_VER
|
51
|
+
#pragma warning(pop)
|
52
|
+
#endif
|
46
53
|
|
47
54
|
switch(OsvEx.dwPlatformId)
|
48
55
|
{
|
@@ -52,18 +52,19 @@
|
|
52
52
|
|
53
53
|
#if defined(WIN32) && !defined(WATT32)
|
54
54
|
|
55
|
-
#define WIN_NS_9X
|
56
|
-
#define WIN_NS_NT_KEY
|
57
|
-
#define WIN_DNSCLIENT
|
58
|
-
#define
|
59
|
-
#define
|
60
|
-
#define
|
61
|
-
#define
|
62
|
-
#define
|
55
|
+
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
|
56
|
+
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
|
57
|
+
#define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient"
|
58
|
+
#define WIN_NT_DNSCLIENT "Software\\Policies\\Microsoft\\Windows NT\\DNSClient"
|
59
|
+
#define NAMESERVER "NameServer"
|
60
|
+
#define DHCPNAMESERVER "DhcpNameServer"
|
61
|
+
#define DATABASEPATH "DatabasePath"
|
62
|
+
#define WIN_PATH_HOSTS "\\hosts"
|
63
|
+
#define SEARCHLIST_KEY "SearchList"
|
63
64
|
#define PRIMARYDNSSUFFIX_KEY "PrimaryDNSSuffix"
|
64
|
-
#define INTERFACES_KEY
|
65
|
-
#define DOMAIN_KEY
|
66
|
-
#define DHCPDOMAIN_KEY
|
65
|
+
#define INTERFACES_KEY "Interfaces"
|
66
|
+
#define DOMAIN_KEY "Domain"
|
67
|
+
#define DHCPDOMAIN_KEY "DhcpDomain"
|
67
68
|
|
68
69
|
#elif defined(WATT32)
|
69
70
|
|
@@ -100,6 +101,7 @@
|
|
100
101
|
#endif
|
101
102
|
|
102
103
|
#include "ares_strdup.h"
|
104
|
+
#include "ares_strsplit.h"
|
103
105
|
|
104
106
|
#ifndef HAVE_STRCASECMP
|
105
107
|
# include "ares_strcasecmp.h"
|
@@ -323,8 +325,14 @@ struct ares_channeldata {
|
|
323
325
|
|
324
326
|
const struct ares_socket_functions * sock_funcs;
|
325
327
|
void *sock_func_cb_data;
|
328
|
+
|
329
|
+
/* Path for resolv.conf file, configurable via ares_options */
|
330
|
+
char *resolvconf_path;
|
326
331
|
};
|
327
332
|
|
333
|
+
/* Does the domain end in ".onion" or ".onion."? Case-insensitive. */
|
334
|
+
int ares__is_onion_domain(const char *name);
|
335
|
+
|
328
336
|
/* Memory management functions */
|
329
337
|
extern void *(*ares_malloc)(size_t size);
|
330
338
|
extern void *(*ares_realloc)(void *ptr, size_t size);
|
@@ -53,6 +53,7 @@
|
|
53
53
|
|
54
54
|
#include <assert.h>
|
55
55
|
#include <fcntl.h>
|
56
|
+
#include <limits.h>
|
56
57
|
|
57
58
|
#include "ares.h"
|
58
59
|
#include "ares_dns.h"
|
@@ -871,8 +872,32 @@ void ares__send_query(ares_channel channel, struct query *query,
|
|
871
872
|
return;
|
872
873
|
}
|
873
874
|
}
|
874
|
-
|
875
|
-
|
875
|
+
|
876
|
+
/* For each trip through the entire server list, double the channel's
|
877
|
+
* assigned timeout, avoiding overflow. If channel->timeout is negative,
|
878
|
+
* leave it as-is, even though that should be impossible here.
|
879
|
+
*/
|
880
|
+
timeplus = channel->timeout;
|
881
|
+
{
|
882
|
+
/* How many times do we want to double it? Presume sane values here. */
|
883
|
+
const int shift = query->try_count / channel->nservers;
|
884
|
+
|
885
|
+
/* Is there enough room to shift timeplus left that many times?
|
886
|
+
*
|
887
|
+
* To find out, confirm that all of the bits we'll shift away are zero.
|
888
|
+
* Stop considering a shift if we get to the point where we could shift
|
889
|
+
* a 1 into the sign bit (i.e. when shift is within two of the bit
|
890
|
+
* count).
|
891
|
+
*
|
892
|
+
* This has the side benefit of leaving negative numbers unchanged.
|
893
|
+
*/
|
894
|
+
if(shift <= (int)(sizeof(int) * CHAR_BIT - 1)
|
895
|
+
&& (timeplus >> (sizeof(int) * CHAR_BIT - 1 - shift)) == 0)
|
896
|
+
{
|
897
|
+
timeplus <<= shift;
|
898
|
+
}
|
899
|
+
}
|
900
|
+
|
876
901
|
query->timeout = *now;
|
877
902
|
timeadd(&query->timeout, timeplus);
|
878
903
|
/* Keep track of queries bucketed by timeout, so we can process
|
@@ -54,6 +54,13 @@ void ares_search(ares_channel channel, const char *name, int dnsclass,
|
|
54
54
|
const char *p;
|
55
55
|
int status, ndots;
|
56
56
|
|
57
|
+
/* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
|
58
|
+
if (ares__is_onion_domain(name))
|
59
|
+
{
|
60
|
+
callback(arg, ARES_ENOTFOUND, 0, NULL, 0);
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
|
57
64
|
/* If name only yields one domain to search, then we don't have
|
58
65
|
* to keep extra state, so just do an ares_query().
|
59
66
|
*/
|
@@ -60,6 +60,12 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|
60
60
|
callback(arg, ARES_ENOMEM, 0, NULL, 0);
|
61
61
|
return;
|
62
62
|
}
|
63
|
+
if (channel->nservers < 1)
|
64
|
+
{
|
65
|
+
ares_free(query);
|
66
|
+
callback(arg, ARES_ESERVFAIL, 0, NULL, 0);
|
67
|
+
return;
|
68
|
+
}
|
63
69
|
query->server_info = ares_malloc(channel->nservers *
|
64
70
|
sizeof(query->server_info[0]));
|
65
71
|
if (!query->server_info)
|
@@ -0,0 +1,174 @@
|
|
1
|
+
/* Copyright (C) 2018 by John Schember <john@nachtimwald.com>
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and distribute this
|
4
|
+
* software and its documentation for any purpose and without
|
5
|
+
* fee is hereby granted, provided that the above copyright
|
6
|
+
* notice appear in all copies and that both that copyright
|
7
|
+
* notice and this permission notice appear in supporting
|
8
|
+
* documentation, and that the name of M.I.T. not be used in
|
9
|
+
* advertising or publicity pertaining to distribution of the
|
10
|
+
* software without specific, written prior permission.
|
11
|
+
* M.I.T. makes no representations about the suitability of
|
12
|
+
* this software for any purpose. It is provided "as is"
|
13
|
+
* without express or implied warranty.
|
14
|
+
*/
|
15
|
+
|
16
|
+
#include "ares_setup.h"
|
17
|
+
#include "ares_strsplit.h"
|
18
|
+
#include "ares.h"
|
19
|
+
#include "ares_private.h"
|
20
|
+
|
21
|
+
static int list_contains(char * const *list, size_t num_elem, const char *str, int insensitive)
|
22
|
+
{
|
23
|
+
size_t len;
|
24
|
+
size_t i;
|
25
|
+
|
26
|
+
len = strlen(str);
|
27
|
+
for (i=0; i<num_elem; i++)
|
28
|
+
{
|
29
|
+
if (insensitive)
|
30
|
+
{
|
31
|
+
#ifdef WIN32
|
32
|
+
if (strnicmp(list[i], str, len) == 0)
|
33
|
+
#else
|
34
|
+
if (strncasecmp(list[i], str, len) == 0)
|
35
|
+
#endif
|
36
|
+
return 1;
|
37
|
+
}
|
38
|
+
else
|
39
|
+
{
|
40
|
+
if (strncmp(list[i], str, len) == 0)
|
41
|
+
return 1;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
return 0;
|
46
|
+
}
|
47
|
+
|
48
|
+
static int is_delim(char c, const char *delims, size_t num_delims)
|
49
|
+
{
|
50
|
+
size_t i;
|
51
|
+
|
52
|
+
for (i=0; i<num_delims; i++)
|
53
|
+
{
|
54
|
+
if (c == delims[i])
|
55
|
+
return 1;
|
56
|
+
}
|
57
|
+
return 0;
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
void ares_strsplit_free(char **elms, size_t num_elm)
|
62
|
+
{
|
63
|
+
size_t i;
|
64
|
+
|
65
|
+
if (elms == NULL)
|
66
|
+
return;
|
67
|
+
|
68
|
+
for (i=0; i<num_elm; i++)
|
69
|
+
ares_free(elms[i]);
|
70
|
+
ares_free(elms);
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm)
|
75
|
+
{
|
76
|
+
char *parsestr;
|
77
|
+
char **temp;
|
78
|
+
char **out;
|
79
|
+
size_t cnt;
|
80
|
+
size_t nelms;
|
81
|
+
size_t in_len;
|
82
|
+
size_t num_delims;
|
83
|
+
size_t i;
|
84
|
+
|
85
|
+
if (in == NULL || delms == NULL || num_elm == NULL)
|
86
|
+
return NULL;
|
87
|
+
|
88
|
+
*num_elm = 0;
|
89
|
+
|
90
|
+
in_len = strlen(in);
|
91
|
+
num_delims = strlen(delms);
|
92
|
+
|
93
|
+
/* Figure out how many elements. */
|
94
|
+
nelms = 1;
|
95
|
+
for (i=0; i<in_len; i++)
|
96
|
+
{
|
97
|
+
if (is_delim(in[i], delms, num_delims))
|
98
|
+
{
|
99
|
+
nelms++;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
/* Copy of input so we can cut it up. */
|
104
|
+
parsestr = ares_strdup(in);
|
105
|
+
if (parsestr == NULL)
|
106
|
+
return NULL;
|
107
|
+
|
108
|
+
/* Temporary array to store locations of start of each element
|
109
|
+
* within parsestr. */
|
110
|
+
temp = ares_malloc(nelms * sizeof(*temp));
|
111
|
+
if (temp == NULL)
|
112
|
+
{
|
113
|
+
ares_free(parsestr);
|
114
|
+
return NULL;
|
115
|
+
}
|
116
|
+
temp[0] = parsestr;
|
117
|
+
cnt = 1;
|
118
|
+
for (i=0; i<in_len && cnt<nelms; i++)
|
119
|
+
{
|
120
|
+
if (!is_delim(parsestr[i], delms, num_delims))
|
121
|
+
continue;
|
122
|
+
|
123
|
+
/* Replace sep with NULL. */
|
124
|
+
parsestr[i] = '\0';
|
125
|
+
/* Add the pointer to the array of elements */
|
126
|
+
temp[cnt] = parsestr+i+1;
|
127
|
+
cnt++;
|
128
|
+
}
|
129
|
+
|
130
|
+
/* Copy each element to our output array. */
|
131
|
+
out = ares_malloc(nelms * sizeof(*out));
|
132
|
+
if (out == NULL)
|
133
|
+
{
|
134
|
+
ares_free(parsestr);
|
135
|
+
ares_free(temp);
|
136
|
+
return NULL;
|
137
|
+
}
|
138
|
+
|
139
|
+
nelms = 0;
|
140
|
+
for (i=0; i<cnt; i++)
|
141
|
+
{
|
142
|
+
if (temp[i][0] == '\0')
|
143
|
+
continue;
|
144
|
+
|
145
|
+
if (make_set && list_contains(out, nelms, temp[i], 1))
|
146
|
+
continue;
|
147
|
+
|
148
|
+
out[nelms] = ares_strdup(temp[i]);
|
149
|
+
if (out[nelms] == NULL)
|
150
|
+
{
|
151
|
+
ares_strsplit_free(out, nelms);
|
152
|
+
ares_free(parsestr);
|
153
|
+
ares_free(temp);
|
154
|
+
return NULL;
|
155
|
+
}
|
156
|
+
nelms++;
|
157
|
+
}
|
158
|
+
|
159
|
+
|
160
|
+
/* If there are no elements don't return an empty allocated
|
161
|
+
* array. */
|
162
|
+
if (nelms == 0)
|
163
|
+
{
|
164
|
+
ares_strsplit_free(out, nelms);
|
165
|
+
out = NULL;
|
166
|
+
}
|
167
|
+
|
168
|
+
/* Get the true number of elements (recalculated because of make_set) */
|
169
|
+
*num_elm = nelms;
|
170
|
+
|
171
|
+
ares_free(parsestr);
|
172
|
+
ares_free(temp);
|
173
|
+
return out;
|
174
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#ifndef HEADER_CARES_STRSPLIT_H
|
2
|
+
#define HEADER_CARES_STRSPLIT_H
|
3
|
+
|
4
|
+
/* Copyright (C) 2018 by John Schember <john@nachtimwald.com>
|
5
|
+
*
|
6
|
+
* Permission to use, copy, modify, and distribute this
|
7
|
+
* software and its documentation for any purpose and without
|
8
|
+
* fee is hereby granted, provided that the above copyright
|
9
|
+
* notice appear in all copies and that both that copyright
|
10
|
+
* notice and this permission notice appear in supporting
|
11
|
+
* documentation, and that the name of M.I.T. not be used in
|
12
|
+
* advertising or publicity pertaining to distribution of the
|
13
|
+
* software without specific, written prior permission.
|
14
|
+
* M.I.T. makes no representations about the suitability of
|
15
|
+
* this software for any purpose. It is provided "as is"
|
16
|
+
* without express or implied warranty.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include "ares_setup.h"
|
20
|
+
|
21
|
+
/* Split a string on delem skipping empty elements.
|
22
|
+
*
|
23
|
+
* param in String to split.
|
24
|
+
* param delims String of characters to treat as a delimitor.
|
25
|
+
* Each character in the string is a delimitor so
|
26
|
+
* there can be multiple delimitors to split on.
|
27
|
+
* E.g. ", " will split on all comma's and spaces.
|
28
|
+
* param make_set Have the list be a Set where there are no
|
29
|
+
* duplicate entries. 1 for true, 0 or false.
|
30
|
+
* param num_elm Return parameter of the number of elements
|
31
|
+
* in the result array.
|
32
|
+
*
|
33
|
+
* returns an allocated array of allocated string elements.
|
34
|
+
*
|
35
|
+
*/
|
36
|
+
char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm);
|
37
|
+
|
38
|
+
/* Frees the result returned from ares_strsplit(). */
|
39
|
+
void ares_strsplit_free(char **elms, size_t num_elm);
|
40
|
+
|
41
|
+
|
42
|
+
#endif /* HEADER_CARES_STRSPLIT_H */
|
43
|
+
|
@@ -3,15 +3,15 @@
|
|
3
3
|
#define ARES__VERSION_H
|
4
4
|
|
5
5
|
/* This is the global package copyright */
|
6
|
-
#define ARES_COPYRIGHT "2004 -
|
6
|
+
#define ARES_COPYRIGHT "2004 - 2017 Daniel Stenberg, <daniel@haxx.se>."
|
7
7
|
|
8
8
|
#define ARES_VERSION_MAJOR 1
|
9
|
-
#define ARES_VERSION_MINOR
|
10
|
-
#define ARES_VERSION_PATCH
|
9
|
+
#define ARES_VERSION_MINOR 14
|
10
|
+
#define ARES_VERSION_PATCH 0
|
11
11
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
12
12
|
(ARES_VERSION_MINOR<<8)|\
|
13
13
|
(ARES_VERSION_PATCH))
|
14
|
-
#define ARES_VERSION_STR "1.
|
14
|
+
#define ARES_VERSION_STR "1.14.0"
|
15
15
|
|
16
16
|
#if (ARES_VERSION >= 0x010700)
|
17
17
|
# define CARES_HAVE_ARES_LIBRARY_INIT 1
|
@@ -245,7 +245,7 @@
|
|
245
245
|
# define _CRT_NONSTDC_NO_DEPRECATE 1
|
246
246
|
#endif
|
247
247
|
|
248
|
-
/* Set the Target to Vista. However, any symbols required above Win2000
|
248
|
+
/* Set the Target to Vista. However, any symbols required above Win2000
|
249
249
|
* should be loaded via LoadLibrary() */
|
250
250
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
251
251
|
# define VS2008_MIN_TARGET 0x0600
|
@@ -54,7 +54,7 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
|
|
54
54
|
* On Windows we store the error in the thread errno, not
|
55
55
|
* in the winsock error code. This is to avoid loosing the
|
56
56
|
* actual last winsock error. So use macro ERRNO to fetch the
|
57
|
-
* errno this
|
57
|
+
* errno this function sets when returning NULL, not SOCKERRNO.
|
58
58
|
* author:
|
59
59
|
* Paul Vixie, 1996.
|
60
60
|
*/
|
@@ -180,8 +180,7 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|
180
180
|
tp += sprintf(tp, "%x", words[i]);
|
181
181
|
}
|
182
182
|
/* Was it a trailing run of 0x00's? */
|
183
|
-
if (best.base != -1 && (best.base + best.len) ==
|
184
|
-
(NS_IN6ADDRSZ / NS_INT16SZ))
|
183
|
+
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
|
185
184
|
*tp++ = ':';
|
186
185
|
*tp++ = '\0';
|
187
186
|
|
@@ -333,6 +333,9 @@
|
|
333
333
|
/* Define to 1 if you have the ws2tcpip.h header file. */
|
334
334
|
/* #undef HAVE_WS2TCPIP_H */
|
335
335
|
|
336
|
+
/* Define if __system_property_get exists. */
|
337
|
+
/* #undef HAVE___SYSTEM_PROPERTY_GET */
|
338
|
+
|
336
339
|
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
|
337
340
|
/* #undef NEED_MALLOC_H */
|
338
341
|
|
@@ -338,6 +338,9 @@
|
|
338
338
|
/* Define to 1 if you have the ws2tcpip.h header file. */
|
339
339
|
/* #undef HAVE_WS2TCPIP_H */
|
340
340
|
|
341
|
+
/* Define if __system_property_get exists. */
|
342
|
+
/* #undef HAVE___SYSTEM_PROPERTY_GET */
|
343
|
+
|
341
344
|
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
342
345
|
#define LT_OBJDIR ".libs/"
|
343
346
|
|
@@ -338,6 +338,9 @@
|
|
338
338
|
/* Define to 1 if you have the ws2tcpip.h header file. */
|
339
339
|
/* #undef HAVE_WS2TCPIP_H */
|
340
340
|
|
341
|
+
/* Define if __system_property_get exists. */
|
342
|
+
/* #undef HAVE___SYSTEM_PROPERTY_GET */
|
343
|
+
|
341
344
|
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
|
342
345
|
/* #undef NEED_MALLOC_H */
|
343
346
|
|
@@ -338,6 +338,9 @@
|
|
338
338
|
/* Define to 1 if you have the ws2tcpip.h header file. */
|
339
339
|
/* #undef HAVE_WS2TCPIP_H */
|
340
340
|
|
341
|
+
/* Define if __system_property_get exists. */
|
342
|
+
/* #undef HAVE___SYSTEM_PROPERTY_GET */
|
343
|
+
|
341
344
|
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
342
345
|
#define LT_OBJDIR ".libs/"
|
343
346
|
|