Merge remote-tracking branch 'upstream/master' into c++_subchannel_list

reviewable/pr14886/r2
Mark D. Roth 7 years ago
commit eef0cf6416
  1. 8
      BUILD
  2. 68
      CMakeLists.txt
  3. 2
      INSTALL.md
  4. 424
      Makefile
  5. 28
      bazel/generate_cc.bzl
  6. 10
      bazel/grpc_deps.bzl
  7. 10
      build.yaml
  8. 2
      doc/PROTOCOL-WEB.md
  9. 39
      examples/cpp/helloworld/CMakeLists.txt
  10. 961
      gRPC-Core.podspec
  11. 3
      include/grpc/impl/codegen/grpc_types.h
  12. 3
      include/grpcpp/impl/codegen/byte_buffer.h
  13. 13
      include/grpcpp/impl/codegen/server_interface.h
  14. 2
      src/compiler/ruby_generator.cc
  15. 20
      src/compiler/ruby_generator_string-inl.h
  16. 25
      src/core/ext/filters/http/client_authority_filter.cc
  17. 11
      src/core/lib/iomgr/lockfree_event.h
  18. 1
      src/core/lib/iomgr/socket_utils_linux.cc
  19. 1
      src/core/lib/iomgr/socket_utils_posix.cc
  20. 1
      src/core/lib/iomgr/tcp_server_utils_posix_common.cc
  21. 1
      src/core/lib/iomgr/udp_server.cc
  22. 10
      src/core/lib/security/security_connector/security_connector.cc
  23. 9
      src/core/lib/security/security_connector/security_connector.h
  24. 2
      src/core/lib/surface/channel.cc
  25. 1
      src/core/lib/surface/init.cc
  26. 1
      src/core/lib/surface/init.h
  27. 7
      src/core/lib/surface/init_secure.cc
  28. 2
      src/core/lib/surface/init_unsecure.cc
  29. 44
      src/core/plugin_registry/grpc_cronet_plugin_registry.cc
  30. 6
      src/objective-c/GRPCClient/GRPCCall.m
  31. 11
      src/objective-c/GRPCClient/private/GRPCHost.m
  32. 6
      src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.mm
  33. 14
      src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
  34. 4
      src/objective-c/tests/Podfile
  35. 45
      src/php/ext/grpc/channel.c
  36. 2
      src/python/grpcio_tests/commands.py
  37. 3
      src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py
  38. 3
      src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
  39. 54
      src/ruby/spec/pb/package_with_underscore/checker_spec.rb
  40. 23
      src/ruby/spec/pb/package_with_underscore/data.proto
  41. 23
      src/ruby/spec/pb/package_with_underscore/service.proto
  42. 10
      templates/Makefile.template
  43. 37
      templates/gRPC-Core.podspec.template
  44. BIN
      test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-api_fuzzer-5406804084260864
  45. BIN
      test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-api_fuzzer-5471994809155584
  46. BIN
      test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-api_fuzzer-6609852341157888
  47. 26
      test/cpp/naming/resolver_component_test.cc
  48. 25
      test/distrib/cpp/run_distrib_test_cmake_as_submodule.sh
  49. 7
      tools/interop_matrix/client_matrix.py
  50. 1
      tools/run_tests/artifacts/distribtest_targets.py
  51. 8
      tools/run_tests/generated/sources_and_headers.json
  52. 69
      tools/run_tests/generated/tests.json
  53. 3
      tools/run_tests/helper_scripts/run_ruby.sh

@ -307,16 +307,8 @@ grpc_cc_library(
language = "c++", language = "c++",
deps = [ deps = [
"grpc_base", "grpc_base",
"grpc_deadline_filter",
"grpc_http_filters", "grpc_http_filters",
"grpc_lb_policy_pick_first",
"grpc_max_age_filter",
"grpc_message_size_filter",
"grpc_resolver_dns_native",
"grpc_resolver_sockaddr",
"grpc_server_load_reporting",
"grpc_transport_chttp2_client_secure", "grpc_transport_chttp2_client_secure",
"grpc_transport_chttp2_server_secure",
"grpc_transport_cronet_client_secure", "grpc_transport_cronet_client_secure",
], ],
) )

@ -1450,35 +1450,6 @@ add_library(grpc_cronet
src/core/lib/transport/transport.cc src/core/lib/transport/transport.cc
src/core/lib/transport/transport_op_string.cc src/core/lib/transport/transport_op_string.cc
src/core/lib/debug/trace.cc src/core/lib/debug/trace.cc
src/core/ext/filters/deadline/deadline_filter.cc
src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
src/core/ext/filters/client_channel/backup_poller.cc
src/core/ext/filters/client_channel/channel_connectivity.cc
src/core/ext/filters/client_channel/client_channel.cc
src/core/ext/filters/client_channel/client_channel_factory.cc
src/core/ext/filters/client_channel/client_channel_plugin.cc
src/core/ext/filters/client_channel/connector.cc
src/core/ext/filters/client_channel/http_connect_handshaker.cc
src/core/ext/filters/client_channel/http_proxy.cc
src/core/ext/filters/client_channel/lb_policy.cc
src/core/ext/filters/client_channel/lb_policy_factory.cc
src/core/ext/filters/client_channel/lb_policy_registry.cc
src/core/ext/filters/client_channel/method_params.cc
src/core/ext/filters/client_channel/parse_address.cc
src/core/ext/filters/client_channel/proxy_mapper.cc
src/core/ext/filters/client_channel/proxy_mapper_registry.cc
src/core/ext/filters/client_channel/resolver.cc
src/core/ext/filters/client_channel/resolver_registry.cc
src/core/ext/filters/client_channel/retry_throttle.cc
src/core/ext/filters/client_channel/subchannel.cc
src/core/ext/filters/client_channel/subchannel_index.cc
src/core/ext/filters/client_channel/uri_parser.cc
src/core/ext/filters/max_age/max_age_filter.cc
src/core/ext/filters/message_size/message_size_filter.cc
src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc
src/core/ext/filters/load_reporting/server_load_reporting_filter.cc
src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc
src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc
src/core/ext/transport/cronet/transport/cronet_api_dummy.cc src/core/ext/transport/cronet/transport/cronet_api_dummy.cc
src/core/ext/transport/cronet/transport/cronet_transport.cc src/core/ext/transport/cronet/transport/cronet_transport.cc
@ -1510,6 +1481,28 @@ add_library(grpc_cronet
src/core/ext/filters/http/http_filters_plugin.cc src/core/ext/filters/http/http_filters_plugin.cc
src/core/ext/filters/http/message_compress/message_compress_filter.cc src/core/ext/filters/http/message_compress/message_compress_filter.cc
src/core/ext/filters/http/server/http_server_filter.cc src/core/ext/filters/http/server/http_server_filter.cc
src/core/ext/filters/client_channel/backup_poller.cc
src/core/ext/filters/client_channel/channel_connectivity.cc
src/core/ext/filters/client_channel/client_channel.cc
src/core/ext/filters/client_channel/client_channel_factory.cc
src/core/ext/filters/client_channel/client_channel_plugin.cc
src/core/ext/filters/client_channel/connector.cc
src/core/ext/filters/client_channel/http_connect_handshaker.cc
src/core/ext/filters/client_channel/http_proxy.cc
src/core/ext/filters/client_channel/lb_policy.cc
src/core/ext/filters/client_channel/lb_policy_factory.cc
src/core/ext/filters/client_channel/lb_policy_registry.cc
src/core/ext/filters/client_channel/method_params.cc
src/core/ext/filters/client_channel/parse_address.cc
src/core/ext/filters/client_channel/proxy_mapper.cc
src/core/ext/filters/client_channel/proxy_mapper_registry.cc
src/core/ext/filters/client_channel/resolver.cc
src/core/ext/filters/client_channel/resolver_registry.cc
src/core/ext/filters/client_channel/retry_throttle.cc
src/core/ext/filters/client_channel/subchannel.cc
src/core/ext/filters/client_channel/subchannel_index.cc
src/core/ext/filters/client_channel/uri_parser.cc
src/core/ext/filters/deadline/deadline_filter.cc
src/core/lib/http/httpcli_security_connector.cc src/core/lib/http/httpcli_security_connector.cc
src/core/lib/security/context/security_context.cc src/core/lib/security/context/security_context.cc
src/core/lib/security/credentials/alts/alts_credentials.cc src/core/lib/security/credentials/alts/alts_credentials.cc
@ -1583,8 +1576,8 @@ add_library(grpc_cronet
src/core/tsi/ssl/session_cache/ssl_session_openssl.cc src/core/tsi/ssl/session_cache/ssl_session_openssl.cc
src/core/tsi/ssl_transport_security.cc src/core/tsi/ssl_transport_security.cc
src/core/tsi/transport_security_grpc.cc src/core/tsi/transport_security_grpc.cc
src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc src/core/ext/filters/load_reporting/server_load_reporting_filter.cc
src/core/ext/transport/chttp2/server/chttp2_server.cc src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc
src/core/plugin_registry/grpc_cronet_plugin_registry.cc src/core/plugin_registry/grpc_cronet_plugin_registry.cc
) )
@ -1644,20 +1637,9 @@ foreach(_hdr
include/grpc/impl/codegen/sync_generic.h include/grpc/impl/codegen/sync_generic.h
include/grpc/impl/codegen/sync_posix.h include/grpc/impl/codegen/sync_posix.h
include/grpc/impl/codegen/sync_windows.h include/grpc/impl/codegen/sync_windows.h
include/grpc/byte_buffer.h
include/grpc/byte_buffer_reader.h
include/grpc/compression.h
include/grpc/fork.h
include/grpc/grpc.h
include/grpc/grpc_posix.h
include/grpc/grpc_security_constants.h
include/grpc/load_reporting.h
include/grpc/slice.h
include/grpc/slice_buffer.h
include/grpc/status.h
include/grpc/support/workaround_list.h
include/grpc/grpc_cronet.h include/grpc/grpc_cronet.h
include/grpc/grpc_security.h include/grpc/grpc_security.h
include/grpc/grpc_security_constants.h
) )
string(REPLACE "include/" "" _path ${_hdr}) string(REPLACE "include/" "" _path ${_hdr})
get_filename_component(_path ${_path} PATH) get_filename_component(_path ${_path} PATH)

@ -142,7 +142,7 @@ installed to be able to compile the C/C++ sources.
> call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64 > call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64
> cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release > cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release
> cmake --build . > cmake --build .
> ninja > ninja install
``` ```
### msys2 (with mingw) ### msys2 (with mingw)

File diff suppressed because it is too large Load Diff

@ -10,7 +10,16 @@ def generate_cc_impl(ctx):
includes = [f for src in ctx.attr.srcs for f in src.proto.transitive_imports] includes = [f for src in ctx.attr.srcs for f in src.proto.transitive_imports]
outs = [] outs = []
# label_len is length of the path from WORKSPACE root to the location of this build file # label_len is length of the path from WORKSPACE root to the location of this build file
label_len = len(ctx.label.package) + 1 label_len = 0
# proto_root is the directory relative to which generated include paths should be
proto_root = ""
if ctx.label.package:
# The +1 is for the trailing slash.
label_len += len(ctx.label.package) + 1
if ctx.label.workspace_root:
label_len += len(ctx.label.workspace_root) + 1
proto_root = "/" + ctx.label.workspace_root
if ctx.executable.plugin: if ctx.executable.plugin:
outs += [proto.path[label_len:-len(".proto")] + ".grpc.pb.h" for proto in protos] outs += [proto.path[label_len:-len(".proto")] + ".grpc.pb.h" for proto in protos]
outs += [proto.path[label_len:-len(".proto")] + ".grpc.pb.cc" for proto in protos] outs += [proto.path[label_len:-len(".proto")] + ".grpc.pb.cc" for proto in protos]
@ -20,7 +29,7 @@ def generate_cc_impl(ctx):
outs += [proto.path[label_len:-len(".proto")] + ".pb.h" for proto in protos] outs += [proto.path[label_len:-len(".proto")] + ".pb.h" for proto in protos]
outs += [proto.path[label_len:-len(".proto")] + ".pb.cc" for proto in protos] outs += [proto.path[label_len:-len(".proto")] + ".pb.cc" for proto in protos]
out_files = [ctx.new_file(out) for out in outs] out_files = [ctx.new_file(out) for out in outs]
dir_out = str(ctx.genfiles_dir.path) dir_out = str(ctx.genfiles_dir.path + proto_root)
arguments = [] arguments = []
if ctx.executable.plugin: if ctx.executable.plugin:
@ -33,7 +42,20 @@ def generate_cc_impl(ctx):
else: else:
arguments += ["--cpp_out=" + ",".join(ctx.attr.flags) + ":" + dir_out] arguments += ["--cpp_out=" + ",".join(ctx.attr.flags) + ":" + dir_out]
additional_input = [] additional_input = []
arguments += ["-I{0}={0}".format(include.path) for include in includes]
# Import protos relative to their workspace root so that protoc prints the
# right include paths.
for include in includes:
directory = include.path
if directory.startswith("external"):
external_sep = directory.find("/")
repository_sep = directory.find("/", external_sep + 1)
arguments += ["--proto_path=" + directory[:repository_sep]]
else:
arguments += ["--proto_path=."]
# Include the output directory so that protoc puts the generated code in the
# right directory.
arguments += ["--proto_path={0}{1}".format(dir_out, proto_root)]
arguments += [proto.path for proto in protos] arguments += [proto.path for proto in protos]
# create a list of well known proto files if the argument is non-None # create a list of well known proto files if the argument is non-None

