Merge pull request #22729 from markdroth/absl_string_view_host_port

Remove StringViewToCString() and src/core/lib/gprpp/string_view.h
pull/22817/head
Mark D. Roth 5 years ago committed by GitHub
commit 8a14958980
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      BUILD
  2. 1
      BUILD.gn
  3. 39
      CMakeLists.txt
  4. 48
      Makefile
  5. 14
      build_autogenerated.yaml
  6. 2
      gRPC-C++.podspec
  7. 2
      gRPC-Core.podspec
  8. 1
      grpc.gemspec
  9. 1
      package.xml
  10. 2
      src/core/ext/filters/client_channel/backend_metric.cc
  11. 9
      src/core/ext/filters/client_channel/http_proxy.cc
  12. 43
      src/core/ext/filters/client_channel/parse_address.cc
  13. 78
      src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc
  14. 6
      src/core/ext/filters/client_channel/xds/xds_bootstrap.cc
  15. 6
      src/core/ext/filters/client_channel/xds/xds_client.cc
  16. 11
      src/core/lib/channel/channelz.cc
  17. 25
      src/core/lib/gprpp/host_port.cc
  18. 21
      src/core/lib/gprpp/host_port.h
  19. 5
      src/core/lib/gprpp/map.h
  20. 52
      src/core/lib/gprpp/string_view.h
  21. 68
      src/core/lib/iomgr/resolve_address_custom.cc
  22. 6
      src/core/lib/iomgr/resolve_address_custom.h
  23. 16
      src/core/lib/iomgr/resolve_address_posix.cc
  24. 12
      src/core/lib/iomgr/resolve_address_windows.cc
  25. 2
      src/core/lib/iomgr/sockaddr_utils.h
  26. 8
      src/core/lib/iomgr/tcp_client_cfstream.cc
  27. 5
      src/core/lib/iomgr/tcp_uv.cc
  28. 40
      src/core/lib/security/security_connector/ssl/ssl_security_connector.cc
  29. 30
      src/core/lib/security/security_connector/tls/tls_security_connector.cc
  30. 4
      src/core/lib/security/security_connector/tls/tls_security_connector.h
  31. 6
      src/core/tsi/ssl_transport_security.cc
  32. 8
      src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/iomgr.pyx.pxi
  33. 2
      src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/resolver.pxd.pxi
  34. 2
      src/python/grpcio/grpc/_cython/_cygrpc/aio/iomgr/resolver.pyx.pxi
  35. 4
      src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pxd.pxi
  36. 4
      src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi
  37. 4
      src/python/grpcio/grpc/_cython/_cygrpc/iomgr.pxd.pxi
  38. 8
      test/core/client_channel/parse_address_with_named_scope_id_test.cc
  39. 13
      test/core/gprpp/BUILD
  40. 16
      test/core/gprpp/host_port_test.cc
  41. 44
      test/core/gprpp/string_view_test.cc
  42. 13
      test/cpp/end2end/client_lb_end2end_test.cc
  43. 12
      test/cpp/naming/address_sorting_test.cc
  44. 8
      test/cpp/naming/resolver_component_test.cc
  45. 1
      tools/doxygen/Doxyfile.c++.internal
  46. 1
      tools/doxygen/Doxyfile.core.internal
  47. 24
      tools/run_tests/generated/tests.json

