grpc 1.74.1 → 1.75.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +83 -41
- data/include/grpc/credentials.h +7 -1
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channelz.cc +10 -17
- data/src/core/channelz/channelz.h +58 -19
- data/src/core/channelz/channelz_registry.cc +0 -162
- data/src/core/channelz/channelz_registry.h +14 -7
- data/src/core/channelz/property_list.cc +19 -23
- data/src/core/channelz/property_list.h +3 -1
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/client_channel/client_channel_filter.cc +5 -4
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/subchannel.cc +14 -6
- data/src/core/client_channel/subchannel.h +2 -0
- data/src/core/config/core_configuration.cc +3 -1
- data/src/core/config/core_configuration.h +12 -0
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
- data/src/core/filter/auth/auth_filters.h +2 -2
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +28 -13
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +6 -5
- data/src/core/lib/event_engine/ares_resolver.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
- data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
- data/src/core/lib/experiments/experiments.cc +120 -6
- data/src/core/lib/experiments/experiments.h +46 -3
- data/src/core/lib/iomgr/combiner.cc +1 -1
- data/src/core/lib/iomgr/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +3 -3
- data/src/core/lib/promise/activity.h +2 -2
- data/src/core/lib/promise/mpsc.cc +8 -8
- data/src/core/lib/promise/party.cc +7 -7
- data/src/core/lib/promise/party.h +4 -4
- data/src/core/lib/promise/poll.h +10 -0
- data/src/core/lib/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.h +3 -3
- data/src/core/load_balancing/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
- data/src/core/server/server.cc +1 -1
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +151 -151
- data/src/core/telemetry/stats_data.h +87 -87
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/ssl_transport_security.cc +202 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -0
- data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +245 -188
- data/src/core/util/single_set_ptr.h +5 -2
- data/src/core/util/useful.h +91 -0
- data/src/core/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +121 -49
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -0,0 +1,508 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 1998 Massachusetts Institute of Technology
|
4
|
+
* Copyright (c) The c-ares project and its contributors
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice (including the next
|
14
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
15
|
+
* Software.
|
16
|
+
*
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
23
|
+
* SOFTWARE.
|
24
|
+
*
|
25
|
+
* SPDX-License-Identifier: MIT
|
26
|
+
*/
|
27
|
+
|
28
|
+
#include "ares_private.h"
|
29
|
+
#include "ares_str.h"
|
30
|
+
|
31
|
+
#ifdef HAVE_STDINT_H
|
32
|
+
# include <stdint.h>
|
33
|
+
#endif
|
34
|
+
|
35
|
+
size_t ares_strnlen(const char *str, size_t maxlen) {
|
36
|
+
const char *p = NULL;
|
37
|
+
if (str == NULL) {
|
38
|
+
return 0;
|
39
|
+
}
|
40
|
+
#ifdef HAVE_STRNLEN
|
41
|
+
(void)p;
|
42
|
+
return strnlen(str, maxlen);
|
43
|
+
#else
|
44
|
+
if ((p = memchr(str, 0, maxlen)) == NULL) {
|
45
|
+
return maxlen;
|
46
|
+
} else {
|
47
|
+
return (size_t)(p - str);
|
48
|
+
}
|
49
|
+
#endif /* HAVE_STRNLEN */
|
50
|
+
}
|
51
|
+
|
52
|
+
size_t ares_strlen(const char *str)
|
53
|
+
{
|
54
|
+
if (str == NULL) {
|
55
|
+
return 0;
|
56
|
+
}
|
57
|
+
|
58
|
+
return strlen(str);
|
59
|
+
}
|
60
|
+
|
61
|
+
char *ares_strdup(const char *s1)
|
62
|
+
{
|
63
|
+
size_t len;
|
64
|
+
char *out;
|
65
|
+
|
66
|
+
if (s1 == NULL) {
|
67
|
+
return NULL;
|
68
|
+
}
|
69
|
+
|
70
|
+
len = ares_strlen(s1);
|
71
|
+
|
72
|
+
/* Don't see how this is possible */
|
73
|
+
if (len == SIZE_MAX) {
|
74
|
+
return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */
|
75
|
+
}
|
76
|
+
|
77
|
+
out = ares_malloc(len + 1);
|
78
|
+
if (out == NULL) {
|
79
|
+
return NULL;
|
80
|
+
}
|
81
|
+
|
82
|
+
if (len) {
|
83
|
+
memcpy(out, s1, len);
|
84
|
+
}
|
85
|
+
|
86
|
+
out[len] = 0;
|
87
|
+
return out;
|
88
|
+
}
|
89
|
+
|
90
|
+
size_t ares_strcpy(char *dest, const char *src, size_t dest_size)
|
91
|
+
{
|
92
|
+
size_t len = 0;
|
93
|
+
|
94
|
+
if (dest == NULL || dest_size == 0) {
|
95
|
+
return 0; /* LCOV_EXCL_LINE: DefensiveCoding */
|
96
|
+
}
|
97
|
+
|
98
|
+
len = ares_strlen(src);
|
99
|
+
|
100
|
+
if (len >= dest_size) {
|
101
|
+
len = dest_size - 1;
|
102
|
+
}
|
103
|
+
|
104
|
+
if (len) {
|
105
|
+
memcpy(dest, src, len);
|
106
|
+
}
|
107
|
+
|
108
|
+
dest[len] = 0;
|
109
|
+
return len;
|
110
|
+
}
|
111
|
+
|
112
|
+
ares_bool_t ares_str_isnum(const char *str)
|
113
|
+
{
|
114
|
+
size_t i;
|
115
|
+
|
116
|
+
if (str == NULL || *str == 0) {
|
117
|
+
return ARES_FALSE;
|
118
|
+
}
|
119
|
+
|
120
|
+
for (i = 0; str[i] != 0; i++) {
|
121
|
+
if (!ares_isdigit(str[i])) {
|
122
|
+
return ARES_FALSE;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
return ARES_TRUE;
|
126
|
+
}
|
127
|
+
|
128
|
+
ares_bool_t ares_str_isalnum(const char *str)
|
129
|
+
{
|
130
|
+
size_t i;
|
131
|
+
|
132
|
+
if (str == NULL || *str == 0) {
|
133
|
+
return ARES_FALSE;
|
134
|
+
}
|
135
|
+
|
136
|
+
for (i = 0; str[i] != 0; i++) {
|
137
|
+
if (!ares_isdigit(str[i]) && !ares_isalpha(str[i])) {
|
138
|
+
return ARES_FALSE;
|
139
|
+
}
|
140
|
+
}
|
141
|
+
return ARES_TRUE;
|
142
|
+
}
|
143
|
+
|
144
|
+
void ares_str_rtrim(char *str)
|
145
|
+
{
|
146
|
+
size_t len;
|
147
|
+
size_t i;
|
148
|
+
|
149
|
+
if (str == NULL) {
|
150
|
+
return; /* LCOV_EXCL_LINE: DefensiveCoding */
|
151
|
+
}
|
152
|
+
|
153
|
+
len = ares_strlen(str);
|
154
|
+
for (i = len; i > 0; i--) {
|
155
|
+
if (!ares_isspace(str[i - 1])) {
|
156
|
+
break;
|
157
|
+
}
|
158
|
+
}
|
159
|
+
str[i] = 0;
|
160
|
+
}
|
161
|
+
|
162
|
+
void ares_str_ltrim(char *str)
|
163
|
+
{
|
164
|
+
size_t i;
|
165
|
+
size_t len;
|
166
|
+
|
167
|
+
if (str == NULL) {
|
168
|
+
return; /* LCOV_EXCL_LINE: DefensiveCoding */
|
169
|
+
}
|
170
|
+
|
171
|
+
for (i = 0; str[i] != 0 && ares_isspace(str[i]); i++) {
|
172
|
+
/* Do nothing */
|
173
|
+
}
|
174
|
+
|
175
|
+
if (i == 0) {
|
176
|
+
return;
|
177
|
+
}
|
178
|
+
|
179
|
+
len = ares_strlen(str);
|
180
|
+
if (i != len) {
|
181
|
+
memmove(str, str + i, len - i);
|
182
|
+
}
|
183
|
+
str[len - i] = 0;
|
184
|
+
}
|
185
|
+
|
186
|
+
void ares_str_trim(char *str)
|
187
|
+
{
|
188
|
+
ares_str_ltrim(str);
|
189
|
+
ares_str_rtrim(str);
|
190
|
+
}
|
191
|
+
|
192
|
+
/* tolower() is locale-specific. Use a lookup table fast conversion that only
|
193
|
+
* operates on ASCII */
|
194
|
+
static const unsigned char ares_tolower_lookup[] = {
|
195
|
+
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
|
196
|
+
0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
|
197
|
+
0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
|
198
|
+
0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
|
199
|
+
0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,
|
200
|
+
0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,
|
201
|
+
0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
|
202
|
+
0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
|
203
|
+
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74,
|
204
|
+
0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
|
205
|
+
0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
|
206
|
+
0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
|
207
|
+
0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8,
|
208
|
+
0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,
|
209
|
+
0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
|
210
|
+
0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
|
211
|
+
0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
|
212
|
+
0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
|
213
|
+
0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6,
|
214
|
+
0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
|
215
|
+
};
|
216
|
+
|
217
|
+
unsigned char ares_tolower(unsigned char c)
|
218
|
+
{
|
219
|
+
return ares_tolower_lookup[c];
|
220
|
+
}
|
221
|
+
|
222
|
+
void ares_str_lower(char *str)
|
223
|
+
{
|
224
|
+
size_t i;
|
225
|
+
|
226
|
+
if (str == NULL) {
|
227
|
+
return;
|
228
|
+
}
|
229
|
+
|
230
|
+
for (i = 0; str[i] != 0; i++) {
|
231
|
+
str[i] = (char)ares_tolower((unsigned char)str[i]);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
235
|
+
unsigned char *ares_memmem(const unsigned char *big, size_t big_len,
|
236
|
+
const unsigned char *little, size_t little_len)
|
237
|
+
{
|
238
|
+
unsigned char *ptr;
|
239
|
+
|
240
|
+
if (big == NULL || little == NULL || big_len == 0 || little_len == 0) {
|
241
|
+
return NULL;
|
242
|
+
}
|
243
|
+
|
244
|
+
#ifdef HAVE_MEMMEM
|
245
|
+
ptr = memmem(big, big_len, little, little_len);
|
246
|
+
return ptr;
|
247
|
+
#else
|
248
|
+
while (1) {
|
249
|
+
ptr = memchr(big, little[0], big_len);
|
250
|
+
if (ptr == NULL) {
|
251
|
+
break;
|
252
|
+
}
|
253
|
+
|
254
|
+
big_len -= (size_t)(ptr - big);
|
255
|
+
big = ptr;
|
256
|
+
if (big_len < little_len) {
|
257
|
+
break;
|
258
|
+
}
|
259
|
+
|
260
|
+
if (memcmp(big, little, little_len) == 0) {
|
261
|
+
return ptr;
|
262
|
+
}
|
263
|
+
|
264
|
+
big++;
|
265
|
+
big_len--;
|
266
|
+
}
|
267
|
+
|
268
|
+
return NULL;
|
269
|
+
#endif
|
270
|
+
}
|
271
|
+
|
272
|
+
ares_bool_t ares_memeq(const unsigned char *ptr, const unsigned char *val,
|
273
|
+
size_t len)
|
274
|
+
{
|
275
|
+
return memcmp(ptr, val, len) == 0 ? ARES_TRUE : ARES_FALSE;
|
276
|
+
}
|
277
|
+
|
278
|
+
ares_bool_t ares_memeq_ci(const unsigned char *ptr, const unsigned char *val,
|
279
|
+
size_t len)
|
280
|
+
{
|
281
|
+
size_t i;
|
282
|
+
for (i = 0; i < len; i++) {
|
283
|
+
if (ares_tolower_lookup[ptr[i]] != ares_tolower_lookup[val[i]]) {
|
284
|
+
return ARES_FALSE;
|
285
|
+
}
|
286
|
+
}
|
287
|
+
return ARES_TRUE;
|
288
|
+
}
|
289
|
+
|
290
|
+
ares_bool_t ares_is_hostname(const char *str)
|
291
|
+
{
|
292
|
+
size_t i;
|
293
|
+
|
294
|
+
if (str == NULL) {
|
295
|
+
return ARES_FALSE; /* LCOV_EXCL_LINE: DefensiveCoding */
|
296
|
+
}
|
297
|
+
|
298
|
+
for (i = 0; str[i] != 0; i++) {
|
299
|
+
if (!ares_is_hostnamech(str[i])) {
|
300
|
+
return ARES_FALSE;
|
301
|
+
}
|
302
|
+
}
|
303
|
+
return ARES_TRUE;
|
304
|
+
}
|
305
|
+
|
306
|
+
ares_bool_t ares_str_isprint(const char *str, size_t len)
|
307
|
+
{
|
308
|
+
size_t i;
|
309
|
+
|
310
|
+
if (str == NULL && len != 0) {
|
311
|
+
return ARES_FALSE;
|
312
|
+
}
|
313
|
+
|
314
|
+
for (i = 0; i < len; i++) {
|
315
|
+
if (!ares_isprint(str[i])) {
|
316
|
+
return ARES_FALSE;
|
317
|
+
}
|
318
|
+
}
|
319
|
+
return ARES_TRUE;
|
320
|
+
}
|
321
|
+
|
322
|
+
int ares_strcmp(const char *a, const char *b)
|
323
|
+
{
|
324
|
+
if (a == NULL && b == NULL) {
|
325
|
+
return 0;
|
326
|
+
}
|
327
|
+
|
328
|
+
if (a != NULL && b == NULL) {
|
329
|
+
if (*a == 0) {
|
330
|
+
return 0;
|
331
|
+
}
|
332
|
+
return 1;
|
333
|
+
}
|
334
|
+
|
335
|
+
if (a == NULL && b != NULL) {
|
336
|
+
if (*b == 0) {
|
337
|
+
return 0;
|
338
|
+
}
|
339
|
+
return -1;
|
340
|
+
}
|
341
|
+
|
342
|
+
return strcmp(a, b);
|
343
|
+
}
|
344
|
+
|
345
|
+
int ares_strncmp(const char *a, const char *b, size_t n)
|
346
|
+
{
|
347
|
+
if (n == 0) {
|
348
|
+
return 0;
|
349
|
+
}
|
350
|
+
|
351
|
+
if (a == NULL && b == NULL) {
|
352
|
+
return 0;
|
353
|
+
}
|
354
|
+
|
355
|
+
if (a != NULL && b == NULL) {
|
356
|
+
if (*a == 0) {
|
357
|
+
return 0;
|
358
|
+
}
|
359
|
+
return 1;
|
360
|
+
}
|
361
|
+
|
362
|
+
if (a == NULL && b != NULL) {
|
363
|
+
if (*b == 0) {
|
364
|
+
return 0;
|
365
|
+
}
|
366
|
+
return -1;
|
367
|
+
}
|
368
|
+
|
369
|
+
return strncmp(a, b, n);
|
370
|
+
}
|
371
|
+
|
372
|
+
int ares_strcasecmp(const char *a, const char *b)
|
373
|
+
{
|
374
|
+
if (a == NULL && b == NULL) {
|
375
|
+
return 0;
|
376
|
+
}
|
377
|
+
|
378
|
+
if (a != NULL && b == NULL) {
|
379
|
+
if (*a == 0) {
|
380
|
+
return 0;
|
381
|
+
}
|
382
|
+
return 1;
|
383
|
+
}
|
384
|
+
|
385
|
+
if (a == NULL && b != NULL) {
|
386
|
+
if (*b == 0) {
|
387
|
+
return 0;
|
388
|
+
}
|
389
|
+
return -1;
|
390
|
+
}
|
391
|
+
|
392
|
+
#if defined(HAVE_STRCASECMP)
|
393
|
+
return strcasecmp(a, b);
|
394
|
+
#elif defined(HAVE_STRCMPI)
|
395
|
+
return strcmpi(a, b);
|
396
|
+
#elif defined(HAVE_STRICMP)
|
397
|
+
return stricmp(a, b);
|
398
|
+
#else
|
399
|
+
{
|
400
|
+
size_t i;
|
401
|
+
|
402
|
+
for (i = 0; i < (size_t)-1; i++) {
|
403
|
+
int c1 = ares_tolower(a[i]);
|
404
|
+
int c2 = ares_tolower(b[i]);
|
405
|
+
if (c1 != c2) {
|
406
|
+
return c1 - c2;
|
407
|
+
}
|
408
|
+
if (!c1) {
|
409
|
+
break;
|
410
|
+
}
|
411
|
+
}
|
412
|
+
}
|
413
|
+
return 0;
|
414
|
+
#endif
|
415
|
+
}
|
416
|
+
|
417
|
+
int ares_strncasecmp(const char *a, const char *b, size_t n)
|
418
|
+
{
|
419
|
+
if (n == 0) {
|
420
|
+
return 0;
|
421
|
+
}
|
422
|
+
|
423
|
+
if (a == NULL && b == NULL) {
|
424
|
+
return 0;
|
425
|
+
}
|
426
|
+
|
427
|
+
if (a != NULL && b == NULL) {
|
428
|
+
if (*a == 0) {
|
429
|
+
return 0;
|
430
|
+
}
|
431
|
+
return 1;
|
432
|
+
}
|
433
|
+
|
434
|
+
if (a == NULL && b != NULL) {
|
435
|
+
if (*b == 0) {
|
436
|
+
return 0;
|
437
|
+
}
|
438
|
+
return -1;
|
439
|
+
}
|
440
|
+
|
441
|
+
#if defined(HAVE_STRNCASECMP)
|
442
|
+
return strncasecmp(a, b, n);
|
443
|
+
#elif defined(HAVE_STRNCMPI)
|
444
|
+
return strncmpi(a, b, n);
|
445
|
+
#elif defined(HAVE_STRNICMP)
|
446
|
+
return strnicmp(a, b, n);
|
447
|
+
#else
|
448
|
+
{
|
449
|
+
size_t i;
|
450
|
+
|
451
|
+
for (i = 0; i < n; i++) {
|
452
|
+
int c1 = ares_tolower(a[i]);
|
453
|
+
int c2 = ares_tolower(b[i]);
|
454
|
+
if (c1 != c2) {
|
455
|
+
return c1 - c2;
|
456
|
+
}
|
457
|
+
if (!c1) {
|
458
|
+
break;
|
459
|
+
}
|
460
|
+
}
|
461
|
+
}
|
462
|
+
return 0;
|
463
|
+
#endif
|
464
|
+
}
|
465
|
+
|
466
|
+
ares_bool_t ares_strcaseeq(const char *a, const char *b)
|
467
|
+
{
|
468
|
+
return ares_strcasecmp(a, b) == 0 ? ARES_TRUE : ARES_FALSE;
|
469
|
+
}
|
470
|
+
|
471
|
+
ares_bool_t ares_strcaseeq_max(const char *a, const char *b, size_t n)
|
472
|
+
{
|
473
|
+
return ares_strncasecmp(a, b, n) == 0 ? ARES_TRUE : ARES_FALSE;
|
474
|
+
}
|
475
|
+
|
476
|
+
ares_bool_t ares_streq(const char *a, const char *b)
|
477
|
+
{
|
478
|
+
return ares_strcmp(a, b) == 0 ? ARES_TRUE : ARES_FALSE;
|
479
|
+
}
|
480
|
+
|
481
|
+
ares_bool_t ares_streq_max(const char *a, const char *b, size_t n)
|
482
|
+
{
|
483
|
+
return ares_strncmp(a, b, n) == 0 ? ARES_TRUE : ARES_FALSE;
|
484
|
+
}
|
485
|
+
|
486
|
+
void ares_free_array(void *arrp, size_t nmembers, void (*freefunc)(void *))
|
487
|
+
{
|
488
|
+
size_t i;
|
489
|
+
void **arr = arrp;
|
490
|
+
|
491
|
+
if (arr == NULL) {
|
492
|
+
return;
|
493
|
+
}
|
494
|
+
|
495
|
+
if (freefunc != NULL) {
|
496
|
+
if (nmembers == SIZE_MAX) {
|
497
|
+
for (i = 0; arr[i] != NULL; i++) {
|
498
|
+
freefunc(arr[i]);
|
499
|
+
}
|
500
|
+
} else {
|
501
|
+
for (i = 0; i < nmembers; i++) {
|
502
|
+
freefunc(arr[i]);
|
503
|
+
}
|
504
|
+
}
|
505
|
+
}
|
506
|
+
|
507
|
+
ares_free(arr);
|
508
|
+
}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 2018 John Schember
|
4
|
+
*
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
10
|
+
* furnished to do so, subject to the following conditions:
|
11
|
+
*
|
12
|
+
* The above copyright notice and this permission notice (including the next
|
13
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
14
|
+
* Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*
|
24
|
+
* SPDX-License-Identifier: MIT
|
25
|
+
*/
|
26
|
+
#include "ares_private.h"
|
27
|
+
|
28
|
+
void ares_strsplit_free(char **elms, size_t num_elm)
|
29
|
+
{
|
30
|
+
ares_free_array(elms, num_elm, ares_free);
|
31
|
+
}
|
32
|
+
|
33
|
+
char **ares_strsplit_duplicate(char **elms, size_t num_elm)
|
34
|
+
{
|
35
|
+
size_t i;
|
36
|
+
char **out;
|
37
|
+
|
38
|
+
if (elms == NULL || num_elm == 0) {
|
39
|
+
return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */
|
40
|
+
}
|
41
|
+
|
42
|
+
out = ares_malloc_zero(sizeof(*elms) * num_elm);
|
43
|
+
if (out == NULL) {
|
44
|
+
return NULL; /* LCOV_EXCL_LINE: OutOfMemory */
|
45
|
+
}
|
46
|
+
|
47
|
+
for (i = 0; i < num_elm; i++) {
|
48
|
+
out[i] = ares_strdup(elms[i]);
|
49
|
+
if (out[i] == NULL) {
|
50
|
+
ares_strsplit_free(out, num_elm); /* LCOV_EXCL_LINE: OutOfMemory */
|
51
|
+
return NULL; /* LCOV_EXCL_LINE: OutOfMemory */
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
return out;
|
56
|
+
}
|
57
|
+
|
58
|
+
char **ares_strsplit(const char *in, const char *delms, size_t *num_elm)
|
59
|
+
{
|
60
|
+
ares_status_t status;
|
61
|
+
ares_buf_t *buf = NULL;
|
62
|
+
char **out = NULL;
|
63
|
+
|
64
|
+
if (in == NULL || delms == NULL || num_elm == NULL) {
|
65
|
+
return NULL; /* LCOV_EXCL_LINE: DefensiveCoding */
|
66
|
+
}
|
67
|
+
|
68
|
+
*num_elm = 0;
|
69
|
+
|
70
|
+
buf = ares_buf_create_const((const unsigned char *)in, ares_strlen(in));
|
71
|
+
if (buf == NULL) {
|
72
|
+
return NULL;
|
73
|
+
}
|
74
|
+
|
75
|
+
status = ares_buf_split_str(
|
76
|
+
buf, (const unsigned char *)delms, ares_strlen(delms),
|
77
|
+
ARES_BUF_SPLIT_NO_DUPLICATES | ARES_BUF_SPLIT_CASE_INSENSITIVE, 0, &out,
|
78
|
+
num_elm);
|
79
|
+
if (status != ARES_SUCCESS) {
|
80
|
+
goto done;
|
81
|
+
}
|
82
|
+
|
83
|
+
done:
|
84
|
+
ares_buf_destroy(buf);
|
85
|
+
if (status != ARES_SUCCESS) {
|
86
|
+
out = NULL;
|
87
|
+
}
|
88
|
+
|
89
|
+
return out;
|
90
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 2018 John Schember
|
4
|
+
*
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
10
|
+
* furnished to do so, subject to the following conditions:
|
11
|
+
*
|
12
|
+
* The above copyright notice and this permission notice (including the next
|
13
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
14
|
+
* Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*
|
24
|
+
* SPDX-License-Identifier: MIT
|
25
|
+
*/
|
26
|
+
#ifndef HEADER_CARES_STRSPLIT_H
|
27
|
+
#define HEADER_CARES_STRSPLIT_H
|
28
|
+
|
29
|
+
/* Split a string on delms skipping empty or duplicate elements.
|
30
|
+
*
|
31
|
+
* param in String to split.
|
32
|
+
* param delms String of characters to treat as a delimiter.
|
33
|
+
* Each character in the string is a delimiter so
|
34
|
+
* there can be multiple delimiters to split on.
|
35
|
+
* E.g. ", " will split on all comma's and spaces.
|
36
|
+
* Duplicate (case-insensitive) entries are removed.
|
37
|
+
* param num_elm Return parameter of the number of elements
|
38
|
+
* in the result array.
|
39
|
+
*
|
40
|
+
* returns an allocated array of allocated string elements.
|
41
|
+
*
|
42
|
+
*/
|
43
|
+
char **ares_strsplit(const char *in, const char *delms, size_t *num_elm);
|
44
|
+
|
45
|
+
/* Frees the result returned from ares_strsplit(). */
|
46
|
+
void ares_strsplit_free(char **elms, size_t num_elm);
|
47
|
+
|
48
|
+
/* Duplicate the array */
|
49
|
+
char **ares_strsplit_duplicate(char **elms, size_t num_elm);
|
50
|
+
|
51
|
+
#endif /* HEADER_CARES_STRSPLIT_H */
|