@ -57,6 +57,16 @@ def grpc_deps():
actual = "@com_github_gflags_gflags//:gflags", actual = "@com_github_gflags_gflags//:gflags",
) )
native.bind(
name = "grpc_cpp_plugin",
actual = "@com_github_grpc_grpc//:grpc_cpp_plugin"
)
native.bind(
name = "grpc++_codegen_proto",
actual = "@com_github_grpc_grpc//:grpc++_codegen_proto"
)
if "boringssl" not in native.existing_rules(): if "boringssl" not in native.existing_rules():
native.http_archive( native.http_archive(
name = "boringssl", name = "boringssl",

@ -1416,17 +1416,9 @@ libs:
dll: true dll: true
filegroups: filegroups:
- grpc_base - grpc_base
- grpc_base_headers
- grpc_deadline_filter
- grpc_lb_policy_pick_first
- grpc_max_age_filter
- grpc_message_size_filter
- grpc_resolver_dns_native
- grpc_resolver_sockaddr
- grpc_server_load_reporting
- grpc_transport_cronet_client_secure - grpc_transport_cronet_client_secure
- grpc_transport_chttp2_client_secure - grpc_transport_chttp2_client_secure
- grpc_transport_chttp2_server_secure - grpc_server_load_reporting
generate_plugin_registry: true generate_plugin_registry: true
platforms: platforms:
- linux - linux

@ -29,7 +29,7 @@ More specifically, we expect the protocol to
* evolve over time, mainly to optimize for browser clients or support * evolve over time, mainly to optimize for browser clients or support
web-specific features such as CORS, XSRF web-specific features such as CORS, XSRF
* become optional (in 1-2 years) when browsers are able to speak the native * become optional (in 1-2 years) when browsers are able to speak the native
gRPC protocol via the new [whatwg fetch/streams API](https://github.com/whatwg/fetch) gRPC protocol via the new [whatwg streams API](https://github.com/whatwg/streams)
# Protocol differences vs [gRPC over HTTP2](PROTOCOL-HTTP2.md) # Protocol differences vs [gRPC over HTTP2](PROTOCOL-HTTP2.md)

@ -27,6 +27,38 @@ else()
add_definitions(-D_WIN32_WINNT=0x600) add_definitions(-D_WIN32_WINNT=0x600)
endif() endif()
if(GRPC_AS_SUBMODULE)
# One way to build a projects that uses gRPC is to just include the
# entire gRPC project tree via "add_subdirectory".
# This approach is very simple to use, but the are some potential
# disadvantages:
# * it includes gRPC's CMakeLists.txt directly into your build script
# without and that can make gRPC's internal setting interfere with your
# own build.
# * depending on what's installed on your system, the contents of submodules
# in gRPC's third_party/* might need to be available (and there might be
# additional prerequisites required to build them). Consider using
# the gRPC_*_PROVIDER options to fine-tune the expected behavior.
#
# A more robust approach to add dependency on gRPC is using
# cmake's ExternalProject_Add (see cmake_externalproject/CMakeLists.txt).
# Include the gRPC's cmake build (normally grpc source code would live
# in a git submodule called "third_party/grpc", but this example lives in
# the same repository as gRPC sources, so we just look a few directories up)
add_subdirectory(../../.. ${CMAKE_CURRENT_BINARY_DIR}/grpc EXCLUDE_FROM_ALL)
message(STATUS "Using gRPC via add_subdirectory.")
# After using add_subdirectory, we can now use the grpc targets directly from
# this build.
set(_PROTOBUF_LIBPROTOBUF libprotobuf)
set(_PROTOBUF_PROTOC $<TARGET_FILE:protoc>)
set(_GRPC_GRPCPP_UNSECURE grpc++_unsecure)
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>)
else()
# This branch assumes that gRPC and all its dependencies are already installed
# on this system, so they can be located by find_package().
# Find Protobuf installation # Find Protobuf installation
# Looks for protobuf-config.cmake file installed by Protobuf's cmake installation. # Looks for protobuf-config.cmake file installed by Protobuf's cmake installation.
set(protobuf_MODULE_COMPATIBLE TRUE) set(protobuf_MODULE_COMPATIBLE TRUE)
@ -41,8 +73,9 @@ set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)
find_package(gRPC CONFIG REQUIRED) find_package(gRPC CONFIG REQUIRED)
message(STATUS "Using gRPC ${gRPC_VERSION}") message(STATUS "Using gRPC ${gRPC_VERSION}")
# gRPC C++ plugin set(_GRPC_GRPCPP_UNSECURE gRPC::grpc++_unsecure)
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>) set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
endif()
# Proto file # Proto file
get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE) get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE)
@ -74,6 +107,6 @@ foreach(_target
${hw_proto_srcs} ${hw_proto_srcs}
${hw_grpc_srcs}) ${hw_grpc_srcs})
target_link_libraries(${_target} target_link_libraries(${_target}
${_PROTOBUF_LIBPROTOBUF} ${_GRPC_GRPCPP_UNSECURE}
gRPC::grpc++_unsecure) ${_PROTOBUF_LIBPROTOBUF})
endforeach() endforeach()