@ -554,7 +554,6 @@ grpc_cc_library(
"src/core/lib/gprpp/map.h",
"src/core/lib/gprpp/memory.h",
"src/core/lib/gprpp/mpscq.h",
"src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h",
"src/core/lib/profiling/timers.h",

@ -160,7 +160,6 @@ config("grpc_config") {
"src/core/lib/gprpp/memory.h",
"src/core/lib/gprpp/mpscq.cc",
"src/core/lib/gprpp/mpscq.h",
"src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h",
"src/core/lib/gprpp/thd_posix.cc",

@ -798,7 +798,6 @@ if(gRPC_BUILD_TESTS)
add_dependencies(buildtests_cxx streaming_throughput_test)
endif()
add_dependencies(buildtests_cxx string_ref_test)
add_dependencies(buildtests_cxx string_view_test)
add_dependencies(buildtests_cxx test_cpp_client_credentials_test)
add_dependencies(buildtests_cxx test_cpp_util_slice_test)
add_dependencies(buildtests_cxx test_cpp_util_time_test)
@ -13766,44 +13765,6 @@ target_link_libraries(string_ref_test
)
endif()
if(gRPC_BUILD_TESTS)
add_executable(string_view_test
test/core/gprpp/string_view_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(string_view_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(string_view_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc
gpr
address_sorting
upb
${_gRPC_GFLAGS_LIBRARIES}
)
endif()
if(gRPC_BUILD_TESTS)

@ -1289,7 +1289,6 @@ status_metadata_test: $(BINDIR)/$(CONFIG)/status_metadata_test
status_util_test: $(BINDIR)/$(CONFIG)/status_util_test
streaming_throughput_test: $(BINDIR)/$(CONFIG)/streaming_throughput_test
string_ref_test: $(BINDIR)/$(CONFIG)/string_ref_test
string_view_test: $(BINDIR)/$(CONFIG)/string_view_test
test_cpp_client_credentials_test: $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test
test_cpp_util_slice_test: $(BINDIR)/$(CONFIG)/test_cpp_util_slice_test
test_cpp_util_time_test: $(BINDIR)/$(CONFIG)/test_cpp_util_time_test
@ -1649,7 +1648,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/status_util_test \
$(BINDIR)/$(CONFIG)/streaming_throughput_test \
$(BINDIR)/$(CONFIG)/string_ref_test \
$(BINDIR)/$(CONFIG)/string_view_test \
$(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test \
$(BINDIR)/$(CONFIG)/test_cpp_util_slice_test \
$(BINDIR)/$(CONFIG)/test_cpp_util_time_test \
@ -1806,7 +1804,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/status_util_test \
$(BINDIR)/$(CONFIG)/streaming_throughput_test \
$(BINDIR)/$(CONFIG)/string_ref_test \
$(BINDIR)/$(CONFIG)/string_view_test \
$(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test \
$(BINDIR)/$(CONFIG)/test_cpp_util_slice_test \
$(BINDIR)/$(CONFIG)/test_cpp_util_time_test \
@ -2335,8 +2332,6 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/streaming_throughput_test || ( echo test streaming_throughput_test failed ; exit 1 )
$(E) "[RUN] Testing string_ref_test"
$(Q) $(BINDIR)/$(CONFIG)/string_ref_test || ( echo test string_ref_test failed ; exit 1 )
$(E) "[RUN] Testing string_view_test"
$(Q) $(BINDIR)/$(CONFIG)/string_view_test || ( echo test string_view_test failed ; exit 1 )
$(E) "[RUN] Testing test_cpp_client_credentials_test"
$(Q) $(BINDIR)/$(CONFIG)/test_cpp_client_credentials_test || ( echo test test_cpp_client_credentials_test failed ; exit 1 )
$(E) "[RUN] Testing test_cpp_util_slice_test"
@ -18197,49 +18192,6 @@ endif
endif
STRING_VIEW_TEST_SRC = \
test/core/gprpp/string_view_test.cc \
STRING_VIEW_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STRING_VIEW_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/string_view_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+.
$(BINDIR)/$(CONFIG)/string_view_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/string_view_test: $(PROTOBUF_DEP) $(STRING_VIEW_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(STRING_VIEW_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/string_view_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/gprpp/string_view_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(LIBDIR)/$(CONFIG)/libupb.a
deps_string_view_test: $(STRING_VIEW_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(STRING_VIEW_TEST_OBJS:.o=.dep)
endif
endif
TEST_CPP_CLIENT_CREDENTIALS_TEST_SRC = \
test/cpp/client/credentials_test.cc \

@ -302,7 +302,6 @@ libs:
- src/core/lib/gprpp/map.h
- src/core/lib/gprpp/memory.h
- src/core/lib/gprpp/mpscq.h
- src/core/lib/gprpp/string_view.h
- src/core/lib/gprpp/sync.h
- src/core/lib/gprpp/thd.h
- src/core/lib/profiling/timers.h
@ -7241,19 +7240,6 @@ targets:
- address_sorting
- upb
uses_polling: false
- name: string_view_test
gtest: true
build: test
language: c++
headers: []
src:
- test/core/gprpp/string_view_test.cc
deps:
- grpc_test_util
- grpc
- gpr
- address_sorting
- upb
- name: test_cpp_client_credentials_test
gtest: true
build: test

@ -425,7 +425,6 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/orphanable.h',
'src/core/lib/gprpp/ref_counted.h',
'src/core/lib/gprpp/ref_counted_ptr.h',
'src/core/lib/gprpp/string_view.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/http/format_request.h',
@ -875,7 +874,6 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/orphanable.h',
'src/core/lib/gprpp/ref_counted.h',
'src/core/lib/gprpp/ref_counted_ptr.h',
'src/core/lib/gprpp/string_view.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/http/format_request.h',

@ -618,7 +618,6 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/orphanable.h',
'src/core/lib/gprpp/ref_counted.h',
'src/core/lib/gprpp/ref_counted_ptr.h',
'src/core/lib/gprpp/string_view.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/gprpp/thd_posix.cc',
@ -1231,7 +1230,6 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/orphanable.h',
'src/core/lib/gprpp/ref_counted.h',
'src/core/lib/gprpp/ref_counted_ptr.h',
'src/core/lib/gprpp/string_view.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/http/format_request.h',

@ -540,7 +540,6 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/gprpp/orphanable.h )
s.files += %w( src/core/lib/gprpp/ref_counted.h )
s.files += %w( src/core/lib/gprpp/ref_counted_ptr.h )
s.files += %w( src/core/lib/gprpp/string_view.h )
s.files += %w( src/core/lib/gprpp/sync.h )
s.files += %w( src/core/lib/gprpp/thd.h )
s.files += %w( src/core/lib/gprpp/thd_posix.cc )

@ -520,7 +520,6 @@
<file baseinstalldir="/" name="src/core/lib/gprpp/orphanable.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/ref_counted.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/ref_counted_ptr.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/string_view.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/sync.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/thd.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/thd_posix.cc" role="src" />

@ -22,6 +22,8 @@
#include "udpa/data/orca/v1/orca_load_report.upb.h"
#include "src/core/lib/gprpp/map.h"
namespace grpc_core {
namespace {

@ -125,8 +125,8 @@ class HttpProxyMapper : public ProxyMapperInterface {
if (no_proxy_str != nullptr) {
static const char* NO_PROXY_SEPARATOR = ",";
bool use_proxy = true;
grpc_core::UniquePtr<char> server_host;
grpc_core::UniquePtr<char> server_port;
std::string server_host;
std::string server_port;
if (!grpc_core::SplitHostPort(
uri->path[0] == '/' ? uri->path + 1 : uri->path, &server_host,
&server_port)) {
@ -136,7 +136,7 @@ class HttpProxyMapper : public ProxyMapperInterface {
server_uri);
gpr_free(no_proxy_str);
} else {
size_t uri_len = strlen(server_host.get());
size_t uri_len = server_host.size();
char** no_proxy_hosts;
size_t num_no_proxy_hosts;
gpr_string_split(no_proxy_str, NO_PROXY_SEPARATOR, &no_proxy_hosts,
@ -146,7 +146,8 @@ class HttpProxyMapper : public ProxyMapperInterface {
size_t no_proxy_len = strlen(no_proxy_entry);
if (no_proxy_len <= uri_len &&
gpr_stricmp(no_proxy_entry,
&(server_host.get()[uri_len - no_proxy_len])) == 0) {
&(server_host.c_str()[uri_len - no_proxy_len])) ==
0) {
gpr_log(GPR_INFO, "not using proxy for host in no_proxy list '%s'",
server_uri);
use_proxy = false;

@ -73,8 +73,8 @@ bool grpc_parse_ipv4_hostport(const char* hostport, grpc_resolved_address* addr,
bool log_errors) {
bool success = false;
// Split host and port.
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
if (!grpc_core::SplitHostPort(hostport, &host, &port)) {
if (log_errors) {
gpr_log(GPR_ERROR, "Failed gpr_split_host_port(%s, ...)", hostport);
@ -86,21 +86,21 @@ bool grpc_parse_ipv4_hostport(const char* hostport, grpc_resolved_address* addr,
addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
grpc_sockaddr_in* in = reinterpret_cast<grpc_sockaddr_in*>(addr->addr);
in->sin_family = GRPC_AF_INET;
if (grpc_inet_pton(GRPC_AF_INET, host.get(), &in->sin_addr) == 0) {
if (grpc_inet_pton(GRPC_AF_INET, host.c_str(), &in->sin_addr) == 0) {
if (log_errors) {
gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host.get());
gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host.c_str());
}
goto done;
}
// Parse port.
if (port == nullptr) {
if (port.empty()) {
if (log_errors) gpr_log(GPR_ERROR, "no port given for ipv4 scheme");
goto done;
}
int port_num;
if (sscanf(port.get(), "%d", &port_num) != 1 || port_num < 0 ||
if (sscanf(port.c_str(), "%d", &port_num) != 1 || port_num < 0 ||
port_num > 65535) {
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 port: '%s'", port.get());
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 port: '%s'", port.c_str());
goto done;
}
in->sin_port = grpc_htons(static_cast<uint16_t>(port_num));
@ -125,8 +125,8 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
bool log_errors) {
bool success = false;
// Split host and port.
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
if (!grpc_core::SplitHostPort(hostport, &host, &port)) {
if (log_errors) {
gpr_log(GPR_ERROR, "Failed gpr_split_host_port(%s, ...)", hostport);
@ -140,11 +140,12 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
in6->sin6_family = GRPC_AF_INET6;
// Handle the RFC6874 syntax for IPv6 zone identifiers.
char* host_end =
static_cast<char*>(gpr_memrchr(host.get(), '%', strlen(host.get())));
static_cast<char*>(gpr_memrchr(host.c_str(), '%', host.size()));
if (host_end != nullptr) {
GPR_ASSERT(host_end >= host.get());
GPR_ASSERT(host_end >= host.c_str());
char host_without_scope[GRPC_INET6_ADDRSTRLEN + 1];
size_t host_without_scope_len = static_cast<size_t>(host_end - host.get());
size_t host_without_scope_len =
static_cast<size_t>(host_end - host.c_str());
uint32_t sin6_scope_id = 0;
if (host_without_scope_len > GRPC_INET6_ADDRSTRLEN) {
if (log_errors) {
@ -156,7 +157,7 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
}
goto done;
}
strncpy(host_without_scope, host.get(), host_without_scope_len);
strncpy(host_without_scope, host.c_str(), host_without_scope_len);
host_without_scope[host_without_scope_len] = '\0';
if (grpc_inet_pton(GRPC_AF_INET6, host_without_scope, &in6->sin6_addr) ==
0) {
@ -165,9 +166,9 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
}
goto done;
}
if (gpr_parse_bytes_to_uint32(
host_end + 1, strlen(host.get()) - host_without_scope_len - 1,
&sin6_scope_id) == 0) {
if (gpr_parse_bytes_to_uint32(host_end + 1,
host.size() - host_without_scope_len - 1,
&sin6_scope_id) == 0) {
if ((sin6_scope_id = grpc_if_nametoindex(host_end + 1)) == 0) {
gpr_log(GPR_ERROR,
"Invalid interface name: '%s'. "
@ -179,22 +180,22 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
// Handle "sin6_scope_id" being type "u_long". See grpc issue #10027.
in6->sin6_scope_id = sin6_scope_id;
} else {
if (grpc_inet_pton(GRPC_AF_INET6, host.get(), &in6->sin6_addr) == 0) {
if (grpc_inet_pton(GRPC_AF_INET6, host.c_str(), &in6->sin6_addr) == 0) {
if (log_errors) {
gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host.get());
gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host.c_str());
}
goto done;
}
}
// Parse port.
if (port == nullptr) {
if (port.empty()) {
if (log_errors) gpr_log(GPR_ERROR, "no port given for ipv6 scheme");
goto done;
}
int port_num;
if (sscanf(port.get(), "%d", &port_num) != 1 || port_num < 0 ||
if (sscanf(port.c_str(), "%d", &port_num) != 1 || port_num < 0 ||
port_num > 65535) {
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv6 port: '%s'", port.get());
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv6 port: '%s'", port.c_str());
goto done;
}
in6->sin6_port = grpc_htons(static_cast<uint16_t>(port_num));

@ -163,7 +163,7 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
}
static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
grpc_ares_request* parent_request, char* host, uint16_t port,
grpc_ares_request* parent_request, const char* host, uint16_t port,
bool is_balancer) {
GRPC_CARES_TRACE_LOG(
"request:%p create_hostbyname_request_locked host:%s port:%d "
@ -367,22 +367,22 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
grpc_ares_hostbyname_request* hr = nullptr;
ares_channel* channel = nullptr;
/* parse name, splitting it into host and port parts */
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
grpc_core::SplitHostPort(name, &host, &port);
if (host == nullptr) {
if (host.empty()) {
error = grpc_error_set_str(
GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
goto error_cleanup;
} else if (port == nullptr) {
} else if (port.empty()) {
if (default_port == nullptr) {
error = grpc_error_set_str(
GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
goto error_cleanup;
}
port.reset(gpr_strdup(default_port));
port = default_port;
}
error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
query_timeout_ms,
@ -427,22 +427,22 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
}
r->pending_queries = 1;
if (grpc_ares_query_ipv6()) {
hr = create_hostbyname_request_locked(r, host.get(),
grpc_strhtons(port.get()),
hr = create_hostbyname_request_locked(r, host.c_str(),
grpc_strhtons(port.c_str()),
/*is_balancer=*/false);
ares_gethostbyname(*channel, hr->host, AF_INET6, on_hostbyname_done_locked,
hr);
}
hr =
create_hostbyname_request_locked(r, host.get(), grpc_strhtons(port.get()),
/*is_balancer=*/false);
hr = create_hostbyname_request_locked(r, host.c_str(),
grpc_strhtons(port.c_str()),
/*is_balancer=*/false);
ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_locked,
hr);
if (r->balancer_addresses_out != nullptr) {
/* Query the SRV record */
grpc_ares_request_ref_locked(r);
char* service_name;
gpr_asprintf(&service_name, "_grpclb._tcp.%s", host.get());
gpr_asprintf(&service_name, "_grpclb._tcp.%s", host.c_str());
ares_query(*channel, service_name, ns_c_in, ns_t_srv,
on_srv_query_done_locked, r);
gpr_free(service_name);
@ -450,7 +450,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
if (r->service_config_json_out != nullptr) {
grpc_ares_request_ref_locked(r);
char* config_name;
gpr_asprintf(&config_name, "_grpc_config.%s", host.get());
gpr_asprintf(&config_name, "_grpc_config.%s", host.c_str());
ares_search(*channel, config_name, ns_c_in, ns_t_txt, on_txt_done_locked,
r);
gpr_free(config_name);
@ -465,18 +465,17 @@ error_cleanup:
static bool inner_resolve_as_ip_literal_locked(
const char* name, const char* default_port,
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
grpc_core::UniquePtr<char>* host, grpc_core::UniquePtr<char>* port,
grpc_core::UniquePtr<char>* hostport) {
std::unique_ptr<grpc_core::ServerAddressList>* addrs, std::string* host,
std::string* port, std::string* hostport) {
grpc_core::SplitHostPort(name, host, port);
if (*host == nullptr) {
if (host->empty()) {
gpr_log(GPR_ERROR,
"Failed to parse %s to host:port while attempting to resolve as ip "
"literal.",
name);
return false;
}
if (*port == nullptr) {
if (port->empty()) {
if (default_port == nullptr) {
gpr_log(GPR_ERROR,
"No port or default port for %s while attempting to resolve as "
@ -484,13 +483,13 @@ static bool inner_resolve_as_ip_literal_locked(
name);
return false;
}
port->reset(gpr_strdup(default_port));
*port = default_port;
}
grpc_resolved_address addr;
GPR_ASSERT(grpc_core::JoinHostPort(hostport, host->get(), atoi(port->get())));
if (grpc_parse_ipv4_hostport(hostport->get(), &addr,
*hostport = grpc_core::JoinHostPort(*host, atoi(port->c_str()));
if (grpc_parse_ipv4_hostport(hostport->c_str(), &addr,
false /* log errors */) ||
grpc_parse_ipv6_hostport(hostport->get(), &addr,
grpc_parse_ipv6_hostport(hostport->c_str(), &addr,
false /* log errors */)) {
GPR_ASSERT(*addrs == nullptr);
*addrs = absl::make_unique<ServerAddressList>();
@ -503,22 +502,21 @@ static bool inner_resolve_as_ip_literal_locked(
static bool resolve_as_ip_literal_locked(
const char* name, const char* default_port,
std::unique_ptr<grpc_core::ServerAddressList>* addrs) {
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
grpc_core::UniquePtr<char> hostport;
std::string host;
std::string port;
std::string hostport;
bool out = inner_resolve_as_ip_literal_locked(name, default_port, addrs,
&host, &port, &hostport);
return out;
}
static bool target_matches_localhost_inner(const char* name,
grpc_core::UniquePtr<char>* host,
grpc_core::UniquePtr<char>* port) {
static bool target_matches_localhost_inner(const char* name, std::string* host,
std::string* port) {
if (!grpc_core::SplitHostPort(name, host, port)) {
gpr_log(GPR_ERROR, "Unable to split host and port for name: %s", name);
return false;
}
if (gpr_stricmp(host->get(), "localhost") == 0) {
if (gpr_stricmp(host->c_str(), "localhost") == 0) {
return true;
} else {
return false;
@ -526,25 +524,25 @@ static bool target_matches_localhost_inner(const char* name,
}
static bool target_matches_localhost(const char* name) {
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
return target_matches_localhost_inner(name, &host, &port);
}
#ifdef GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
static bool inner_maybe_resolve_localhost_manually_locked(
const grpc_ares_request* r, const char* name, const char* default_port,
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
grpc_core::UniquePtr<char>* host, grpc_core::UniquePtr<char>* port) {
std::unique_ptr<grpc_core::ServerAddressList>* addrs, std::string* host,
std::string* port) {
grpc_core::SplitHostPort(name, host, port);
if (*host == nullptr) {
if (host->empty()) {
gpr_log(GPR_ERROR,
"Failed to parse %s into host:port during manual localhost "
"resolution check.",
name);
return false;
}
if (*port == nullptr) {
if (port->empty()) {
if (default_port == nullptr) {
gpr_log(GPR_ERROR,
"No port or default port for %s during manual localhost "
@ -552,12 +550,12 @@ static bool inner_maybe_resolve_localhost_manually_locked(
name);
return false;
}
port->reset(gpr_strdup(default_port));
*port = default_port;
}
if (gpr_stricmp(host->get(), "localhost") == 0) {
if (gpr_stricmp(host->c_str(), "localhost") == 0) {
GPR_ASSERT(*addrs == nullptr);
*addrs = absl::make_unique<grpc_core::ServerAddressList>();
uint16_t numeric_port = grpc_strhtons(port->get());
uint16_t numeric_port = grpc_strhtons(port->c_str());
// Append the ipv6 loopback address.
struct sockaddr_in6 ipv6_loopback_addr;
memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
@ -585,8 +583,8 @@ static bool inner_maybe_resolve_localhost_manually_locked(
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
const grpc_ares_request* r, const char* name, const char* default_port,
std::unique_ptr<grpc_core::ServerAddressList>* addrs) {
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
return inner_maybe_resolve_localhost_manually_locked(r, name, default_port,
addrs, &host, &port);
}

@ -23,11 +23,12 @@
#include <errno.h>
#include <stdlib.h>
#include "absl/strings/string_view.h"
#include <grpc/support/string_util.h>
#include "src/core/lib/gpr/env.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/lib/iomgr/load_file.h"
#include "src/core/lib/slice/slice_internal.h"
@ -100,9 +101,8 @@ std::unique_ptr<XdsBootstrap> XdsBootstrap::ReadFromFile(XdsClient* client,
if (*error != GRPC_ERROR_NONE) return nullptr;
absl::string_view contents_str_view = StringViewFromSlice(contents);
if (GRPC_TRACE_FLAG_ENABLED(*tracer)) {
UniquePtr<char> str = StringViewToCString(contents_str_view);
gpr_log(GPR_DEBUG, "[xds_client %p] Bootstrap file contents: %s", client,
str.get());
std::string(contents_str_view).c_str());
}
Json json = Json::Parse(contents_str_view, error);
grpc_slice_unref_internal(contents);

@ -25,6 +25,7 @@
#include "absl/container/inlined_vector.h"
#include "absl/strings/str_format.h"
#include "absl/strings/str_join.h"
#include "absl/strings/string_view.h"
#include <grpc/byte_buffer_reader.h>
#include <grpc/grpc.h>
@ -49,7 +50,6 @@
#include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/sockaddr_utils.h"
@ -1879,7 +1879,7 @@ void XdsClient::WatchClusterData(
if (cluster_state.update.has_value()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
gpr_log(GPR_INFO, "[xds_client %p] returning cached cluster data for %s",
this, StringViewToCString(cluster_name).get());
this, cluster_name_str.c_str());
}
w->OnClusterChanged(cluster_state.update.value());
}
@ -1915,7 +1915,7 @@ void XdsClient::WatchEndpointData(
if (endpoint_state.update.has_value()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
gpr_log(GPR_INFO, "[xds_client %p] returning cached endpoint data for %s",
this, StringViewToCString(eds_service_name).get());
this, eds_service_name_str.c_str());
}
w->OnEndpointChanged(endpoint_state.update.value());
}

@ -387,15 +387,14 @@ void PopulateSocketAddressJson(Json::Object* json, const char* name,
(strcmp(uri->scheme, "ipv6") == 0))) {
const char* host_port = uri->path;
if (*host_port == '/') ++host_port;
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
GPR_ASSERT(SplitHostPort(host_port, &host, &port));
int port_num = -1;
if (port != nullptr) {
port_num = atoi(port.get());
if (!port.empty()) {
port_num = atoi(port.data());
}
char* b64_host =
grpc_base64_encode(host.get(), strlen(host.get()), false, false);
char* b64_host = grpc_base64_encode(host.data(), host.size(), false, false);
data["tcpip_address"] = Json::Object{
{"port", port_num},
{"ip_address", b64_host},

@ -22,6 +22,7 @@
#include <string.h>
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include <grpc/support/alloc.h>
@ -29,9 +30,18 @@
#include <grpc/support/string_util.h>
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/string_view.h"
namespace grpc_core {
std::string JoinHostPort(absl::string_view host, int port) {
if (host[0] != '[' && host.rfind(':') != host.npos) {
// IPv6 literals must be enclosed in brackets.
return absl::StrFormat("[%s]:%d", host, port);
}
// Ordinary non-bracketed host:port.
return absl::StrFormat("%s:%d", host, port);
}
int JoinHostPort(grpc_core::UniquePtr<char>* out, const char* host, int port) {
char* tmp;
int ret;
@ -99,10 +109,10 @@ bool SplitHostPort(absl::string_view name, absl::string_view* host,
return DoSplitHostPort(name, host, port, &unused);
}
bool SplitHostPort(absl::string_view name, grpc_core::UniquePtr<char>* host,
grpc_core::UniquePtr<char>* port) {
GPR_DEBUG_ASSERT(host != nullptr && *host == nullptr);
GPR_DEBUG_ASSERT(port != nullptr && *port == nullptr);
bool SplitHostPort(absl::string_view name, std::string* host,
std::string* port) {
GPR_DEBUG_ASSERT(host != nullptr && host->empty());
GPR_DEBUG_ASSERT(port != nullptr && port->empty());
absl::string_view host_view;
absl::string_view port_view;
bool has_port;
@ -111,11 +121,12 @@ bool SplitHostPort(absl::string_view name, grpc_core::UniquePtr<char>* host,
// We always set the host, but port is set only when DoSplitHostPort find a
// port in the string, to remain backward compatible with the old
// gpr_split_host_port API.
*host = StringViewToCString(host_view);
*host = std::string(host_view);
if (has_port) {
*port = StringViewToCString(port_view);
*port = std::string(port_view);
}
}
return ret;
}
} // namespace grpc_core

@ -27,14 +27,15 @@
namespace grpc_core {
/** Given a host and port, creates a newly-allocated string of the form
"host:port" or "[ho:st]:port", depending on whether the host contains colons
like an IPv6 literal. If the host is already bracketed, then additional
brackets will not be added.
Usage is similar to gpr_asprintf: returns the number of bytes written
// Given a host and port, creates a newly-allocated string of the form
// "host:port" or "[ho:st]:port", depending on whether the host contains colons
// like an IPv6 literal. If the host is already bracketed, then additional
// brackets will not be added.
std::string JoinHostPort(absl::string_view host, int port);
// TODO(roth): Change all callers to use the above variant and then
// remove this one.
/* Usage is similar to gpr_asprintf: returns the number of bytes written
(excluding the final '\0'), and *out points to a string.
In the unlikely event of an error, returns -1 and sets *out to NULL. */
int JoinHostPort(grpc_core::UniquePtr<char>* out, const char* host, int port);
@ -43,7 +44,7 @@ int JoinHostPort(grpc_core::UniquePtr<char>* out, const char* host, int port);
There are two variants of this method:
1) absl::string_view output: port and host are returned as views on name.
2) char* output: port and host are copied into newly allocated strings.
2) std::string output: port and host are copied into newly allocated strings.
Prefer variant (1) over (2), because no allocation or copy is performed in
variant (1). Use (2) only when interacting with C API that mandate
@ -53,8 +54,8 @@ int JoinHostPort(grpc_core::UniquePtr<char>* out, const char* host, int port);
cleared on failure. */
bool SplitHostPort(absl::string_view name, absl::string_view* host,
absl::string_view* port);
bool SplitHostPort(absl::string_view name, grpc_core::UniquePtr<char>* host,
grpc_core::UniquePtr<char>* port);
bool SplitHostPort(absl::string_view name, std::string* host,
std::string* port);
} // namespace grpc_core

@ -25,8 +25,9 @@
#include <map>
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/gprpp/string_view.h"
#include "absl/strings/string_view.h"
#include "src/core/lib/gprpp/memory.h"
namespace grpc_core {

@ -1,52 +0,0 @@
/*
*
* Copyright 2019 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef GRPC_CORE_LIB_GPRPP_STRING_VIEW_H
#define GRPC_CORE_LIB_GPRPP_STRING_VIEW_H
#include <grpc/support/port_platform.h>
#include <grpc/impl/codegen/slice.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <algorithm>
#include <cstdint>
#include <cstring>
#include <limits>
#include <string>
#include "absl/strings/string_view.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/memory.h"
namespace grpc_core {
// Creates a dup of the string viewed by this class.
// Return value is null-terminated and never nullptr.
inline grpc_core::UniquePtr<char> StringViewToCString(
const absl::string_view sv) {
char* str = static_cast<char*>(gpr_malloc(sv.size() + 1));
if (sv.size() > 0) memcpy(str, sv.data(), sv.size());
str[sv.size()] = '\0';
return grpc_core::UniquePtr<char>(str);
}
} // namespace grpc_core
#endif /* GRPC_CORE_LIB_GPRPP_STRING_VIEW_H */

@ -34,12 +34,12 @@
#include <string.h>
typedef struct grpc_custom_resolver {
grpc_closure* on_done;
grpc_resolved_addresses** addresses;
char* host;
char* port;
} grpc_custom_resolver;
struct grpc_custom_resolver {
grpc_closure* on_done = nullptr;
grpc_resolved_addresses** addresses = nullptr;
std::string host;
std::string port;
};
static grpc_custom_resolver_vtable* resolve_address_vtable = nullptr;
@ -48,18 +48,18 @@ static int retry_named_port_failure(grpc_custom_resolver* r,
// This loop is copied from resolve_address_posix.c
const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
if (strcmp(r->port, svc[i][0]) == 0) {
gpr_free(r->port);
r->port = gpr_strdup(svc[i][1]);
if (r->port == svc[i][0]) {
r->port = svc[i][1];
if (res) {
grpc_error* error =
resolve_address_vtable->resolve(r->host, r->port, res);
grpc_error* error = resolve_address_vtable->resolve(
r->host.c_str(), r->port.c_str(), res);
if (error != GRPC_ERROR_NONE) {
GRPC_ERROR_UNREF(error);
return 0;
}
} else {
resolve_address_vtable->resolve_async(r, r->host, r->port);
resolve_address_vtable->resolve_async(r, r->host.c_str(),
r->port.c_str());
}
return 1;
}
@ -81,26 +81,23 @@ void grpc_custom_resolve_callback(grpc_custom_resolver* r,
if (r->on_done) {
grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
}
gpr_free(r->host);
gpr_free(r->port);
gpr_free(r);
delete r;
}
static grpc_error* try_split_host_port(const char* name,
const char* default_port,
grpc_core::UniquePtr<char>* host,
grpc_core::UniquePtr<char>* port) {
std::string* host, std::string* port) {
/* parse name, splitting it into host and port parts */
grpc_error* error;
grpc_core::SplitHostPort(name, host, port);
if (*host == nullptr) {
if (host->empty()) {
char* msg;
gpr_asprintf(&msg, "unparseable host:port: '%s'", name);
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
return error;
}
if (*port == nullptr) {
if (port->empty()) {
// TODO(murgatroid99): add tests for this case
if (default_port == nullptr) {
char* msg;
@ -109,7 +106,7 @@ static grpc_error* try_split_host_port(const char* name,
gpr_free(msg);
return error;
}
port->reset(gpr_strdup(default_port));
*port = default_port;
}
return GRPC_ERROR_NONE;
}
@ -117,26 +114,21 @@ static grpc_error* try_split_host_port(const char* name,
static grpc_error* blocking_resolve_address_impl(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) {
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
grpc_error* err;
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
err = try_split_host_port(name, default_port, &host, &port);
grpc_custom_resolver resolver;
grpc_error* err =
try_split_host_port(name, default_port, &resolver.host, &resolver.port);
if (err != GRPC_ERROR_NONE) {
return err;
}
/* Call getaddrinfo */
grpc_custom_resolver resolver;
resolver.host = host.get();
resolver.port = port.get();
grpc_resolved_addresses* addrs;
grpc_core::ExecCtx* curr = grpc_core::ExecCtx::Get();
grpc_core::ExecCtx::Set(nullptr);
err = resolve_address_vtable->resolve(host.get(), port.get(), &addrs);
err = resolve_address_vtable->resolve(resolver.host.c_str(),
resolver.port.c_str(), &addrs);
if (err != GRPC_ERROR_NONE) {
if (retry_named_port_failure(&resolver, &addrs)) {
GRPC_ERROR_UNREF(err);
@ -154,24 +146,22 @@ static void resolve_address_impl(const char* name, const char* default_port,
grpc_pollset_set* /*interested_parties*/,
grpc_closure* on_done,
grpc_resolved_addresses** addrs) {
grpc_custom_resolver* r = nullptr;
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
grpc_error* err;
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
err = try_split_host_port(name, default_port, &host, &port);
std::string host;
std::string port;
grpc_error* err = try_split_host_port(name, default_port, &host, &port);
if (err != GRPC_ERROR_NONE) {
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, err);
return;
}
r = (grpc_custom_resolver*)gpr_malloc(sizeof(grpc_custom_resolver));
grpc_custom_resolver* r = new grpc_custom_resolver();
r->on_done = on_done;
r->addresses = addrs;
r->host = host.release();
r->port = port.release();
r->host = std::move(host);
r->port = std::move(port);
/* Call getaddrinfo */
resolve_address_vtable->resolve_async(r, r->host, r->port);
resolve_address_vtable->resolve_async(r, r->host.c_str(), r->port.c_str());
}
static grpc_address_resolver_vtable custom_resolver_vtable = {

@ -29,8 +29,10 @@
typedef struct grpc_custom_resolver grpc_custom_resolver;
typedef struct grpc_custom_resolver_vtable {
grpc_error* (*resolve)(char* host, char* port, grpc_resolved_addresses** res);
void (*resolve_async)(grpc_custom_resolver* resolver, char* host, char* port);
grpc_error* (*resolve)(const char* host, const char* port,
grpc_resolved_addresses** res);
void (*resolve_async)(grpc_custom_resolver* resolver, const char* host,
const char* port);
} grpc_custom_resolver_vtable;
void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,

@ -57,24 +57,24 @@ static grpc_error* posix_blocking_resolve_address(
return grpc_resolve_unix_domain_address(name + 5, addresses);
}
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
/* parse name, splitting it into host and port parts */
grpc_core::SplitHostPort(name, &host, &port);
if (host == nullptr) {
if (host.empty()) {
err = grpc_error_set_str(
GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
goto done;
}
if (port == nullptr) {
if (port.empty()) {
if (default_port == nullptr) {
err = grpc_error_set_str(
GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
goto done;
}
port.reset(gpr_strdup(default_port));
port = default_port;
}
/* Call getaddrinfo */
@ -84,16 +84,16 @@ static grpc_error* posix_blocking_resolve_address(
hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
GRPC_SCHEDULING_START_BLOCKING_REGION;
s = getaddrinfo(host.get(), port.get(), &hints, &result);
s = getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
GRPC_SCHEDULING_END_BLOCKING_REGION;
if (s != 0) {
/* Retry if well-known service name is recognized */
const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
for (i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
if (strcmp(port.get(), svc[i][0]) == 0) {
if (port == svc[i][0]) {
GRPC_SCHEDULING_START_BLOCKING_REGION;
s = getaddrinfo(host.get(), svc[i][1], &hints, &result);
s = getaddrinfo(host.c_str(), svc[i][1], &hints, &result);
GRPC_SCHEDULING_END_BLOCKING_REGION;
break;
}

@ -62,17 +62,17 @@ static grpc_error* windows_blocking_resolve_address(
grpc_error* error = GRPC_ERROR_NONE;
/* parse name, splitting it into host and port parts */
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
grpc_core::SplitHostPort(name, &host, &port);
if (host == NULL) {
if (host.empty()) {
char* msg;
gpr_asprintf(&msg, "unparseable host:port: '%s'", name);
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
goto done;
}
if (port == NULL) {
if (port.empty()) {
if (default_port == NULL) {
char* msg;
gpr_asprintf(&msg, "no port in name '%s'", name);
@ -80,7 +80,7 @@ static grpc_error* windows_blocking_resolve_address(
gpr_free(msg);
goto done;
}
port.reset(gpr_strdup(default_port));
port = default_port;
}
/* Call getaddrinfo */
@ -90,7 +90,7 @@ static grpc_error* windows_blocking_resolve_address(
hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
GRPC_SCHEDULING_START_BLOCKING_REGION;
s = getaddrinfo(host.get(), port.get(), &hints, &result);
s = getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
GRPC_SCHEDULING_END_BLOCKING_REGION;
if (s != 0) {
error = GRPC_WSA_ERROR(WSAGetLastError(), "getaddrinfo");

@ -68,6 +68,8 @@ int grpc_sockaddr_set_port(const grpc_resolved_address* addr, int port);
In the unlikely event of an error, returns -1 and sets *out to NULL.
The existing value of errno is always preserved. */
// TODO(roth): Change this to return std::string as part of eliminating
// the old API for JoinHostPort().
int grpc_sockaddr_to_string(char** out, const grpc_resolved_address* addr,
int normalize);

@ -145,11 +145,11 @@ static void ParseResolvedAddress(const grpc_resolved_address* addr,
CFStringRef* host, int* port) {
char* host_port;
grpc_sockaddr_to_string(&host_port, addr, 1);
grpc_core::UniquePtr<char> host_string;
grpc_core::UniquePtr<char> port_string;
std::string host_string;
std::string port_string;
grpc_core::SplitHostPort(host_port, &host_string, &port_string);
*host =
CFStringCreateWithCString(NULL, host_string.get(), kCFStringEncodingUTF8);
*host = CFStringCreateWithCString(NULL, host_string.c_str(),
kCFStringEncodingUTF8);
gpr_free(host_port);
*port = grpc_sockaddr_get_port(addr);
}

@ -370,7 +370,7 @@ static void uv_resolve_callback(uv_getaddrinfo_t* req, int status,
tcp_error_create("getaddrinfo failed", status));
}
static grpc_error* uv_resolve(char* host, char* port,
static grpc_error* uv_resolve(const char* host, const char* port,
grpc_resolved_addresses** result) {
int status;
uv_getaddrinfo_t req;
@ -388,7 +388,8 @@ static grpc_error* uv_resolve(char* host, char* port,
return tcp_error_create("getaddrinfo failed", status);
}
static void uv_resolve_async(grpc_custom_resolver* r, char* host, char* port) {
static void uv_resolve_async(grpc_custom_resolver* r, const char* host,
const char* port) {
int status;
uv_getaddrinfo_t* req =
(uv_getaddrinfo_t*)gpr_malloc(sizeof(uv_getaddrinfo_t));

@ -22,6 +22,8 @@
#include <stdbool.h>
#include "absl/strings/string_view.h"
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
@ -31,7 +33,6 @@
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/host_port.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/lib/security/context/security_context.h"
#include "src/core/lib/security/credentials/credentials.h"
#include "src/core/lib/security/credentials/ssl/ssl_credentials.h"
@ -73,14 +74,13 @@ class grpc_ssl_channel_security_connector final
: grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
std::move(channel_creds),
std::move(request_metadata_creds)),
overridden_target_name_(overridden_target_name == nullptr
? nullptr
: gpr_strdup(overridden_target_name)),
overridden_target_name_(
overridden_target_name == nullptr ? "" : overridden_target_name),
verify_options_(&config->verify_options) {
absl::string_view host;
absl::string_view port;
grpc_core::SplitHostPort(target_name, &host, &port);
target_name_ = grpc_core::StringViewToCString(host);
target_name_ = std::string(host);
}
~grpc_ssl_channel_security_connector() override {
@ -125,8 +125,8 @@ class grpc_ssl_channel_security_connector final
tsi_handshaker* tsi_hs = nullptr;
tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
client_handshaker_factory_,
overridden_target_name_ != nullptr ? overridden_target_name_.get()
: target_name_.get(),
overridden_target_name_.empty() ? target_name_.c_str()
: overridden_target_name_.c_str(),
&tsi_hs);
if (result != TSI_OK) {
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
@ -140,9 +140,9 @@ class grpc_ssl_channel_security_connector final
void check_peer(tsi_peer peer, grpc_endpoint* /*ep*/,
grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
grpc_closure* on_peer_checked) override {
const char* target_name = overridden_target_name_ != nullptr
? overridden_target_name_.get()
: target_name_.get();
const char* target_name = overridden_target_name_.empty()
? target_name_.c_str()
: overridden_target_name_.c_str();
grpc_error* error = ssl_check_peer(target_name, &peer, auth_context);
if (error == GRPC_ERROR_NONE &&
verify_options_->verify_peer_callback != nullptr) {
@ -177,23 +177,17 @@ class grpc_ssl_channel_security_connector final
reinterpret_cast<const grpc_ssl_channel_security_connector*>(other_sc);
int c = channel_security_connector_cmp(other);
if (c != 0) return c;
c = strcmp(target_name_.get(), other->target_name_.get());
c = target_name_.compare(other->target_name_);
if (c != 0) return c;
return (overridden_target_name_ == nullptr ||
other->overridden_target_name_ == nullptr)
? GPR_ICMP(overridden_target_name_.get(),
other->overridden_target_name_.get())
: strcmp(overridden_target_name_.get(),
other->overridden_target_name_.get());
return overridden_target_name_.compare(other->overridden_target_name_);
}
bool check_call_host(absl::string_view host, grpc_auth_context* auth_context,
grpc_closure* /*on_call_host_checked*/,
grpc_error** error) override {
return grpc_ssl_check_call_host(
host, target_name_.get(),
overridden_target_name_ != nullptr ? overridden_target_name_.get() : "",
auth_context, error);
return grpc_ssl_check_call_host(host, target_name_.c_str(),
overridden_target_name_.c_str(),
auth_context, error);
}
void cancel_check_call_host(grpc_closure* /*on_call_host_checked*/,
@ -203,8 +197,8 @@ class grpc_ssl_channel_security_connector final
private:
tsi_ssl_client_handshaker_factory* client_handshaker_factory_;
grpc_core::UniquePtr<char> target_name_;
grpc_core::UniquePtr<char> overridden_target_name_;
std::string target_name_;
std::string overridden_target_name_;
const verify_peer_options* verify_options_;
};

@ -23,13 +23,14 @@
#include <stdbool.h>
#include <string.h>
#include "absl/strings/string_view.h"
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include "src/core/lib/gprpp/host_port.h"
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/lib/security/credentials/ssl/ssl_credentials.h"
#include "src/core/lib/security/credentials/tls/tls_credentials.h"
#include "src/core/lib/security/security_connector/ssl_utils.h"
@ -145,15 +146,14 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector(
: grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
std::move(channel_creds),
std::move(request_metadata_creds)),
overridden_target_name_(overridden_target_name == nullptr
? nullptr
: gpr_strdup(overridden_target_name)) {
overridden_target_name_(
overridden_target_name == nullptr ? "" : overridden_target_name) {
key_materials_config_ = grpc_tls_key_materials_config_create()->Ref();
check_arg_ = ServerAuthorizationCheckArgCreate(this);
absl::string_view host;
absl::string_view port;
grpc_core::SplitHostPort(target_name, &host, &port);
target_name_ = StringViewToCString(host);
target_name_ = std::string(host);
}
TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
@ -177,8 +177,8 @@ void TlsChannelSecurityConnector::add_handshakers(
tsi_handshaker* tsi_hs = nullptr;
tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
client_handshaker_factory_,
overridden_target_name_ != nullptr ? overridden_target_name_.get()
: target_name_.get(),
overridden_target_name_.empty() ? target_name_.c_str()
: overridden_target_name_.c_str(),
&tsi_hs);
if (result != TSI_OK) {
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
@ -193,9 +193,9 @@ void TlsChannelSecurityConnector::check_peer(
tsi_peer peer, grpc_endpoint* /*ep*/,
grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
grpc_closure* on_peer_checked) {
const char* target_name = overridden_target_name_ != nullptr
? overridden_target_name_.get()
: target_name_.get();
const char* target_name = overridden_target_name_.empty()
? target_name_.c_str()
: overridden_target_name_.c_str();
grpc_error* error = grpc_ssl_check_alpn(&peer);
if (error != GRPC_ERROR_NONE) {
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, error);
@ -272,16 +272,16 @@ int TlsChannelSecurityConnector::cmp(
if (c != 0) {
return c;
}
return grpc_ssl_cmp_target_name(target_name_.get(), other->target_name_.get(),
overridden_target_name_.get(),
other->overridden_target_name_.get());
return grpc_ssl_cmp_target_name(
target_name_.c_str(), other->target_name_.c_str(),
overridden_target_name_.c_str(), other->overridden_target_name_.c_str());
}
bool TlsChannelSecurityConnector::check_call_host(
absl::string_view host, grpc_auth_context* auth_context,
grpc_closure* on_call_host_checked, grpc_error** error) {
return grpc_ssl_check_call_host(host, target_name_.get(),
overridden_target_name_.get(), auth_context,
return grpc_ssl_check_call_host(host, target_name_.c_str(),
overridden_target_name_.c_str(), auth_context,
error);
}

@ -97,8 +97,8 @@ class TlsChannelSecurityConnector final
grpc_core::Mutex mu_;
grpc_closure* on_peer_checked_;
grpc_core::UniquePtr<char> target_name_;
grpc_core::UniquePtr<char> overridden_target_name_;
std::string target_name_;
std::string overridden_target_name_;
tsi_ssl_client_handshaker_factory* client_handshaker_factory_ = nullptr;
grpc_tls_server_authorization_check_arg* check_arg_;
grpc_core::RefCountedPtr<grpc_tls_key_materials_config> key_materials_config_;

@ -34,6 +34,7 @@
#endif
#include "absl/strings/match.h"
#include "absl/strings/string_view.h"
#include <grpc/grpc_security.h>
#include <grpc/support/alloc.h>
@ -53,7 +54,6 @@ extern "C" {
}
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/tsi/ssl/session_cache/ssl_session_cache.h"
#include "src/core/tsi/ssl_types.h"
#include "src/core/tsi/transport_security.h"
@ -1677,10 +1677,8 @@ static int does_entry_match_name(absl::string_view entry,
entry.remove_prefix(2); /* Remove *. */
size_t dot = name_subdomain.find('.');
if (dot == absl::string_view::npos || dot == name_subdomain.size() - 1) {
grpc_core::UniquePtr<char> name_subdomain_cstr(
grpc_core::StringViewToCString(name_subdomain));
gpr_log(GPR_ERROR, "Invalid toplevel subdomain: %s",
name_subdomain_cstr.get());
std::string(name_subdomain).c_str());
return 0;
}
if (name_subdomain.back() == '.') {

@ -167,8 +167,8 @@ cdef void asyncio_socket_accept(
cdef grpc_error* asyncio_resolve(
char* host,
char* port,
const char* host,
const char* port,
grpc_resolved_addresses** res) with gil:
result = native_socket.getaddrinfo(host, port)
res[0] = tuples_to_resolvaddr(result)
@ -176,8 +176,8 @@ cdef grpc_error* asyncio_resolve(
cdef void asyncio_resolve_async(
grpc_custom_resolver* grpc_resolver,
char* host,
char* port) with gil:
const char* host,
const char* port) with gil:
resolver = _AsyncioResolver.create(grpc_resolver)
resolver.resolve(host, port)

@ -21,4 +21,4 @@ cdef class _AsyncioResolver:
@staticmethod
cdef _AsyncioResolver create(grpc_custom_resolver* grpc_resolver)
cdef void resolve(self, char* host, char* port)
cdef void resolve(self, const char* host, const char* port)

@ -48,7 +48,7 @@ cdef class _AsyncioResolver:
<grpc_error*>0
)
cdef void resolve(self, char* host, char* port):
cdef void resolve(self, const char* host, const char* port):
assert not self._task_resolve
self._task_resolve = self._loop.create_task(

@ -37,5 +37,5 @@ cdef class SocketWrapper:
cdef class ResolveWrapper:
cdef grpc_custom_resolver *c_resolver
cdef char* c_host
cdef char* c_port
cdef const char* c_host
cdef const char* c_port

@ -283,14 +283,14 @@ cdef socket_resolve_async_cython(ResolveWrapper resolve_wrapper):
def socket_resolve_async_python(resolve_wrapper):
socket_resolve_async_cython(resolve_wrapper)
cdef void socket_resolve_async(grpc_custom_resolver* r, char* host, char* port) with gil:
cdef void socket_resolve_async(grpc_custom_resolver* r, const char* host, const char* port) with gil:
rw = ResolveWrapper()
rw.c_resolver = r
rw.c_host = host
rw.c_port = port
_spawn_greenlet(socket_resolve_async_python, rw)
cdef grpc_error* socket_resolve(char* host, char* port,
cdef grpc_error* socket_resolve(const char* host, const char* port,
grpc_resolved_addresses** res) with gil:
try:
result = gevent_socket.getaddrinfo(host, port)

@ -46,8 +46,8 @@ cdef extern from "src/core/lib/iomgr/resolve_address_custom.h":
pass
struct grpc_custom_resolver_vtable:
grpc_error* (*resolve)(char* host, char* port, grpc_resolved_addresses** res);
void (*resolve_async)(grpc_custom_resolver* resolver, char* host, char* port);
grpc_error* (*resolve)(const char* host, const char* port, grpc_resolved_addresses** res);
void (*resolve_async)(grpc_custom_resolver* resolver, const char* host, const char* port);
void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,
grpc_resolved_addresses* result,

@ -61,8 +61,8 @@ static void test_grpc_parse_ipv6_parity_with_getaddrinfo(
struct sockaddr_in6 resolve_with_gettaddrinfo(const char* uri_text) {
grpc_uri* uri = grpc_uri_parse(uri_text, 0);
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
grpc_core::SplitHostPort(uri->path, &host, &port);
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
@ -70,11 +70,11 @@ struct sockaddr_in6 resolve_with_gettaddrinfo(const char* uri_text) {
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_NUMERICHOST;
struct addrinfo* result;
int res = getaddrinfo(host.get(), port.get(), &hints, &result);
int res = getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
if (res != 0) {
gpr_log(GPR_ERROR,
"getaddrinfo failed to resolve host:%s port:%s. Error: %d.",
host.get(), port.get(), res);
host.c_str(), port.c_str(), res);
abort();
}
size_t num_addrs_from_getaddrinfo = 0;

@ -135,19 +135,6 @@ grpc_cc_test(
],
)
grpc_cc_test(
name = "string_view_test",
srcs = ["string_view_test.cc"],
external_deps = [
"gtest",
],
language = "C++",
deps = [
"//:gpr_base",
"//test/core/util:grpc_test_util",
],
)
grpc_cc_test(
name = "thd_test",
srcs = ["thd_test.cc"],

@ -50,21 +50,13 @@ static void test_join_host_port_garbage(void) {
static void split_host_port_expect(const char* name, const char* host,
const char* port, bool ret) {
grpc_core::UniquePtr<char> actual_host;
grpc_core::UniquePtr<char> actual_port;
std::string actual_host;
std::string actual_port;
const bool actual_ret =
grpc_core::SplitHostPort(name, &actual_host, &actual_port);
GPR_ASSERT(actual_ret == ret);
if (host == nullptr) {
GPR_ASSERT(actual_host == nullptr);
} else {
GPR_ASSERT(strcmp(host, actual_host.get()) == 0);
}
if (port == nullptr) {
GPR_ASSERT(actual_port == nullptr);
} else {
GPR_ASSERT(strcmp(port, actual_port.get()) == 0);
}
GPR_ASSERT(actual_host == (host == nullptr ? "" : host));
GPR_ASSERT(actual_port == (port == nullptr ? "" : port));
}
static void test_split_host_port() {

@ -1,44 +0,0 @@
/*
*
* Copyright 2017 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include <grpc/slice.h>
#include "src/core/lib/gprpp/string_view.h"
#include <gtest/gtest.h>
#include "src/core/lib/gprpp/memory.h"
#include "test/core/util/test_config.h"
namespace grpc_core {
namespace testing {
TEST(StringViewTest, Dup) {
constexpr char kStr[] = "foo";
absl::string_view sv = kStr;
grpc_core::UniquePtr<char> dup = grpc_core::StringViewToCString(sv);
EXPECT_EQ(std::string(sv), dup.get());
}
} // namespace testing
} // namespace grpc_core
int main(int argc, char** argv) {
grpc::testing::TestEnvironment env(argc, argv);
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

@ -48,7 +48,6 @@
#include "src/core/lib/gpr/env.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/gprpp/string_view.h"
#include "src/core/lib/iomgr/tcp_client.h"
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
#include "src/cpp/client/secure_credentials.h"
@ -1672,14 +1671,14 @@ class ClientLbInterceptTrailingMetadataTest : public ClientLbEnd2endTest {
backend_metric_data->mem_utilization);
self->load_report_->set_rps(backend_metric_data->requests_per_second);
for (const auto& p : backend_metric_data->request_cost) {
grpc_core::UniquePtr<char> name =
grpc_core::StringViewToCString(p.first);
(*self->load_report_->mutable_request_cost())[name.get()] = p.second;
std::string name = std::string(p.first);
(*self->load_report_->mutable_request_cost())[std::move(name)] =
p.second;
}
for (const auto& p : backend_metric_data->utilization) {
grpc_core::UniquePtr<char> name =
grpc_core::StringViewToCString(p.first);
(*self->load_report_->mutable_utilization())[name.get()] = p.second;
std::string name = std::string(p.first);
(*self->load_report_->mutable_utilization())[std::move(name)] =
p.second;
}
}
}

@ -64,25 +64,25 @@ struct TestAddress {
};
grpc_resolved_address TestAddressToGrpcResolvedAddress(TestAddress test_addr) {
grpc_core::UniquePtr<char> host;
grpc_core::UniquePtr<char> port;
std::string host;
std::string port;
grpc_resolved_address resolved_addr;
grpc_core::SplitHostPort(test_addr.dest_addr.c_str(), &host, &port);
if (test_addr.family == AF_INET) {
sockaddr_in in_dest;
memset(&in_dest, 0, sizeof(sockaddr_in));
in_dest.sin_port = htons(atoi(port.get()));
in_dest.sin_port = htons(atoi(port.c_str()));
in_dest.sin_family = AF_INET;
GPR_ASSERT(inet_pton(AF_INET, host.get(), &in_dest.sin_addr) == 1);
GPR_ASSERT(inet_pton(AF_INET, host.c_str(), &in_dest.sin_addr) == 1);
memcpy(&resolved_addr.addr, &in_dest, sizeof(sockaddr_in));
resolved_addr.len = sizeof(sockaddr_in);
} else {
GPR_ASSERT(test_addr.family == AF_INET6);
sockaddr_in6 in6_dest;
memset(&in6_dest, 0, sizeof(sockaddr_in6));
in6_dest.sin6_port = htons(atoi(port.get()));
in6_dest.sin6_port = htons(atoi(port.c_str()));
in6_dest.sin6_family = AF_INET6;
GPR_ASSERT(inet_pton(AF_INET6, host.get(), &in6_dest.sin6_addr) == 1);
GPR_ASSERT(inet_pton(AF_INET6, host.c_str(), &in6_dest.sin6_addr) == 1);
memcpy(&resolved_addr.addr, &in6_dest, sizeof(sockaddr_in6));
resolved_addr.len = sizeof(sockaddr_in6);
}

@ -521,8 +521,8 @@ int g_fake_non_responsive_dns_server_port = -1;
void InjectBrokenNameServerList(ares_channel channel) {
struct ares_addr_port_node dns_server_addrs[2];
memset(dns_server_addrs, 0, sizeof(dns_server_addrs));
grpc_core::UniquePtr<char> unused_host;
grpc_core::UniquePtr<char> local_dns_server_port;
std::string unused_host;
std::string local_dns_server_port;
GPR_ASSERT(grpc_core::SplitHostPort(FLAGS_local_dns_server_address.c_str(),
&unused_host, &local_dns_server_port));
gpr_log(GPR_DEBUG,
@ -543,8 +543,8 @@ void InjectBrokenNameServerList(ares_channel channel) {
dns_server_addrs[1].family = AF_INET;
((char*)&dns_server_addrs[1].addr.addr4)[0] = 0x7f;
((char*)&dns_server_addrs[1].addr.addr4)[3] = 0x1;
dns_server_addrs[1].tcp_port = atoi(local_dns_server_port.get());
dns_server_addrs[1].udp_port = atoi(local_dns_server_port.get());
dns_server_addrs[1].tcp_port = atoi(local_dns_server_port.c_str());
dns_server_addrs[1].udp_port = atoi(local_dns_server_port.c_str());
dns_server_addrs[1].next = nullptr;
GPR_ASSERT(ares_set_servers_ports(channel, dns_server_addrs) == ARES_SUCCESS);
}

@ -1503,7 +1503,6 @@ src/core/lib/gprpp/mpscq.h \
src/core/lib/gprpp/orphanable.h \
src/core/lib/gprpp/ref_counted.h \
src/core/lib/gprpp/ref_counted_ptr.h \
src/core/lib/gprpp/string_view.h \
src/core/lib/gprpp/sync.h \
src/core/lib/gprpp/thd.h \
src/core/lib/gprpp/thd_posix.cc \

@ -1314,7 +1314,6 @@ src/core/lib/gprpp/mpscq.h \
src/core/lib/gprpp/orphanable.h \
src/core/lib/gprpp/ref_counted.h \
src/core/lib/gprpp/ref_counted_ptr.h \
src/core/lib/gprpp/string_view.h \
src/core/lib/gprpp/sync.h \
src/core/lib/gprpp/thd.h \
src/core/lib/gprpp/thd_posix.cc \

@ -5667,30 +5667,6 @@
],
"uses_polling": false
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": true,
"language": "c++",
"name": "string_view_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,

Loading…
Cancel
Save