@ -182,6 +182,7 @@ Pod::Spec.new do |s|
ss.dependency 'BoringSSL', '~> 10.0' ss.dependency 'BoringSSL', '~> 10.0'
ss.dependency 'nanopb', '~> 0.3' ss.dependency 'nanopb', '~> 0.3'
# To save you from scrolling, this is the last part of the podspec.
ss.source_files = 'src/core/lib/gpr/arena.h', ss.source_files = 'src/core/lib/gpr/arena.h',
'src/core/lib/gpr/env.h', 'src/core/lib/gpr/env.h',
'src/core/lib/gpr/fork.h', 'src/core/lib/gpr/fork.h',
@ -1082,956 +1083,34 @@ Pod::Spec.new do |s|
s.subspec 'Cronet-Interface' do |ss| s.subspec 'Cronet-Interface' do |ss|
ss.header_mappings_dir = 'include/grpc' ss.header_mappings_dir = 'include/grpc'
ss.source_files = 'include/grpc/support/alloc.h', ss.source_files = 'include/grpc/grpc_cronet.h'
'include/grpc/support/atm.h', end
'include/grpc/support/atm_gcc_atomic.h',
'include/grpc/support/atm_gcc_sync.h', s.subspec 'Cronet-Implementation' do |ss|
'include/grpc/support/atm_windows.h', ss.header_mappings_dir = '.'
'include/grpc/support/cpu.h',
'include/grpc/support/log.h', ss.dependency "#{s.name}/Interface", version
'include/grpc/support/log_windows.h', ss.dependency "#{s.name}/Implementation", version
'include/grpc/support/port_platform.h', ss.dependency "#{s.name}/Cronet-Interface", version
'include/grpc/support/string_util.h',
'include/grpc/support/sync.h', ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc',
'include/grpc/support/sync_custom.h', 'src/core/ext/transport/cronet/transport/cronet_transport.cc',
'include/grpc/support/sync_generic.h', 'third_party/nanopb/pb_common.c',
'include/grpc/support/sync_posix.h', 'third_party/nanopb/pb_decode.c',
'include/grpc/support/sync_windows.h', 'third_party/nanopb/pb_encode.c',
'include/grpc/support/thd_id.h',
'include/grpc/support/time.h',
'include/grpc/impl/codegen/atm.h',
'include/grpc/impl/codegen/atm_gcc_atomic.h',
'include/grpc/impl/codegen/atm_gcc_sync.h',
'include/grpc/impl/codegen/atm_windows.h',
'include/grpc/impl/codegen/fork.h',
'include/grpc/impl/codegen/gpr_slice.h',
'include/grpc/impl/codegen/gpr_types.h',
'include/grpc/impl/codegen/port_platform.h',
'include/grpc/impl/codegen/sync.h',
'include/grpc/impl/codegen/sync_custom.h',
'include/grpc/impl/codegen/sync_generic.h',
'include/grpc/impl/codegen/sync_posix.h',
'include/grpc/impl/codegen/sync_windows.h',
'include/grpc/impl/codegen/byte_buffer.h',
'include/grpc/impl/codegen/byte_buffer_reader.h',
'include/grpc/impl/codegen/compression_types.h',
'include/grpc/impl/codegen/connectivity_state.h',
'include/grpc/impl/codegen/grpc_types.h',
'include/grpc/impl/codegen/propagation_bits.h',
'include/grpc/impl/codegen/slice.h',
'include/grpc/impl/codegen/status.h',
'include/grpc/impl/codegen/atm.h',
'include/grpc/impl/codegen/atm_gcc_atomic.h',
'include/grpc/impl/codegen/atm_gcc_sync.h',
'include/grpc/impl/codegen/atm_windows.h',
'include/grpc/impl/codegen/fork.h',
'include/grpc/impl/codegen/gpr_slice.h',
'include/grpc/impl/codegen/gpr_types.h',
'include/grpc/impl/codegen/port_platform.h',
'include/grpc/impl/codegen/sync.h',
'include/grpc/impl/codegen/sync_custom.h',
'include/grpc/impl/codegen/sync_generic.h',
'include/grpc/impl/codegen/sync_posix.h',
'include/grpc/impl/codegen/sync_windows.h',
'include/grpc/byte_buffer.h',
'include/grpc/byte_buffer_reader.h',
'include/grpc/compression.h',
'include/grpc/fork.h',
'include/grpc/grpc.h',
'include/grpc/grpc_posix.h',
'include/grpc/grpc_security_constants.h',
'include/grpc/load_reporting.h',
'include/grpc/slice.h',
'include/grpc/slice_buffer.h',
'include/grpc/status.h',
'include/grpc/support/workaround_list.h',
'include/grpc/grpc_cronet.h',
'include/grpc/grpc_security.h'
end
s.subspec 'Cronet-Implementation' do |ss|
ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Cronet-Interface", version
ss.dependency 'BoringSSL', '~> 10.0'
ss.dependency 'nanopb', '~> 0.3'
ss.source_files = 'src/core/lib/gpr/arena.h',
'src/core/lib/gpr/env.h',
'src/core/lib/gpr/fork.h',
'src/core/lib/gpr/host_port.h',
'src/core/lib/gpr/mpscq.h',
'src/core/lib/gpr/murmur_hash.h',
'src/core/lib/gpr/spinlock.h',
'src/core/lib/gpr/string.h',
'src/core/lib/gpr/string_windows.h',
'src/core/lib/gpr/time_precise.h',
'src/core/lib/gpr/tls.h',
'src/core/lib/gpr/tls_gcc.h',
'src/core/lib/gpr/tls_msvc.h',
'src/core/lib/gpr/tls_pthread.h',
'src/core/lib/gpr/tmpfile.h',
'src/core/lib/gpr/useful.h',
'src/core/lib/gprpp/abstract.h',
'src/core/lib/gprpp/atomic.h',
'src/core/lib/gprpp/atomic_with_atm.h',
'src/core/lib/gprpp/atomic_with_std.h',
'src/core/lib/gprpp/manual_constructor.h',
'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h',
'src/core/lib/gpr/alloc.cc',
'src/core/lib/gpr/arena.cc',
'src/core/lib/gpr/atm.cc',
'src/core/lib/gpr/cpu_iphone.cc',
'src/core/lib/gpr/cpu_linux.cc',
'src/core/lib/gpr/cpu_posix.cc',
'src/core/lib/gpr/cpu_windows.cc',
'src/core/lib/gpr/env_linux.cc',
'src/core/lib/gpr/env_posix.cc',
'src/core/lib/gpr/env_windows.cc',
'src/core/lib/gpr/fork.cc',
'src/core/lib/gpr/host_port.cc',
'src/core/lib/gpr/log.cc',
'src/core/lib/gpr/log_android.cc',
'src/core/lib/gpr/log_linux.cc',
'src/core/lib/gpr/log_posix.cc',
'src/core/lib/gpr/log_windows.cc',
'src/core/lib/gpr/mpscq.cc',
'src/core/lib/gpr/murmur_hash.cc',
'src/core/lib/gpr/string.cc',
'src/core/lib/gpr/string_posix.cc',
'src/core/lib/gpr/string_util_windows.cc',
'src/core/lib/gpr/string_windows.cc',
'src/core/lib/gpr/sync.cc',
'src/core/lib/gpr/sync_posix.cc',
'src/core/lib/gpr/sync_windows.cc',
'src/core/lib/gpr/time.cc',
'src/core/lib/gpr/time_posix.cc',
'src/core/lib/gpr/time_precise.cc',
'src/core/lib/gpr/time_windows.cc',
'src/core/lib/gpr/tls_pthread.cc',
'src/core/lib/gpr/tmpfile_msys.cc',
'src/core/lib/gpr/tmpfile_posix.cc',
'src/core/lib/gpr/tmpfile_windows.cc',
'src/core/lib/gpr/wrap_memcpy.cc',
'src/core/lib/gprpp/thd_posix.cc',
'src/core/lib/gprpp/thd_windows.cc',
'src/core/lib/profiling/basic_timers.cc',
'src/core/lib/profiling/stap_timers.cc',
'src/core/lib/avl/avl.h',
'src/core/lib/backoff/backoff.h',
'src/core/lib/channel/channel_args.h',
'src/core/lib/channel/channel_stack.h',
'src/core/lib/channel/channel_stack_builder.h',
'src/core/lib/channel/channel_trace.h',
'src/core/lib/channel/channel_trace_registry.h',
'src/core/lib/channel/connected_channel.h',
'src/core/lib/channel/context.h',
'src/core/lib/channel/handshaker.h',
'src/core/lib/channel/handshaker_factory.h',
'src/core/lib/channel/handshaker_registry.h',
'src/core/lib/channel/status_util.h',
'src/core/lib/compression/algorithm_metadata.h',
'src/core/lib/compression/compression_internal.h',
'src/core/lib/compression/message_compress.h',
'src/core/lib/compression/stream_compression.h',
'src/core/lib/compression/stream_compression_gzip.h',
'src/core/lib/compression/stream_compression_identity.h',
'src/core/lib/debug/stats.h',
'src/core/lib/debug/stats_data.h',
'src/core/lib/gprpp/debug_location.h',
'src/core/lib/gprpp/inlined_vector.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/http/format_request.h',
'src/core/lib/http/httpcli.h',
'src/core/lib/http/parser.h',
'src/core/lib/iomgr/block_annotate.h',
'src/core/lib/iomgr/call_combiner.h',
'src/core/lib/iomgr/closure.h',
'src/core/lib/iomgr/combiner.h',
'src/core/lib/iomgr/endpoint.h',
'src/core/lib/iomgr/endpoint_pair.h',
'src/core/lib/iomgr/error.h',
'src/core/lib/iomgr/error_internal.h',
'src/core/lib/iomgr/ev_epoll1_linux.h',
'src/core/lib/iomgr/ev_epollex_linux.h',
'src/core/lib/iomgr/ev_epollsig_linux.h',
'src/core/lib/iomgr/ev_poll_posix.h',
'src/core/lib/iomgr/ev_posix.h',
'src/core/lib/iomgr/exec_ctx.h',
'src/core/lib/iomgr/executor.h',
'src/core/lib/iomgr/gethostname.h',
'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.h',
'src/core/lib/iomgr/iomgr_custom.h',
'src/core/lib/iomgr/iomgr_internal.h',
'src/core/lib/iomgr/iomgr_posix.h',
'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h',
'src/core/lib/iomgr/nameser.h',
'src/core/lib/iomgr/network_status_tracker.h',
'src/core/lib/iomgr/polling_entity.h',
'src/core/lib/iomgr/pollset.h',
'src/core/lib/iomgr/pollset_custom.h',
'src/core/lib/iomgr/pollset_set.h',
'src/core/lib/iomgr/pollset_set_custom.h',
'src/core/lib/iomgr/pollset_set_windows.h',
'src/core/lib/iomgr/pollset_windows.h',
'src/core/lib/iomgr/port.h',
'src/core/lib/iomgr/resolve_address.h',
'src/core/lib/iomgr/resolve_address_custom.h',
'src/core/lib/iomgr/resource_quota.h',
'src/core/lib/iomgr/sockaddr.h',
'src/core/lib/iomgr/sockaddr_custom.h',
'src/core/lib/iomgr/sockaddr_posix.h',
'src/core/lib/iomgr/sockaddr_utils.h',
'src/core/lib/iomgr/sockaddr_windows.h',
'src/core/lib/iomgr/socket_factory_posix.h',
'src/core/lib/iomgr/socket_mutator.h',
'src/core/lib/iomgr/socket_utils.h',
'src/core/lib/iomgr/socket_utils_posix.h',
'src/core/lib/iomgr/socket_windows.h',
'src/core/lib/iomgr/sys_epoll_wrapper.h',
'src/core/lib/iomgr/tcp_client.h',
'src/core/lib/iomgr/tcp_client_posix.h',
'src/core/lib/iomgr/tcp_custom.h',
'src/core/lib/iomgr/tcp_posix.h',
'src/core/lib/iomgr/tcp_server.h',
'src/core/lib/iomgr/tcp_server_utils_posix.h',
'src/core/lib/iomgr/tcp_windows.h',
'src/core/lib/iomgr/time_averaged_stats.h',
'src/core/lib/iomgr/timer.h',
'src/core/lib/iomgr/timer_custom.h',
'src/core/lib/iomgr/timer_heap.h',
'src/core/lib/iomgr/timer_manager.h',
'src/core/lib/iomgr/udp_server.h',
'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_cv.h',
'src/core/lib/iomgr/wakeup_fd_pipe.h',
'src/core/lib/iomgr/wakeup_fd_posix.h',
'src/core/lib/json/json.h',
'src/core/lib/json/json_common.h',
'src/core/lib/json/json_reader.h',
'src/core/lib/json/json_writer.h',
'src/core/lib/slice/b64.h',
'src/core/lib/slice/percent_encoding.h',
'src/core/lib/slice/slice_hash_table.h',
'src/core/lib/slice/slice_internal.h',
'src/core/lib/slice/slice_string_helpers.h',
'src/core/lib/slice/slice_weak_hash_table.h',
'src/core/lib/surface/api_trace.h',
'src/core/lib/surface/call.h',
'src/core/lib/surface/call_test_only.h',
'src/core/lib/surface/channel.h',
'src/core/lib/surface/channel_init.h',
'src/core/lib/surface/channel_stack_type.h',
'src/core/lib/surface/completion_queue.h',
'src/core/lib/surface/completion_queue_factory.h',
'src/core/lib/surface/event_string.h',
'src/core/lib/surface/init.h',
'src/core/lib/surface/lame_client.h',
'src/core/lib/surface/server.h',
'src/core/lib/surface/validate_metadata.h',
'src/core/lib/transport/bdp_estimator.h',
'src/core/lib/transport/byte_stream.h',
'src/core/lib/transport/connectivity_state.h',
'src/core/lib/transport/error_utils.h',
'src/core/lib/transport/http2_errors.h',
'src/core/lib/transport/metadata.h',
'src/core/lib/transport/metadata_batch.h',
'src/core/lib/transport/pid_controller.h',
'src/core/lib/transport/service_config.h',
'src/core/lib/transport/static_metadata.h',
'src/core/lib/transport/status_conversion.h',
'src/core/lib/transport/status_metadata.h',
'src/core/lib/transport/timeout_encoding.h',
'src/core/lib/transport/transport.h',
'src/core/lib/transport/transport_impl.h',
'src/core/lib/debug/trace.h',
'src/core/ext/filters/deadline/deadline_filter.h',
'src/core/ext/filters/client_channel/backup_poller.h',
'src/core/ext/filters/client_channel/client_channel.h',
'src/core/ext/filters/client_channel/client_channel_factory.h',
'src/core/ext/filters/client_channel/connector.h',
'src/core/ext/filters/client_channel/http_connect_handshaker.h',
'src/core/ext/filters/client_channel/http_proxy.h',
'src/core/ext/filters/client_channel/lb_policy.h',
'src/core/ext/filters/client_channel/lb_policy_factory.h',
'src/core/ext/filters/client_channel/lb_policy_registry.h',
'src/core/ext/filters/client_channel/method_params.h',
'src/core/ext/filters/client_channel/parse_address.h',
'src/core/ext/filters/client_channel/proxy_mapper.h',
'src/core/ext/filters/client_channel/proxy_mapper_registry.h',
'src/core/ext/filters/client_channel/resolver.h',
'src/core/ext/filters/client_channel/resolver_factory.h',
'src/core/ext/filters/client_channel/resolver_registry.h',
'src/core/ext/filters/client_channel/retry_throttle.h',
'src/core/ext/filters/client_channel/subchannel.h',
'src/core/ext/filters/client_channel/subchannel_index.h',
'src/core/ext/filters/client_channel/uri_parser.h',
'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h',
'src/core/ext/filters/max_age/max_age_filter.h',
'src/core/ext/filters/message_size/message_size_filter.h',
'src/core/ext/filters/load_reporting/server_load_reporting_filter.h',
'src/core/ext/filters/load_reporting/server_load_reporting_plugin.h',
'src/core/ext/transport/cronet/transport/cronet_transport.h',
'third_party/objective_c/Cronet/bidirectional_stream_c.h',
'src/core/ext/transport/chttp2/transport/bin_decoder.h',
'src/core/ext/transport/chttp2/transport/bin_encoder.h',
'src/core/ext/transport/chttp2/transport/chttp2_transport.h',
'src/core/ext/transport/chttp2/transport/flow_control.h',
'src/core/ext/transport/chttp2/transport/frame.h',
'src/core/ext/transport/chttp2/transport/frame_data.h',
'src/core/ext/transport/chttp2/transport/frame_goaway.h',
'src/core/ext/transport/chttp2/transport/frame_ping.h',
'src/core/ext/transport/chttp2/transport/frame_rst_stream.h',
'src/core/ext/transport/chttp2/transport/frame_settings.h',
'src/core/ext/transport/chttp2/transport/frame_window_update.h',
'src/core/ext/transport/chttp2/transport/hpack_encoder.h',
'src/core/ext/transport/chttp2/transport/hpack_parser.h',
'src/core/ext/transport/chttp2/transport/hpack_table.h',
'src/core/ext/transport/chttp2/transport/http2_settings.h',
'src/core/ext/transport/chttp2/transport/huffsyms.h',
'src/core/ext/transport/chttp2/transport/incoming_metadata.h',
'src/core/ext/transport/chttp2/transport/internal.h',
'src/core/ext/transport/chttp2/transport/stream_map.h',
'src/core/ext/transport/chttp2/transport/varint.h',
'src/core/ext/transport/chttp2/alpn/alpn.h',
'src/core/ext/filters/http/client/http_client_filter.h',
'src/core/ext/filters/http/message_compress/message_compress_filter.h',
'src/core/ext/filters/http/server/http_server_filter.h',
'src/core/lib/security/context/security_context.h',
'src/core/lib/security/credentials/alts/alts_credentials.h',
'src/core/lib/security/credentials/composite/composite_credentials.h',
'src/core/lib/security/credentials/credentials.h',
'src/core/lib/security/credentials/fake/fake_credentials.h',
'src/core/lib/security/credentials/google_default/google_default_credentials.h',
'src/core/lib/security/credentials/iam/iam_credentials.h',
'src/core/lib/security/credentials/jwt/json_token.h',
'src/core/lib/security/credentials/jwt/jwt_credentials.h',
'src/core/lib/security/credentials/jwt/jwt_verifier.h',
'src/core/lib/security/credentials/oauth2/oauth2_credentials.h',
'src/core/lib/security/credentials/plugin/plugin_credentials.h',
'src/core/lib/security/credentials/ssl/ssl_credentials.h',
'src/core/lib/security/security_connector/alts_security_connector.h',
'src/core/lib/security/security_connector/security_connector.h',
'src/core/lib/security/transport/auth_filters.h',
'src/core/lib/security/transport/secure_endpoint.h',
'src/core/lib/security/transport/security_handshaker.h',
'src/core/lib/security/transport/target_authority_table.h',
'src/core/lib/security/transport/tsi_error.h',
'src/core/lib/security/util/json_util.h',
'src/core/tsi/alts/crypt/gsec.h',
'src/core/tsi/alts/frame_protector/alts_counter.h',
'src/core/tsi/alts/frame_protector/alts_crypter.h',
'src/core/tsi/alts/frame_protector/alts_frame_protector.h',
'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h',
'src/core/tsi/alts/frame_protector/frame_handler.h',
'src/core/tsi/alts/handshaker/alts_handshaker_client.h',
'src/core/tsi/alts/handshaker/alts_tsi_event.h',
'src/core/tsi/alts/handshaker/alts_tsi_handshaker.h',
'src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h',
'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_adapter.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h',
'src/core/ext/transport/chttp2/client/chttp2_connector.h',
'src/core/tsi/alts_transport_security.h',
'src/core/tsi/fake_transport_security.h',
'src/core/tsi/ssl/session_cache/ssl_session.h',
'src/core/tsi/ssl/session_cache/ssl_session_cache.h',
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security_grpc.h',
'src/core/ext/transport/chttp2/server/chttp2_server.h',
'src/core/lib/surface/init.cc',
'src/core/lib/avl/avl.cc',
'src/core/lib/backoff/backoff.cc',
'src/core/lib/channel/channel_args.cc',
'src/core/lib/channel/channel_stack.cc',
'src/core/lib/channel/channel_stack_builder.cc',
'src/core/lib/channel/channel_trace.cc',
'src/core/lib/channel/channel_trace_registry.cc',
'src/core/lib/channel/connected_channel.cc',
'src/core/lib/channel/handshaker.cc',
'src/core/lib/channel/handshaker_factory.cc',
'src/core/lib/channel/handshaker_registry.cc',
'src/core/lib/channel/status_util.cc',
'src/core/lib/compression/compression.cc',
'src/core/lib/compression/compression_internal.cc',
'src/core/lib/compression/message_compress.cc',
'src/core/lib/compression/stream_compression.cc',
'src/core/lib/compression/stream_compression_gzip.cc',
'src/core/lib/compression/stream_compression_identity.cc',
'src/core/lib/debug/stats.cc',
'src/core/lib/debug/stats_data.cc',
'src/core/lib/http/format_request.cc',
'src/core/lib/http/httpcli.cc',
'src/core/lib/http/parser.cc',
'src/core/lib/iomgr/call_combiner.cc',
'src/core/lib/iomgr/combiner.cc',
'src/core/lib/iomgr/endpoint.cc',
'src/core/lib/iomgr/endpoint_pair_posix.cc',
'src/core/lib/iomgr/endpoint_pair_uv.cc',
'src/core/lib/iomgr/endpoint_pair_windows.cc',
'src/core/lib/iomgr/error.cc',
'src/core/lib/iomgr/ev_epoll1_linux.cc',
'src/core/lib/iomgr/ev_epollex_linux.cc',
'src/core/lib/iomgr/ev_epollsig_linux.cc',
'src/core/lib/iomgr/ev_poll_posix.cc',
'src/core/lib/iomgr/ev_posix.cc',
'src/core/lib/iomgr/ev_windows.cc',
'src/core/lib/iomgr/exec_ctx.cc',
'src/core/lib/iomgr/executor.cc',
'src/core/lib/iomgr/fork_posix.cc',
'src/core/lib/iomgr/fork_windows.cc',
'src/core/lib/iomgr/gethostname_fallback.cc',
'src/core/lib/iomgr/gethostname_host_name_max.cc',
'src/core/lib/iomgr/gethostname_sysconf.cc',
'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.cc',
'src/core/lib/iomgr/iomgr_custom.cc',
'src/core/lib/iomgr/iomgr_internal.cc',
'src/core/lib/iomgr/iomgr_posix.cc',
'src/core/lib/iomgr/iomgr_uv.cc',
'src/core/lib/iomgr/iomgr_windows.cc',
'src/core/lib/iomgr/is_epollexclusive_available.cc',
'src/core/lib/iomgr/load_file.cc',
'src/core/lib/iomgr/lockfree_event.cc',
'src/core/lib/iomgr/network_status_tracker.cc',
'src/core/lib/iomgr/polling_entity.cc',
'src/core/lib/iomgr/pollset.cc',
'src/core/lib/iomgr/pollset_custom.cc',
'src/core/lib/iomgr/pollset_set.cc',
'src/core/lib/iomgr/pollset_set_custom.cc',
'src/core/lib/iomgr/pollset_set_windows.cc',
'src/core/lib/iomgr/pollset_uv.cc',
'src/core/lib/iomgr/pollset_windows.cc',
'src/core/lib/iomgr/resolve_address.cc',
'src/core/lib/iomgr/resolve_address_custom.cc',
'src/core/lib/iomgr/resolve_address_posix.cc',
'src/core/lib/iomgr/resolve_address_windows.cc',
'src/core/lib/iomgr/resource_quota.cc',
'src/core/lib/iomgr/sockaddr_utils.cc',
'src/core/lib/iomgr/socket_factory_posix.cc',
'src/core/lib/iomgr/socket_mutator.cc',
'src/core/lib/iomgr/socket_utils_common_posix.cc',
'src/core/lib/iomgr/socket_utils_linux.cc',
'src/core/lib/iomgr/socket_utils_posix.cc',
'src/core/lib/iomgr/socket_utils_uv.cc',
'src/core/lib/iomgr/socket_utils_windows.cc',
'src/core/lib/iomgr/socket_windows.cc',
'src/core/lib/iomgr/tcp_client.cc',
'src/core/lib/iomgr/tcp_client_custom.cc',
'src/core/lib/iomgr/tcp_client_posix.cc',
'src/core/lib/iomgr/tcp_client_windows.cc',
'src/core/lib/iomgr/tcp_custom.cc',
'src/core/lib/iomgr/tcp_posix.cc',
'src/core/lib/iomgr/tcp_server.cc',
'src/core/lib/iomgr/tcp_server_custom.cc',
'src/core/lib/iomgr/tcp_server_posix.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_common.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
'src/core/lib/iomgr/tcp_server_windows.cc',
'src/core/lib/iomgr/tcp_uv.cc',
'src/core/lib/iomgr/tcp_windows.cc',
'src/core/lib/iomgr/time_averaged_stats.cc',
'src/core/lib/iomgr/timer.cc',
'src/core/lib/iomgr/timer_custom.cc',
'src/core/lib/iomgr/timer_generic.cc',
'src/core/lib/iomgr/timer_heap.cc',
'src/core/lib/iomgr/timer_manager.cc',
'src/core/lib/iomgr/timer_uv.cc',
'src/core/lib/iomgr/udp_server.cc',
'src/core/lib/iomgr/unix_sockets_posix.cc',
'src/core/lib/iomgr/unix_sockets_posix_noop.cc',
'src/core/lib/iomgr/wakeup_fd_cv.cc',
'src/core/lib/iomgr/wakeup_fd_eventfd.cc',
'src/core/lib/iomgr/wakeup_fd_nospecial.cc',
'src/core/lib/iomgr/wakeup_fd_pipe.cc',
'src/core/lib/iomgr/wakeup_fd_posix.cc',
'src/core/lib/json/json.cc',
'src/core/lib/json/json_reader.cc',
'src/core/lib/json/json_string.cc',
'src/core/lib/json/json_writer.cc',
'src/core/lib/slice/b64.cc',
'src/core/lib/slice/percent_encoding.cc',
'src/core/lib/slice/slice.cc',
'src/core/lib/slice/slice_buffer.cc',
'src/core/lib/slice/slice_intern.cc',
'src/core/lib/slice/slice_string_helpers.cc',
'src/core/lib/surface/api_trace.cc',
'src/core/lib/surface/byte_buffer.cc',
'src/core/lib/surface/byte_buffer_reader.cc',
'src/core/lib/surface/call.cc',
'src/core/lib/surface/call_details.cc',
'src/core/lib/surface/call_log_batch.cc',
'src/core/lib/surface/channel.cc',
'src/core/lib/surface/channel_init.cc',
'src/core/lib/surface/channel_ping.cc',
'src/core/lib/surface/channel_stack_type.cc',
'src/core/lib/surface/completion_queue.cc',
'src/core/lib/surface/completion_queue_factory.cc',
'src/core/lib/surface/event_string.cc',
'src/core/lib/surface/lame_client.cc',
'src/core/lib/surface/metadata_array.cc',
'src/core/lib/surface/server.cc',
'src/core/lib/surface/validate_metadata.cc',
'src/core/lib/surface/version.cc',
'src/core/lib/transport/bdp_estimator.cc',
'src/core/lib/transport/byte_stream.cc',
'src/core/lib/transport/connectivity_state.cc',
'src/core/lib/transport/error_utils.cc',
'src/core/lib/transport/metadata.cc',
'src/core/lib/transport/metadata_batch.cc',
'src/core/lib/transport/pid_controller.cc',
'src/core/lib/transport/service_config.cc',
'src/core/lib/transport/static_metadata.cc',
'src/core/lib/transport/status_conversion.cc',
'src/core/lib/transport/status_metadata.cc',
'src/core/lib/transport/timeout_encoding.cc',
'src/core/lib/transport/transport.cc',
'src/core/lib/transport/transport_op_string.cc',
'src/core/lib/debug/trace.cc',
'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc',
'src/core/ext/filters/client_channel/backup_poller.cc',
'src/core/ext/filters/client_channel/channel_connectivity.cc',
'src/core/ext/filters/client_channel/client_channel.cc',
'src/core/ext/filters/client_channel/client_channel_factory.cc',
'src/core/ext/filters/client_channel/client_channel_plugin.cc',
'src/core/ext/filters/client_channel/connector.cc',
'src/core/ext/filters/client_channel/http_connect_handshaker.cc',
'src/core/ext/filters/client_channel/http_proxy.cc',
'src/core/ext/filters/client_channel/lb_policy.cc',
'src/core/ext/filters/client_channel/lb_policy_factory.cc',
'src/core/ext/filters/client_channel/lb_policy_registry.cc',
'src/core/ext/filters/client_channel/method_params.cc',
'src/core/ext/filters/client_channel/parse_address.cc',
'src/core/ext/filters/client_channel/proxy_mapper.cc',
'src/core/ext/filters/client_channel/proxy_mapper_registry.cc',
'src/core/ext/filters/client_channel/resolver.cc',
'src/core/ext/filters/client_channel/resolver_registry.cc',
'src/core/ext/filters/client_channel/retry_throttle.cc',
'src/core/ext/filters/client_channel/subchannel.cc',
'src/core/ext/filters/client_channel/subchannel_index.cc',
'src/core/ext/filters/client_channel/uri_parser.cc',
'src/core/ext/filters/max_age/max_age_filter.cc',
'src/core/ext/filters/message_size/message_size_filter.cc',
'src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc',
'src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc',
'src/core/ext/filters/load_reporting/server_load_reporting_filter.cc',
'src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc',
'src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc',
'src/core/ext/transport/cronet/transport/cronet_transport.cc',
'src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc',
'src/core/ext/transport/chttp2/transport/bin_decoder.cc',
'src/core/ext/transport/chttp2/transport/bin_encoder.cc',
'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc',
'src/core/ext/transport/chttp2/transport/chttp2_transport.cc',
'src/core/ext/transport/chttp2/transport/flow_control.cc',
'src/core/ext/transport/chttp2/transport/frame_data.cc',
'src/core/ext/transport/chttp2/transport/frame_goaway.cc',
'src/core/ext/transport/chttp2/transport/frame_ping.cc',
'src/core/ext/transport/chttp2/transport/frame_rst_stream.cc',
'src/core/ext/transport/chttp2/transport/frame_settings.cc',
'src/core/ext/transport/chttp2/transport/frame_window_update.cc',
'src/core/ext/transport/chttp2/transport/hpack_encoder.cc',
'src/core/ext/transport/chttp2/transport/hpack_parser.cc',
'src/core/ext/transport/chttp2/transport/hpack_table.cc',
'src/core/ext/transport/chttp2/transport/http2_settings.cc',
'src/core/ext/transport/chttp2/transport/huffsyms.cc',
'src/core/ext/transport/chttp2/transport/incoming_metadata.cc',
'src/core/ext/transport/chttp2/transport/parsing.cc',
'src/core/ext/transport/chttp2/transport/stream_lists.cc',
'src/core/ext/transport/chttp2/transport/stream_map.cc',
'src/core/ext/transport/chttp2/transport/varint.cc',
'src/core/ext/transport/chttp2/transport/writing.cc',
'src/core/ext/transport/chttp2/alpn/alpn.cc',
'src/core/ext/filters/http/client/http_client_filter.cc',
'src/core/ext/filters/http/http_filters_plugin.cc',
'src/core/ext/filters/http/message_compress/message_compress_filter.cc',
'src/core/ext/filters/http/server/http_server_filter.cc',
'src/core/lib/http/httpcli_security_connector.cc',
'src/core/lib/security/context/security_context.cc',
'src/core/lib/security/credentials/alts/alts_credentials.cc',
'src/core/lib/security/credentials/composite/composite_credentials.cc',
'src/core/lib/security/credentials/credentials.cc',
'src/core/lib/security/credentials/credentials_metadata.cc',
'src/core/lib/security/credentials/fake/fake_credentials.cc',
'src/core/lib/security/credentials/google_default/credentials_generic.cc',
'src/core/lib/security/credentials/google_default/google_default_credentials.cc',
'src/core/lib/security/credentials/iam/iam_credentials.cc',
'src/core/lib/security/credentials/jwt/json_token.cc',
'src/core/lib/security/credentials/jwt/jwt_credentials.cc',
'src/core/lib/security/credentials/jwt/jwt_verifier.cc',
'src/core/lib/security/credentials/oauth2/oauth2_credentials.cc',
'src/core/lib/security/credentials/plugin/plugin_credentials.cc',
'src/core/lib/security/credentials/ssl/ssl_credentials.cc',
'src/core/lib/security/security_connector/alts_security_connector.cc',
'src/core/lib/security/security_connector/security_connector.cc',
'src/core/lib/security/transport/client_auth_filter.cc',
'src/core/lib/security/transport/secure_endpoint.cc',
'src/core/lib/security/transport/security_handshaker.cc',
'src/core/lib/security/transport/server_auth_filter.cc',
'src/core/lib/security/transport/target_authority_table.cc',
'src/core/lib/security/transport/tsi_error.cc',
'src/core/lib/security/util/json_util.cc',
'src/core/lib/surface/init_secure.cc',
'src/core/tsi/alts/crypt/aes_gcm.cc',
'src/core/tsi/alts/crypt/gsec.cc',
'src/core/tsi/alts/frame_protector/alts_counter.cc',
'src/core/tsi/alts/frame_protector/alts_crypter.cc',
'src/core/tsi/alts/frame_protector/alts_frame_protector.cc',
'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc',
'src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc',
'src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc',
'src/core/tsi/alts/frame_protector/frame_handler.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_client.cc',
'src/core/tsi/alts/handshaker/alts_tsi_event.cc',
'src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc',
'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc',
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc',
'src/core/lib/security/credentials/alts/check_gcp_environment.cc',
'src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc',
'src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc',
'src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc',
'src/core/tsi/alts/handshaker/alts_tsi_utils.cc',
'src/core/tsi/alts/handshaker/transport_security_common_api.cc',
'src/core/tsi/alts/handshaker/altscontext.pb.c',
'src/core/tsi/alts/handshaker/handshaker.pb.c',
'src/core/tsi/alts/handshaker/transport_security_common.pb.c',
'third_party/nanopb/pb_common.c',
'third_party/nanopb/pb_decode.c',
'third_party/nanopb/pb_encode.c',
'src/core/tsi/transport_security.cc',
'src/core/tsi/transport_security_adapter.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
'src/core/ext/transport/chttp2/client/authority.cc',
'src/core/ext/transport/chttp2/client/chttp2_connector.cc',
'src/core/tsi/alts_transport_security.cc',
'src/core/tsi/fake_transport_security.cc',
'src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc',
'src/core/tsi/ssl/session_cache/ssl_session_cache.cc',
'src/core/tsi/ssl/session_cache/ssl_session_openssl.cc',
'src/core/tsi/ssl_transport_security.cc',
'src/core/tsi/transport_security_grpc.cc',
'src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc',
'src/core/ext/transport/chttp2/server/chttp2_server.cc',
'src/core/plugin_registry/grpc_cronet_plugin_registry.cc'
ss.private_header_files = 'src/core/lib/gpr/arena.h',
'src/core/lib/gpr/env.h',
'src/core/lib/gpr/fork.h',
'src/core/lib/gpr/host_port.h',
'src/core/lib/gpr/mpscq.h',
'src/core/lib/gpr/murmur_hash.h',
'src/core/lib/gpr/spinlock.h',
'src/core/lib/gpr/string.h',
'src/core/lib/gpr/string_windows.h',
'src/core/lib/gpr/time_precise.h',
'src/core/lib/gpr/tls.h',
'src/core/lib/gpr/tls_gcc.h',
'src/core/lib/gpr/tls_msvc.h',
'src/core/lib/gpr/tls_pthread.h',
'src/core/lib/gpr/tmpfile.h',
'src/core/lib/gpr/useful.h',
'src/core/lib/gprpp/abstract.h',
'src/core/lib/gprpp/atomic.h',
'src/core/lib/gprpp/atomic_with_atm.h',
'src/core/lib/gprpp/atomic_with_std.h',
'src/core/lib/gprpp/manual_constructor.h',
'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h',
'src/core/lib/avl/avl.h',
'src/core/lib/backoff/backoff.h',
'src/core/lib/channel/channel_args.h',
'src/core/lib/channel/channel_stack.h',
'src/core/lib/channel/channel_stack_builder.h',
'src/core/lib/channel/channel_trace.h',
'src/core/lib/channel/channel_trace_registry.h',
'src/core/lib/channel/connected_channel.h',
'src/core/lib/channel/context.h',
'src/core/lib/channel/handshaker.h',
'src/core/lib/channel/handshaker_factory.h',
'src/core/lib/channel/handshaker_registry.h',
'src/core/lib/channel/status_util.h',
'src/core/lib/compression/algorithm_metadata.h',
'src/core/lib/compression/compression_internal.h',
'src/core/lib/compression/message_compress.h',
'src/core/lib/compression/stream_compression.h',
'src/core/lib/compression/stream_compression_gzip.h',
'src/core/lib/compression/stream_compression_identity.h',
'src/core/lib/debug/stats.h',
'src/core/lib/debug/stats_data.h',
'src/core/lib/gprpp/debug_location.h',
'src/core/lib/gprpp/inlined_vector.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/http/format_request.h',
'src/core/lib/http/httpcli.h',
'src/core/lib/http/parser.h',
'src/core/lib/iomgr/block_annotate.h',
'src/core/lib/iomgr/call_combiner.h',
'src/core/lib/iomgr/closure.h',
'src/core/lib/iomgr/combiner.h',
'src/core/lib/iomgr/endpoint.h',
'src/core/lib/iomgr/endpoint_pair.h',
'src/core/lib/iomgr/error.h',
'src/core/lib/iomgr/error_internal.h',
'src/core/lib/iomgr/ev_epoll1_linux.h',
'src/core/lib/iomgr/ev_epollex_linux.h',
'src/core/lib/iomgr/ev_epollsig_linux.h',
'src/core/lib/iomgr/ev_poll_posix.h',
'src/core/lib/iomgr/ev_posix.h',
'src/core/lib/iomgr/exec_ctx.h',
'src/core/lib/iomgr/executor.h',
'src/core/lib/iomgr/gethostname.h',
'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.h',
'src/core/lib/iomgr/iomgr_custom.h',
'src/core/lib/iomgr/iomgr_internal.h',
'src/core/lib/iomgr/iomgr_posix.h',
'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h',
'src/core/lib/iomgr/nameser.h',
'src/core/lib/iomgr/network_status_tracker.h',
'src/core/lib/iomgr/polling_entity.h',
'src/core/lib/iomgr/pollset.h',
'src/core/lib/iomgr/pollset_custom.h',
'src/core/lib/iomgr/pollset_set.h',
'src/core/lib/iomgr/pollset_set_custom.h',
'src/core/lib/iomgr/pollset_set_windows.h',
'src/core/lib/iomgr/pollset_windows.h',
'src/core/lib/iomgr/port.h',
'src/core/lib/iomgr/resolve_address.h',
'src/core/lib/iomgr/resolve_address_custom.h',
'src/core/lib/iomgr/resource_quota.h',
'src/core/lib/iomgr/sockaddr.h',
'src/core/lib/iomgr/sockaddr_custom.h',
'src/core/lib/iomgr/sockaddr_posix.h',
'src/core/lib/iomgr/sockaddr_utils.h',
'src/core/lib/iomgr/sockaddr_windows.h',
'src/core/lib/iomgr/socket_factory_posix.h',
'src/core/lib/iomgr/socket_mutator.h',
'src/core/lib/iomgr/socket_utils.h',
'src/core/lib/iomgr/socket_utils_posix.h',
'src/core/lib/iomgr/socket_windows.h',
'src/core/lib/iomgr/sys_epoll_wrapper.h',
'src/core/lib/iomgr/tcp_client.h',
'src/core/lib/iomgr/tcp_client_posix.h',
'src/core/lib/iomgr/tcp_custom.h',
'src/core/lib/iomgr/tcp_posix.h',
'src/core/lib/iomgr/tcp_server.h',
'src/core/lib/iomgr/tcp_server_utils_posix.h',
'src/core/lib/iomgr/tcp_windows.h',
'src/core/lib/iomgr/time_averaged_stats.h',
'src/core/lib/iomgr/timer.h',
'src/core/lib/iomgr/timer_custom.h',
'src/core/lib/iomgr/timer_heap.h',
'src/core/lib/iomgr/timer_manager.h',
'src/core/lib/iomgr/udp_server.h',
'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_cv.h',
'src/core/lib/iomgr/wakeup_fd_pipe.h',
'src/core/lib/iomgr/wakeup_fd_posix.h',
'src/core/lib/json/json.h',
'src/core/lib/json/json_common.h',
'src/core/lib/json/json_reader.h',
'src/core/lib/json/json_writer.h',
'src/core/lib/slice/b64.h',
'src/core/lib/slice/percent_encoding.h',
'src/core/lib/slice/slice_hash_table.h',
'src/core/lib/slice/slice_internal.h',
'src/core/lib/slice/slice_string_helpers.h',
'src/core/lib/slice/slice_weak_hash_table.h',
'src/core/lib/surface/api_trace.h',
'src/core/lib/surface/call.h',
'src/core/lib/surface/call_test_only.h',
'src/core/lib/surface/channel.h',
'src/core/lib/surface/channel_init.h',
'src/core/lib/surface/channel_stack_type.h',
'src/core/lib/surface/completion_queue.h',
'src/core/lib/surface/completion_queue_factory.h',
'src/core/lib/surface/event_string.h',
'src/core/lib/surface/init.h',
'src/core/lib/surface/lame_client.h',
'src/core/lib/surface/server.h',
'src/core/lib/surface/validate_metadata.h',
'src/core/lib/transport/bdp_estimator.h',
'src/core/lib/transport/byte_stream.h',
'src/core/lib/transport/connectivity_state.h',
'src/core/lib/transport/error_utils.h',
'src/core/lib/transport/http2_errors.h',
'src/core/lib/transport/metadata.h',
'src/core/lib/transport/metadata_batch.h',
'src/core/lib/transport/pid_controller.h',
'src/core/lib/transport/service_config.h',
'src/core/lib/transport/static_metadata.h',
'src/core/lib/transport/status_conversion.h',
'src/core/lib/transport/status_metadata.h',
'src/core/lib/transport/timeout_encoding.h',
'src/core/lib/transport/transport.h',
'src/core/lib/transport/transport_impl.h',
'src/core/lib/debug/trace.h',
'src/core/ext/filters/deadline/deadline_filter.h',
'src/core/ext/filters/client_channel/backup_poller.h',
'src/core/ext/filters/client_channel/client_channel.h',
'src/core/ext/filters/client_channel/client_channel_factory.h',
'src/core/ext/filters/client_channel/connector.h',
'src/core/ext/filters/client_channel/http_connect_handshaker.h',
'src/core/ext/filters/client_channel/http_proxy.h',
'src/core/ext/filters/client_channel/lb_policy.h',
'src/core/ext/filters/client_channel/lb_policy_factory.h',
'src/core/ext/filters/client_channel/lb_policy_registry.h',
'src/core/ext/filters/client_channel/method_params.h',
'src/core/ext/filters/client_channel/parse_address.h',
'src/core/ext/filters/client_channel/proxy_mapper.h',
'src/core/ext/filters/client_channel/proxy_mapper_registry.h',
'src/core/ext/filters/client_channel/resolver.h',
'src/core/ext/filters/client_channel/resolver_factory.h',
'src/core/ext/filters/client_channel/resolver_registry.h',
'src/core/ext/filters/client_channel/retry_throttle.h',
'src/core/ext/filters/client_channel/subchannel.h',
'src/core/ext/filters/client_channel/subchannel_index.h',
'src/core/ext/filters/client_channel/uri_parser.h',
'src/core/ext/filters/client_channel/lb_policy/subchannel_list.h',
'src/core/ext/filters/max_age/max_age_filter.h',
'src/core/ext/filters/message_size/message_size_filter.h',
'src/core/ext/filters/load_reporting/server_load_reporting_filter.h',
'src/core/ext/filters/load_reporting/server_load_reporting_plugin.h',
'src/core/ext/transport/cronet/transport/cronet_transport.h', 'src/core/ext/transport/cronet/transport/cronet_transport.h',
'third_party/objective_c/Cronet/bidirectional_stream_c.h', 'third_party/objective_c/Cronet/bidirectional_stream_c.h',
'src/core/ext/transport/chttp2/transport/bin_decoder.h',
'src/core/ext/transport/chttp2/transport/bin_encoder.h',
'src/core/ext/transport/chttp2/transport/chttp2_transport.h',
'src/core/ext/transport/chttp2/transport/flow_control.h',
'src/core/ext/transport/chttp2/transport/frame.h',
'src/core/ext/transport/chttp2/transport/frame_data.h',
'src/core/ext/transport/chttp2/transport/frame_goaway.h',
'src/core/ext/transport/chttp2/transport/frame_ping.h',
'src/core/ext/transport/chttp2/transport/frame_rst_stream.h',
'src/core/ext/transport/chttp2/transport/frame_settings.h',
'src/core/ext/transport/chttp2/transport/frame_window_update.h',
'src/core/ext/transport/chttp2/transport/hpack_encoder.h',
'src/core/ext/transport/chttp2/transport/hpack_parser.h',
'src/core/ext/transport/chttp2/transport/hpack_table.h',
'src/core/ext/transport/chttp2/transport/http2_settings.h',
'src/core/ext/transport/chttp2/transport/huffsyms.h',
'src/core/ext/transport/chttp2/transport/incoming_metadata.h',
'src/core/ext/transport/chttp2/transport/internal.h',
'src/core/ext/transport/chttp2/transport/stream_map.h',
'src/core/ext/transport/chttp2/transport/varint.h',
'src/core/ext/transport/chttp2/alpn/alpn.h',
'src/core/ext/filters/http/client/http_client_filter.h',
'src/core/ext/filters/http/message_compress/message_compress_filter.h',
'src/core/ext/filters/http/server/http_server_filter.h',
'src/core/lib/security/context/security_context.h',
'src/core/lib/security/credentials/alts/alts_credentials.h',
'src/core/lib/security/credentials/composite/composite_credentials.h',
'src/core/lib/security/credentials/credentials.h',
'src/core/lib/security/credentials/fake/fake_credentials.h',
'src/core/lib/security/credentials/google_default/google_default_credentials.h',
'src/core/lib/security/credentials/iam/iam_credentials.h',
'src/core/lib/security/credentials/jwt/json_token.h',
'src/core/lib/security/credentials/jwt/jwt_credentials.h',
'src/core/lib/security/credentials/jwt/jwt_verifier.h',
'src/core/lib/security/credentials/oauth2/oauth2_credentials.h',
'src/core/lib/security/credentials/plugin/plugin_credentials.h',
'src/core/lib/security/credentials/ssl/ssl_credentials.h',
'src/core/lib/security/security_connector/alts_security_connector.h',
'src/core/lib/security/security_connector/security_connector.h',
'src/core/lib/security/transport/auth_filters.h',
'src/core/lib/security/transport/secure_endpoint.h',
'src/core/lib/security/transport/security_handshaker.h',
'src/core/lib/security/transport/target_authority_table.h',
'src/core/lib/security/transport/tsi_error.h',
'src/core/lib/security/util/json_util.h',
'src/core/tsi/alts/crypt/gsec.h',
'src/core/tsi/alts/frame_protector/alts_counter.h',
'src/core/tsi/alts/frame_protector/alts_crypter.h',
'src/core/tsi/alts/frame_protector/alts_frame_protector.h',
'src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h',
'src/core/tsi/alts/frame_protector/frame_handler.h',
'src/core/tsi/alts/handshaker/alts_handshaker_client.h',
'src/core/tsi/alts/handshaker/alts_tsi_event.h',
'src/core/tsi/alts/handshaker/alts_tsi_handshaker.h',
'src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h',
'src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h',
'src/core/lib/security/credentials/alts/check_gcp_environment.h',
'src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api.h',
'src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h',
'src/core/tsi/alts/handshaker/alts_tsi_utils.h',
'src/core/tsi/alts/handshaker/transport_security_common_api.h',
'src/core/tsi/alts/handshaker/altscontext.pb.h',
'src/core/tsi/alts/handshaker/handshaker.pb.h',
'src/core/tsi/alts/handshaker/transport_security_common.pb.h',
'third_party/nanopb/pb.h', 'third_party/nanopb/pb.h',
'third_party/nanopb/pb_common.h', 'third_party/nanopb/pb_common.h',
'third_party/nanopb/pb_decode.h', 'third_party/nanopb/pb_decode.h',
'third_party/nanopb/pb_encode.h', 'third_party/nanopb/pb_encode.h'
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_adapter.h',
'src/core/tsi/transport_security_interface.h',
'src/core/ext/transport/chttp2/client/authority.h',
'src/core/ext/transport/chttp2/client/chttp2_connector.h',
'src/core/tsi/alts_transport_security.h',
'src/core/tsi/fake_transport_security.h',
'src/core/tsi/ssl/session_cache/ssl_session.h',
'src/core/tsi/ssl/session_cache/ssl_session_cache.h',
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security_grpc.h',
'src/core/ext/transport/chttp2/server/chttp2_server.h'
end end
s.subspec 'Cronet-Tests' do |ss| s.subspec 'Tests' do |ss|
ss.header_mappings_dir = '.' ss.header_mappings_dir = '.'
ss.dependency "#{s.name}/Cronet-Interface", version ss.dependency "#{s.name}/Interface", version
ss.dependency "#{s.name}/Cronet-Implementation", version ss.dependency "#{s.name}/Implementation", version
ss.source_files = 'test/core/util/test_config.cc', ss.source_files = 'test/core/util/test_config.cc',
'test/core/util/test_config.h', 'test/core/util/test_config.h',

@ -333,6 +333,9 @@ typedef struct {
/** Channel arg that carries the bridged objective c object for custom metrics /** Channel arg that carries the bridged objective c object for custom metrics
* logging filter. */ * logging filter. */
#define GRPC_ARG_MOBILE_LOG_CONFIG "grpc.mobile_log_config" #define GRPC_ARG_MOBILE_LOG_CONFIG "grpc.mobile_log_config"
/** If non-zero, client authority filter is disabled for the channel */
#define GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER \
"grpc.disable_client_authority_filter"
/** \} */ /** \} */
/** Result of a grpc call. If the caller satisfies the prerequisites of a /** Result of a grpc call. If the caller satisfies the prerequisites of a

@ -31,6 +31,8 @@
namespace grpc { namespace grpc {
class ServerInterface;
namespace internal { namespace internal {
class CallOpSendMessage; class CallOpSendMessage;
template <class R> template <class R>
@ -98,6 +100,7 @@ class ByteBuffer final {
private: private:
friend class SerializationTraits<ByteBuffer, void>; friend class SerializationTraits<ByteBuffer, void>;
friend class ServerInterface;
friend class internal::CallOpSendMessage; friend class internal::CallOpSendMessage;
template <class R> template <class R>
friend class internal::CallOpRecvMessage; friend class internal::CallOpRecvMessage;

@ -20,6 +20,7 @@
#define GRPCPP_IMPL_CODEGEN_SERVER_INTERFACE_H #define GRPCPP_IMPL_CODEGEN_SERVER_INTERFACE_H
#include <grpc/impl/codegen/grpc_types.h> #include <grpc/impl/codegen/grpc_types.h>
#include <grpcpp/impl/codegen/byte_buffer.h>
#include <grpcpp/impl/codegen/call_hook.h> #include <grpcpp/impl/codegen/call_hook.h>
#include <grpcpp/impl/codegen/completion_queue_tag.h> #include <grpcpp/impl/codegen/completion_queue_tag.h>
#include <grpcpp/impl/codegen/core_codegen_interface.h> #include <grpcpp/impl/codegen/core_codegen_interface.h>
@ -185,13 +186,17 @@ class ServerInterface : public internal::CallHook {
notification_cq_(notification_cq), notification_cq_(notification_cq),
tag_(tag), tag_(tag),
request_(request) { request_(request) {
IssueRequest(registered_method, &payload_, notification_cq); IssueRequest(registered_method, payload_.bbuf_ptr(), notification_cq);
}
~PayloadAsyncRequest() {
payload_.Release(); // We do not own the payload_
} }
bool FinalizeResult(void** tag, bool* status) override { bool FinalizeResult(void** tag, bool* status) override {
if (*status) { if (*status) {
if (payload_ == nullptr || if (!payload_.Valid() || !SerializationTraits<Message>::Deserialize(
!SerializationTraits<Message>::Deserialize(payload_, request_) payload_.bbuf_ptr(), request_)
.ok()) { .ok()) {
// If deserialization fails, we cancel the call and instantiate // If deserialization fails, we cancel the call and instantiate
// a new instance of ourselves to request another call. We then // a new instance of ourselves to request another call. We then
@ -219,7 +224,7 @@ class ServerInterface : public internal::CallHook {
ServerCompletionQueue* const notification_cq_; ServerCompletionQueue* const notification_cq_;
void* const tag_; void* const tag_;
Message* const request_; Message* const request_;
grpc_byte_buffer* payload_; ByteBuffer payload_;
}; };
class GenericAsyncRequest : public BaseAsyncRequest { class GenericAsyncRequest : public BaseAsyncRequest {

@ -73,7 +73,7 @@ void PrintService(const ServiceDescriptor* service, const grpc::string& package,
// Begin the service module // Begin the service module
std::map<grpc::string, grpc::string> module_vars = ListToDict({ std::map<grpc::string, grpc::string> module_vars = ListToDict({
"module.name", "module.name",
CapitalizeFirst(service->name()), Modularize(service->name()),
}); });
out->Print(module_vars, "module $module.name$\n"); out->Print(module_vars, "module $module.name$\n");
out->Indent(); out->Indent();

@ -81,13 +81,23 @@ inline bool ReplacePrefix(grpc::string* s, const grpc::string& from,
return true; return true;
} }
// CapitalizeFirst capitalizes the first char in a string. // Modularize converts a string into a ruby module compatible name
inline grpc::string CapitalizeFirst(grpc::string s) { inline grpc::string Modularize(grpc::string s) {
if (s.empty()) { if (s.empty()) {
return s; return s;
} }
s[0] = ::toupper(s[0]); grpc::string new_string = "";
return s; bool was_last_underscore = false;
new_string.append(1, ::toupper(s[0]));
for (grpc::string::size_type i = 1; i < s.size(); ++i) {
if (was_last_underscore && s[i] != '_') {
new_string.append(1, ::toupper(s[i]));
} else if (s[i] != '_') {
new_string.append(1, s[i]);
}
was_last_underscore = s[i] == '_';
}
return new_string;
} }
// RubyTypeOf updates a proto type to the required ruby equivalent. // RubyTypeOf updates a proto type to the required ruby equivalent.
@ -106,7 +116,7 @@ inline grpc::string RubyTypeOf(const grpc::string& a_type,
res += "::"; // switch '.' to the ruby module delim res += "::"; // switch '.' to the ruby module delim
} }
if (i < prefixes_and_type.size() - 1) { if (i < prefixes_and_type.size() - 1) {
res += CapitalizeFirst(prefixes_and_type[i]); // capitalize pkgs res += Modularize(prefixes_and_type[i]); // capitalize pkgs
} else { } else {
res += prefixes_and_type[i]; res += prefixes_and_type[i];
} }

@ -91,14 +91,18 @@ grpc_error* init_channel_elem(grpc_channel_element* elem,
const grpc_arg* default_authority_arg = const grpc_arg* default_authority_arg =
grpc_channel_args_find(args->channel_args, GRPC_ARG_DEFAULT_AUTHORITY); grpc_channel_args_find(args->channel_args, GRPC_ARG_DEFAULT_AUTHORITY);
if (default_authority_arg == nullptr) { if (default_authority_arg == nullptr) {
gpr_log( return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
GPR_ERROR,
"GRPC_ARG_DEFAULT_AUTHORITY channel arg. not found. Note that direct " "GRPC_ARG_DEFAULT_AUTHORITY channel arg. not found. Note that direct "
"channels must explicity specify a value for this argument."); "channels must explicity specify a value for this argument.");
abort();
} }
chand->default_authority = grpc_slice_from_copied_string( const char* default_authority_str =
grpc_channel_arg_get_string(default_authority_arg)); grpc_channel_arg_get_string(default_authority_arg);
if (default_authority_str == nullptr) {
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"GRPC_ARG_DEFAULT_AUTHORITY channel arg. must be a string");
}
chand->default_authority =
grpc_slice_from_copied_string(default_authority_str);
GPR_ASSERT(!args->is_last); GPR_ASSERT(!args->is_last);
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
@ -125,6 +129,17 @@ const grpc_channel_filter grpc_client_authority_filter = {
static bool add_client_authority_filter(grpc_channel_stack_builder* builder, static bool add_client_authority_filter(grpc_channel_stack_builder* builder,
void* arg) { void* arg) {
const grpc_channel_args* channel_args =
grpc_channel_stack_builder_get_channel_arguments(builder);
const grpc_arg* disable_client_authority_filter_arg = grpc_channel_args_find(
channel_args, GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER);
if (disable_client_authority_filter_arg != nullptr) {
const bool is_client_authority_filter_disabled =
grpc_channel_arg_get_bool(disable_client_authority_filter_arg, false);
if (is_client_authority_filter_disabled) {
return true;
}
}
return grpc_channel_stack_builder_prepend_filter( return grpc_channel_stack_builder_prepend_filter(
builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr); builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
} }

@ -42,12 +42,23 @@ class LockfreeEvent {
void InitEvent(); void InitEvent();
void DestroyEvent(); void DestroyEvent();
// Returns true if fd has been shutdown, false otherwise.
bool IsShutdown() const { bool IsShutdown() const {
return (gpr_atm_no_barrier_load(&state_) & kShutdownBit) != 0; return (gpr_atm_no_barrier_load(&state_) & kShutdownBit) != 0;
} }
// Schedules \a closure when the event is received (see SetReady()) or the
// shutdown state has been set. Note that the event may have already been
// received, in which case the closure would be scheduled immediately.
// If the shutdown state has already been set, then \a closure is scheduled
// with the shutdown error.
void NotifyOn(grpc_closure* closure); void NotifyOn(grpc_closure* closure);
// Sets the shutdown state. If a closure had been provided by NotifyOn and has
// not yet been scheduled, it will be scheduled with \a error.
bool SetShutdown(grpc_error* error); bool SetShutdown(grpc_error* error);
// Signals that the event has been received.
void SetReady(); void SetReady();
private: private:

@ -34,7 +34,6 @@ int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
int cloexec) { int cloexec) {
int flags = 0; int flags = 0;
GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t));
GPR_ASSERT(resolved_addr->len <= (socklen_t)-1);
flags |= nonblock ? SOCK_NONBLOCK : 0; flags |= nonblock ? SOCK_NONBLOCK : 0;
flags |= cloexec ? SOCK_CLOEXEC : 0; flags |= cloexec ? SOCK_CLOEXEC : 0;
return accept4(sockfd, reinterpret_cast<grpc_sockaddr*>(resolved_addr->addr), return accept4(sockfd, reinterpret_cast<grpc_sockaddr*>(resolved_addr->addr),

@ -35,7 +35,6 @@ int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
int cloexec) { int cloexec) {
int fd, flags; int fd, flags;
GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t)); GPR_ASSERT(sizeof(socklen_t) <= sizeof(size_t));
GPR_ASSERT(resolved_addr->len <= (socklen_t)-1);
fd = accept(sockfd, (grpc_sockaddr*)resolved_addr->addr, fd = accept(sockfd, (grpc_sockaddr*)resolved_addr->addr,
(socklen_t*)&resolved_addr->len); (socklen_t*)&resolved_addr->len);
if (fd >= 0) { if (fd >= 0) {

@ -170,7 +170,6 @@ grpc_error* grpc_tcp_server_prepare_socket(int fd,
err = grpc_set_socket_no_sigpipe_if_possible(fd); err = grpc_set_socket_no_sigpipe_if_possible(fd);
if (err != GRPC_ERROR_NONE) goto error; if (err != GRPC_ERROR_NONE) goto error;
GPR_ASSERT(addr->len < ~(socklen_t)0);
if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)), if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)),
addr->len) < 0) { addr->len) < 0) {
err = GRPC_OS_ERROR(errno, "bind"); err = GRPC_OS_ERROR(errno, "bind");

@ -381,7 +381,6 @@ static int prepare_socket(grpc_socket_factory* socket_factory, int fd,
} }
} }
GPR_ASSERT(addr->len < ~(socklen_t)0);
if (bind_socket(socket_factory, fd, addr) < 0) { if (bind_socket(socket_factory, fd, addr) < 0) {
char* addr_str; char* addr_str;
grpc_sockaddr_to_string(&addr_str, addr, 0); grpc_sockaddr_to_string(&addr_str, addr, 0);

@ -1151,16 +1151,6 @@ const char* DefaultSslRootStore::GetPemRootCerts() {
GRPC_SLICE_START_PTR(default_pem_root_certs_); GRPC_SLICE_START_PTR(default_pem_root_certs_);
} }
void DefaultSslRootStore::Initialize() {
default_root_store_ = nullptr;
default_pem_root_certs_ = grpc_empty_slice();
}
void DefaultSslRootStore::Destroy() {
tsi_ssl_root_certs_store_destroy(default_root_store_);
grpc_slice_unref_internal(default_pem_root_certs_);
}
grpc_slice DefaultSslRootStore::ComputePemRootCerts() { grpc_slice DefaultSslRootStore::ComputePemRootCerts() {
grpc_slice result = grpc_empty_slice(); grpc_slice result = grpc_empty_slice();
// First try to load the roots from the environment. // First try to load the roots from the environment.

@ -256,15 +256,6 @@ class DefaultSslRootStore {
// Gets the default PEM root certificate. // Gets the default PEM root certificate.
static const char* GetPemRootCerts(); static const char* GetPemRootCerts();
// Initializes the SSL root store's underlying data structure. It does not
// load default SSL root certificates. Should only be called by
// grpc_security_init().
static void Initialize();
// Destroys the default SSL root store. Should only be called by
// grpc_security_shutdown().
static void Destroy();
protected: protected:
// Returns default PEM root certificates in nullptr terminated grpc_slice. // Returns default PEM root certificates in nullptr terminated grpc_slice.
// This function is protected instead of private, so that it can be tested. // This function is protected instead of private, so that it can be tested.

@ -167,7 +167,7 @@ static grpc_core::UniquePtr<char> get_default_authority(
has_default_authority = true; has_default_authority = true;
} else if (0 == strcmp(input_args->args[i].key, } else if (0 == strcmp(input_args->args[i].key,
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG)) { GRPC_SSL_TARGET_NAME_OVERRIDE_ARG)) {
ssl_override = input_args->args[i].value.string; ssl_override = grpc_channel_arg_get_string(&input_args->args[i]);
} }
} }
if (!has_default_authority && ssl_override != nullptr) { if (!has_default_authority && ssl_override != nullptr) {

@ -172,7 +172,6 @@ void grpc_shutdown(void) {
} }
} }
} }
grpc_security_shutdown();
grpc_iomgr_shutdown(); grpc_iomgr_shutdown();
gpr_timers_global_destroy(); gpr_timers_global_destroy();
grpc_tracer_shutdown(); grpc_tracer_shutdown();

@ -22,7 +22,6 @@
void grpc_register_security_filters(void); void grpc_register_security_filters(void);
void grpc_security_pre_init(void); void grpc_security_pre_init(void);
void grpc_security_init(void); void grpc_security_init(void);
void grpc_security_shutdown(void);
int grpc_is_initialized(void); int grpc_is_initialized(void);
#endif /* GRPC_CORE_LIB_SURFACE_INIT_H */ #endif /* GRPC_CORE_LIB_SURFACE_INIT_H */

@ -78,9 +78,4 @@ void grpc_register_security_filters(void) {
maybe_prepend_server_auth_filter, nullptr); maybe_prepend_server_auth_filter, nullptr);
} }
void grpc_security_init() { void grpc_security_init() { grpc_security_register_handshaker_factories(); }
grpc_security_register_handshaker_factories();
grpc_core::DefaultSslRootStore::Initialize();
}
void grpc_security_shutdown() { grpc_core::DefaultSslRootStore::Destroy(); }

@ -25,5 +25,3 @@ void grpc_security_pre_init(void) {}
void grpc_register_security_filters(void) {} void grpc_register_security_filters(void) {}
void grpc_security_init(void) {} void grpc_security_init(void) {}
void grpc_security_shutdown(void) {}

@ -20,50 +20,30 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
void grpc_deadline_filter_init(void);
void grpc_deadline_filter_shutdown(void);
void grpc_client_channel_init(void);
void grpc_client_channel_shutdown(void);
void grpc_lb_policy_pick_first_init(void);
void grpc_lb_policy_pick_first_shutdown(void);
void grpc_max_age_filter_init(void);
void grpc_max_age_filter_shutdown(void);
void grpc_message_size_filter_init(void);
void grpc_message_size_filter_shutdown(void);
void grpc_resolver_dns_native_init(void);
void grpc_resolver_dns_native_shutdown(void);
void grpc_resolver_sockaddr_init(void);
void grpc_resolver_sockaddr_shutdown(void);
void grpc_server_load_reporting_plugin_init(void);
void grpc_server_load_reporting_plugin_shutdown(void);
void grpc_http_filters_init(void); void grpc_http_filters_init(void);
void grpc_http_filters_shutdown(void); void grpc_http_filters_shutdown(void);
void grpc_chttp2_plugin_init(void); void grpc_chttp2_plugin_init(void);
void grpc_chttp2_plugin_shutdown(void); void grpc_chttp2_plugin_shutdown(void);
void grpc_deadline_filter_init(void);
void grpc_deadline_filter_shutdown(void);
void grpc_client_channel_init(void);
void grpc_client_channel_shutdown(void);
void grpc_tsi_alts_init(void); void grpc_tsi_alts_init(void);
void grpc_tsi_alts_shutdown(void); void grpc_tsi_alts_shutdown(void);
void grpc_server_load_reporting_plugin_init(void);
void grpc_server_load_reporting_plugin_shutdown(void);
void grpc_register_built_in_plugins(void) { void grpc_register_built_in_plugins(void) {
grpc_register_plugin(grpc_deadline_filter_init,
grpc_deadline_filter_shutdown);
grpc_register_plugin(grpc_client_channel_init,
grpc_client_channel_shutdown);
grpc_register_plugin(grpc_lb_policy_pick_first_init,
grpc_lb_policy_pick_first_shutdown);
grpc_register_plugin(grpc_max_age_filter_init,
grpc_max_age_filter_shutdown);
grpc_register_plugin(grpc_message_size_filter_init,
grpc_message_size_filter_shutdown);
grpc_register_plugin(grpc_resolver_dns_native_init,
grpc_resolver_dns_native_shutdown);
grpc_register_plugin(grpc_resolver_sockaddr_init,
grpc_resolver_sockaddr_shutdown);
grpc_register_plugin(grpc_server_load_reporting_plugin_init,
grpc_server_load_reporting_plugin_shutdown);
grpc_register_plugin(grpc_http_filters_init, grpc_register_plugin(grpc_http_filters_init,
grpc_http_filters_shutdown); grpc_http_filters_shutdown);
grpc_register_plugin(grpc_chttp2_plugin_init, grpc_register_plugin(grpc_chttp2_plugin_init,
grpc_chttp2_plugin_shutdown); grpc_chttp2_plugin_shutdown);
grpc_register_plugin(grpc_deadline_filter_init,
grpc_deadline_filter_shutdown);
grpc_register_plugin(grpc_client_channel_init,
grpc_client_channel_shutdown);
grpc_register_plugin(grpc_tsi_alts_init, grpc_register_plugin(grpc_tsi_alts_init,
grpc_tsi_alts_shutdown); grpc_tsi_alts_shutdown);
grpc_register_plugin(grpc_server_load_reporting_plugin_init,
grpc_server_load_reporting_plugin_shutdown);
} }

@ -196,9 +196,6 @@ static NSString * const kBearerPrefix = @"Bearer ";
_state = GRXWriterStateFinished; _state = GRXWriterStateFinished;
} }
// If the call isn't retained anywhere else, it can be deallocated now.
_retainSelf = nil;
// If there were still request messages coming, stop them. // If there were still request messages coming, stop them.
@synchronized(_requestWriter) { @synchronized(_requestWriter) {
_requestWriter.state = GRXWriterStateFinished; _requestWriter.state = GRXWriterStateFinished;
@ -211,6 +208,9 @@ static NSString * const kBearerPrefix = @"Bearer ";
} }
[GRPCConnectivityMonitor unregisterObserver:self]; [GRPCConnectivityMonitor unregisterObserver:self];
// If the call isn't retained anywhere else, it can be deallocated now.
_retainSelf = nil;
} }
- (void)cancelCall { - (void)cancelCall {

@ -192,7 +192,7 @@ static NSMutableDictionary *kHostCache;
return YES; return YES;
} }
- (NSDictionary *)channelArgs { - (NSDictionary *)channelArgsUsingCronet:(BOOL)useCronet {
NSMutableDictionary *args = [NSMutableDictionary dictionary]; NSMutableDictionary *args = [NSMutableDictionary dictionary];
// TODO(jcanizales): Add OS and device information (see // TODO(jcanizales): Add OS and device information (see
@ -226,14 +226,19 @@ static NSMutableDictionary *kHostCache;
args[@GRPC_ARG_MOBILE_LOG_CONFIG] = logConfig; args[@GRPC_ARG_MOBILE_LOG_CONFIG] = logConfig;
} }
if (useCronet) {
args[@GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER] = [NSNumber numberWithInt:1];
}
return args; return args;
} }
- (GRPCChannel *)newChannel { - (GRPCChannel *)newChannel {
NSDictionary *args = [self channelArgs]; BOOL useCronet = NO;
#ifdef GRPC_COMPILE_WITH_CRONET #ifdef GRPC_COMPILE_WITH_CRONET
BOOL useCronet = [GRPCCall isUsingCronet]; useCronet = [GRPCCall isUsingCronet];
#endif #endif
NSDictionary *args = [self channelArgsUsingCronet:useCronet];
if (_secure) { if (_secure) {
GRPCChannel *channel; GRPCChannel *channel;
@synchronized(self) { @synchronized(self) {

@ -82,8 +82,14 @@ static void cronet_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_channel_args *client_args, grpc_channel_args *client_args,
stream_engine *cronetEngine) { stream_engine *cronetEngine) {
fullstack_secure_fixture_data *ffd = (fullstack_secure_fixture_data *)f->fixture_data; fullstack_secure_fixture_data *ffd = (fullstack_secure_fixture_data *)f->fixture_data;
grpc_arg arg;
arg.key = const_cast<char*>(GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER);
arg.type = GRPC_ARG_INTEGER;
arg.value.integer = 1;
client_args = grpc_channel_args_copy_and_add(client_args, &arg, 1);
f->client = grpc_cronet_secure_channel_create(cronetEngine, ffd->localaddr, f->client = grpc_cronet_secure_channel_create(cronetEngine, ffd->localaddr,
client_args, NULL); client_args, NULL);
grpc_channel_args_destroy(client_args);
GPR_ASSERT(f->client != NULL); GPR_ASSERT(f->client != NULL);
} }

@ -126,6 +126,14 @@ unsigned int parse_h2_length(const char *field) {
((unsigned int)(unsigned char)(field[2])); ((unsigned int)(unsigned char)(field[2]));
} }
grpc_channel_args *add_disable_client_authority_filter_args(grpc_channel_args *args) {
grpc_arg arg;
arg.key = const_cast<char*>(GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER);
arg.type = GRPC_ARG_INTEGER;
arg.value.integer = 1;
return grpc_channel_args_copy_and_add(args, &arg, 1);
}
- (void)testInternalError { - (void)testInternalError {
grpc_call *c; grpc_call *c;
grpc_slice request_payload_slice = grpc_slice request_payload_slice =
@ -147,8 +155,10 @@ unsigned int parse_h2_length(const char *field) {
gpr_join_host_port(&addr, "127.0.0.1", port); gpr_join_host_port(&addr, "127.0.0.1", port);
grpc_completion_queue *cq = grpc_completion_queue_create_for_next(NULL); grpc_completion_queue *cq = grpc_completion_queue_create_for_next(NULL);
stream_engine *cronetEngine = [Cronet getGlobalEngine]; stream_engine *cronetEngine = [Cronet getGlobalEngine];
grpc_channel_args *client_args = add_disable_client_authority_filter_args(NULL);
grpc_channel *client = grpc_channel *client =
grpc_cronet_secure_channel_create(cronetEngine, addr, NULL, NULL); grpc_cronet_secure_channel_create(cronetEngine, addr, client_args, NULL);
grpc_channel_args_destroy(client_args);
cq_verifier *cqv = cq_verifier_create(cq); cq_verifier *cqv = cq_verifier_create(cq);
grpc_op ops[6]; grpc_op ops[6];
@ -262,6 +272,8 @@ unsigned int parse_h2_length(const char *field) {
arg.type = GRPC_ARG_INTEGER; arg.type = GRPC_ARG_INTEGER;
arg.value.integer = useCoalescing ? 1 : 0; arg.value.integer = useCoalescing ? 1 : 0;
grpc_channel_args *args = grpc_channel_args_copy_and_add(NULL, &arg, 1); grpc_channel_args *args = grpc_channel_args_copy_and_add(NULL, &arg, 1);
args = add_disable_client_authority_filter_args(args);
grpc_call *c; grpc_call *c;
grpc_slice request_payload_slice = grpc_slice request_payload_slice =
grpc_slice_from_copied_string("hello world"); grpc_slice_from_copied_string("hello world");

@ -43,8 +43,10 @@ end
target target_name do target target_name do
pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true pod 'BoringSSL', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c", :inhibit_warnings => true
pod 'CronetFramework', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c" pod 'CronetFramework', :podspec => "#{GRPC_LOCAL_SRC}/src/objective-c"
pod 'gRPC-Core', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core/Cronet-Interface', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core/Cronet-Implementation', :path => GRPC_LOCAL_SRC pod 'gRPC-Core/Cronet-Implementation', :path => GRPC_LOCAL_SRC
pod 'gRPC-Core/Cronet-Tests', :path => GRPC_LOCAL_SRC pod 'gRPC-Core/Tests', :path => GRPC_LOCAL_SRC
end end
end end

@ -57,9 +57,8 @@ int le_plink;
/* Frees and destroys an instance of wrapped_grpc_channel */ /* Frees and destroys an instance of wrapped_grpc_channel */
PHP_GRPC_FREE_WRAPPED_FUNC_START(wrapped_grpc_channel) PHP_GRPC_FREE_WRAPPED_FUNC_START(wrapped_grpc_channel)
bool is_last_wrapper = false; // In_persistent_list is used when the user don't close the channel,
// In_persistent_list is used when the user don't close the channel. // In this case, channels not in the list should be freed.
// In this case, le in the list won't be freed.
bool in_persistent_list = true; bool in_persistent_list = true;
if (p->wrapper != NULL) { if (p->wrapper != NULL) {
gpr_mu_lock(&p->wrapper->mu); gpr_mu_lock(&p->wrapper->mu);
@ -79,42 +78,19 @@ PHP_GRPC_FREE_WRAPPED_FUNC_START(wrapped_grpc_channel)
free(p->wrapper->creds_hashstr); free(p->wrapper->creds_hashstr);
p->wrapper->creds_hashstr = NULL; p->wrapper->creds_hashstr = NULL;
} }
free(p->wrapper->key);
} }
gpr_mu_unlock(&global_persistent_list_mu); gpr_mu_unlock(&global_persistent_list_mu);
} }
} }
p->wrapper->ref_count -= 1; p->wrapper->ref_count -= 1;
if (p->wrapper->ref_count == 0) {
is_last_wrapper = true;
}
gpr_mu_unlock(&p->wrapper->mu);
if (is_last_wrapper) {
if (in_persistent_list) {
// If ref_count==0 and the key still in the list, it means the user
// don't call channel->close().persistent list should free the
// allocation in such case, as well as related wrapped channel.
if (p->wrapper->wrapped != NULL) {
gpr_mu_lock(&p->wrapper->mu);
grpc_channel_destroy(p->wrapper->wrapped);
free(p->wrapper->target);
free(p->wrapper->args_hashstr);
if(p->wrapper->creds_hashstr != NULL){
free(p->wrapper->creds_hashstr);
p->wrapper->creds_hashstr = NULL;
}
p->wrapper->wrapped = NULL;
php_grpc_delete_persistent_list_entry(p->wrapper->key,
strlen(p->wrapper->key)
TSRMLS_CC);
gpr_mu_unlock(&p->wrapper->mu); gpr_mu_unlock(&p->wrapper->mu);
} if (!in_persistent_list) {
}
gpr_mu_destroy(&p->wrapper->mu); gpr_mu_destroy(&p->wrapper->mu);
free(p->wrapper->key);
free(p->wrapper); free(p->wrapper);
}
p->wrapper = NULL; p->wrapper = NULL;
} }
}
PHP_GRPC_FREE_WRAPPED_FUNC_END() PHP_GRPC_FREE_WRAPPED_FUNC_END()
/* Initializes an instance of wrapped_grpc_channel to be associated with an /* Initializes an instance of wrapped_grpc_channel to be associated with an
@ -330,7 +306,6 @@ PHP_METHOD(Channel, __construct) {
gpr_mu_init(&channel->wrapper->mu); gpr_mu_init(&channel->wrapper->mu);
smart_str_free(&buf); smart_str_free(&buf);
if (force_new || (creds != NULL && creds->has_call_creds)) { if (force_new || (creds != NULL && creds->has_call_creds)) {
// If the ChannelCredentials object was composed with a CallCredentials // If the ChannelCredentials object was composed with a CallCredentials
// object, there is no way we can tell them apart. Do NOT persist // object, there is no way we can tell them apart. Do NOT persist
@ -540,8 +515,18 @@ static void php_grpc_channel_plink_dtor(php_grpc_zend_resource *rsrc
grpc_channel_destroy(le->channel->wrapped); grpc_channel_destroy(le->channel->wrapped);
free(le->channel->target); free(le->channel->target);
free(le->channel->args_hashstr); free(le->channel->args_hashstr);
le->channel->wrapped = NULL;
le->channel->target = NULL;
le->channel->args_hashstr = NULL;
} }
free(le->channel->key);
le->channel->key = NULL;
gpr_mu_unlock(&le->channel->mu); gpr_mu_unlock(&le->channel->mu);
gpr_mu_destroy(&le->channel->mu);
free(le->channel);
le->channel = NULL;
free(le);
le = NULL;
} }
} }

@ -121,6 +121,8 @@ class TestGevent(setuptools.Command):
'testing._client_test.ClientTest.test_infinite_request_stream_real_time', 'testing._client_test.ClientTest.test_infinite_request_stream_real_time',
# TODO(https://github.com/grpc/grpc/issues/14789) enable this test # TODO(https://github.com/grpc/grpc/issues/14789) enable this test
'unit._server_ssl_cert_config_test', 'unit._server_ssl_cert_config_test',
# TODO(https://github.com/grpc/grpc/issues/14901) enable this test
'protoc_plugin._python_plugin_test.PythonPluginTest',
# Beta API is unsupported for gevent # Beta API is unsupported for gevent
'protoc_plugin.beta_python_plugin_test', 'protoc_plugin.beta_python_plugin_test',
'unit.beta._beta_features_test', 'unit.beta._beta_features_test',

@ -36,6 +36,9 @@ class InsecureIntraopTest(_intraop_test_case.IntraopTestCase,
self.stub = test_pb2_grpc.TestServiceStub( self.stub = test_pb2_grpc.TestServiceStub(
grpc.insecure_channel('localhost:{}'.format(port))) grpc.insecure_channel('localhost:{}'.format(port)))
def tearDown(self):
self.server.stop(None)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main(verbosity=2) unittest.main(verbosity=2)

@ -45,6 +45,9 @@ class SecureIntraopTest(_intraop_test_case.IntraopTestCase, unittest.TestCase):
_SERVER_HOST_OVERRIDE, _SERVER_HOST_OVERRIDE,
),))) ),)))
def tearDown(self):
self.server.stop(None)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main(verbosity=2) unittest.main(verbosity=2)

@ -0,0 +1,54 @@
# Copyright 2016 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.
require 'open3'
require 'tmpdir'
def debug_mode?
!ENV['CONFIG'].nil? && ENV['CONFIG'] == 'dbg'
end
describe 'Package with underscore protobuf code generation' do
it 'should have the same content as created by code generation' do
root_dir = File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..')
pb_dir = File.join(root_dir, 'src', 'ruby', 'spec', 'pb')
bins_sub_dir = debug_mode? ? 'dbg' : 'opt'
bins_dir = File.join(root_dir, 'bins', bins_sub_dir)
plugin = File.join(bins_dir, 'grpc_ruby_plugin')
protoc = File.join(bins_dir, 'protobuf', 'protoc')
got = nil
Dir.mktmpdir do |tmp_dir|
gen_out = File.join(tmp_dir, 'package_with_underscore', 'service_services_pb.rb')
pid = spawn(
protoc,
'-I.',
'package_with_underscore/service.proto',
"--grpc_out=#{tmp_dir}",
"--plugin=protoc-gen-grpc=#{plugin}",
chdir: pb_dir)
Process.waitpid2(pid)
File.open(gen_out) { |f| got = f.read }
end
correct_modularized_rpc = 'rpc :TestOne, ' \
'Grpc::Testing::PackageWithUnderscore::Data::Request, ' \
'Grpc::Testing::PackageWithUnderscore::Data::Response'
expect(got).to include(correct_modularized_rpc)
end
end

@ -0,0 +1,23 @@
// Copyright 2018 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.
syntax = "proto3";
package grpc.testing.package_with_underscore.data;
message Request {
}
message Response {
}

@ -0,0 +1,23 @@
// Copyright 2018 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.
syntax = "proto3";
package grpc.testing.package_with_underscore.service;
import "package_with_underscore/data.proto";
service MyService {
rpc TestOne(data.Request) returns (data.Response) {}
}

@ -416,7 +416,7 @@
OPENSSL_ALPN_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.0.2 openssl OPENSSL_ALPN_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.0.2 openssl
OPENSSL_NPN_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.0.1 openssl OPENSSL_NPN_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.0.1 openssl
ZLIB_CHECK_CMD = $(PKG_CONFIG) --exists zlib ZLIB_CHECK_CMD = $(PKG_CONFIG) --exists zlib
PROTOBUF_CHECK_CMD = $(PKG_CONFIG) --atleast-version=3.0.0 protobuf PROTOBUF_CHECK_CMD = $(PKG_CONFIG) --atleast-version=3.5.0 protobuf
CARES_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.11.0 libcares CARES_CHECK_CMD = $(PKG_CONFIG) --atleast-version=1.11.0 libcares
else # HAS_PKG_CONFIG else # HAS_PKG_CONFIG
@ -844,7 +844,7 @@
@echo @echo
@echo "DEPENDENCY ERROR" @echo "DEPENDENCY ERROR"
@echo @echo
@echo "The target you are trying to run requires protobuf 3.0.0+" @echo "The target you are trying to run requires protobuf 3.5.0+"
@echo "Your system doesn't have it, and neither does the third_party directory." @echo "Your system doesn't have it, and neither does the third_party directory."
@echo @echo
@echo "Please consult INSTALL to get more information." @echo "Please consult INSTALL to get more information."
@ -858,7 +858,7 @@
@echo @echo
@echo "DEPENDENCY ERROR" @echo "DEPENDENCY ERROR"
@echo @echo
@echo "The target you are trying to run requires protobuf-compiler 3.0.0+" @echo "The target you are trying to run requires protobuf-compiler 3.5.0+"
@echo "Your system doesn't have it, and neither does the third_party directory." @echo "Your system doesn't have it, and neither does the third_party directory."
@echo @echo
@echo "Please consult INSTALL to get more information." @echo "Please consult INSTALL to get more information."
@ -1636,7 +1636,7 @@
% endif % endif
% if lib.language == 'c++': % if lib.language == 'c++':
## If the lib was C++, we have to close the Makefile's if that tested ## If the lib was C++, we have to close the Makefile's if that tested
## the presence of protobuf 3.0.0+ ## the presence of protobuf 3.5.0+
endif endif
% endif % endif
@ -1702,7 +1702,7 @@
ifeq ($(NO_PROTOBUF),true) ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. # You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.5.0+.
$(BINDIR)/$(CONFIG)/${tgt.name}: protobuf_dep_error $(BINDIR)/$(CONFIG)/${tgt.name}: protobuf_dep_error

@ -42,21 +42,21 @@
out = grpc_lib_files(libs, ("grpc", "gpr"), ("headers",)) out = grpc_lib_files(libs, ("grpc", "gpr"), ("headers",))
return [file for file in out if not file.startswith("third_party/nanopb/")] return [file for file in out if not file.startswith("third_party/nanopb/")]
def grpc_cronet_private_files(libs): def grpc_cronet_files(libs):
out = grpc_lib_files(libs, ("grpc_cronet", "gpr"), ("headers", "src")) out = grpc_lib_files(libs, ("grpc_cronet",), ("src", "headers"))
excl = [ excl = grpc_private_files(libs)
# We do not want dummy cronet API for ObjC excl += [
# We do not need cronet dedicated plugin registry
"src/core/plugin_registry/grpc_cronet_plugin_registry.cc",
# We do not need dummy cronet API for ObjC
"src/core/ext/transport/cronet/transport/cronet_api_dummy.cc", "src/core/ext/transport/cronet/transport/cronet_api_dummy.cc",
] ]
return [file for file in out if not file in excl] return [file for file in out if not file in excl]
def grpc_cronet_public_headers(libs): def grpc_cronet_public_headers(libs):
out = grpc_lib_files(libs, ("grpc_cronet", "gpr"), ("public_headers",)) out = grpc_lib_files(libs, ("grpc_cronet",), ("public_headers",))
return out excl = grpc_public_headers(libs)
return [file for file in out if not file in excl]
def grpc_cronet_private_headers(libs):
out = grpc_lib_files(libs, ("grpc_cronet", "gpr"), ("headers",))
return out
def grpc_test_util_files(libs): def grpc_test_util_files(libs):
out = grpc_lib_files(libs, ("grpc_test_util", "gpr_test_util"), ("src", "headers")) out = grpc_lib_files(libs, ("grpc_test_util", "gpr_test_util"), ("src", "headers"))
@ -169,6 +169,7 @@
ss.dependency 'BoringSSL', '~> 10.0' ss.dependency 'BoringSSL', '~> 10.0'
ss.dependency 'nanopb', '~> 0.3' ss.dependency 'nanopb', '~> 0.3'
# To save you from scrolling, this is the last part of the podspec.
ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)} ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)}
ss.private_header_files = ${ruby_multiline_list(grpc_private_headers(libs), 30)} ss.private_header_files = ${ruby_multiline_list(grpc_private_headers(libs), 30)}
@ -181,21 +182,19 @@
s.subspec 'Cronet-Implementation' do |ss| s.subspec 'Cronet-Implementation' do |ss|
ss.header_mappings_dir = '.' ss.header_mappings_dir = '.'
ss.libraries = 'z'
ss.dependency "#{s.name}/Cronet-Interface", version
ss.dependency 'BoringSSL', '~> 10.0'
ss.dependency 'nanopb', '~> 0.3'
ss.source_files = ${ruby_multiline_list(grpc_cronet_private_files(libs), 22)} ss.dependency "#{s.name}/Interface", version
ss.dependency "#{s.name}/Implementation", version
ss.dependency "#{s.name}/Cronet-Interface", version
ss.private_header_files = ${ruby_multiline_list(grpc_cronet_private_headers(libs), 30)} ss.source_files = ${ruby_multiline_list(grpc_cronet_files(libs), 22)}
end end
s.subspec 'Cronet-Tests' do |ss| s.subspec 'Tests' do |ss|
ss.header_mappings_dir = '.' ss.header_mappings_dir = '.'
ss.dependency "#{s.name}/Cronet-Interface", version ss.dependency "#{s.name}/Interface", version
ss.dependency "#{s.name}/Cronet-Implementation", version ss.dependency "#{s.name}/Implementation", version
ss.source_files = ${ruby_multiline_list(grpc_test_util_files(libs), 22)}, ss.source_files = ${ruby_multiline_list(grpc_test_util_files(libs), 22)},
${ruby_multiline_list(end2end_tests_files(libs), 22)} ${ruby_multiline_list(end2end_tests_files(libs), 22)}

@ -65,11 +65,6 @@ DEFINE_string(expected_addrs, "",
"List of expected backend or balancer addresses in the form " "List of expected backend or balancer addresses in the form "
"'<ip0:port0>,<is_balancer0>;<ip1:port1>,<is_balancer1>;...'. " "'<ip0:port0>,<is_balancer0>;<ip1:port1>,<is_balancer1>;...'. "
"'is_balancer' should be bool, i.e. true or false."); "'is_balancer' should be bool, i.e. true or false.");
DEFINE_bool(allow_extra_addrs, false,
"Permit extra resolved addresses in the final list of "
"resolved addresses. This is useful in certain integration "
"test environments in which DNS responses are not fully "
"deterministic.");
DEFINE_string(expected_chosen_service_config, "", DEFINE_string(expected_chosen_service_config, "",
"Expected service config json string that gets chosen (no " "Expected service config json string that gets chosen (no "
"whitespace). Empty for none."); "whitespace). Empty for none.");
@ -245,11 +240,9 @@ void CheckResolverResultLocked(void* argsp, grpc_error* err) {
GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER); GPR_ASSERT(channel_arg->type == GRPC_ARG_POINTER);
grpc_lb_addresses* addresses = grpc_lb_addresses* addresses =
(grpc_lb_addresses*)channel_arg->value.pointer.p; (grpc_lb_addresses*)channel_arg->value.pointer.p;
gpr_log(GPR_INFO, gpr_log(GPR_INFO, "num addrs found: %" PRIdPTR ". expected %" PRIdPTR,
"num addrs found: %" PRIdPTR ". expected %" PRIdPTR addresses->num_addresses, args->expected_addrs.size());
". Allow extra addresses:%d.", GPR_ASSERT(addresses->num_addresses == args->expected_addrs.size());
addresses->num_addresses, args->expected_addrs.size(),
FLAGS_allow_extra_addrs);
std::vector<GrpcLBAddress> found_lb_addrs; std::vector<GrpcLBAddress> found_lb_addrs;
for (size_t i = 0; i < addresses->num_addresses; i++) { for (size_t i = 0; i < addresses->num_addresses; i++) {
grpc_lb_address addr = addresses->addresses[i]; grpc_lb_address addr = addresses->addresses[i];
@ -261,20 +254,13 @@ void CheckResolverResultLocked(void* argsp, grpc_error* err) {
gpr_free(str); gpr_free(str);
} }
if (args->expected_addrs.size() != found_lb_addrs.size()) { if (args->expected_addrs.size() != found_lb_addrs.size()) {
// Permit extra resolved addresses if "--allow_extra_addrs" was set.
if (!(FLAGS_allow_extra_addrs &&
found_lb_addrs.size() > args->expected_addrs.size())) {
gpr_log(GPR_DEBUG, gpr_log(GPR_DEBUG,
"found lb addrs size is: %" PRIdPTR "found lb addrs size is: %" PRIdPTR
". expected addrs size is %" PRIdPTR ". --allow_extra_addrs=%d.", ". expected addrs size is %" PRIdPTR,
found_lb_addrs.size(), args->expected_addrs.size(), found_lb_addrs.size(), args->expected_addrs.size());
FLAGS_allow_extra_addrs);
abort(); abort();
} }
} EXPECT_THAT(args->expected_addrs, UnorderedElementsAreArray(found_lb_addrs));
for (size_t i = 0; i < args->expected_addrs.size(); i++) {
EXPECT_THAT(found_lb_addrs, ::testing::Contains(args->expected_addrs[i]));
}
CheckServiceConfigResultLocked(channel_args, args); CheckServiceConfigResultLocked(channel_args, args);
if (args->expected_service_config_string == "") { if (args->expected_service_config_string == "") {
CheckLBPolicyResultLocked(channel_args, args); CheckLBPolicyResultLocked(channel_args, args);

@ -0,0 +1,25 @@
#!/bin/bash
# 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.
set -ex
cd "$(dirname "$0")/../../.."
# Build helloworld example using cmake, including grpc with "add_subdirectory"
cd examples/cpp/helloworld
mkdir -p cmake/build
cd cmake/build
cmake -DGRPC_AS_SUBMODULE=ON ../..
make

@ -117,10 +117,10 @@ LANG_RELEASE_MATRIX = {
'v1.9.2': None 'v1.9.2': None
}, },
{ {
'v1.10.0': None 'v1.10.1': None
}, },
{ {
'v1.11.0': None 'v1.11.1': None
}, },
], ],
'java': [ 'java': [
@ -157,6 +157,9 @@ LANG_RELEASE_MATRIX = {
{ {
'v1.10.1': None 'v1.10.1': None
}, },
{
'v1.11.0': None
},
], ],
'python': [ 'python': [
{ {

@ -288,6 +288,7 @@ def targets():
CppDistribTest('linux', 'x64', 'jessie', 'routeguide'), CppDistribTest('linux', 'x64', 'jessie', 'routeguide'),
CppDistribTest('linux', 'x64', 'jessie', 'cmake'), CppDistribTest('linux', 'x64', 'jessie', 'cmake'),
CppDistribTest('linux', 'x64', 'jessie', 'cmake_as_externalproject'), CppDistribTest('linux', 'x64', 'jessie', 'cmake_as_externalproject'),
CppDistribTest('linux', 'x64', 'jessie', 'cmake_as_submodule'),
CppDistribTest('windows', 'x86', testcase='cmake'), CppDistribTest('windows', 'x86', testcase='cmake'),
CppDistribTest('windows', 'x86', testcase='cmake_as_externalproject'), CppDistribTest('windows', 'x86', testcase='cmake_as_externalproject'),
CSharpDistribTest('linux', 'x64', 'wheezy'), CSharpDistribTest('linux', 'x64', 'wheezy'),

@ -6740,16 +6740,8 @@
"deps": [ "deps": [
"gpr", "gpr",
"grpc_base", "grpc_base",
"grpc_base_headers",
"grpc_deadline_filter",
"grpc_lb_policy_pick_first",
"grpc_max_age_filter",
"grpc_message_size_filter",
"grpc_resolver_dns_native",
"grpc_resolver_sockaddr",
"grpc_server_load_reporting", "grpc_server_load_reporting",
"grpc_transport_chttp2_client_secure", "grpc_transport_chttp2_client_secure",
"grpc_transport_chttp2_server_secure",
"grpc_transport_cronet_client_secure" "grpc_transport_cronet_client_secure"
], ],
"headers": [], "headers": [],

@ -104488,6 +104488,75 @@
], ],
"uses_polling": false "uses_polling": false
}, },
{
"args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-api_fuzzer-5406804084260864"
],
"ci_platforms": [
"linux"
],
"cpu_cost": 0.1,
"exclude_configs": [
"tsan"
],
"exclude_iomgrs": [
"uv"
],
"flaky": false,
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
"mac",
"linux"
],
"uses_polling": false
},
{
"args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-api_fuzzer-5471994809155584"
],
"ci_platforms": [
"linux"
],
"cpu_cost": 0.1,
"exclude_configs": [
"tsan"
],
"exclude_iomgrs": [
"uv"
],
"flaky": false,
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
"mac",
"linux"
],
"uses_polling": false
},
{
"args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-api_fuzzer-6609852341157888"
],
"ci_platforms": [
"linux"
],
"cpu_cost": 0.1,
"exclude_configs": [
"tsan"
],
"exclude_iomgrs": [
"uv"
],
"flaky": false,
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
"mac",
"linux"
],
"uses_polling": false
},
{ {
"args": [ "args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-minimized-4688823906729984" "test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-minimized-4688823906729984"

@ -18,4 +18,7 @@ set -ex
# change to grpc repo root # change to grpc repo root
cd "$(dirname "$0")/../../.." cd "$(dirname "$0")/../../.."
# build grpc_ruby_plugin
make grpc_ruby_plugin -j8
rake rake

Loading…
Cancel
Save