Merge branch 'master' of github.com:grpc/grpc into authority_header

reviewable/pr14615/r9
David Garcia Quintas 7 years ago
commit a10634cadc
  1. 41
      BUILD
  2. 283
      CMakeLists.txt
  3. 4
      MANIFEST.md
  4. 329
      Makefile
  5. 29
      bazel/grpc_build_system.bzl
  6. 97
      build.yaml
  7. 23
      config.m4
  8. 24
      config.w32
  9. 26
      gRPC-C++.podspec
  10. 995
      gRPC-Core.podspec
  11. 3
      grpc.def
  12. 36
      grpc.gemspec
  13. 80
      grpc.gyp
  14. 19
      include/grpc/grpc_security.h
  15. 1
      include/grpc/grpc_security_constants.h
  16. 4
      include/grpc/impl/codegen/grpc_types.h
  17. 2
      include/grpc/impl/codegen/slice.h
  18. 1
      include/grpc/support/log.h
  19. 51
      include/grpcpp/impl/codegen/async_unary_call.h
  20. 9
      include/grpcpp/impl/codegen/completion_queue.h
  21. 56
      include/grpcpp/impl/codegen/status.h
  22. 94
      include/grpcpp/server.h
  23. 52
      include/grpcpp/server_builder.h
  24. 36
      package.xml
  25. 1
      src/core/ext/filters/client_channel/backup_poller.h
  26. 38
      src/core/ext/filters/client_channel/client_channel.cc
  27. 15
      src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
  28. 2
      src/core/ext/filters/client_channel/lb_policy_factory.cc
  29. 1
      src/core/ext/filters/client_channel/lb_policy_factory.h
  30. 1
      src/core/ext/filters/client_channel/lb_policy_registry.h
  31. 28
      src/core/ext/filters/client_channel/parse_address.cc
  32. 16
      src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
  33. 1
      src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h
  34. 1
      src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h
  35. 1
      src/core/ext/filters/client_channel/uri_parser.h
  36. 1
      src/core/ext/filters/deadline/deadline_filter.cc
  37. 48
      src/core/ext/filters/http/client/http_client_filter.cc
  38. 41
      src/core/ext/filters/http/message_compress/message_compress_filter.cc
  39. 17
      src/core/ext/filters/http/server/http_server_filter.cc
  40. 10
      src/core/ext/filters/message_size/message_size_filter.cc
  41. 4
      src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc
  42. 1
      src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
  43. 2
      src/core/ext/transport/chttp2/server/chttp2_server.h
  44. 1
      src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc
  45. 293
      src/core/ext/transport/chttp2/transport/chttp2_transport.cc
  46. 32
      src/core/ext/transport/chttp2/transport/frame_data.cc
  47. 10
      src/core/ext/transport/chttp2/transport/frame_data.h
  48. 1
      src/core/ext/transport/chttp2/transport/frame_goaway.h
  49. 1
      src/core/ext/transport/chttp2/transport/frame_ping.h
  50. 1
      src/core/ext/transport/chttp2/transport/frame_rst_stream.h
  51. 1
      src/core/ext/transport/chttp2/transport/frame_settings.h
  52. 1
      src/core/ext/transport/chttp2/transport/frame_window_update.h
  53. 1
      src/core/ext/transport/chttp2/transport/hpack_parser.h
  54. 77
      src/core/ext/transport/chttp2/transport/internal.h
  55. 41
      src/core/ext/transport/cronet/transport/cronet_transport.cc
  56. 39
      src/core/ext/transport/inproc/inproc_transport.cc
  57. 1
      src/core/lib/channel/handshaker_factory.h
  58. 1
      src/core/lib/channel/handshaker_registry.h
  59. 1
      src/core/lib/compression/stream_compression_identity.cc
  60. 4
      src/core/lib/gpr/cpu_linux.cc
  61. 1
      src/core/lib/gpr/log_linux.cc
  62. 7
      src/core/lib/http/httpcli_security_connector.cc
  63. 1
      src/core/lib/iomgr/call_combiner.h
  64. 2
      src/core/lib/iomgr/endpoint.cc
  65. 9
      src/core/lib/iomgr/endpoint_pair_windows.cc
  66. 20
      src/core/lib/iomgr/ev_epollex_linux.cc
  67. 20
      src/core/lib/iomgr/ev_poll_posix.cc
  68. 52
      src/core/lib/iomgr/ev_posix.cc
  69. 28
      src/core/lib/iomgr/exec_ctx.h
  70. 1
      src/core/lib/iomgr/iocp_windows.h
  71. 1
      src/core/lib/iomgr/iomgr.cc
  72. 63
      src/core/lib/iomgr/iomgr_custom.cc
  73. 24
      src/core/lib/iomgr/iomgr_custom.h
  74. 43
      src/core/lib/iomgr/iomgr_internal.cc
  75. 12
      src/core/lib/iomgr/iomgr_internal.h
  76. 31
      src/core/lib/iomgr/iomgr_posix.cc
  77. 35
      src/core/lib/iomgr/iomgr_uv.cc
  78. 30
      src/core/lib/iomgr/iomgr_windows.cc
  79. 2
      src/core/lib/iomgr/lockfree_event.h
  80. 56
      src/core/lib/iomgr/pollset.cc
  81. 18
      src/core/lib/iomgr/pollset.h
  82. 106
      src/core/lib/iomgr/pollset_custom.cc
  83. 35
      src/core/lib/iomgr/pollset_custom.h
  84. 36
      src/core/lib/iomgr/pollset_set.cc
  85. 11
      src/core/lib/iomgr/pollset_set.h
  86. 48
      src/core/lib/iomgr/pollset_set_custom.cc
  87. 18
      src/core/lib/iomgr/pollset_set_custom.h
  88. 25
      src/core/lib/iomgr/pollset_set_windows.cc
  89. 145
      src/core/lib/iomgr/pollset_uv.cc
  90. 9
      src/core/lib/iomgr/pollset_uv.h
  91. 28
      src/core/lib/iomgr/pollset_windows.cc
  92. 27
      src/core/lib/iomgr/port.h
  93. 50
      src/core/lib/iomgr/resolve_address.cc
  94. 47
      src/core/lib/iomgr/resolve_address.h
  95. 187
      src/core/lib/iomgr/resolve_address_custom.cc
  96. 43
      src/core/lib/iomgr/resolve_address_custom.h
  97. 28
      src/core/lib/iomgr/resolve_address_posix.cc
  98. 286
      src/core/lib/iomgr/resolve_address_uv.cc
  99. 28
      src/core/lib/iomgr/resolve_address_windows.cc
  100. 6
      src/core/lib/iomgr/resource_quota.h
  101. Some files were not shown because too many files have changed in this diff Show More

41
BUILD

@ -307,8 +307,12 @@ grpc_cc_library(
language = "c++", language = "c++",
deps = [ deps = [
"grpc_base", "grpc_base",
"grpc_deadline_filter",
"grpc_http_filters", "grpc_http_filters",
"grpc_message_size_filter",
"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",
], ],
) )
@ -713,20 +717,25 @@ grpc_cc_library(
"src/core/lib/iomgr/gethostname_sysconf.cc", "src/core/lib/iomgr/gethostname_sysconf.cc",
"src/core/lib/iomgr/iocp_windows.cc", "src/core/lib/iomgr/iocp_windows.cc",
"src/core/lib/iomgr/iomgr.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_posix.cc",
"src/core/lib/iomgr/iomgr_uv.cc",
"src/core/lib/iomgr/iomgr_windows.cc", "src/core/lib/iomgr/iomgr_windows.cc",
"src/core/lib/iomgr/is_epollexclusive_available.cc", "src/core/lib/iomgr/is_epollexclusive_available.cc",
"src/core/lib/iomgr/load_file.cc", "src/core/lib/iomgr/load_file.cc",
"src/core/lib/iomgr/lockfree_event.cc", "src/core/lib/iomgr/lockfree_event.cc",
"src/core/lib/iomgr/network_status_tracker.cc", "src/core/lib/iomgr/network_status_tracker.cc",
"src/core/lib/iomgr/polling_entity.cc", "src/core/lib/iomgr/polling_entity.cc",
"src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc",
"src/core/lib/iomgr/pollset_uv.cc", "src/core/lib/iomgr/pollset_uv.cc",
"src/core/lib/iomgr/pollset_windows.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_posix.cc",
"src/core/lib/iomgr/resolve_address_uv.cc",
"src/core/lib/iomgr/resolve_address_windows.cc", "src/core/lib/iomgr/resolve_address_windows.cc",
"src/core/lib/iomgr/resource_quota.cc", "src/core/lib/iomgr/resource_quota.cc",
"src/core/lib/iomgr/sockaddr_utils.cc", "src/core/lib/iomgr/sockaddr_utils.cc",
@ -735,22 +744,26 @@ grpc_cc_library(
"src/core/lib/iomgr/socket_utils_common_posix.cc", "src/core/lib/iomgr/socket_utils_common_posix.cc",
"src/core/lib/iomgr/socket_utils_linux.cc", "src/core/lib/iomgr/socket_utils_linux.cc",
"src/core/lib/iomgr/socket_utils_posix.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_utils_windows.cc",
"src/core/lib/iomgr/socket_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_posix.cc",
"src/core/lib/iomgr/tcp_client_uv.cc",
"src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc",
"src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc",
"src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc", "src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc",
"src/core/lib/iomgr/tcp_server_uv.cc",
"src/core/lib/iomgr/tcp_server_windows.cc", "src/core/lib/iomgr/tcp_server_windows.cc",
"src/core/lib/iomgr/tcp_uv.cc", "src/core/lib/iomgr/tcp_uv.cc",
"src/core/lib/iomgr/tcp_windows.cc", "src/core/lib/iomgr/tcp_windows.cc",
"src/core/lib/iomgr/time_averaged_stats.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_generic.cc",
"src/core/lib/iomgr/timer_heap.cc", "src/core/lib/iomgr/timer_heap.cc",
"src/core/lib/iomgr/timer_manager.cc", "src/core/lib/iomgr/timer_manager.cc",
@ -845,9 +858,9 @@ grpc_cc_library(
"src/core/lib/iomgr/gethostname.h", "src/core/lib/iomgr/gethostname.h",
"src/core/lib/iomgr/iocp_windows.h", "src/core/lib/iomgr/iocp_windows.h",
"src/core/lib/iomgr/iomgr.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_internal.h",
"src/core/lib/iomgr/iomgr_posix.h", "src/core/lib/iomgr/iomgr_posix.h",
"src/core/lib/iomgr/iomgr_uv.h",
"src/core/lib/iomgr/is_epollexclusive_available.h", "src/core/lib/iomgr/is_epollexclusive_available.h",
"src/core/lib/iomgr/load_file.h", "src/core/lib/iomgr/load_file.h",
"src/core/lib/iomgr/lockfree_event.h", "src/core/lib/iomgr/lockfree_event.h",
@ -855,14 +868,18 @@ grpc_cc_library(
"src/core/lib/iomgr/network_status_tracker.h", "src/core/lib/iomgr/network_status_tracker.h",
"src/core/lib/iomgr/polling_entity.h", "src/core/lib/iomgr/polling_entity.h",
"src/core/lib/iomgr/pollset.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.h",
"src/core/lib/iomgr/pollset_set_custom.h",
"src/core/lib/iomgr/pollset_set_windows.h", "src/core/lib/iomgr/pollset_set_windows.h",
"src/core/lib/iomgr/pollset_uv.h", "src/core/lib/iomgr/pollset_uv.h",
"src/core/lib/iomgr/pollset_windows.h", "src/core/lib/iomgr/pollset_windows.h",
"src/core/lib/iomgr/port.h", "src/core/lib/iomgr/port.h",
"src/core/lib/iomgr/resolve_address.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/resource_quota.h",
"src/core/lib/iomgr/sockaddr.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_posix.h",
"src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_utils.h",
"src/core/lib/iomgr/sockaddr_windows.h", "src/core/lib/iomgr/sockaddr_windows.h",
@ -874,17 +891,17 @@ grpc_cc_library(
"src/core/lib/iomgr/sys_epoll_wrapper.h", "src/core/lib/iomgr/sys_epoll_wrapper.h",
"src/core/lib/iomgr/tcp_client.h", "src/core/lib/iomgr/tcp_client.h",
"src/core/lib/iomgr/tcp_client_posix.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_posix.h",
"src/core/lib/iomgr/tcp_server.h", "src/core/lib/iomgr/tcp_server.h",
"src/core/lib/iomgr/tcp_server_utils_posix.h", "src/core/lib/iomgr/tcp_server_utils_posix.h",
"src/core/lib/iomgr/tcp_uv.h",
"src/core/lib/iomgr/tcp_windows.h", "src/core/lib/iomgr/tcp_windows.h",
"src/core/lib/iomgr/time_averaged_stats.h", "src/core/lib/iomgr/time_averaged_stats.h",
"src/core/lib/iomgr/timer.h", "src/core/lib/iomgr/timer.h",
"src/core/lib/iomgr/timer_custom.h",
"src/core/lib/iomgr/timer_generic.h", "src/core/lib/iomgr/timer_generic.h",
"src/core/lib/iomgr/timer_heap.h", "src/core/lib/iomgr/timer_heap.h",
"src/core/lib/iomgr/timer_manager.h", "src/core/lib/iomgr/timer_manager.h",
"src/core/lib/iomgr/timer_uv.h",
"src/core/lib/iomgr/udp_server.h", "src/core/lib/iomgr/udp_server.h",
"src/core/lib/iomgr/unix_sockets_posix.h", "src/core/lib/iomgr/unix_sockets_posix.h",
"src/core/lib/iomgr/wakeup_fd_cv.h", "src/core/lib/iomgr/wakeup_fd_cv.h",
@ -939,6 +956,7 @@ grpc_cc_library(
"grpc_codegen", "grpc_codegen",
"grpc_trace", "grpc_trace",
"inlined_vector", "inlined_vector",
"orphanable",
"ref_counted", "ref_counted",
"ref_counted_ptr", "ref_counted_ptr",
], ],
@ -1706,6 +1724,9 @@ grpc_cc_library(
"src/core/tsi/alts/handshaker/alts_tsi_utils.cc", "src/core/tsi/alts/handshaker/alts_tsi_utils.cc",
"src/core/tsi/alts_transport_security.cc", "src/core/tsi/alts_transport_security.cc",
"src/core/tsi/fake_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/ssl_transport_security.cc",
"src/core/tsi/transport_security_grpc.cc", "src/core/tsi/transport_security_grpc.cc",
], ],
@ -1717,6 +1738,8 @@ grpc_cc_library(
"src/core/tsi/alts/handshaker/alts_tsi_utils.h", "src/core/tsi/alts/handshaker/alts_tsi_utils.h",
"src/core/tsi/alts_transport_security.h", "src/core/tsi/alts_transport_security.h",
"src/core/tsi/fake_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_transport_security.h",
"src/core/tsi/ssl_types.h", "src/core/tsi/ssl_types.h",
"src/core/tsi/transport_security_grpc.h", "src/core/tsi/transport_security_grpc.h",

@ -224,7 +224,6 @@ add_dependencies(buildtests_c avl_test)
add_dependencies(buildtests_c bad_server_response_test) add_dependencies(buildtests_c bad_server_response_test)
add_dependencies(buildtests_c bin_decoder_test) add_dependencies(buildtests_c bin_decoder_test)
add_dependencies(buildtests_c bin_encoder_test) add_dependencies(buildtests_c bin_encoder_test)
add_dependencies(buildtests_c byte_stream_test)
add_dependencies(buildtests_c channel_create_test) add_dependencies(buildtests_c channel_create_test)
add_dependencies(buildtests_c chttp2_hpack_encoder_test) add_dependencies(buildtests_c chttp2_hpack_encoder_test)
add_dependencies(buildtests_c chttp2_stream_map_test) add_dependencies(buildtests_c chttp2_stream_map_test)
@ -529,6 +528,7 @@ endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx bm_pollset) add_dependencies(buildtests_cxx bm_pollset)
endif() endif()
add_dependencies(buildtests_cxx byte_stream_test)
add_dependencies(buildtests_cxx channel_arguments_test) add_dependencies(buildtests_cxx channel_arguments_test)
add_dependencies(buildtests_cxx channel_filter_test) add_dependencies(buildtests_cxx channel_filter_test)
add_dependencies(buildtests_cxx check_gcp_environment_linux_test) add_dependencies(buildtests_cxx check_gcp_environment_linux_test)
@ -560,6 +560,7 @@ add_dependencies(buildtests_cxx grpc_tool_test)
add_dependencies(buildtests_cxx grpclb_api_test) add_dependencies(buildtests_cxx grpclb_api_test)
add_dependencies(buildtests_cxx grpclb_end2end_test) add_dependencies(buildtests_cxx grpclb_end2end_test)
add_dependencies(buildtests_cxx h2_ssl_cert_test) add_dependencies(buildtests_cxx h2_ssl_cert_test)
add_dependencies(buildtests_cxx h2_ssl_session_reuse_test)
add_dependencies(buildtests_cxx health_service_end2end_test) add_dependencies(buildtests_cxx health_service_end2end_test)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx http2_client) add_dependencies(buildtests_cxx http2_client)
@ -619,7 +620,6 @@ add_dependencies(buildtests_cxx slice_hash_table_test)
add_dependencies(buildtests_cxx slice_weak_hash_table_test) add_dependencies(buildtests_cxx slice_weak_hash_table_test)
add_dependencies(buildtests_cxx stats_test) add_dependencies(buildtests_cxx stats_test)
add_dependencies(buildtests_cxx status_metadata_test) add_dependencies(buildtests_cxx status_metadata_test)
add_dependencies(buildtests_cxx status_test)
add_dependencies(buildtests_cxx status_util_test) add_dependencies(buildtests_cxx status_util_test)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx streaming_throughput_test) add_dependencies(buildtests_cxx streaming_throughput_test)
@ -892,6 +892,8 @@ add_library(grpc
src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/gethostname_sysconf.cc
src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.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_posix.cc
src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_uv.cc
src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/iomgr_windows.cc
@ -900,12 +902,16 @@ add_library(grpc
src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/lockfree_event.cc
src/core/lib/iomgr/network_status_tracker.cc src/core/lib/iomgr/network_status_tracker.cc
src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/polling_entity.cc
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_uv.cc
src/core/lib/iomgr/pollset_windows.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_posix.cc
src/core/lib/iomgr/resolve_address_uv.cc
src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resolve_address_windows.cc
src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/resource_quota.cc
src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/sockaddr_utils.cc
@ -917,19 +923,24 @@ add_library(grpc
src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_uv.cc
src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_utils_windows.cc
src/core/lib/iomgr/socket_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_posix.cc
src/core/lib/iomgr/tcp_client_uv.cc
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
src/core/lib/iomgr/tcp_server_uv.cc
src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_server_windows.cc
src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_uv.cc
src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/tcp_windows.cc
src/core/lib/iomgr/time_averaged_stats.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_generic.cc
src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_heap.cc
src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_manager.cc
@ -1103,6 +1114,9 @@ add_library(grpc
src/core/ext/filters/deadline/deadline_filter.cc src/core/ext/filters/deadline/deadline_filter.cc
src/core/tsi/alts_transport_security.cc src/core/tsi/alts_transport_security.cc
src/core/tsi/fake_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/ssl_transport_security.cc
src/core/tsi/transport_security_grpc.cc src/core/tsi/transport_security_grpc.cc
src/core/ext/transport/chttp2/server/chttp2_server.cc src/core/ext/transport/chttp2/server/chttp2_server.cc
@ -1268,6 +1282,8 @@ add_library(grpc_cronet
src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/gethostname_sysconf.cc
src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.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_posix.cc
src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_uv.cc
src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/iomgr_windows.cc
@ -1276,12 +1292,16 @@ add_library(grpc_cronet
src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/lockfree_event.cc
src/core/lib/iomgr/network_status_tracker.cc src/core/lib/iomgr/network_status_tracker.cc
src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/polling_entity.cc
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_uv.cc
src/core/lib/iomgr/pollset_windows.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_posix.cc
src/core/lib/iomgr/resolve_address_uv.cc
src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resolve_address_windows.cc
src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/resource_quota.cc
src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/sockaddr_utils.cc
@ -1293,19 +1313,24 @@ add_library(grpc_cronet
src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_uv.cc
src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_utils_windows.cc
src/core/lib/iomgr/socket_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_posix.cc
src/core/lib/iomgr/tcp_client_uv.cc
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
src/core/lib/iomgr/tcp_server_uv.cc
src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_server_windows.cc
src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_uv.cc
src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/tcp_windows.cc
src/core/lib/iomgr/time_averaged_stats.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_generic.cc
src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_heap.cc
src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_manager.cc
@ -1361,6 +1386,10 @@ 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/message_size/message_size_filter.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
@ -1414,7 +1443,6 @@ add_library(grpc_cronet
src/core/ext/filters/client_channel/subchannel.cc src/core/ext/filters/client_channel/subchannel.cc
src/core/ext/filters/client_channel/subchannel_index.cc src/core/ext/filters/client_channel/subchannel_index.cc
src/core/ext/filters/client_channel/uri_parser.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
@ -1482,10 +1510,13 @@ add_library(grpc_cronet
src/core/ext/transport/chttp2/client/chttp2_connector.cc src/core/ext/transport/chttp2/client/chttp2_connector.cc
src/core/tsi/alts_transport_security.cc src/core/tsi/alts_transport_security.cc
src/core/tsi/fake_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/ssl_transport_security.cc
src/core/tsi/transport_security_grpc.cc src/core/tsi/transport_security_grpc.cc
src/core/ext/filters/load_reporting/server_load_reporting_filter.cc src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc
src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc src/core/ext/transport/chttp2/server/chttp2_server.cc
src/core/plugin_registry/grpc_cronet_plugin_registry.cc src/core/plugin_registry/grpc_cronet_plugin_registry.cc
) )
@ -1543,9 +1574,20 @@ 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)
@ -1634,6 +1676,8 @@ add_library(grpc_test_util
src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/gethostname_sysconf.cc
src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.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_posix.cc
src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_uv.cc
src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/iomgr_windows.cc
@ -1642,12 +1686,16 @@ add_library(grpc_test_util
src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/lockfree_event.cc
src/core/lib/iomgr/network_status_tracker.cc src/core/lib/iomgr/network_status_tracker.cc
src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/polling_entity.cc
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_uv.cc
src/core/lib/iomgr/pollset_windows.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_posix.cc
src/core/lib/iomgr/resolve_address_uv.cc
src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resolve_address_windows.cc
src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/resource_quota.cc
src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/sockaddr_utils.cc
@ -1659,19 +1707,24 @@ add_library(grpc_test_util
src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_uv.cc
src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_utils_windows.cc
src/core/lib/iomgr/socket_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_posix.cc
src/core/lib/iomgr/tcp_client_uv.cc
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
src/core/lib/iomgr/tcp_server_uv.cc
src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_server_windows.cc
src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_uv.cc
src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/tcp_windows.cc
src/core/lib/iomgr/time_averaged_stats.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_generic.cc
src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_heap.cc
src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_manager.cc
@ -1923,6 +1976,8 @@ add_library(grpc_test_util_unsecure
src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/gethostname_sysconf.cc
src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.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_posix.cc
src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_uv.cc
src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/iomgr_windows.cc
@ -1931,12 +1986,16 @@ add_library(grpc_test_util_unsecure
src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/lockfree_event.cc
src/core/lib/iomgr/network_status_tracker.cc src/core/lib/iomgr/network_status_tracker.cc
src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/polling_entity.cc
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_uv.cc
src/core/lib/iomgr/pollset_windows.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_posix.cc
src/core/lib/iomgr/resolve_address_uv.cc
src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resolve_address_windows.cc
src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/resource_quota.cc
src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/sockaddr_utils.cc
@ -1948,19 +2007,24 @@ add_library(grpc_test_util_unsecure
src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_uv.cc
src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_utils_windows.cc
src/core/lib/iomgr/socket_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_posix.cc
src/core/lib/iomgr/tcp_client_uv.cc
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
src/core/lib/iomgr/tcp_server_uv.cc
src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_server_windows.cc
src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_uv.cc
src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/tcp_windows.cc
src/core/lib/iomgr/time_averaged_stats.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_generic.cc
src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_heap.cc
src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_manager.cc
@ -2192,6 +2256,8 @@ add_library(grpc_unsecure
src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/gethostname_sysconf.cc
src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.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_posix.cc
src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_uv.cc
src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/iomgr_windows.cc
@ -2200,12 +2266,16 @@ add_library(grpc_unsecure
src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/lockfree_event.cc
src/core/lib/iomgr/network_status_tracker.cc src/core/lib/iomgr/network_status_tracker.cc
src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/polling_entity.cc
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_uv.cc
src/core/lib/iomgr/pollset_windows.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_posix.cc
src/core/lib/iomgr/resolve_address_uv.cc
src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resolve_address_windows.cc
src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/resource_quota.cc
src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/sockaddr_utils.cc
@ -2217,19 +2287,24 @@ add_library(grpc_unsecure
src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_uv.cc
src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_utils_windows.cc
src/core/lib/iomgr/socket_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_posix.cc
src/core/lib/iomgr/tcp_client_uv.cc
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
src/core/lib/iomgr/tcp_server_uv.cc
src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_server_windows.cc
src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_uv.cc
src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/tcp_windows.cc
src/core/lib/iomgr/time_averaged_stats.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_generic.cc
src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_heap.cc
src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_manager.cc
@ -2996,6 +3071,8 @@ add_library(grpc++_cronet
src/core/lib/iomgr/gethostname_sysconf.cc src/core/lib/iomgr/gethostname_sysconf.cc
src/core/lib/iomgr/iocp_windows.cc src/core/lib/iomgr/iocp_windows.cc
src/core/lib/iomgr/iomgr.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_posix.cc
src/core/lib/iomgr/iomgr_uv.cc src/core/lib/iomgr/iomgr_uv.cc
src/core/lib/iomgr/iomgr_windows.cc src/core/lib/iomgr/iomgr_windows.cc
@ -3004,12 +3081,16 @@ add_library(grpc++_cronet
src/core/lib/iomgr/lockfree_event.cc src/core/lib/iomgr/lockfree_event.cc
src/core/lib/iomgr/network_status_tracker.cc src/core/lib/iomgr/network_status_tracker.cc
src/core/lib/iomgr/polling_entity.cc src/core/lib/iomgr/polling_entity.cc
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
src/core/lib/iomgr/pollset_uv.cc src/core/lib/iomgr/pollset_uv.cc
src/core/lib/iomgr/pollset_windows.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_posix.cc
src/core/lib/iomgr/resolve_address_uv.cc
src/core/lib/iomgr/resolve_address_windows.cc src/core/lib/iomgr/resolve_address_windows.cc
src/core/lib/iomgr/resource_quota.cc src/core/lib/iomgr/resource_quota.cc
src/core/lib/iomgr/sockaddr_utils.cc src/core/lib/iomgr/sockaddr_utils.cc
@ -3021,19 +3102,24 @@ add_library(grpc++_cronet
src/core/lib/iomgr/socket_utils_uv.cc src/core/lib/iomgr/socket_utils_uv.cc
src/core/lib/iomgr/socket_utils_windows.cc src/core/lib/iomgr/socket_utils_windows.cc
src/core/lib/iomgr/socket_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_posix.cc
src/core/lib/iomgr/tcp_client_uv.cc
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
src/core/lib/iomgr/tcp_server_uv.cc
src/core/lib/iomgr/tcp_server_windows.cc src/core/lib/iomgr/tcp_server_windows.cc
src/core/lib/iomgr/tcp_uv.cc src/core/lib/iomgr/tcp_uv.cc
src/core/lib/iomgr/tcp_windows.cc src/core/lib/iomgr/tcp_windows.cc
src/core/lib/iomgr/time_averaged_stats.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_generic.cc
src/core/lib/iomgr/timer_heap.cc src/core/lib/iomgr/timer_heap.cc
src/core/lib/iomgr/timer_manager.cc src/core/lib/iomgr/timer_manager.cc
@ -5437,33 +5523,6 @@ target_link_libraries(bin_encoder_test
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
add_executable(byte_stream_test
test/core/transport/byte_stream_test.cc
)
target_include_directories(byte_stream_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
)
target_link_libraries(byte_stream_test
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc
gpr_test_util
gpr
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(channel_create_test add_executable(channel_create_test
test/core/surface/channel_create_test.cc test/core/surface/channel_create_test.cc
) )
@ -9958,6 +10017,42 @@ endif()
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
add_executable(byte_stream_test
test/core/transport/byte_stream_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(byte_stream_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE third_party/googletest/googletest/include
PRIVATE third_party/googletest/googletest
PRIVATE third_party/googletest/googlemock/include
PRIVATE third_party/googletest/googlemock
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(byte_stream_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc
gpr_test_util
gpr
${_gRPC_GFLAGS_LIBRARIES}
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(channel_arguments_test add_executable(channel_arguments_test
test/cpp/common/channel_arguments_test.cc test/cpp/common/channel_arguments_test.cc
third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googletest/src/gtest-all.cc
@ -11393,6 +11488,43 @@ target_link_libraries(h2_ssl_cert_test
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
add_executable(h2_ssl_session_reuse_test
test/core/end2end/h2_ssl_session_reuse_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(h2_ssl_session_reuse_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE third_party/googletest/googletest/include
PRIVATE third_party/googletest/googletest
PRIVATE third_party/googletest/googlemock/include
PRIVATE third_party/googletest/googlemock
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(h2_ssl_session_reuse_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc++
grpc
gpr_test_util
gpr
${_gRPC_GFLAGS_LIBRARIES}
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(health_service_end2end_test add_executable(health_service_end2end_test
test/cpp/end2end/health_service_end2end_test.cc test/cpp/end2end/health_service_end2end_test.cc
third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googletest/src/gtest-all.cc
@ -12972,43 +13104,6 @@ target_link_libraries(status_metadata_test
endif (gRPC_BUILD_TESTS) endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS)
add_executable(status_test
test/cpp/util/status_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(status_test
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
PRIVATE third_party/googletest/googletest/include
PRIVATE third_party/googletest/googletest
PRIVATE third_party/googletest/googlemock/include
PRIVATE third_party/googletest/googlemock
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(status_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
grpc++
grpc
gpr_test_util
gpr
${_gRPC_GFLAGS_LIBRARIES}
)
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
add_executable(status_util_test add_executable(status_util_test
test/core/client_channel/status_util_test.cc test/core/client_channel/status_util_test.cc
third_party/googletest/googletest/src/gtest-all.cc third_party/googletest/googletest/src/gtest-all.cc

@ -3,10 +3,6 @@
## Bazel ## Bazel
* [grpc.bzl](grpc.bzl) * [grpc.bzl](grpc.bzl)
## Node
* [binding.gyp](binding.gyp)
* [package.json](package.json)
## Objective-C ## Objective-C
* [gRPC.podspec](gRPC.podspec) * [gRPC.podspec](gRPC.podspec)

@ -77,7 +77,7 @@ CC_opt = $(DEFAULT_CC)
CXX_opt = $(DEFAULT_CXX) CXX_opt = $(DEFAULT_CXX)
LD_opt = $(DEFAULT_CC) LD_opt = $(DEFAULT_CC)
LDXX_opt = $(DEFAULT_CXX) LDXX_opt = $(DEFAULT_CXX)
CPPFLAGS_opt = -O2 CPPFLAGS_opt = -O2 -Wframe-larger-than=16384
DEFINES_opt = NDEBUG DEFINES_opt = NDEBUG
VALID_CONFIG_asan-trace-cmp = 1 VALID_CONFIG_asan-trace-cmp = 1
@ -148,7 +148,7 @@ CXX_noexcept = $(DEFAULT_CXX)
LD_noexcept = $(DEFAULT_CC) LD_noexcept = $(DEFAULT_CC)
LDXX_noexcept = $(DEFAULT_CXX) LDXX_noexcept = $(DEFAULT_CXX)
CXXFLAGS_noexcept = -fno-exceptions CXXFLAGS_noexcept = -fno-exceptions
CPPFLAGS_noexcept = -O2 CPPFLAGS_noexcept = -O2 -Wframe-larger-than=16384
DEFINES_noexcept = NDEBUG DEFINES_noexcept = NDEBUG
VALID_CONFIG_ubsan = 1 VALID_CONFIG_ubsan = 1
@ -961,7 +961,6 @@ avl_test: $(BINDIR)/$(CONFIG)/avl_test
bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test
bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test
bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test bin_encoder_test: $(BINDIR)/$(CONFIG)/bin_encoder_test
byte_stream_test: $(BINDIR)/$(CONFIG)/byte_stream_test
channel_create_test: $(BINDIR)/$(CONFIG)/channel_create_test channel_create_test: $(BINDIR)/$(CONFIG)/channel_create_test
check_epollexclusive: $(BINDIR)/$(CONFIG)/check_epollexclusive check_epollexclusive: $(BINDIR)/$(CONFIG)/check_epollexclusive
chttp2_hpack_encoder_test: $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test chttp2_hpack_encoder_test: $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test
@ -1126,6 +1125,7 @@ bm_fullstack_trickle: $(BINDIR)/$(CONFIG)/bm_fullstack_trickle
bm_fullstack_unary_ping_pong: $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong bm_fullstack_unary_ping_pong: $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong
bm_metadata: $(BINDIR)/$(CONFIG)/bm_metadata bm_metadata: $(BINDIR)/$(CONFIG)/bm_metadata
bm_pollset: $(BINDIR)/$(CONFIG)/bm_pollset bm_pollset: $(BINDIR)/$(CONFIG)/bm_pollset
byte_stream_test: $(BINDIR)/$(CONFIG)/byte_stream_test
channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test
channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test
check_gcp_environment_linux_test: $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test check_gcp_environment_linux_test: $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test
@ -1162,6 +1162,7 @@ grpc_tool_test: $(BINDIR)/$(CONFIG)/grpc_tool_test
grpclb_api_test: $(BINDIR)/$(CONFIG)/grpclb_api_test grpclb_api_test: $(BINDIR)/$(CONFIG)/grpclb_api_test
grpclb_end2end_test: $(BINDIR)/$(CONFIG)/grpclb_end2end_test grpclb_end2end_test: $(BINDIR)/$(CONFIG)/grpclb_end2end_test
h2_ssl_cert_test: $(BINDIR)/$(CONFIG)/h2_ssl_cert_test h2_ssl_cert_test: $(BINDIR)/$(CONFIG)/h2_ssl_cert_test
h2_ssl_session_reuse_test: $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test
health_service_end2end_test: $(BINDIR)/$(CONFIG)/health_service_end2end_test health_service_end2end_test: $(BINDIR)/$(CONFIG)/health_service_end2end_test
http2_client: $(BINDIR)/$(CONFIG)/http2_client http2_client: $(BINDIR)/$(CONFIG)/http2_client
hybrid_end2end_test: $(BINDIR)/$(CONFIG)/hybrid_end2end_test hybrid_end2end_test: $(BINDIR)/$(CONFIG)/hybrid_end2end_test
@ -1201,7 +1202,6 @@ slice_hash_table_test: $(BINDIR)/$(CONFIG)/slice_hash_table_test
slice_weak_hash_table_test: $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test slice_weak_hash_table_test: $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test
stats_test: $(BINDIR)/$(CONFIG)/stats_test stats_test: $(BINDIR)/$(CONFIG)/stats_test
status_metadata_test: $(BINDIR)/$(CONFIG)/status_metadata_test status_metadata_test: $(BINDIR)/$(CONFIG)/status_metadata_test
status_test: $(BINDIR)/$(CONFIG)/status_test
status_util_test: $(BINDIR)/$(CONFIG)/status_util_test status_util_test: $(BINDIR)/$(CONFIG)/status_util_test
streaming_throughput_test: $(BINDIR)/$(CONFIG)/streaming_throughput_test streaming_throughput_test: $(BINDIR)/$(CONFIG)/streaming_throughput_test
stress_test: $(BINDIR)/$(CONFIG)/stress_test stress_test: $(BINDIR)/$(CONFIG)/stress_test
@ -1398,7 +1398,6 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/bad_server_response_test \ $(BINDIR)/$(CONFIG)/bad_server_response_test \
$(BINDIR)/$(CONFIG)/bin_decoder_test \ $(BINDIR)/$(CONFIG)/bin_decoder_test \
$(BINDIR)/$(CONFIG)/bin_encoder_test \ $(BINDIR)/$(CONFIG)/bin_encoder_test \
$(BINDIR)/$(CONFIG)/byte_stream_test \
$(BINDIR)/$(CONFIG)/channel_create_test \ $(BINDIR)/$(CONFIG)/channel_create_test \
$(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test \ $(BINDIR)/$(CONFIG)/chttp2_hpack_encoder_test \
$(BINDIR)/$(CONFIG)/chttp2_stream_map_test \ $(BINDIR)/$(CONFIG)/chttp2_stream_map_test \
@ -1611,6 +1610,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \ $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \
$(BINDIR)/$(CONFIG)/bm_metadata \ $(BINDIR)/$(CONFIG)/bm_metadata \
$(BINDIR)/$(CONFIG)/bm_pollset \ $(BINDIR)/$(CONFIG)/bm_pollset \
$(BINDIR)/$(CONFIG)/byte_stream_test \
$(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_arguments_test \
$(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \
$(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test \ $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test \
@ -1640,6 +1640,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \
$(BINDIR)/$(CONFIG)/grpclb_end2end_test \ $(BINDIR)/$(CONFIG)/grpclb_end2end_test \
$(BINDIR)/$(CONFIG)/h2_ssl_cert_test \ $(BINDIR)/$(CONFIG)/h2_ssl_cert_test \
$(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test \
$(BINDIR)/$(CONFIG)/health_service_end2end_test \ $(BINDIR)/$(CONFIG)/health_service_end2end_test \
$(BINDIR)/$(CONFIG)/http2_client \ $(BINDIR)/$(CONFIG)/http2_client \
$(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \
@ -1679,7 +1680,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/slice_weak_hash_table_test \ $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test \
$(BINDIR)/$(CONFIG)/stats_test \ $(BINDIR)/$(CONFIG)/stats_test \
$(BINDIR)/$(CONFIG)/status_metadata_test \ $(BINDIR)/$(CONFIG)/status_metadata_test \
$(BINDIR)/$(CONFIG)/status_test \
$(BINDIR)/$(CONFIG)/status_util_test \ $(BINDIR)/$(CONFIG)/status_util_test \
$(BINDIR)/$(CONFIG)/streaming_throughput_test \ $(BINDIR)/$(CONFIG)/streaming_throughput_test \
$(BINDIR)/$(CONFIG)/stress_test \ $(BINDIR)/$(CONFIG)/stress_test \
@ -1777,6 +1777,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \ $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \
$(BINDIR)/$(CONFIG)/bm_metadata \ $(BINDIR)/$(CONFIG)/bm_metadata \
$(BINDIR)/$(CONFIG)/bm_pollset \ $(BINDIR)/$(CONFIG)/bm_pollset \
$(BINDIR)/$(CONFIG)/byte_stream_test \
$(BINDIR)/$(CONFIG)/channel_arguments_test \ $(BINDIR)/$(CONFIG)/channel_arguments_test \
$(BINDIR)/$(CONFIG)/channel_filter_test \ $(BINDIR)/$(CONFIG)/channel_filter_test \
$(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test \ $(BINDIR)/$(CONFIG)/check_gcp_environment_linux_test \
@ -1806,6 +1807,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/grpclb_api_test \
$(BINDIR)/$(CONFIG)/grpclb_end2end_test \ $(BINDIR)/$(CONFIG)/grpclb_end2end_test \
$(BINDIR)/$(CONFIG)/h2_ssl_cert_test \ $(BINDIR)/$(CONFIG)/h2_ssl_cert_test \
$(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test \
$(BINDIR)/$(CONFIG)/health_service_end2end_test \ $(BINDIR)/$(CONFIG)/health_service_end2end_test \
$(BINDIR)/$(CONFIG)/http2_client \ $(BINDIR)/$(CONFIG)/http2_client \
$(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \
@ -1845,7 +1847,6 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/slice_weak_hash_table_test \ $(BINDIR)/$(CONFIG)/slice_weak_hash_table_test \
$(BINDIR)/$(CONFIG)/stats_test \ $(BINDIR)/$(CONFIG)/stats_test \
$(BINDIR)/$(CONFIG)/status_metadata_test \ $(BINDIR)/$(CONFIG)/status_metadata_test \
$(BINDIR)/$(CONFIG)/status_test \
$(BINDIR)/$(CONFIG)/status_util_test \ $(BINDIR)/$(CONFIG)/status_util_test \
$(BINDIR)/$(CONFIG)/streaming_throughput_test \ $(BINDIR)/$(CONFIG)/streaming_throughput_test \
$(BINDIR)/$(CONFIG)/stress_test \ $(BINDIR)/$(CONFIG)/stress_test \
@ -1883,8 +1884,6 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/bin_decoder_test || ( echo test bin_decoder_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/bin_decoder_test || ( echo test bin_decoder_test failed ; exit 1 )
$(E) "[RUN] Testing bin_encoder_test" $(E) "[RUN] Testing bin_encoder_test"
$(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/bin_encoder_test || ( echo test bin_encoder_test failed ; exit 1 )
$(E) "[RUN] Testing byte_stream_test"
$(Q) $(BINDIR)/$(CONFIG)/byte_stream_test || ( echo test byte_stream_test failed ; exit 1 )
$(E) "[RUN] Testing channel_create_test" $(E) "[RUN] Testing channel_create_test"
$(Q) $(BINDIR)/$(CONFIG)/channel_create_test || ( echo test channel_create_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/channel_create_test || ( echo test channel_create_test failed ; exit 1 )
$(E) "[RUN] Testing chttp2_hpack_encoder_test" $(E) "[RUN] Testing chttp2_hpack_encoder_test"
@ -2199,6 +2198,8 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/bm_metadata || ( echo test bm_metadata failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/bm_metadata || ( echo test bm_metadata failed ; exit 1 )
$(E) "[RUN] Testing bm_pollset" $(E) "[RUN] Testing bm_pollset"
$(Q) $(BINDIR)/$(CONFIG)/bm_pollset || ( echo test bm_pollset failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/bm_pollset || ( echo test bm_pollset failed ; exit 1 )
$(E) "[RUN] Testing byte_stream_test"
$(Q) $(BINDIR)/$(CONFIG)/byte_stream_test || ( echo test byte_stream_test failed ; exit 1 )
$(E) "[RUN] Testing channel_arguments_test" $(E) "[RUN] Testing channel_arguments_test"
$(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 )
$(E) "[RUN] Testing channel_filter_test" $(E) "[RUN] Testing channel_filter_test"
@ -2253,6 +2254,8 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/grpclb_end2end_test || ( echo test grpclb_end2end_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/grpclb_end2end_test || ( echo test grpclb_end2end_test failed ; exit 1 )
$(E) "[RUN] Testing h2_ssl_cert_test" $(E) "[RUN] Testing h2_ssl_cert_test"
$(Q) $(BINDIR)/$(CONFIG)/h2_ssl_cert_test || ( echo test h2_ssl_cert_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/h2_ssl_cert_test || ( echo test h2_ssl_cert_test failed ; exit 1 )
$(E) "[RUN] Testing h2_ssl_session_reuse_test"
$(Q) $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test || ( echo test h2_ssl_session_reuse_test failed ; exit 1 )
$(E) "[RUN] Testing health_service_end2end_test" $(E) "[RUN] Testing health_service_end2end_test"
$(Q) $(BINDIR)/$(CONFIG)/health_service_end2end_test || ( echo test health_service_end2end_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/health_service_end2end_test || ( echo test health_service_end2end_test failed ; exit 1 )
$(E) "[RUN] Testing inlined_vector_test" $(E) "[RUN] Testing inlined_vector_test"
@ -2307,8 +2310,6 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/stats_test || ( echo test stats_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/stats_test || ( echo test stats_test failed ; exit 1 )
$(E) "[RUN] Testing status_metadata_test" $(E) "[RUN] Testing status_metadata_test"
$(Q) $(BINDIR)/$(CONFIG)/status_metadata_test || ( echo test status_metadata_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/status_metadata_test || ( echo test status_metadata_test failed ; exit 1 )
$(E) "[RUN] Testing status_test"
$(Q) $(BINDIR)/$(CONFIG)/status_test || ( echo test status_test failed ; exit 1 )
$(E) "[RUN] Testing status_util_test" $(E) "[RUN] Testing status_util_test"
$(Q) $(BINDIR)/$(CONFIG)/status_util_test || ( echo test status_util_test failed ; exit 1 ) $(Q) $(BINDIR)/$(CONFIG)/status_util_test || ( echo test status_util_test failed ; exit 1 )
$(E) "[RUN] Testing streaming_throughput_test" $(E) "[RUN] Testing streaming_throughput_test"
@ -3197,6 +3198,8 @@ LIBGRPC_SRC = \
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -3205,12 +3208,16 @@ LIBGRPC_SRC = \
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -3222,19 +3229,24 @@ LIBGRPC_SRC = \
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -3408,6 +3420,9 @@ LIBGRPC_SRC = \
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/tsi/alts_transport_security.cc \ src/core/tsi/alts_transport_security.cc \
src/core/tsi/fake_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/ssl_transport_security.cc \
src/core/tsi/transport_security_grpc.cc \ src/core/tsi/transport_security_grpc.cc \
src/core/ext/transport/chttp2/server/chttp2_server.cc \ src/core/ext/transport/chttp2/server/chttp2_server.cc \
@ -3575,6 +3590,8 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -3583,12 +3600,16 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -3600,19 +3621,24 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -3668,6 +3694,10 @@ LIBGRPC_CRONET_SRC = \
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/message_size/message_size_filter.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 \
@ -3721,7 +3751,6 @@ LIBGRPC_CRONET_SRC = \
src/core/ext/filters/client_channel/subchannel.cc \ src/core/ext/filters/client_channel/subchannel.cc \
src/core/ext/filters/client_channel/subchannel_index.cc \ src/core/ext/filters/client_channel/subchannel_index.cc \
src/core/ext/filters/client_channel/uri_parser.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 \
@ -3789,10 +3818,13 @@ LIBGRPC_CRONET_SRC = \
src/core/ext/transport/chttp2/client/chttp2_connector.cc \ src/core/ext/transport/chttp2/client/chttp2_connector.cc \
src/core/tsi/alts_transport_security.cc \ src/core/tsi/alts_transport_security.cc \
src/core/tsi/fake_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/ssl_transport_security.cc \
src/core/tsi/transport_security_grpc.cc \ src/core/tsi/transport_security_grpc.cc \
src/core/ext/filters/load_reporting/server_load_reporting_filter.cc \ src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc \
src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc \ src/core/ext/transport/chttp2/server/chttp2_server.cc \
src/core/plugin_registry/grpc_cronet_plugin_registry.cc \ src/core/plugin_registry/grpc_cronet_plugin_registry.cc \
PUBLIC_HEADERS_C += \ PUBLIC_HEADERS_C += \
@ -3817,9 +3849,20 @@ PUBLIC_HEADERS_C += \
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 \
LIBGRPC_CRONET_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CRONET_SRC)))) LIBGRPC_CRONET_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_CRONET_SRC))))
@ -3942,6 +3985,8 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -3950,12 +3995,16 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -3967,19 +4016,24 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -4224,6 +4278,8 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -4232,12 +4288,16 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -4249,19 +4309,24 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -4473,6 +4538,8 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -4481,12 +4548,16 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -4498,19 +4569,24 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -5276,6 +5352,8 @@ LIBGRPC++_CRONET_SRC = \
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -5284,12 +5362,16 @@ LIBGRPC++_CRONET_SRC = \
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -5301,19 +5383,24 @@ LIBGRPC++_CRONET_SRC = \
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -10126,38 +10213,6 @@ endif
endif endif
BYTE_STREAM_TEST_SRC = \
test/core/transport/byte_stream_test.cc \
BYTE_STREAM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BYTE_STREAM_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/byte_stream_test: openssl_dep_error
else
$(BINDIR)/$(CONFIG)/byte_stream_test: $(BYTE_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LD) $(LDFLAGS) $(BYTE_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/byte_stream_test
endif
$(OBJDIR)/$(CONFIG)/test/core/transport/byte_stream_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_byte_stream_test: $(BYTE_STREAM_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(BYTE_STREAM_TEST_OBJS:.o=.dep)
endif
endif
CHANNEL_CREATE_TEST_SRC = \ CHANNEL_CREATE_TEST_SRC = \
test/core/surface/channel_create_test.cc \ test/core/surface/channel_create_test.cc \
@ -15796,6 +15851,49 @@ endif
endif endif
BYTE_STREAM_TEST_SRC = \
test/core/transport/byte_stream_test.cc \
BYTE_STREAM_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BYTE_STREAM_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/byte_stream_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
$(BINDIR)/$(CONFIG)/byte_stream_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/byte_stream_test: $(PROTOBUF_DEP) $(BYTE_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(BYTE_STREAM_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/byte_stream_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/transport/byte_stream_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_byte_stream_test: $(BYTE_STREAM_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(BYTE_STREAM_TEST_OBJS:.o=.dep)
endif
endif
CHANNEL_ARGUMENTS_TEST_SRC = \ CHANNEL_ARGUMENTS_TEST_SRC = \
test/cpp/common/channel_arguments_test.cc \ test/cpp/common/channel_arguments_test.cc \
@ -17323,6 +17421,49 @@ endif
endif endif
H2_SSL_SESSION_REUSE_TEST_SRC = \
test/core/end2end/h2_ssl_session_reuse_test.cc \
H2_SSL_SESSION_REUSE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(H2_SSL_SESSION_REUSE_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
$(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test: $(PROTOBUF_DEP) $(H2_SSL_SESSION_REUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(H2_SSL_SESSION_REUSE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/h2_ssl_session_reuse_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/core/end2end/h2_ssl_session_reuse_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_h2_ssl_session_reuse_test: $(H2_SSL_SESSION_REUSE_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(H2_SSL_SESSION_REUSE_TEST_OBJS:.o=.dep)
endif
endif
HEALTH_SERVICE_END2END_TEST_SRC = \ HEALTH_SERVICE_END2END_TEST_SRC = \
test/cpp/end2end/health_service_end2end_test.cc \ test/cpp/end2end/health_service_end2end_test.cc \
@ -19003,49 +19144,6 @@ endif
endif endif
STATUS_TEST_SRC = \
test/cpp/util/status_test.cc \
STATUS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STATUS_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
$(BINDIR)/$(CONFIG)/status_test: openssl_dep_error
else
ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
$(BINDIR)/$(CONFIG)/status_test: protobuf_dep_error
else
$(BINDIR)/$(CONFIG)/status_test: $(PROTOBUF_DEP) $(STATUS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
$(Q) $(LDXX) $(LDFLAGS) $(STATUS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/status_test
endif
endif
$(OBJDIR)/$(CONFIG)/test/cpp/util/status_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_status_test: $(STATUS_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
-include $(STATUS_TEST_OBJS:.o=.dep)
endif
endif
STATUS_UTIL_TEST_SRC = \ STATUS_UTIL_TEST_SRC = \
test/core/client_channel/status_util_test.cc \ test/core/client_channel/status_util_test.cc \
@ -23441,6 +23539,9 @@ src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc: $(OPE
src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc: $(OPENSSL_DEP) src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc: $(OPENSSL_DEP)
src/core/tsi/alts_transport_security.cc: $(OPENSSL_DEP) src/core/tsi/alts_transport_security.cc: $(OPENSSL_DEP)
src/core/tsi/fake_transport_security.cc: $(OPENSSL_DEP) src/core/tsi/fake_transport_security.cc: $(OPENSSL_DEP)
src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc: $(OPENSSL_DEP)
src/core/tsi/ssl/session_cache/ssl_session_cache.cc: $(OPENSSL_DEP)
src/core/tsi/ssl/session_cache/ssl_session_openssl.cc: $(OPENSSL_DEP)
src/core/tsi/ssl_transport_security.cc: $(OPENSSL_DEP) src/core/tsi/ssl_transport_security.cc: $(OPENSSL_DEP)
src/core/tsi/transport_security.cc: $(OPENSSL_DEP) src/core/tsi/transport_security.cc: $(OPENSSL_DEP)
src/core/tsi/transport_security_adapter.cc: $(OPENSSL_DEP) src/core/tsi/transport_security_adapter.cc: $(OPENSSL_DEP)

@ -37,7 +37,7 @@ def _get_external_deps(external_deps):
ret = [] ret = []
for dep in external_deps: for dep in external_deps:
if dep == "nanopb": if dep == "nanopb":
ret += ["//third_party/nanopb"] ret += ["grpc_nanopb"]
elif dep == "cares": elif dep == "cares":
ret += select({"//:grpc_no_ares": [], ret += select({"//:grpc_no_ares": [],
"//conditions:default": ["//external:cares"],}) "//conditions:default": ["//external:cares"],})
@ -57,12 +57,6 @@ def _maybe_update_cc_library_hdrs(hdrs):
ret.append(h) ret.append(h)
return ret return ret
def _maybe_update_cc_library_defines(name):
ret = []
if name == "alts_proto":
ret += ["PB_FIELD_16BIT=1"]
return ret
def grpc_cc_library(name, srcs = [], public_hdrs = [], hdrs = [], def grpc_cc_library(name, srcs = [], public_hdrs = [], hdrs = [],
external_deps = [], deps = [], standalone = False, external_deps = [], deps = [], standalone = False,
language = "C++", testonly = False, visibility = None, language = "C++", testonly = False, visibility = None,
@ -70,11 +64,10 @@ def grpc_cc_library(name, srcs = [], public_hdrs = [], hdrs = [],
copts = [] copts = []
if language.upper() == "C": if language.upper() == "C":
copts = if_not_windows(["-std=c99"]) copts = if_not_windows(["-std=c99"])
defines = _maybe_update_cc_library_defines(name)
native.cc_library( native.cc_library(
name = name, name = name,
srcs = srcs, srcs = srcs,
defines = defines + select({"//:grpc_no_ares": ["GRPC_ARES=0"], defines = select({"//:grpc_no_ares": ["GRPC_ARES=0"],
"//conditions:default": [],}) + "//conditions:default": [],}) +
select({"//:remote_execution": ["GRPC_PORT_ISOLATED_RUNTIME=1"], select({"//:remote_execution": ["GRPC_PORT_ISOLATED_RUNTIME=1"],
"//conditions:default": [],}) + "//conditions:default": [],}) +
@ -162,7 +155,23 @@ def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], da
) )
def grpc_generate_one_off_targets(): def grpc_generate_one_off_targets():
pass native.cc_library(
name = "grpc_nanopb",
hdrs = [
"//third_party/nanopb:pb.h",
"//third_party/nanopb:pb_common.h",
"//third_party/nanopb:pb_decode.h",
"//third_party/nanopb:pb_encode.h",
],
srcs = [
"//third_party/nanopb:pb_common.c",
"//third_party/nanopb:pb_decode.c",
"//third_party/nanopb:pb_encode.c",
],
defines = [
"PB_FIELD_16BIT=1",
],
)
def grpc_sh_test(name, srcs, args = [], data = []): def grpc_sh_test(name, srcs, args = [], data = []):
native.sh_test( native.sh_test(

@ -269,6 +269,8 @@ filegroups:
- src/core/lib/iomgr/gethostname_sysconf.cc - src/core/lib/iomgr/gethostname_sysconf.cc
- src/core/lib/iomgr/iocp_windows.cc - src/core/lib/iomgr/iocp_windows.cc
- src/core/lib/iomgr/iomgr.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_posix.cc
- src/core/lib/iomgr/iomgr_uv.cc - src/core/lib/iomgr/iomgr_uv.cc
- src/core/lib/iomgr/iomgr_windows.cc - src/core/lib/iomgr/iomgr_windows.cc
@ -277,12 +279,16 @@ filegroups:
- src/core/lib/iomgr/lockfree_event.cc - src/core/lib/iomgr/lockfree_event.cc
- src/core/lib/iomgr/network_status_tracker.cc - src/core/lib/iomgr/network_status_tracker.cc
- src/core/lib/iomgr/polling_entity.cc - src/core/lib/iomgr/polling_entity.cc
- src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc
- src/core/lib/iomgr/pollset_uv.cc - src/core/lib/iomgr/pollset_uv.cc
- src/core/lib/iomgr/pollset_windows.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_posix.cc
- src/core/lib/iomgr/resolve_address_uv.cc
- src/core/lib/iomgr/resolve_address_windows.cc - src/core/lib/iomgr/resolve_address_windows.cc
- src/core/lib/iomgr/resource_quota.cc - src/core/lib/iomgr/resource_quota.cc
- src/core/lib/iomgr/sockaddr_utils.cc - src/core/lib/iomgr/sockaddr_utils.cc
@ -294,19 +300,24 @@ filegroups:
- src/core/lib/iomgr/socket_utils_uv.cc - src/core/lib/iomgr/socket_utils_uv.cc
- src/core/lib/iomgr/socket_utils_windows.cc - src/core/lib/iomgr/socket_utils_windows.cc
- src/core/lib/iomgr/socket_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_posix.cc
- src/core/lib/iomgr/tcp_client_uv.cc
- src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc
- src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc
- src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
- src/core/lib/iomgr/tcp_server_uv.cc
- src/core/lib/iomgr/tcp_server_windows.cc - src/core/lib/iomgr/tcp_server_windows.cc
- src/core/lib/iomgr/tcp_uv.cc - src/core/lib/iomgr/tcp_uv.cc
- src/core/lib/iomgr/tcp_windows.cc - src/core/lib/iomgr/tcp_windows.cc
- src/core/lib/iomgr/time_averaged_stats.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_generic.cc
- src/core/lib/iomgr/timer_heap.cc - src/core/lib/iomgr/timer_heap.cc
- src/core/lib/iomgr/timer_manager.cc - src/core/lib/iomgr/timer_manager.cc
@ -427,9 +438,9 @@ filegroups:
- src/core/lib/iomgr/gethostname.h - src/core/lib/iomgr/gethostname.h
- src/core/lib/iomgr/iocp_windows.h - src/core/lib/iomgr/iocp_windows.h
- src/core/lib/iomgr/iomgr.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_internal.h
- src/core/lib/iomgr/iomgr_posix.h - src/core/lib/iomgr/iomgr_posix.h
- src/core/lib/iomgr/iomgr_uv.h
- src/core/lib/iomgr/is_epollexclusive_available.h - src/core/lib/iomgr/is_epollexclusive_available.h
- src/core/lib/iomgr/load_file.h - src/core/lib/iomgr/load_file.h
- src/core/lib/iomgr/lockfree_event.h - src/core/lib/iomgr/lockfree_event.h
@ -437,14 +448,17 @@ filegroups:
- src/core/lib/iomgr/network_status_tracker.h - src/core/lib/iomgr/network_status_tracker.h
- src/core/lib/iomgr/polling_entity.h - src/core/lib/iomgr/polling_entity.h
- src/core/lib/iomgr/pollset.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.h
- src/core/lib/iomgr/pollset_set_custom.h
- src/core/lib/iomgr/pollset_set_windows.h - src/core/lib/iomgr/pollset_set_windows.h
- src/core/lib/iomgr/pollset_uv.h
- src/core/lib/iomgr/pollset_windows.h - src/core/lib/iomgr/pollset_windows.h
- src/core/lib/iomgr/port.h - src/core/lib/iomgr/port.h
- src/core/lib/iomgr/resolve_address.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/resource_quota.h
- src/core/lib/iomgr/sockaddr.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_posix.h
- src/core/lib/iomgr/sockaddr_utils.h - src/core/lib/iomgr/sockaddr_utils.h
- src/core/lib/iomgr/sockaddr_windows.h - src/core/lib/iomgr/sockaddr_windows.h
@ -456,17 +470,16 @@ filegroups:
- src/core/lib/iomgr/sys_epoll_wrapper.h - src/core/lib/iomgr/sys_epoll_wrapper.h
- src/core/lib/iomgr/tcp_client.h - src/core/lib/iomgr/tcp_client.h
- src/core/lib/iomgr/tcp_client_posix.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_posix.h
- src/core/lib/iomgr/tcp_server.h - src/core/lib/iomgr/tcp_server.h
- src/core/lib/iomgr/tcp_server_utils_posix.h - src/core/lib/iomgr/tcp_server_utils_posix.h
- src/core/lib/iomgr/tcp_uv.h
- src/core/lib/iomgr/tcp_windows.h - src/core/lib/iomgr/tcp_windows.h
- src/core/lib/iomgr/time_averaged_stats.h - src/core/lib/iomgr/time_averaged_stats.h
- src/core/lib/iomgr/timer.h - src/core/lib/iomgr/timer.h
- src/core/lib/iomgr/timer_generic.h - src/core/lib/iomgr/timer_custom.h
- src/core/lib/iomgr/timer_heap.h - src/core/lib/iomgr/timer_heap.h
- src/core/lib/iomgr/timer_manager.h - src/core/lib/iomgr/timer_manager.h
- src/core/lib/iomgr/timer_uv.h
- src/core/lib/iomgr/udp_server.h - src/core/lib/iomgr/udp_server.h
- src/core/lib/iomgr/unix_sockets_posix.h - src/core/lib/iomgr/unix_sockets_posix.h
- src/core/lib/iomgr/wakeup_fd_cv.h - src/core/lib/iomgr/wakeup_fd_cv.h
@ -1032,12 +1045,17 @@ filegroups:
headers: headers:
- src/core/tsi/alts_transport_security.h - src/core/tsi/alts_transport_security.h
- src/core/tsi/fake_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_transport_security.h
- src/core/tsi/ssl_types.h - src/core/tsi/ssl_types.h
- src/core/tsi/transport_security_grpc.h - src/core/tsi/transport_security_grpc.h
src: src:
- src/core/tsi/alts_transport_security.cc - src/core/tsi/alts_transport_security.cc
- src/core/tsi/fake_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/ssl_transport_security.cc
- src/core/tsi/transport_security_grpc.cc - src/core/tsi/transport_security_grpc.cc
deps: deps:
@ -1379,9 +1397,13 @@ libs:
dll: true dll: true
filegroups: filegroups:
- grpc_base - grpc_base
- grpc_base_headers
- grpc_deadline_filter
- grpc_message_size_filter
- 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_server_load_reporting - grpc_transport_chttp2_server_secure
generate_plugin_registry: true generate_plugin_registry: true
platforms: platforms:
- linux - linux
@ -1996,17 +2018,6 @@ targets:
- grpc_test_util - grpc_test_util
- grpc - grpc
uses_polling: false uses_polling: false
- name: byte_stream_test
build: test
language: c
src:
- test/core/transport/byte_stream_test.cc
deps:
- grpc_test_util
- grpc
- gpr_test_util
- gpr
uses_polling: false
- name: channel_create_test - name: channel_create_test
build: test build: test
language: c language: c
@ -4070,6 +4081,18 @@ targets:
- mac - mac
- linux - linux
- posix - posix
- name: byte_stream_test
gtest: true
build: test
language: c++
src:
- test/core/transport/byte_stream_test.cc
deps:
- grpc_test_util
- grpc
- gpr_test_util
- gpr
uses_polling: false
- name: channel_arguments_test - name: channel_arguments_test
gtest: true gtest: true
build: test build: test
@ -4517,6 +4540,22 @@ targets:
- gpr - gpr
uses: uses:
- grpc++_test - grpc++_test
- name: h2_ssl_session_reuse_test
gtest: true
build: test
language: c++
headers:
- test/core/end2end/end2end_tests.h
src:
- test/core/end2end/h2_ssl_session_reuse_test.cc
deps:
- grpc_test_util
- grpc++
- grpc
- gpr_test_util
- gpr
uses:
- grpc++_test
- name: health_service_end2end_test - name: health_service_end2end_test
gtest: true gtest: true
build: test build: test
@ -5107,18 +5146,6 @@ targets:
deps: deps:
- grpc - grpc
uses_polling: false uses_polling: false
- name: status_test
build: test
language: c++
src:
- test/cpp/util/status_test.cc
deps:
- grpc_test_util
- grpc++
- grpc
- gpr_test_util
- gpr
uses_polling: false
- name: status_util_test - name: status_util_test
gtest: true gtest: true
cpu_cost: 0.1 cpu_cost: 0.1
@ -5374,11 +5401,11 @@ configs:
DEFINES: NDEBUG DEFINES: NDEBUG
LDFLAGS: -rdynamic LDFLAGS: -rdynamic
noexcept: noexcept:
CPPFLAGS: -O2 CPPFLAGS: -O2 -Wframe-larger-than=16384
CXXFLAGS: -fno-exceptions CXXFLAGS: -fno-exceptions
DEFINES: NDEBUG DEFINES: NDEBUG
opt: opt:
CPPFLAGS: -O2 CPPFLAGS: -O2 -Wframe-larger-than=16384
DEFINES: NDEBUG DEFINES: NDEBUG
stapprof: stapprof:
CPPFLAGS: -O2 -DGRPC_STAP_PROFILER CPPFLAGS: -O2 -DGRPC_STAP_PROFILER

@ -121,6 +121,8 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/gethostname_sysconf.cc \ src/core/lib/iomgr/gethostname_sysconf.cc \
src/core/lib/iomgr/iocp_windows.cc \ src/core/lib/iomgr/iocp_windows.cc \
src/core/lib/iomgr/iomgr.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_posix.cc \
src/core/lib/iomgr/iomgr_uv.cc \ src/core/lib/iomgr/iomgr_uv.cc \
src/core/lib/iomgr/iomgr_windows.cc \ src/core/lib/iomgr/iomgr_windows.cc \
@ -129,12 +131,16 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/lockfree_event.cc \ src/core/lib/iomgr/lockfree_event.cc \
src/core/lib/iomgr/network_status_tracker.cc \ src/core/lib/iomgr/network_status_tracker.cc \
src/core/lib/iomgr/polling_entity.cc \ src/core/lib/iomgr/polling_entity.cc \
src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc \
src/core/lib/iomgr/pollset_uv.cc \ src/core/lib/iomgr/pollset_uv.cc \
src/core/lib/iomgr/pollset_windows.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_posix.cc \
src/core/lib/iomgr/resolve_address_uv.cc \
src/core/lib/iomgr/resolve_address_windows.cc \ src/core/lib/iomgr/resolve_address_windows.cc \
src/core/lib/iomgr/resource_quota.cc \ src/core/lib/iomgr/resource_quota.cc \
src/core/lib/iomgr/sockaddr_utils.cc \ src/core/lib/iomgr/sockaddr_utils.cc \
@ -146,19 +152,24 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/socket_utils_uv.cc \ src/core/lib/iomgr/socket_utils_uv.cc \
src/core/lib/iomgr/socket_utils_windows.cc \ src/core/lib/iomgr/socket_utils_windows.cc \
src/core/lib/iomgr/socket_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_posix.cc \
src/core/lib/iomgr/tcp_client_uv.cc \
src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc \
src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc \
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc \
src/core/lib/iomgr/tcp_server_uv.cc \
src/core/lib/iomgr/tcp_server_windows.cc \ src/core/lib/iomgr/tcp_server_windows.cc \
src/core/lib/iomgr/tcp_uv.cc \ src/core/lib/iomgr/tcp_uv.cc \
src/core/lib/iomgr/tcp_windows.cc \ src/core/lib/iomgr/tcp_windows.cc \
src/core/lib/iomgr/time_averaged_stats.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_generic.cc \
src/core/lib/iomgr/timer_heap.cc \ src/core/lib/iomgr/timer_heap.cc \
src/core/lib/iomgr/timer_manager.cc \ src/core/lib/iomgr/timer_manager.cc \
@ -332,6 +343,9 @@ if test "$PHP_GRPC" != "no"; then
src/core/ext/filters/deadline/deadline_filter.cc \ src/core/ext/filters/deadline/deadline_filter.cc \
src/core/tsi/alts_transport_security.cc \ src/core/tsi/alts_transport_security.cc \
src/core/tsi/fake_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/ssl_transport_security.cc \
src/core/tsi/transport_security_grpc.cc \ src/core/tsi/transport_security_grpc.cc \
src/core/ext/transport/chttp2/server/chttp2_server.cc \ src/core/ext/transport/chttp2/server/chttp2_server.cc \
@ -690,6 +704,7 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/frame_protector) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/frame_protector)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/handshaker) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/handshaker)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/zero_copy_frame_protector) PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/alts/zero_copy_frame_protector)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/tsi/ssl/session_cache)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/asn1) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/asn1)
PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/base64) PHP_ADD_BUILD_DIR($ext_builddir/third_party/boringssl/crypto/base64)

@ -98,6 +98,8 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\gethostname_sysconf.cc " + "src\\core\\lib\\iomgr\\gethostname_sysconf.cc " +
"src\\core\\lib\\iomgr\\iocp_windows.cc " + "src\\core\\lib\\iomgr\\iocp_windows.cc " +
"src\\core\\lib\\iomgr\\iomgr.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_posix.cc " +
"src\\core\\lib\\iomgr\\iomgr_uv.cc " + "src\\core\\lib\\iomgr\\iomgr_uv.cc " +
"src\\core\\lib\\iomgr\\iomgr_windows.cc " + "src\\core\\lib\\iomgr\\iomgr_windows.cc " +
@ -106,12 +108,16 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\lockfree_event.cc " + "src\\core\\lib\\iomgr\\lockfree_event.cc " +
"src\\core\\lib\\iomgr\\network_status_tracker.cc " + "src\\core\\lib\\iomgr\\network_status_tracker.cc " +
"src\\core\\lib\\iomgr\\polling_entity.cc " + "src\\core\\lib\\iomgr\\polling_entity.cc " +
"src\\core\\lib\\iomgr\\pollset_set_uv.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_set_windows.cc " +
"src\\core\\lib\\iomgr\\pollset_uv.cc " + "src\\core\\lib\\iomgr\\pollset_uv.cc " +
"src\\core\\lib\\iomgr\\pollset_windows.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_posix.cc " +
"src\\core\\lib\\iomgr\\resolve_address_uv.cc " +
"src\\core\\lib\\iomgr\\resolve_address_windows.cc " + "src\\core\\lib\\iomgr\\resolve_address_windows.cc " +
"src\\core\\lib\\iomgr\\resource_quota.cc " + "src\\core\\lib\\iomgr\\resource_quota.cc " +
"src\\core\\lib\\iomgr\\sockaddr_utils.cc " + "src\\core\\lib\\iomgr\\sockaddr_utils.cc " +
@ -123,19 +129,24 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\iomgr\\socket_utils_uv.cc " + "src\\core\\lib\\iomgr\\socket_utils_uv.cc " +
"src\\core\\lib\\iomgr\\socket_utils_windows.cc " + "src\\core\\lib\\iomgr\\socket_utils_windows.cc " +
"src\\core\\lib\\iomgr\\socket_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_posix.cc " +
"src\\core\\lib\\iomgr\\tcp_client_uv.cc " +
"src\\core\\lib\\iomgr\\tcp_client_windows.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_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_posix.cc " +
"src\\core\\lib\\iomgr\\tcp_server_utils_posix_common.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_ifaddrs.cc " +
"src\\core\\lib\\iomgr\\tcp_server_utils_posix_noifaddrs.cc " + "src\\core\\lib\\iomgr\\tcp_server_utils_posix_noifaddrs.cc " +
"src\\core\\lib\\iomgr\\tcp_server_uv.cc " +
"src\\core\\lib\\iomgr\\tcp_server_windows.cc " + "src\\core\\lib\\iomgr\\tcp_server_windows.cc " +
"src\\core\\lib\\iomgr\\tcp_uv.cc " + "src\\core\\lib\\iomgr\\tcp_uv.cc " +
"src\\core\\lib\\iomgr\\tcp_windows.cc " + "src\\core\\lib\\iomgr\\tcp_windows.cc " +
"src\\core\\lib\\iomgr\\time_averaged_stats.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_generic.cc " +
"src\\core\\lib\\iomgr\\timer_heap.cc " + "src\\core\\lib\\iomgr\\timer_heap.cc " +
"src\\core\\lib\\iomgr\\timer_manager.cc " + "src\\core\\lib\\iomgr\\timer_manager.cc " +
@ -309,6 +320,9 @@ if (PHP_GRPC != "no") {
"src\\core\\ext\\filters\\deadline\\deadline_filter.cc " + "src\\core\\ext\\filters\\deadline\\deadline_filter.cc " +
"src\\core\\tsi\\alts_transport_security.cc " + "src\\core\\tsi\\alts_transport_security.cc " +
"src\\core\\tsi\\fake_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\\ssl_transport_security.cc " +
"src\\core\\tsi\\transport_security_grpc.cc " + "src\\core\\tsi\\transport_security_grpc.cc " +
"src\\core\\ext\\transport\\chttp2\\server\\chttp2_server.cc " + "src\\core\\ext\\transport\\chttp2\\server\\chttp2_server.cc " +
@ -704,6 +718,8 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\frame_protector"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\frame_protector");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\handshaker"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\handshaker");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\zero_copy_frame_protector"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\alts\\zero_copy_frame_protector");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\ssl");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\tsi\\ssl\\session_cache");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext\\grpc"); FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\php\\ext\\grpc");

@ -333,6 +333,8 @@ Pod::Spec.new do |s|
'src/core/ext/filters/deadline/deadline_filter.h', 'src/core/ext/filters/deadline/deadline_filter.h',
'src/core/tsi/alts_transport_security.h', 'src/core/tsi/alts_transport_security.h',
'src/core/tsi/fake_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_transport_security.h',
'src/core/tsi/ssl_types.h', 'src/core/tsi/ssl_types.h',
'src/core/tsi/transport_security_grpc.h', 'src/core/tsi/transport_security_grpc.h',
@ -382,9 +384,9 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/gethostname.h', 'src/core/lib/iomgr/gethostname.h',
'src/core/lib/iomgr/iocp_windows.h', 'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.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_internal.h',
'src/core/lib/iomgr/iomgr_posix.h', 'src/core/lib/iomgr/iomgr_posix.h',
'src/core/lib/iomgr/iomgr_uv.h',
'src/core/lib/iomgr/is_epollexclusive_available.h', 'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h', 'src/core/lib/iomgr/lockfree_event.h',
@ -392,14 +394,17 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/network_status_tracker.h', 'src/core/lib/iomgr/network_status_tracker.h',
'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/polling_entity.h',
'src/core/lib/iomgr/pollset.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.h',
'src/core/lib/iomgr/pollset_set_custom.h',
'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_set_windows.h',
'src/core/lib/iomgr/pollset_uv.h',
'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/pollset_windows.h',
'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/port.h',
'src/core/lib/iomgr/resolve_address.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/resource_quota.h',
'src/core/lib/iomgr/sockaddr.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_posix.h',
'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_utils.h',
'src/core/lib/iomgr/sockaddr_windows.h', 'src/core/lib/iomgr/sockaddr_windows.h',
@ -411,17 +416,16 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/sys_epoll_wrapper.h', 'src/core/lib/iomgr/sys_epoll_wrapper.h',
'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_client.h',
'src/core/lib/iomgr/tcp_client_posix.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_posix.h',
'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_server.h',
'src/core/lib/iomgr/tcp_server_utils_posix.h', 'src/core/lib/iomgr/tcp_server_utils_posix.h',
'src/core/lib/iomgr/tcp_uv.h',
'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/tcp_windows.h',
'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/time_averaged_stats.h',
'src/core/lib/iomgr/timer.h', 'src/core/lib/iomgr/timer.h',
'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_custom.h',
'src/core/lib/iomgr/timer_heap.h', 'src/core/lib/iomgr/timer_heap.h',
'src/core/lib/iomgr/timer_manager.h', 'src/core/lib/iomgr/timer_manager.h',
'src/core/lib/iomgr/timer_uv.h',
'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/udp_server.h',
'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_cv.h', 'src/core/lib/iomgr/wakeup_fd_cv.h',
@ -562,9 +566,9 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/gethostname.h', 'src/core/lib/iomgr/gethostname.h',
'src/core/lib/iomgr/iocp_windows.h', 'src/core/lib/iomgr/iocp_windows.h',
'src/core/lib/iomgr/iomgr.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_internal.h',
'src/core/lib/iomgr/iomgr_posix.h', 'src/core/lib/iomgr/iomgr_posix.h',
'src/core/lib/iomgr/iomgr_uv.h',
'src/core/lib/iomgr/is_epollexclusive_available.h', 'src/core/lib/iomgr/is_epollexclusive_available.h',
'src/core/lib/iomgr/load_file.h', 'src/core/lib/iomgr/load_file.h',
'src/core/lib/iomgr/lockfree_event.h', 'src/core/lib/iomgr/lockfree_event.h',
@ -572,14 +576,17 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/network_status_tracker.h', 'src/core/lib/iomgr/network_status_tracker.h',
'src/core/lib/iomgr/polling_entity.h', 'src/core/lib/iomgr/polling_entity.h',
'src/core/lib/iomgr/pollset.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.h',
'src/core/lib/iomgr/pollset_set_custom.h',
'src/core/lib/iomgr/pollset_set_windows.h', 'src/core/lib/iomgr/pollset_set_windows.h',
'src/core/lib/iomgr/pollset_uv.h',
'src/core/lib/iomgr/pollset_windows.h', 'src/core/lib/iomgr/pollset_windows.h',
'src/core/lib/iomgr/port.h', 'src/core/lib/iomgr/port.h',
'src/core/lib/iomgr/resolve_address.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/resource_quota.h',
'src/core/lib/iomgr/sockaddr.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_posix.h',
'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_utils.h',
'src/core/lib/iomgr/sockaddr_windows.h', 'src/core/lib/iomgr/sockaddr_windows.h',
@ -591,17 +598,16 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/sys_epoll_wrapper.h', 'src/core/lib/iomgr/sys_epoll_wrapper.h',
'src/core/lib/iomgr/tcp_client.h', 'src/core/lib/iomgr/tcp_client.h',
'src/core/lib/iomgr/tcp_client_posix.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_posix.h',
'src/core/lib/iomgr/tcp_server.h', 'src/core/lib/iomgr/tcp_server.h',
'src/core/lib/iomgr/tcp_server_utils_posix.h', 'src/core/lib/iomgr/tcp_server_utils_posix.h',
'src/core/lib/iomgr/tcp_uv.h',
'src/core/lib/iomgr/tcp_windows.h', 'src/core/lib/iomgr/tcp_windows.h',
'src/core/lib/iomgr/time_averaged_stats.h', 'src/core/lib/iomgr/time_averaged_stats.h',
'src/core/lib/iomgr/timer.h', 'src/core/lib/iomgr/timer.h',
'src/core/lib/iomgr/timer_generic.h', 'src/core/lib/iomgr/timer_custom.h',
'src/core/lib/iomgr/timer_heap.h', 'src/core/lib/iomgr/timer_heap.h',
'src/core/lib/iomgr/timer_manager.h', 'src/core/lib/iomgr/timer_manager.h',
'src/core/lib/iomgr/timer_uv.h',
'src/core/lib/iomgr/udp_server.h', 'src/core/lib/iomgr/udp_server.h',
'src/core/lib/iomgr/unix_sockets_posix.h', 'src/core/lib/iomgr/unix_sockets_posix.h',
'src/core/lib/iomgr/wakeup_fd_cv.h', 'src/core/lib/iomgr/wakeup_fd_cv.h',

File diff suppressed because it is too large Load Diff

@ -83,6 +83,9 @@ EXPORTS
grpc_auth_context_add_property grpc_auth_context_add_property
grpc_auth_context_add_cstring_property grpc_auth_context_add_cstring_property
grpc_auth_context_set_peer_identity_property_name grpc_auth_context_set_peer_identity_property_name
grpc_ssl_session_cache_create_lru
grpc_ssl_session_cache_destroy
grpc_ssl_session_cache_create_channel_arg
grpc_channel_credentials_release grpc_channel_credentials_release
grpc_google_default_credentials_create grpc_google_default_credentials_create
grpc_set_ssl_roots_override_callback grpc_set_ssl_roots_override_callback

@ -274,6 +274,8 @@ Gem::Specification.new do |s|
s.files += %w( src/core/ext/filters/deadline/deadline_filter.h ) s.files += %w( src/core/ext/filters/deadline/deadline_filter.h )
s.files += %w( src/core/tsi/alts_transport_security.h ) s.files += %w( src/core/tsi/alts_transport_security.h )
s.files += %w( src/core/tsi/fake_transport_security.h ) s.files += %w( src/core/tsi/fake_transport_security.h )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session.h )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_cache.h )
s.files += %w( src/core/tsi/ssl_transport_security.h ) s.files += %w( src/core/tsi/ssl_transport_security.h )
s.files += %w( src/core/tsi/ssl_types.h ) s.files += %w( src/core/tsi/ssl_types.h )
s.files += %w( src/core/tsi/transport_security_grpc.h ) s.files += %w( src/core/tsi/transport_security_grpc.h )
@ -323,9 +325,9 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/gethostname.h ) s.files += %w( src/core/lib/iomgr/gethostname.h )
s.files += %w( src/core/lib/iomgr/iocp_windows.h ) s.files += %w( src/core/lib/iomgr/iocp_windows.h )
s.files += %w( src/core/lib/iomgr/iomgr.h ) s.files += %w( src/core/lib/iomgr/iomgr.h )
s.files += %w( src/core/lib/iomgr/iomgr_custom.h )
s.files += %w( src/core/lib/iomgr/iomgr_internal.h ) s.files += %w( src/core/lib/iomgr/iomgr_internal.h )
s.files += %w( src/core/lib/iomgr/iomgr_posix.h ) s.files += %w( src/core/lib/iomgr/iomgr_posix.h )
s.files += %w( src/core/lib/iomgr/iomgr_uv.h )
s.files += %w( src/core/lib/iomgr/is_epollexclusive_available.h ) s.files += %w( src/core/lib/iomgr/is_epollexclusive_available.h )
s.files += %w( src/core/lib/iomgr/load_file.h ) s.files += %w( src/core/lib/iomgr/load_file.h )
s.files += %w( src/core/lib/iomgr/lockfree_event.h ) s.files += %w( src/core/lib/iomgr/lockfree_event.h )
@ -333,14 +335,17 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/network_status_tracker.h ) s.files += %w( src/core/lib/iomgr/network_status_tracker.h )
s.files += %w( src/core/lib/iomgr/polling_entity.h ) s.files += %w( src/core/lib/iomgr/polling_entity.h )
s.files += %w( src/core/lib/iomgr/pollset.h ) s.files += %w( src/core/lib/iomgr/pollset.h )
s.files += %w( src/core/lib/iomgr/pollset_custom.h )
s.files += %w( src/core/lib/iomgr/pollset_set.h ) s.files += %w( src/core/lib/iomgr/pollset_set.h )
s.files += %w( src/core/lib/iomgr/pollset_set_custom.h )
s.files += %w( src/core/lib/iomgr/pollset_set_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.h )
s.files += %w( src/core/lib/iomgr/pollset_uv.h )
s.files += %w( src/core/lib/iomgr/pollset_windows.h ) s.files += %w( src/core/lib/iomgr/pollset_windows.h )
s.files += %w( src/core/lib/iomgr/port.h ) s.files += %w( src/core/lib/iomgr/port.h )
s.files += %w( src/core/lib/iomgr/resolve_address.h ) s.files += %w( src/core/lib/iomgr/resolve_address.h )
s.files += %w( src/core/lib/iomgr/resolve_address_custom.h )
s.files += %w( src/core/lib/iomgr/resource_quota.h ) s.files += %w( src/core/lib/iomgr/resource_quota.h )
s.files += %w( src/core/lib/iomgr/sockaddr.h ) s.files += %w( src/core/lib/iomgr/sockaddr.h )
s.files += %w( src/core/lib/iomgr/sockaddr_custom.h )
s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_posix.h )
s.files += %w( src/core/lib/iomgr/sockaddr_utils.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h )
s.files += %w( src/core/lib/iomgr/sockaddr_windows.h ) s.files += %w( src/core/lib/iomgr/sockaddr_windows.h )
@ -352,17 +357,16 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/sys_epoll_wrapper.h ) s.files += %w( src/core/lib/iomgr/sys_epoll_wrapper.h )
s.files += %w( src/core/lib/iomgr/tcp_client.h ) s.files += %w( src/core/lib/iomgr/tcp_client.h )
s.files += %w( src/core/lib/iomgr/tcp_client_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.h )
s.files += %w( src/core/lib/iomgr/tcp_custom.h )
s.files += %w( src/core/lib/iomgr/tcp_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_posix.h )
s.files += %w( src/core/lib/iomgr/tcp_server.h ) s.files += %w( src/core/lib/iomgr/tcp_server.h )
s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix.h ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix.h )
s.files += %w( src/core/lib/iomgr/tcp_uv.h )
s.files += %w( src/core/lib/iomgr/tcp_windows.h ) s.files += %w( src/core/lib/iomgr/tcp_windows.h )
s.files += %w( src/core/lib/iomgr/time_averaged_stats.h ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.h )
s.files += %w( src/core/lib/iomgr/timer.h ) s.files += %w( src/core/lib/iomgr/timer.h )
s.files += %w( src/core/lib/iomgr/timer_generic.h ) s.files += %w( src/core/lib/iomgr/timer_custom.h )
s.files += %w( src/core/lib/iomgr/timer_heap.h ) s.files += %w( src/core/lib/iomgr/timer_heap.h )
s.files += %w( src/core/lib/iomgr/timer_manager.h ) s.files += %w( src/core/lib/iomgr/timer_manager.h )
s.files += %w( src/core/lib/iomgr/timer_uv.h )
s.files += %w( src/core/lib/iomgr/udp_server.h ) s.files += %w( src/core/lib/iomgr/udp_server.h )
s.files += %w( src/core/lib/iomgr/unix_sockets_posix.h ) s.files += %w( src/core/lib/iomgr/unix_sockets_posix.h )
s.files += %w( src/core/lib/iomgr/wakeup_fd_cv.h ) s.files += %w( src/core/lib/iomgr/wakeup_fd_cv.h )
@ -466,6 +470,8 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/gethostname_sysconf.cc ) s.files += %w( src/core/lib/iomgr/gethostname_sysconf.cc )
s.files += %w( src/core/lib/iomgr/iocp_windows.cc ) s.files += %w( src/core/lib/iomgr/iocp_windows.cc )
s.files += %w( src/core/lib/iomgr/iomgr.cc ) s.files += %w( src/core/lib/iomgr/iomgr.cc )
s.files += %w( src/core/lib/iomgr/iomgr_custom.cc )
s.files += %w( src/core/lib/iomgr/iomgr_internal.cc )
s.files += %w( src/core/lib/iomgr/iomgr_posix.cc ) s.files += %w( src/core/lib/iomgr/iomgr_posix.cc )
s.files += %w( src/core/lib/iomgr/iomgr_uv.cc ) s.files += %w( src/core/lib/iomgr/iomgr_uv.cc )
s.files += %w( src/core/lib/iomgr/iomgr_windows.cc ) s.files += %w( src/core/lib/iomgr/iomgr_windows.cc )
@ -474,12 +480,16 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/lockfree_event.cc ) s.files += %w( src/core/lib/iomgr/lockfree_event.cc )
s.files += %w( src/core/lib/iomgr/network_status_tracker.cc ) s.files += %w( src/core/lib/iomgr/network_status_tracker.cc )
s.files += %w( src/core/lib/iomgr/polling_entity.cc ) s.files += %w( src/core/lib/iomgr/polling_entity.cc )
s.files += %w( src/core/lib/iomgr/pollset_set_uv.cc ) s.files += %w( src/core/lib/iomgr/pollset.cc )
s.files += %w( src/core/lib/iomgr/pollset_custom.cc )
s.files += %w( src/core/lib/iomgr/pollset_set.cc )
s.files += %w( src/core/lib/iomgr/pollset_set_custom.cc )
s.files += %w( src/core/lib/iomgr/pollset_set_windows.cc ) s.files += %w( src/core/lib/iomgr/pollset_set_windows.cc )
s.files += %w( src/core/lib/iomgr/pollset_uv.cc ) s.files += %w( src/core/lib/iomgr/pollset_uv.cc )
s.files += %w( src/core/lib/iomgr/pollset_windows.cc ) s.files += %w( src/core/lib/iomgr/pollset_windows.cc )
s.files += %w( src/core/lib/iomgr/resolve_address.cc )
s.files += %w( src/core/lib/iomgr/resolve_address_custom.cc )
s.files += %w( src/core/lib/iomgr/resolve_address_posix.cc ) s.files += %w( src/core/lib/iomgr/resolve_address_posix.cc )
s.files += %w( src/core/lib/iomgr/resolve_address_uv.cc )
s.files += %w( src/core/lib/iomgr/resolve_address_windows.cc ) s.files += %w( src/core/lib/iomgr/resolve_address_windows.cc )
s.files += %w( src/core/lib/iomgr/resource_quota.cc ) s.files += %w( src/core/lib/iomgr/resource_quota.cc )
s.files += %w( src/core/lib/iomgr/sockaddr_utils.cc ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.cc )
@ -491,19 +501,24 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/socket_utils_uv.cc ) s.files += %w( src/core/lib/iomgr/socket_utils_uv.cc )
s.files += %w( src/core/lib/iomgr/socket_utils_windows.cc ) s.files += %w( src/core/lib/iomgr/socket_utils_windows.cc )
s.files += %w( src/core/lib/iomgr/socket_windows.cc ) s.files += %w( src/core/lib/iomgr/socket_windows.cc )
s.files += %w( src/core/lib/iomgr/tcp_client.cc )
s.files += %w( src/core/lib/iomgr/tcp_client_custom.cc )
s.files += %w( src/core/lib/iomgr/tcp_client_posix.cc ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.cc )
s.files += %w( src/core/lib/iomgr/tcp_client_uv.cc )
s.files += %w( src/core/lib/iomgr/tcp_client_windows.cc ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.cc )
s.files += %w( src/core/lib/iomgr/tcp_custom.cc )
s.files += %w( src/core/lib/iomgr/tcp_posix.cc ) s.files += %w( src/core/lib/iomgr/tcp_posix.cc )
s.files += %w( src/core/lib/iomgr/tcp_server.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_custom.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_posix.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_posix.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_common.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_common.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_uv.cc )
s.files += %w( src/core/lib/iomgr/tcp_server_windows.cc ) s.files += %w( src/core/lib/iomgr/tcp_server_windows.cc )
s.files += %w( src/core/lib/iomgr/tcp_uv.cc ) s.files += %w( src/core/lib/iomgr/tcp_uv.cc )
s.files += %w( src/core/lib/iomgr/tcp_windows.cc ) s.files += %w( src/core/lib/iomgr/tcp_windows.cc )
s.files += %w( src/core/lib/iomgr/time_averaged_stats.cc ) s.files += %w( src/core/lib/iomgr/time_averaged_stats.cc )
s.files += %w( src/core/lib/iomgr/timer.cc )
s.files += %w( src/core/lib/iomgr/timer_custom.cc )
s.files += %w( src/core/lib/iomgr/timer_generic.cc ) s.files += %w( src/core/lib/iomgr/timer_generic.cc )
s.files += %w( src/core/lib/iomgr/timer_heap.cc ) s.files += %w( src/core/lib/iomgr/timer_heap.cc )
s.files += %w( src/core/lib/iomgr/timer_manager.cc ) s.files += %w( src/core/lib/iomgr/timer_manager.cc )
@ -677,6 +692,9 @@ Gem::Specification.new do |s|
s.files += %w( src/core/ext/filters/deadline/deadline_filter.cc ) s.files += %w( src/core/ext/filters/deadline/deadline_filter.cc )
s.files += %w( src/core/tsi/alts_transport_security.cc ) s.files += %w( src/core/tsi/alts_transport_security.cc )
s.files += %w( src/core/tsi/fake_transport_security.cc ) s.files += %w( src/core/tsi/fake_transport_security.cc )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_cache.cc )
s.files += %w( src/core/tsi/ssl/session_cache/ssl_session_openssl.cc )
s.files += %w( src/core/tsi/ssl_transport_security.cc ) s.files += %w( src/core/tsi/ssl_transport_security.cc )
s.files += %w( src/core/tsi/transport_security_grpc.cc ) s.files += %w( src/core/tsi/transport_security_grpc.cc )
s.files += %w( src/core/ext/transport/chttp2/server/chttp2_server.cc ) s.files += %w( src/core/ext/transport/chttp2/server/chttp2_server.cc )

@ -34,6 +34,7 @@
'Release': { 'Release': {
'cflags': [ 'cflags': [
'-O2', '-O2',
'-Wframe-larger-than=16384',
], ],
'defines': [ 'defines': [
'NDEBUG', 'NDEBUG',
@ -273,6 +274,8 @@
'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc',
'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.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_posix.cc',
'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_uv.cc',
'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/iomgr_windows.cc',
@ -281,12 +284,16 @@
'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/lockfree_event.cc',
'src/core/lib/iomgr/network_status_tracker.cc', 'src/core/lib/iomgr/network_status_tracker.cc',
'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/polling_entity.cc',
'src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc',
'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_uv.cc',
'src/core/lib/iomgr/pollset_windows.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_posix.cc',
'src/core/lib/iomgr/resolve_address_uv.cc',
'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resolve_address_windows.cc',
'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/resource_quota.cc',
'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/sockaddr_utils.cc',
@ -298,19 +305,24 @@
'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_uv.cc',
'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_utils_windows.cc',
'src/core/lib/iomgr/socket_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_posix.cc',
'src/core/lib/iomgr/tcp_client_uv.cc',
'src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
'src/core/lib/iomgr/tcp_server_uv.cc',
'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_server_windows.cc',
'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_uv.cc',
'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/tcp_windows.cc',
'src/core/lib/iomgr/time_averaged_stats.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_generic.cc',
'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_heap.cc',
'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_manager.cc',
@ -484,6 +496,9 @@
'src/core/ext/filters/deadline/deadline_filter.cc', 'src/core/ext/filters/deadline/deadline_filter.cc',
'src/core/tsi/alts_transport_security.cc', 'src/core/tsi/alts_transport_security.cc',
'src/core/tsi/fake_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/ssl_transport_security.cc',
'src/core/tsi/transport_security_grpc.cc', 'src/core/tsi/transport_security_grpc.cc',
'src/core/ext/transport/chttp2/server/chttp2_server.cc', 'src/core/ext/transport/chttp2/server/chttp2_server.cc',
@ -606,6 +621,8 @@
'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc',
'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.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_posix.cc',
'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_uv.cc',
'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/iomgr_windows.cc',
@ -614,12 +631,16 @@
'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/lockfree_event.cc',
'src/core/lib/iomgr/network_status_tracker.cc', 'src/core/lib/iomgr/network_status_tracker.cc',
'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/polling_entity.cc',
'src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc',
'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_uv.cc',
'src/core/lib/iomgr/pollset_windows.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_posix.cc',
'src/core/lib/iomgr/resolve_address_uv.cc',
'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resolve_address_windows.cc',
'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/resource_quota.cc',
'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/sockaddr_utils.cc',
@ -631,19 +652,24 @@
'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_uv.cc',
'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_utils_windows.cc',
'src/core/lib/iomgr/socket_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_posix.cc',
'src/core/lib/iomgr/tcp_client_uv.cc',
'src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
'src/core/lib/iomgr/tcp_server_uv.cc',
'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_server_windows.cc',
'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_uv.cc',
'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/tcp_windows.cc',
'src/core/lib/iomgr/time_averaged_stats.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_generic.cc',
'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_heap.cc',
'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_manager.cc',
@ -823,6 +849,8 @@
'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc',
'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.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_posix.cc',
'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_uv.cc',
'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/iomgr_windows.cc',
@ -831,12 +859,16 @@
'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/lockfree_event.cc',
'src/core/lib/iomgr/network_status_tracker.cc', 'src/core/lib/iomgr/network_status_tracker.cc',
'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/polling_entity.cc',
'src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc',
'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_uv.cc',
'src/core/lib/iomgr/pollset_windows.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_posix.cc',
'src/core/lib/iomgr/resolve_address_uv.cc',
'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resolve_address_windows.cc',
'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/resource_quota.cc',
'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/sockaddr_utils.cc',
@ -848,19 +880,24 @@
'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_uv.cc',
'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_utils_windows.cc',
'src/core/lib/iomgr/socket_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_posix.cc',
'src/core/lib/iomgr/tcp_client_uv.cc',
'src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
'src/core/lib/iomgr/tcp_server_uv.cc',
'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_server_windows.cc',
'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_uv.cc',
'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/tcp_windows.cc',
'src/core/lib/iomgr/time_averaged_stats.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_generic.cc',
'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_heap.cc',
'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_manager.cc',
@ -1019,6 +1056,8 @@
'src/core/lib/iomgr/gethostname_sysconf.cc', 'src/core/lib/iomgr/gethostname_sysconf.cc',
'src/core/lib/iomgr/iocp_windows.cc', 'src/core/lib/iomgr/iocp_windows.cc',
'src/core/lib/iomgr/iomgr.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_posix.cc',
'src/core/lib/iomgr/iomgr_uv.cc', 'src/core/lib/iomgr/iomgr_uv.cc',
'src/core/lib/iomgr/iomgr_windows.cc', 'src/core/lib/iomgr/iomgr_windows.cc',
@ -1027,12 +1066,16 @@
'src/core/lib/iomgr/lockfree_event.cc', 'src/core/lib/iomgr/lockfree_event.cc',
'src/core/lib/iomgr/network_status_tracker.cc', 'src/core/lib/iomgr/network_status_tracker.cc',
'src/core/lib/iomgr/polling_entity.cc', 'src/core/lib/iomgr/polling_entity.cc',
'src/core/lib/iomgr/pollset_set_uv.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_set_windows.cc',
'src/core/lib/iomgr/pollset_uv.cc', 'src/core/lib/iomgr/pollset_uv.cc',
'src/core/lib/iomgr/pollset_windows.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_posix.cc',
'src/core/lib/iomgr/resolve_address_uv.cc',
'src/core/lib/iomgr/resolve_address_windows.cc', 'src/core/lib/iomgr/resolve_address_windows.cc',
'src/core/lib/iomgr/resource_quota.cc', 'src/core/lib/iomgr/resource_quota.cc',
'src/core/lib/iomgr/sockaddr_utils.cc', 'src/core/lib/iomgr/sockaddr_utils.cc',
@ -1044,19 +1087,24 @@
'src/core/lib/iomgr/socket_utils_uv.cc', 'src/core/lib/iomgr/socket_utils_uv.cc',
'src/core/lib/iomgr/socket_utils_windows.cc', 'src/core/lib/iomgr/socket_utils_windows.cc',
'src/core/lib/iomgr/socket_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_posix.cc',
'src/core/lib/iomgr/tcp_client_uv.cc',
'src/core/lib/iomgr/tcp_client_windows.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_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_posix.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_common.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_ifaddrs.cc',
'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc', 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
'src/core/lib/iomgr/tcp_server_uv.cc',
'src/core/lib/iomgr/tcp_server_windows.cc', 'src/core/lib/iomgr/tcp_server_windows.cc',
'src/core/lib/iomgr/tcp_uv.cc', 'src/core/lib/iomgr/tcp_uv.cc',
'src/core/lib/iomgr/tcp_windows.cc', 'src/core/lib/iomgr/tcp_windows.cc',
'src/core/lib/iomgr/time_averaged_stats.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_generic.cc',
'src/core/lib/iomgr/timer_heap.cc', 'src/core/lib/iomgr/timer_heap.cc',
'src/core/lib/iomgr/timer_manager.cc', 'src/core/lib/iomgr/timer_manager.cc',

@ -100,6 +100,25 @@ GRPCAPI void grpc_auth_context_add_cstring_property(grpc_auth_context* ctx,
GRPCAPI int grpc_auth_context_set_peer_identity_property_name( GRPCAPI int grpc_auth_context_set_peer_identity_property_name(
grpc_auth_context* ctx, const char* name); grpc_auth_context* ctx, const char* name);
/** --- SSL Session Cache. ---
A SSL session cache object represents a way to cache client sessions
between connections. Only ticket-based resumption is supported. */
typedef struct grpc_ssl_session_cache grpc_ssl_session_cache;
/** Create LRU cache for client-side SSL sessions with the given capacity.
If capacity is < 1, a default capacity is used instead. */
GRPCAPI grpc_ssl_session_cache* grpc_ssl_session_cache_create_lru(
size_t capacity);
/** Destroy SSL session cache. */
GRPCAPI void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache);
/** Create a channel arg with the given cache object. */
GRPCAPI grpc_arg
grpc_ssl_session_cache_create_channel_arg(grpc_ssl_session_cache* cache);
/** --- grpc_channel_credentials object. --- /** --- grpc_channel_credentials object. ---
A channel credentials object represents a way to authenticate a client on a A channel credentials object represents a way to authenticate a client on a

@ -29,6 +29,7 @@ extern "C" {
#define GRPC_X509_CN_PROPERTY_NAME "x509_common_name" #define GRPC_X509_CN_PROPERTY_NAME "x509_common_name"
#define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name" #define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name"
#define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert" #define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert"
#define GRPC_SSL_SESSION_REUSED_PROPERTY "ssl_session_reused"
/** Environment variable that points to the default SSL roots file. This file /** Environment variable that points to the default SSL roots file. This file
must be a PEM encoded file with all the roots such as the one that can be must be a PEM encoded file with all the roots such as the one that can be

@ -258,6 +258,10 @@ typedef struct {
secure channel is an SSL channel). If this parameter is specified and the secure channel is an SSL channel). If this parameter is specified and the
underlying is not an SSL channel, it will just be ignored. */ underlying is not an SSL channel, it will just be ignored. */
#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override" #define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override"
/** If non-zero, a pointer to a session cache (a pointer of type
grpc_ssl_session_cache*). (use grpc_ssl_session_cache_arg_vtable() to fetch
an appropriate pointer arg vtable) */
#define GRPC_SSL_SESSION_CACHE_ARG "grpc.ssl_session_cache"
/** Maximum metadata size, in bytes. Note this limit applies to the max sum of /** Maximum metadata size, in bytes. Note this limit applies to the max sum of
all metadata key-value entries in a batch of headers. */ all metadata key-value entries in a batch of headers. */
#define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size"

@ -95,7 +95,7 @@ struct grpc_slice {
/** Represents an expandable array of slices, to be interpreted as a /** Represents an expandable array of slices, to be interpreted as a
single item. */ single item. */
typedef struct { typedef struct grpc_slice_buffer {
/** This is for internal use only. External users (i.e any code outside grpc /** This is for internal use only. External users (i.e any code outside grpc
* core) MUST NOT use this field */ * core) MUST NOT use this field */
grpc_slice* base_slices; grpc_slice* base_slices;

@ -21,7 +21,6 @@
#include <grpc/impl/codegen/port_platform.h> #include <grpc/impl/codegen/port_platform.h>
#include <inttypes.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h> /* for abort() */ #include <stdlib.h> /* for abort() */

@ -126,9 +126,10 @@ class ClientAsyncResponseReader final
assert(started_); assert(started_);
GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_);
meta_buf.set_output_tag(tag); single_buf.set_output_tag(tag);
meta_buf.RecvInitialMetadata(context_); single_buf.RecvInitialMetadata(context_);
call_.PerformOps(&meta_buf); call_.PerformOps(&single_buf);
initial_metadata_read_ = true;
} }
/// See \a ClientAysncResponseReaderInterface::Finish for semantics. /// See \a ClientAysncResponseReaderInterface::Finish for semantics.
@ -138,14 +139,20 @@ class ClientAsyncResponseReader final
/// possible initial and trailing metadata sent from the server. /// possible initial and trailing metadata sent from the server.
void Finish(R* msg, Status* status, void* tag) override { void Finish(R* msg, Status* status, void* tag) override {
assert(started_); assert(started_);
finish_buf.set_output_tag(tag); if (initial_metadata_read_) {
if (!context_->initial_metadata_received_) { finish_buf.set_output_tag(tag);
finish_buf.RecvInitialMetadata(context_); finish_buf.RecvMessage(msg);
finish_buf.AllowNoMessage();
finish_buf.ClientRecvStatus(context_, status);
call_.PerformOps(&finish_buf);
} else {
single_buf.set_output_tag(tag);
single_buf.RecvInitialMetadata(context_);
single_buf.RecvMessage(msg);
single_buf.AllowNoMessage();
single_buf.ClientRecvStatus(context_, status);
call_.PerformOps(&single_buf);
} }
finish_buf.RecvMessage(msg);
finish_buf.AllowNoMessage();
finish_buf.ClientRecvStatus(context_, status);
call_.PerformOps(&finish_buf);
} }
private: private:
@ -153,6 +160,7 @@ class ClientAsyncResponseReader final
ClientContext* const context_; ClientContext* const context_;
::grpc::internal::Call call_; ::grpc::internal::Call call_;
bool started_; bool started_;
bool initial_metadata_read_ = false;
template <class W> template <class W>
ClientAsyncResponseReader(::grpc::internal::Call call, ClientContext* context, ClientAsyncResponseReader(::grpc::internal::Call call, ClientContext* context,
@ -160,30 +168,29 @@ class ClientAsyncResponseReader final
: context_(context), call_(call), started_(start) { : context_(context), call_(call), started_(start) {
// Bind the metadata at time of StartCallInternal but set up the rest here // Bind the metadata at time of StartCallInternal but set up the rest here
// TODO(ctiller): don't assert // TODO(ctiller): don't assert
GPR_CODEGEN_ASSERT(init_buf.SendMessage(request).ok()); GPR_CODEGEN_ASSERT(single_buf.SendMessage(request).ok());
init_buf.ClientSendClose(); single_buf.ClientSendClose();
if (start) StartCallInternal(); if (start) StartCallInternal();
} }
void StartCallInternal() { void StartCallInternal() {
init_buf.SendInitialMetadata(context_->send_initial_metadata_, single_buf.SendInitialMetadata(context_->send_initial_metadata_,
context_->initial_metadata_flags()); context_->initial_metadata_flags());
call_.PerformOps(&init_buf);
} }
// disable operator new // disable operator new
static void* operator new(std::size_t size); static void* operator new(std::size_t size);
static void* operator new(std::size_t size, void* p) { return p; } static void* operator new(std::size_t size, void* p) { return p; }
::grpc::internal::SneakyCallOpSet<::grpc::internal::CallOpSendInitialMetadata, ::grpc::internal::CallOpSet<::grpc::internal::CallOpSendInitialMetadata,
::grpc::internal::CallOpSendMessage, ::grpc::internal::CallOpSendMessage,
::grpc::internal::CallOpClientSendClose> ::grpc::internal::CallOpClientSendClose,
init_buf; ::grpc::internal::CallOpRecvInitialMetadata,
::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata>
meta_buf;
::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvInitialMetadata,
::grpc::internal::CallOpRecvMessage<R>, ::grpc::internal::CallOpRecvMessage<R>,
::grpc::internal::CallOpClientRecvStatus> ::grpc::internal::CallOpClientRecvStatus>
single_buf;
::grpc::internal::CallOpSet<::grpc::internal::CallOpRecvMessage<R>,
::grpc::internal::CallOpClientRecvStatus>
finish_buf; finish_buf;
}; };

@ -365,9 +365,11 @@ class ServerCompletionQueue : public CompletionQueue {
public: public:
bool IsFrequentlyPolled() { return polling_type_ != GRPC_CQ_NON_LISTENING; } bool IsFrequentlyPolled() { return polling_type_ != GRPC_CQ_NON_LISTENING; }
protected:
/// Default constructor
ServerCompletionQueue() {}
private: private:
grpc_cq_polling_type polling_type_;
friend class ServerBuilder;
/// \param is_frequently_polled Informs the GRPC library about whether the /// \param is_frequently_polled Informs the GRPC library about whether the
/// server completion queue would be actively polled (by calling Next() or /// server completion queue would be actively polled (by calling Next() or
/// AsyncNext()). By default all server completion queues are assumed to be /// AsyncNext()). By default all server completion queues are assumed to be
@ -376,6 +378,9 @@ class ServerCompletionQueue : public CompletionQueue {
: CompletionQueue(grpc_completion_queue_attributes{ : CompletionQueue(grpc_completion_queue_attributes{
GRPC_CQ_CURRENT_VERSION, GRPC_CQ_NEXT, polling_type}), GRPC_CQ_CURRENT_VERSION, GRPC_CQ_NEXT, polling_type}),
polling_type_(polling_type) {} polling_type_(polling_type) {}
grpc_cq_polling_type polling_type_;
friend class ServerBuilder;
}; };
} // namespace grpc } // namespace grpc

@ -19,6 +19,7 @@
#ifndef GRPCPP_IMPL_CODEGEN_STATUS_H #ifndef GRPCPP_IMPL_CODEGEN_STATUS_H
#define GRPCPP_IMPL_CODEGEN_STATUS_H #define GRPCPP_IMPL_CODEGEN_STATUS_H
#include <grpc/impl/codegen/status.h>
#include <grpcpp/impl/codegen/config.h> #include <grpcpp/impl/codegen/config.h>
#include <grpcpp/impl/codegen/status_code_enum.h> #include <grpcpp/impl/codegen/status_code_enum.h>
@ -30,7 +31,60 @@ namespace grpc {
class Status { class Status {
public: public:
/// Construct an OK instance. /// Construct an OK instance.
Status() : code_(StatusCode::OK) {} Status() : code_(StatusCode::OK) {
// Static assertions to make sure that the C++ API value correctly
// maps to the core surface API value
static_assert(StatusCode::OK == static_cast<StatusCode>(GRPC_STATUS_OK),
"Mismatched status code");
static_assert(
StatusCode::CANCELLED == static_cast<StatusCode>(GRPC_STATUS_CANCELLED),
"Mismatched status code");
static_assert(
StatusCode::UNKNOWN == static_cast<StatusCode>(GRPC_STATUS_UNKNOWN),
"Mismatched status code");
static_assert(StatusCode::INVALID_ARGUMENT ==
static_cast<StatusCode>(GRPC_STATUS_INVALID_ARGUMENT),
"Mismatched status code");
static_assert(StatusCode::DEADLINE_EXCEEDED ==
static_cast<StatusCode>(GRPC_STATUS_DEADLINE_EXCEEDED),
"Mismatched status code");
static_assert(
StatusCode::NOT_FOUND == static_cast<StatusCode>(GRPC_STATUS_NOT_FOUND),
"Mismatched status code");
static_assert(StatusCode::ALREADY_EXISTS ==
static_cast<StatusCode>(GRPC_STATUS_ALREADY_EXISTS),
"Mismatched status code");
static_assert(StatusCode::PERMISSION_DENIED ==
static_cast<StatusCode>(GRPC_STATUS_PERMISSION_DENIED),
"Mismatched status code");
static_assert(StatusCode::UNAUTHENTICATED ==
static_cast<StatusCode>(GRPC_STATUS_UNAUTHENTICATED),
"Mismatched status code");
static_assert(StatusCode::RESOURCE_EXHAUSTED ==
static_cast<StatusCode>(GRPC_STATUS_RESOURCE_EXHAUSTED),
"Mismatched status code");
static_assert(StatusCode::FAILED_PRECONDITION ==
static_cast<StatusCode>(GRPC_STATUS_FAILED_PRECONDITION),
"Mismatched status code");
static_assert(
StatusCode::ABORTED == static_cast<StatusCode>(GRPC_STATUS_ABORTED),
"Mismatched status code");
static_assert(StatusCode::OUT_OF_RANGE ==
static_cast<StatusCode>(GRPC_STATUS_OUT_OF_RANGE),
"Mismatched status code");
static_assert(StatusCode::UNIMPLEMENTED ==
static_cast<StatusCode>(GRPC_STATUS_UNIMPLEMENTED),
"Mismatched status code");
static_assert(
StatusCode::INTERNAL == static_cast<StatusCode>(GRPC_STATUS_INTERNAL),
"Mismatched status code");
static_assert(StatusCode::UNAVAILABLE ==
static_cast<StatusCode>(GRPC_STATUS_UNAVAILABLE),
"Mismatched status code");
static_assert(
StatusCode::DATA_LOSS == static_cast<StatusCode>(GRPC_STATUS_DATA_LOSS),
"Mismatched status code");
}
/// Construct an instance with associated \a code and \a error_message. /// Construct an instance with associated \a code and \a error_message.
/// It is an error to construct an OK status with non-empty \a error_message. /// It is an error to construct an OK status with non-empty \a error_message.

@ -49,7 +49,7 @@ class ServerInitializer;
/// ///
/// Use a \a grpc::ServerBuilder to create, configure, and start /// Use a \a grpc::ServerBuilder to create, configure, and start
/// \a Server instances. /// \a Server instances.
class Server final : public ServerInterface, private GrpcLibraryCodegen { class Server : public ServerInterface, private GrpcLibraryCodegen {
public: public:
~Server(); ~Server();
@ -87,7 +87,8 @@ class Server final : public ServerInterface, private GrpcLibraryCodegen {
/// application and is shared among all \a Server objects. /// application and is shared among all \a Server objects.
static void SetGlobalCallbacks(GlobalCallbacks* callbacks); static void SetGlobalCallbacks(GlobalCallbacks* callbacks);
// Returns a \em raw pointer to the underlying \a grpc_server instance. /// Returns a \em raw pointer to the underlying \a grpc_server instance.
/// EXPERIMENTAL: for internal/test use only
grpc_server* c_server(); grpc_server* c_server();
/// Returns the health check service. /// Returns the health check service.
@ -98,24 +99,26 @@ class Server final : public ServerInterface, private GrpcLibraryCodegen {
/// Establish a channel for in-process communication /// Establish a channel for in-process communication
std::shared_ptr<Channel> InProcessChannel(const ChannelArguments& args); std::shared_ptr<Channel> InProcessChannel(const ChannelArguments& args);
private: protected:
friend class AsyncGenericService; /// Register a service. This call does not take ownership of the service.
friend class ServerBuilder; /// The service must exist for the lifetime of the Server instance.
friend class ServerInitializer; bool RegisterService(const grpc::string* host, Service* service) override;
class SyncRequest;
class AsyncRequest;
class ShutdownRequest;
/// SyncRequestThreadManager is an implementation of ThreadManager. This class
/// is responsible for polling for incoming RPCs and calling the RPC handlers.
/// This is only used in case of a Sync server (i.e a server exposing a sync
/// interface)
class SyncRequestThreadManager;
class UnimplementedAsyncRequestContext; /// Try binding the server to the given \a addr endpoint
class UnimplementedAsyncRequest; /// (port, and optionally including IP address to bind to).
class UnimplementedAsyncResponse; ///
/// It can be invoked multiple times. Should be used before
/// starting the server.
///
/// \param addr The address to try to bind to the server (eg, localhost:1234,
/// 192.168.1.1:31416, [::1]:27182, etc.).
/// \param creds The credentials associated with the server.
///
/// \return bound port number on success, 0 on failure.
///
/// \warning It is an error to call this method on an already started server.
int AddListeningPort(const grpc::string& addr,
ServerCredentials* creds) override;
/// Server constructors. To be used by \a ServerBuilder only. /// Server constructors. To be used by \a ServerBuilder only.
/// ///
@ -143,30 +146,6 @@ class Server final : public ServerInterface, private GrpcLibraryCodegen {
sync_server_cqs, sync_server_cqs,
int min_pollers, int max_pollers, int sync_cq_timeout_msec); int min_pollers, int max_pollers, int sync_cq_timeout_msec);
/// Register a service. This call does not take ownership of the service.
/// The service must exist for the lifetime of the Server instance.
bool RegisterService(const grpc::string* host, Service* service) override;
/// Register a generic service. This call does not take ownership of the
/// service. The service must exist for the lifetime of the Server instance.
void RegisterAsyncGenericService(AsyncGenericService* service) override;
/// Try binding the server to the given \a addr endpoint
/// (port, and optionally including IP address to bind to).
///
/// It can be invoked multiple times. Should be used before
/// starting the server.
///
/// \param addr The address to try to bind to the server (eg, localhost:1234,
/// 192.168.1.1:31416, [::1]:27182, etc.).
/// \param creds The credentials associated with the server.
///
/// \return bound port number on success, 0 on failure.
///
/// \warning It is an error to call this method on an already started server.
int AddListeningPort(const grpc::string& addr,
ServerCredentials* creds) override;
/// Start the server. /// Start the server.
/// ///
/// \param cqs Completion queues for handling asynchronous services. The /// \param cqs Completion queues for handling asynchronous services. The
@ -175,6 +154,31 @@ class Server final : public ServerInterface, private GrpcLibraryCodegen {
/// \param num_cqs How many completion queues does \a cqs hold. /// \param num_cqs How many completion queues does \a cqs hold.
void Start(ServerCompletionQueue** cqs, size_t num_cqs) override; void Start(ServerCompletionQueue** cqs, size_t num_cqs) override;
grpc_server* server() override { return server_; };
private:
friend class AsyncGenericService;
friend class ServerBuilder;
friend class ServerInitializer;
class SyncRequest;
class AsyncRequest;
class ShutdownRequest;
/// SyncRequestThreadManager is an implementation of ThreadManager. This class
/// is responsible for polling for incoming RPCs and calling the RPC handlers.
/// This is only used in case of a Sync server (i.e a server exposing a sync
/// interface)
class SyncRequestThreadManager;
class UnimplementedAsyncRequestContext;
class UnimplementedAsyncRequest;
class UnimplementedAsyncResponse;
/// Register a generic service. This call does not take ownership of the
/// service. The service must exist for the lifetime of the Server instance.
void RegisterAsyncGenericService(AsyncGenericService* service) override;
void PerformOpsOnCall(internal::CallOpSetInterface* ops, void PerformOpsOnCall(internal::CallOpSetInterface* ops,
internal::Call* call) override; internal::Call* call) override;
@ -184,8 +188,6 @@ class Server final : public ServerInterface, private GrpcLibraryCodegen {
return max_receive_message_size_; return max_receive_message_size_;
}; };
grpc_server* server() override { return server_; };
ServerInitializer* initializer(); ServerInitializer* initializer();
const int max_receive_message_size_; const int max_receive_message_size_;
@ -200,7 +202,7 @@ class Server final : public ServerInterface, private GrpcLibraryCodegen {
/// the \a sync_server_cqs) /// the \a sync_server_cqs)
std::vector<std::unique_ptr<SyncRequestThreadManager>> sync_req_mgrs_; std::vector<std::unique_ptr<SyncRequestThreadManager>> sync_req_mgrs_;
// Sever status // Server status
std::mutex mu_; std::mutex mu_;
bool started_; bool started_;
bool shutdown_; bool shutdown_;

@ -52,7 +52,7 @@ class ServerBuilderPluginTest;
class ServerBuilder { class ServerBuilder {
public: public:
ServerBuilder(); ServerBuilder();
~ServerBuilder(); virtual ~ServerBuilder();
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// Primary API's // Primary API's
@ -65,7 +65,7 @@ class ServerBuilder {
/// traffic (via AddListeningPort) /// traffic (via AddListeningPort)
/// 3. [for async api only] completion queues have been added via /// 3. [for async api only] completion queues have been added via
/// AddCompletionQueue /// AddCompletionQueue
std::unique_ptr<Server> BuildAndStart(); virtual std::unique_ptr<Server> BuildAndStart();
/// Register a service. This call does not take ownership of the service. /// Register a service. This call does not take ownership of the service.
/// The service must exist for the lifetime of the \a Server instance returned /// The service must exist for the lifetime of the \a Server instance returned
@ -210,15 +210,48 @@ class ServerBuilder {
/// doc/workarounds.md. /// doc/workarounds.md.
ServerBuilder& EnableWorkaround(grpc_workaround_list id); ServerBuilder& EnableWorkaround(grpc_workaround_list id);
private: protected:
friend class ::grpc::testing::ServerBuilderPluginTest; /// Experimental, to be deprecated
struct Port { struct Port {
grpc::string addr; grpc::string addr;
std::shared_ptr<ServerCredentials> creds; std::shared_ptr<ServerCredentials> creds;
int* selected_port; int* selected_port;
}; };
/// Experimental, to be deprecated
typedef std::unique_ptr<grpc::string> HostString;
struct NamedService {
explicit NamedService(Service* s) : service(s) {}
NamedService(const grpc::string& h, Service* s)
: host(new grpc::string(h)), service(s) {}
HostString host;
Service* service;
};
/// Experimental, to be deprecated
std::vector<Port> ports() { return ports_; }
/// Experimental, to be deprecated
std::vector<NamedService*> services() {
std::vector<NamedService*> service_refs;
for (auto& ptr : services_) {
service_refs.push_back(ptr.get());
}
return service_refs;
}
/// Experimental, to be deprecated
std::vector<ServerBuilderOption*> options() {
std::vector<ServerBuilderOption*> option_refs;
for (auto& ptr : options_) {
option_refs.push_back(ptr.get());
}
return option_refs;
}
private:
friend class ::grpc::testing::ServerBuilderPluginTest;
struct SyncServerSettings { struct SyncServerSettings {
SyncServerSettings() SyncServerSettings()
: num_cqs(1), min_pollers(1), max_pollers(2), cq_timeout_msec(10000) {} : num_cqs(1), min_pollers(1), max_pollers(2), cq_timeout_msec(10000) {}
@ -238,15 +271,6 @@ class ServerBuilder {
int cq_timeout_msec; int cq_timeout_msec;
}; };
typedef std::unique_ptr<grpc::string> HostString;
struct NamedService {
explicit NamedService(Service* s) : service(s) {}
NamedService(const grpc::string& h, Service* s)
: host(new grpc::string(h)), service(s) {}
HostString host;
Service* service;
};
int max_receive_message_size_; int max_receive_message_size_;
int max_send_message_size_; int max_send_message_size_;
std::vector<std::unique_ptr<ServerBuilderOption>> options_; std::vector<std::unique_ptr<ServerBuilderOption>> options_;

@ -281,6 +281,8 @@
<file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session_cache.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_types.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl_types.h" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_grpc.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security_grpc.h" role="src" />
@ -330,9 +332,9 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/gethostname.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/gethostname.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_internal.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_internal.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_uv.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/is_epollexclusive_available.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/is_epollexclusive_available.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/load_file.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/load_file.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/lockfree_event.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/lockfree_event.h" role="src" />
@ -340,14 +342,17 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/network_status_tracker.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/network_status_tracker.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_uv.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/port.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/port.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resource_quota.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resource_quota.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_windows.h" role="src" />
@ -359,17 +364,16 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/sys_epoll_wrapper.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sys_epoll_wrapper.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_generic.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_custom.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_manager.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_manager.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_uv.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/udp_server.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/udp_server.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/unix_sockets_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_cv.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/wakeup_fd_cv.h" role="src" />
@ -473,6 +477,8 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/gethostname_sysconf.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/gethostname_sysconf.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iocp_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_internal.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_posix.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_uv.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/iomgr_windows.cc" role="src" />
@ -481,12 +487,16 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/lockfree_event.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/lockfree_event.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/network_status_tracker.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/network_status_tracker.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/polling_entity.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_uv.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_set_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_uv.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/pollset_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_posix.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_posix.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resolve_address_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/resource_quota.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/resource_quota.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/sockaddr_utils.cc" role="src" />
@ -498,19 +508,24 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_uv.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_utils_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/socket_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_posix.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_posix.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_common.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_common.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_custom.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_generic.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_generic.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_heap.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/timer_manager.cc" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/timer_manager.cc" role="src" />
@ -684,6 +699,9 @@
<file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/filters/deadline/deadline_filter.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/alts_transport_security.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/alts_transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/fake_transport_security.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session_cache.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl/session_cache/ssl_session_openssl.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.cc" role="src" />
<file baseinstalldir="/" name="src/core/tsi/transport_security_grpc.cc" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security_grpc.cc" role="src" />
<file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/chttp2_server.cc" role="src" /> <file baseinstalldir="/" name="src/core/ext/transport/chttp2/server/chttp2_server.cc" role="src" />

@ -23,7 +23,6 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include "src/core/lib/channel/channel_stack.h" #include "src/core/lib/channel/channel_stack.h"
#include "src/core/lib/iomgr/exec_ctx.h"
/* Start polling \a interested_parties periodically in the timer thread */ /* Start polling \a interested_parties periodically in the timer thread */
void grpc_client_channel_start_backup_polling( void grpc_client_channel_start_backup_polling(

@ -798,7 +798,8 @@ typedef struct {
grpc_linked_mdelem* send_initial_metadata_storage; grpc_linked_mdelem* send_initial_metadata_storage;
grpc_metadata_batch send_initial_metadata; grpc_metadata_batch send_initial_metadata;
// For send_message. // For send_message.
grpc_caching_byte_stream send_message; grpc_core::ManualConstructor<grpc_core::ByteStreamCache::CachingByteStream>
send_message;
// For send_trailing_metadata. // For send_trailing_metadata.
grpc_linked_mdelem* send_trailing_metadata_storage; grpc_linked_mdelem* send_trailing_metadata_storage;
grpc_metadata_batch send_trailing_metadata; grpc_metadata_batch send_trailing_metadata;
@ -808,7 +809,7 @@ typedef struct {
bool trailing_metadata_available; bool trailing_metadata_available;
// For intercepting recv_message. // For intercepting recv_message.
grpc_closure recv_message_ready; grpc_closure recv_message_ready;
grpc_byte_stream* recv_message; grpc_core::OrphanablePtr<grpc_core::ByteStream> recv_message;
// For intercepting recv_trailing_metadata. // For intercepting recv_trailing_metadata.
grpc_metadata_batch recv_trailing_metadata; grpc_metadata_batch recv_trailing_metadata;
grpc_transport_stream_stats collect_stats; grpc_transport_stream_stats collect_stats;
@ -914,12 +915,12 @@ typedef struct client_channel_call_data {
gpr_atm* peer_string; gpr_atm* peer_string;
// send_message // send_message
// When we get a send_message op, we replace the original byte stream // When we get a send_message op, we replace the original byte stream
// with a grpc_caching_byte_stream that caches the slices to a // with a CachingByteStream that caches the slices to a local buffer for
// local buffer for use in retries. // use in retries.
// Note: We inline the cache for the first 3 send_message ops and use // Note: We inline the cache for the first 3 send_message ops and use
// dynamic allocation after that. This number was essentially picked // dynamic allocation after that. This number was essentially picked
// at random; it could be changed in the future to tune performance. // at random; it could be changed in the future to tune performance.
grpc_core::InlinedVector<grpc_byte_stream_cache*, 3> send_messages; grpc_core::InlinedVector<grpc_core::ByteStreamCache*, 3> send_messages;
// send_trailing_metadata // send_trailing_metadata
bool seen_send_trailing_metadata; bool seen_send_trailing_metadata;
grpc_linked_mdelem* send_trailing_metadata_storage; grpc_linked_mdelem* send_trailing_metadata_storage;
@ -964,10 +965,11 @@ static void maybe_cache_send_ops_for_batch(call_data* calld,
} }
// Set up cache for send_message ops. // Set up cache for send_message ops.
if (batch->send_message) { if (batch->send_message) {
grpc_byte_stream_cache* cache = (grpc_byte_stream_cache*)gpr_arena_alloc( grpc_core::ByteStreamCache* cache =
calld->arena, sizeof(grpc_byte_stream_cache)); static_cast<grpc_core::ByteStreamCache*>(
grpc_byte_stream_cache_init(cache, gpr_arena_alloc(calld->arena, sizeof(grpc_core::ByteStreamCache)));
batch->payload->send_message.send_message); new (cache) grpc_core::ByteStreamCache(
std::move(batch->payload->send_message.send_message));
calld->send_messages.push_back(cache); calld->send_messages.push_back(cache);
} }
// Save metadata batch for send_trailing_metadata ops. // Save metadata batch for send_trailing_metadata ops.
@ -1002,7 +1004,7 @@ static void free_cached_send_op_data_after_commit(
"]", "]",
chand, calld, i); chand, calld, i);
} }
grpc_byte_stream_cache_destroy(calld->send_messages[i]); calld->send_messages[i]->Destroy();
} }
if (retry_state->completed_send_trailing_metadata) { if (retry_state->completed_send_trailing_metadata) {
grpc_metadata_batch_destroy(&calld->send_trailing_metadata); grpc_metadata_batch_destroy(&calld->send_trailing_metadata);
@ -1026,8 +1028,8 @@ static void free_cached_send_op_data_for_completed_batch(
"]", "]",
chand, calld, retry_state->completed_send_message_count - 1); chand, calld, retry_state->completed_send_message_count - 1);
} }
grpc_byte_stream_cache_destroy( calld->send_messages[retry_state->completed_send_message_count - 1]
calld->send_messages[retry_state->completed_send_message_count - 1]); ->Destroy();
} }
if (batch_data->batch.send_trailing_metadata) { if (batch_data->batch.send_trailing_metadata) {
grpc_metadata_batch_destroy(&calld->send_trailing_metadata); grpc_metadata_batch_destroy(&calld->send_trailing_metadata);
@ -1079,7 +1081,7 @@ static void pending_batches_add(grpc_call_element* elem,
if (batch->send_message) { if (batch->send_message) {
calld->pending_send_message = true; calld->pending_send_message = true;
calld->bytes_buffered_for_retry += calld->bytes_buffered_for_retry +=
batch->payload->send_message.send_message->length; batch->payload->send_message.send_message->length();
} }
if (batch->send_trailing_metadata) { if (batch->send_trailing_metadata) {
calld->pending_send_trailing_metadata = true; calld->pending_send_trailing_metadata = true;
@ -1680,7 +1682,7 @@ static void invoke_recv_message_callback(void* arg, grpc_error* error) {
GPR_ASSERT(pending != nullptr); GPR_ASSERT(pending != nullptr);
// Return payload. // Return payload.
*pending->batch->payload->recv_message.recv_message = *pending->batch->payload->recv_message.recv_message =
batch_data->recv_message; std::move(batch_data->recv_message);
// Update bookkeeping. // Update bookkeeping.
// Note: Need to do this before invoking the callback, since invoking // Note: Need to do this before invoking the callback, since invoking
// the callback will result in yielding the call combiner. // the callback will result in yielding the call combiner.
@ -2124,13 +2126,13 @@ static void add_retriable_send_message_op(
"chand=%p calld=%p: starting calld->send_messages[%" PRIuPTR "]", "chand=%p calld=%p: starting calld->send_messages[%" PRIuPTR "]",
chand, calld, retry_state->started_send_message_count); chand, calld, retry_state->started_send_message_count);
} }
grpc_byte_stream_cache* cache = grpc_core::ByteStreamCache* cache =
calld->send_messages[retry_state->started_send_message_count]; calld->send_messages[retry_state->started_send_message_count];
++retry_state->started_send_message_count; ++retry_state->started_send_message_count;
grpc_caching_byte_stream_init(&batch_data->send_message, cache); batch_data->send_message.Init(cache);
batch_data->batch.send_message = true; batch_data->batch.send_message = true;
batch_data->batch.payload->send_message.send_message = batch_data->batch.payload->send_message.send_message.reset(
&batch_data->send_message.base; batch_data->send_message.get());
} }
// Adds retriable send_trailing_metadata op to batch_data. // Adds retriable send_trailing_metadata op to batch_data.

@ -61,6 +61,7 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/socket_utils.h"
#include <inttypes.h> #include <inttypes.h>
#include <limits.h> #include <limits.h>
@ -417,20 +418,20 @@ void ParseServer(const grpc_grpclb_server* server,
grpc_resolved_address* addr) { grpc_resolved_address* addr) {
memset(addr, 0, sizeof(*addr)); memset(addr, 0, sizeof(*addr));
if (server->drop) return; if (server->drop) return;
const uint16_t netorder_port = htons((uint16_t)server->port); const uint16_t netorder_port = grpc_htons((uint16_t)server->port);
/* the addresses are given in binary format (a in(6)_addr struct) in /* the addresses are given in binary format (a in(6)_addr struct) in
* server->ip_address.bytes. */ * server->ip_address.bytes. */
const grpc_grpclb_ip_address* ip = &server->ip_address; const grpc_grpclb_ip_address* ip = &server->ip_address;
if (ip->size == 4) { if (ip->size == 4) {
addr->len = sizeof(struct sockaddr_in); addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
struct sockaddr_in* addr4 = (struct sockaddr_in*)&addr->addr; grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(&addr->addr);
addr4->sin_family = AF_INET; addr4->sin_family = GRPC_AF_INET;
memcpy(&addr4->sin_addr, ip->bytes, ip->size); memcpy(&addr4->sin_addr, ip->bytes, ip->size);
addr4->sin_port = netorder_port; addr4->sin_port = netorder_port;
} else if (ip->size == 16) { } else if (ip->size == 16) {
addr->len = sizeof(struct sockaddr_in6); addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
struct sockaddr_in6* addr6 = (struct sockaddr_in6*)&addr->addr; grpc_sockaddr_in6* addr6 = (grpc_sockaddr_in6*)&addr->addr;
addr6->sin6_family = AF_INET6; addr6->sin6_family = GRPC_AF_INET6;
memcpy(&addr6->sin6_addr, ip->bytes, ip->size); memcpy(&addr6->sin6_addr, ip->bytes, ip->size);
addr6->sin6_port = netorder_port; addr6->sin6_port = netorder_port;
} }

@ -66,7 +66,7 @@ void grpc_lb_addresses_set_address(grpc_lb_addresses* addresses, size_t index,
if (user_data != nullptr) GPR_ASSERT(addresses->user_data_vtable != nullptr); if (user_data != nullptr) GPR_ASSERT(addresses->user_data_vtable != nullptr);
grpc_lb_address* target = &addresses->addresses[index]; grpc_lb_address* target = &addresses->addresses[index];
memcpy(target->address.addr, address, address_len); memcpy(target->address.addr, address, address_len);
target->address.len = address_len; target->address.len = static_cast<socklen_t>(address_len);
target->is_balancer = is_balancer; target->is_balancer = is_balancer;
target->balancer_name = gpr_strdup(balancer_name); target->balancer_name = gpr_strdup(balancer_name);
target->user_data = user_data; target->user_data = user_data;

@ -21,7 +21,6 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/ext/filters/client_channel/client_channel_factory.h" #include "src/core/ext/filters/client_channel/client_channel_factory.h"

@ -24,7 +24,6 @@
#include "src/core/ext/filters/client_channel/lb_policy_factory.h" #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
#include "src/core/lib/gprpp/memory.h" #include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/gprpp/orphanable.h" #include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/iomgr/exec_ctx.h"
namespace grpc_core { namespace grpc_core {

@ -20,6 +20,7 @@
#include "src/core/ext/filters/client_channel/parse_address.h" #include "src/core/ext/filters/client_channel/parse_address.h"
#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/socket_utils.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -49,7 +50,7 @@ bool grpc_parse_unix(const grpc_uri* uri,
if (path_len == maxlen) return false; if (path_len == maxlen) return false;
un->sun_family = AF_UNIX; un->sun_family = AF_UNIX;
strcpy(un->sun_path, uri->path); strcpy(un->sun_path, uri->path);
resolved_addr->len = sizeof(*un); resolved_addr->len = static_cast<socklen_t>(sizeof(*un));
return true; return true;
} }
@ -71,10 +72,10 @@ bool grpc_parse_ipv4_hostport(const char* hostport, grpc_resolved_address* addr,
if (!gpr_split_host_port(hostport, &host, &port)) return false; if (!gpr_split_host_port(hostport, &host, &port)) return false;
// Parse IP address. // Parse IP address.
memset(addr, 0, sizeof(*addr)); memset(addr, 0, sizeof(*addr));
addr->len = sizeof(struct sockaddr_in); addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
struct sockaddr_in* in = reinterpret_cast<struct sockaddr_in*>(addr->addr); grpc_sockaddr_in* in = reinterpret_cast<grpc_sockaddr_in*>(addr->addr);
in->sin_family = AF_INET; in->sin_family = GRPC_AF_INET;
if (inet_pton(AF_INET, host, &in->sin_addr) == 0) { if (grpc_inet_pton(GRPC_AF_INET, host, &in->sin_addr) == 0) {
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host); if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 address: '%s'", host);
goto done; goto done;
} }
@ -88,7 +89,7 @@ bool grpc_parse_ipv4_hostport(const char* hostport, grpc_resolved_address* addr,
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 port: '%s'", port); if (log_errors) gpr_log(GPR_ERROR, "invalid ipv4 port: '%s'", port);
goto done; goto done;
} }
in->sin_port = htons(static_cast<uint16_t>(port_num)); in->sin_port = grpc_htons(static_cast<uint16_t>(port_num));
success = true; success = true;
done: done:
gpr_free(host); gpr_free(host);
@ -117,19 +118,20 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
if (!gpr_split_host_port(hostport, &host, &port)) return false; if (!gpr_split_host_port(hostport, &host, &port)) return false;
// Parse IP address. // Parse IP address.
memset(addr, 0, sizeof(*addr)); memset(addr, 0, sizeof(*addr));
addr->len = sizeof(struct sockaddr_in6); addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
struct sockaddr_in6* in6 = reinterpret_cast<struct sockaddr_in6*>(addr->addr); grpc_sockaddr_in6* in6 = reinterpret_cast<grpc_sockaddr_in6*>(addr->addr);
in6->sin6_family = AF_INET6; in6->sin6_family = GRPC_AF_INET6;
// Handle the RFC6874 syntax for IPv6 zone identifiers. // Handle the RFC6874 syntax for IPv6 zone identifiers.
char* host_end = static_cast<char*>(gpr_memrchr(host, '%', strlen(host))); char* host_end = static_cast<char*>(gpr_memrchr(host, '%', strlen(host)));
if (host_end != nullptr) { if (host_end != nullptr) {
GPR_ASSERT(host_end >= host); GPR_ASSERT(host_end >= host);
char host_without_scope[INET6_ADDRSTRLEN]; char host_without_scope[GRPC_INET6_ADDRSTRLEN];
size_t host_without_scope_len = static_cast<size_t>(host_end - host); size_t host_without_scope_len = static_cast<size_t>(host_end - host);
uint32_t sin6_scope_id = 0; uint32_t sin6_scope_id = 0;
strncpy(host_without_scope, host, host_without_scope_len); strncpy(host_without_scope, host, host_without_scope_len);
host_without_scope[host_without_scope_len] = '\0'; host_without_scope[host_without_scope_len] = '\0';
if (inet_pton(AF_INET6, host_without_scope, &in6->sin6_addr) == 0) { if (grpc_inet_pton(GRPC_AF_INET6, host_without_scope, &in6->sin6_addr) ==
0) {
gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host_without_scope); gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host_without_scope);
goto done; goto done;
} }
@ -142,7 +144,7 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
// Handle "sin6_scope_id" being type "u_long". See grpc issue #10027. // Handle "sin6_scope_id" being type "u_long". See grpc issue #10027.
in6->sin6_scope_id = sin6_scope_id; in6->sin6_scope_id = sin6_scope_id;
} else { } else {
if (inet_pton(AF_INET6, host, &in6->sin6_addr) == 0) { if (grpc_inet_pton(GRPC_AF_INET6, host, &in6->sin6_addr) == 0) {
gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host); gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host);
goto done; goto done;
} }
@ -157,7 +159,7 @@ bool grpc_parse_ipv6_hostport(const char* hostport, grpc_resolved_address* addr,
if (log_errors) gpr_log(GPR_ERROR, "invalid ipv6 port: '%s'", port); if (log_errors) gpr_log(GPR_ERROR, "invalid ipv6 port: '%s'", port);
goto done; goto done;
} }
in6->sin6_port = htons(static_cast<uint16_t>(port_num)); in6->sin6_port = grpc_htons(static_cast<uint16_t>(port_num));
success = true; success = true;
done: done:
gpr_free(host); gpr_free(host);

@ -440,6 +440,19 @@ class AresDnsResolverFactory : public ResolverFactory {
} // namespace grpc_core } // namespace grpc_core
extern grpc_address_resolver_vtable* grpc_resolve_address_impl;
static grpc_address_resolver_vtable* default_resolver;
static grpc_error* blocking_resolve_address_ares(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) {
return default_resolver->blocking_resolve_address(name, default_port,
addresses);
}
static grpc_address_resolver_vtable ares_resolver = {
grpc_resolve_address_ares, blocking_resolve_address_ares};
void grpc_resolver_dns_ares_init() { void grpc_resolver_dns_ares_init() {
char* resolver_env = gpr_getenv("GRPC_DNS_RESOLVER"); char* resolver_env = gpr_getenv("GRPC_DNS_RESOLVER");
/* TODO(zyc): Turn on c-ares based resolver by default after the address /* TODO(zyc): Turn on c-ares based resolver by default after the address
@ -450,7 +463,8 @@ void grpc_resolver_dns_ares_init() {
GRPC_LOG_IF_ERROR("ares_library_init() failed", error); GRPC_LOG_IF_ERROR("ares_library_init() failed", error);
return; return;
} }
grpc_resolve_address = grpc_resolve_address_ares; default_resolver = grpc_resolve_address_impl;
grpc_set_resolver_impl(&ares_resolver);
grpc_core::ResolverRegistry::Builder::RegisterResolverFactory( grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
grpc_core::UniquePtr<grpc_core::ResolverFactory>( grpc_core::UniquePtr<grpc_core::ResolverFactory>(
grpc_core::New<grpc_core::AresDnsResolverFactory>())); grpc_core::New<grpc_core::AresDnsResolverFactory>()));

@ -22,7 +22,6 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <ares.h> #include <ares.h>
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/pollset_set.h"
typedef struct grpc_ares_ev_driver grpc_ares_ev_driver; typedef struct grpc_ares_ev_driver grpc_ares_ev_driver;

@ -22,7 +22,6 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "src/core/ext/filters/client_channel/lb_policy_factory.h" #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr.h" #include "src/core/lib/iomgr/iomgr.h"
#include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/resolve_address.h"

@ -22,7 +22,6 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <stddef.h> #include <stddef.h>
#include "src/core/lib/iomgr/exec_ctx.h"
typedef struct { typedef struct {
char* scheme; char* scheme;

@ -27,7 +27,6 @@
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include "src/core/lib/channel/channel_stack_builder.h" #include "src/core/lib/channel/channel_stack_builder.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/timer.h" #include "src/core/lib/iomgr/timer.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/surface/channel_init.h" #include "src/core/lib/surface/channel_init.h"

@ -20,9 +20,11 @@
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/string_util.h> #include <grpc/support/string_util.h>
#include <stdint.h>
#include <string.h> #include <string.h>
#include "src/core/ext/filters/http/client/http_client_filter.h" #include "src/core/ext/filters/http/client/http_client_filter.h"
#include "src/core/lib/gpr/string.h" #include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/profiling/timers.h" #include "src/core/lib/profiling/timers.h"
#include "src/core/lib/slice/b64.h" #include "src/core/lib/slice/b64.h"
#include "src/core/lib/slice/percent_encoding.h" #include "src/core/lib/slice/percent_encoding.h"
@ -58,8 +60,9 @@ struct call_data {
// State for handling send_message ops. // State for handling send_message ops.
grpc_transport_stream_op_batch* send_message_batch; grpc_transport_stream_op_batch* send_message_batch;
size_t send_message_bytes_read; size_t send_message_bytes_read;
grpc_byte_stream_cache send_message_cache; grpc_core::ManualConstructor<grpc_core::ByteStreamCache> send_message_cache;
grpc_caching_byte_stream send_message_caching_stream; grpc_core::ManualConstructor<grpc_core::ByteStreamCache::CachingByteStream>
send_message_caching_stream;
grpc_closure on_send_message_next_done; grpc_closure on_send_message_next_done;
grpc_closure* original_send_message_on_complete; grpc_closure* original_send_message_on_complete;
grpc_closure send_message_on_complete; grpc_closure send_message_on_complete;
@ -166,7 +169,7 @@ static void recv_trailing_metadata_on_complete(void* user_data,
static void send_message_on_complete(void* arg, grpc_error* error) { static void send_message_on_complete(void* arg, grpc_error* error) {
grpc_call_element* elem = static_cast<grpc_call_element*>(arg); grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
grpc_byte_stream_cache_destroy(&calld->send_message_cache); calld->send_message_cache.Destroy();
GRPC_CLOSURE_RUN(calld->original_send_message_on_complete, GRPC_CLOSURE_RUN(calld->original_send_message_on_complete,
GRPC_ERROR_REF(error)); GRPC_ERROR_REF(error));
} }
@ -175,8 +178,7 @@ static void send_message_on_complete(void* arg, grpc_error* error) {
// calld->send_message_bytes_read. // calld->send_message_bytes_read.
static grpc_error* pull_slice_from_send_message(call_data* calld) { static grpc_error* pull_slice_from_send_message(call_data* calld) {
grpc_slice incoming_slice; grpc_slice incoming_slice;
grpc_error* error = grpc_byte_stream_pull( grpc_error* error = calld->send_message_caching_stream->Pull(&incoming_slice);
&calld->send_message_caching_stream.base, &incoming_slice);
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
calld->send_message_bytes_read += GRPC_SLICE_LENGTH(incoming_slice); calld->send_message_bytes_read += GRPC_SLICE_LENGTH(incoming_slice);
grpc_slice_unref_internal(incoming_slice); grpc_slice_unref_internal(incoming_slice);
@ -186,24 +188,23 @@ static grpc_error* pull_slice_from_send_message(call_data* calld) {
// Reads as many slices as possible from the send_message byte stream. // Reads as many slices as possible from the send_message byte stream.
// Upon successful return, if calld->send_message_bytes_read == // Upon successful return, if calld->send_message_bytes_read ==
// calld->send_message_caching_stream.base.length, then we have completed // calld->send_message_caching_stream->length(), then we have completed
// reading from the byte stream; otherwise, an async read has been dispatched // reading from the byte stream; otherwise, an async read has been dispatched
// and on_send_message_next_done() will be invoked when it is complete. // and on_send_message_next_done() will be invoked when it is complete.
static grpc_error* read_all_available_send_message_data(call_data* calld) { static grpc_error* read_all_available_send_message_data(call_data* calld) {
while (grpc_byte_stream_next(&calld->send_message_caching_stream.base, while (calld->send_message_caching_stream->Next(
~static_cast<size_t>(0), SIZE_MAX, &calld->on_send_message_next_done)) {
&calld->on_send_message_next_done)) {
grpc_error* error = pull_slice_from_send_message(calld); grpc_error* error = pull_slice_from_send_message(calld);
if (error != GRPC_ERROR_NONE) return error; if (error != GRPC_ERROR_NONE) return error;
if (calld->send_message_bytes_read == if (calld->send_message_bytes_read ==
calld->send_message_caching_stream.base.length) { calld->send_message_caching_stream->length()) {
break; break;
} }
} }
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
// Async callback for grpc_byte_stream_next(). // Async callback for ByteStream::Next().
static void on_send_message_next_done(void* arg, grpc_error* error) { static void on_send_message_next_done(void* arg, grpc_error* error) {
grpc_call_element* elem = static_cast<grpc_call_element*>(arg); grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
@ -222,7 +223,7 @@ static void on_send_message_next_done(void* arg, grpc_error* error) {
// here, then we know that all of the data was not available // here, then we know that all of the data was not available
// synchronously, so we were not able to do a cached call. Instead, // synchronously, so we were not able to do a cached call. Instead,
// we just reset the byte stream and then send down the batch as-is. // we just reset the byte stream and then send down the batch as-is.
grpc_caching_byte_stream_reset(&calld->send_message_caching_stream); calld->send_message_caching_stream->Reset();
grpc_call_next_op(elem, calld->send_message_batch); grpc_call_next_op(elem, calld->send_message_batch);
} }
@ -253,7 +254,7 @@ static grpc_error* update_path_for_get(grpc_call_element* elem,
size_t estimated_len = GRPC_SLICE_LENGTH(path_slice); size_t estimated_len = GRPC_SLICE_LENGTH(path_slice);
estimated_len++; /* for the '?' */ estimated_len++; /* for the '?' */
estimated_len += grpc_base64_estimate_encoded_size( estimated_len += grpc_base64_estimate_encoded_size(
batch->payload->send_message.send_message->length, true /* url_safe */, batch->payload->send_message.send_message->length(), true /* url_safe */,
false /* multi_line */); false /* multi_line */);
grpc_slice path_with_query_slice = GRPC_SLICE_MALLOC(estimated_len); grpc_slice path_with_query_slice = GRPC_SLICE_MALLOC(estimated_len);
/* memcopy individual pieces into this slice */ /* memcopy individual pieces into this slice */
@ -265,9 +266,9 @@ static grpc_error* update_path_for_get(grpc_call_element* elem,
write_ptr += GRPC_SLICE_LENGTH(path_slice); write_ptr += GRPC_SLICE_LENGTH(path_slice);
*write_ptr++ = '?'; *write_ptr++ = '?';
char* payload_bytes = char* payload_bytes =
slice_buffer_to_string(&calld->send_message_cache.cache_buffer); slice_buffer_to_string(calld->send_message_cache->cache_buffer());
grpc_base64_encode_core(write_ptr, payload_bytes, grpc_base64_encode_core(write_ptr, payload_bytes,
batch->payload->send_message.send_message->length, batch->payload->send_message.send_message->length(),
true /* url_safe */, false /* multi_line */); true /* url_safe */, false /* multi_line */);
gpr_free(payload_bytes); gpr_free(payload_bytes);
/* remove trailing unused memory and add trailing 0 to terminate string */ /* remove trailing unused memory and add trailing 0 to terminate string */
@ -326,15 +327,14 @@ static void hc_start_transport_stream_op_batch(
if (batch->send_message && if (batch->send_message &&
(batch->payload->send_initial_metadata.send_initial_metadata_flags & (batch->payload->send_initial_metadata.send_initial_metadata_flags &
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) && GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) &&
batch->payload->send_message.send_message->length < batch->payload->send_message.send_message->length() <
channeld->max_payload_size_for_get) { channeld->max_payload_size_for_get) {
calld->send_message_bytes_read = 0; calld->send_message_bytes_read = 0;
grpc_byte_stream_cache_init(&calld->send_message_cache, calld->send_message_cache.Init(
batch->payload->send_message.send_message); std::move(batch->payload->send_message.send_message));
grpc_caching_byte_stream_init(&calld->send_message_caching_stream, calld->send_message_caching_stream.Init(calld->send_message_cache.get());
&calld->send_message_cache); batch->payload->send_message.send_message.reset(
batch->payload->send_message.send_message = calld->send_message_caching_stream.get());
&calld->send_message_caching_stream.base;
calld->original_send_message_on_complete = batch->on_complete; calld->original_send_message_on_complete = batch->on_complete;
batch->on_complete = &calld->send_message_on_complete; batch->on_complete = &calld->send_message_on_complete;
calld->send_message_batch = batch; calld->send_message_batch = batch;
@ -342,12 +342,12 @@ static void hc_start_transport_stream_op_batch(
if (error != GRPC_ERROR_NONE) goto done; if (error != GRPC_ERROR_NONE) goto done;
// If all the data has been read, then we can use GET. // If all the data has been read, then we can use GET.
if (calld->send_message_bytes_read == if (calld->send_message_bytes_read ==
calld->send_message_caching_stream.base.length) { calld->send_message_caching_stream->length()) {
method = GRPC_MDELEM_METHOD_GET; method = GRPC_MDELEM_METHOD_GET;
error = update_path_for_get(elem, batch); error = update_path_for_get(elem, batch);
if (error != GRPC_ERROR_NONE) goto done; if (error != GRPC_ERROR_NONE) goto done;
batch->send_message = false; batch->send_message = false;
grpc_byte_stream_destroy(&calld->send_message_caching_stream.base); calld->send_message_caching_stream->Orphan();
} else { } else {
// Not all data is available. The batch will be sent down // Not all data is available. The batch will be sent down
// asynchronously in on_send_message_next_done(). // asynchronously in on_send_message_next_done().

@ -32,6 +32,7 @@
#include "src/core/lib/compression/compression_internal.h" #include "src/core/lib/compression/compression_internal.h"
#include "src/core/lib/compression/message_compress.h" #include "src/core/lib/compression/message_compress.h"
#include "src/core/lib/gpr/string.h" #include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/profiling/timers.h" #include "src/core/lib/profiling/timers.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/slice/slice_string_helpers.h" #include "src/core/lib/slice/slice_string_helpers.h"
@ -62,7 +63,8 @@ struct call_data {
grpc_closure start_send_message_batch_in_call_combiner; grpc_closure start_send_message_batch_in_call_combiner;
grpc_transport_stream_op_batch* send_message_batch; grpc_transport_stream_op_batch* send_message_batch;
grpc_slice_buffer slices; /**< Buffers up input slices to be compressed */ grpc_slice_buffer slices; /**< Buffers up input slices to be compressed */
grpc_slice_buffer_stream replacement_stream; grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream>
replacement_stream;
grpc_closure* original_send_message_on_complete; grpc_closure* original_send_message_on_complete;
grpc_closure send_message_on_complete; grpc_closure send_message_on_complete;
grpc_closure on_send_message_next_done; grpc_closure on_send_message_next_done;
@ -220,7 +222,7 @@ static void finish_send_message(grpc_call_element* elem) {
grpc_slice_buffer tmp; grpc_slice_buffer tmp;
grpc_slice_buffer_init(&tmp); grpc_slice_buffer_init(&tmp);
uint32_t send_flags = uint32_t send_flags =
calld->send_message_batch->payload->send_message.send_message->flags; calld->send_message_batch->payload->send_message.send_message->flags();
bool did_compress = grpc_msg_compress(calld->message_compression_algorithm, bool did_compress = grpc_msg_compress(calld->message_compression_algorithm,
&calld->slices, &tmp); &calld->slices, &tmp);
if (did_compress) { if (did_compress) {
@ -253,12 +255,9 @@ static void finish_send_message(grpc_call_element* elem) {
grpc_slice_buffer_destroy_internal(&tmp); grpc_slice_buffer_destroy_internal(&tmp);
// Swap out the original byte stream with our new one and send the // Swap out the original byte stream with our new one and send the
// batch down. // batch down.
grpc_byte_stream_destroy( calld->replacement_stream.Init(&calld->slices, send_flags);
calld->send_message_batch->payload->send_message.send_message); calld->send_message_batch->payload->send_message.send_message.reset(
grpc_slice_buffer_stream_init(&calld->replacement_stream, &calld->slices, calld->replacement_stream.get());
send_flags);
calld->send_message_batch->payload->send_message.send_message =
&calld->replacement_stream.base;
calld->original_send_message_on_complete = calld->original_send_message_on_complete =
calld->send_message_batch->on_complete; calld->send_message_batch->on_complete;
calld->send_message_batch->on_complete = &calld->send_message_on_complete; calld->send_message_batch->on_complete = &calld->send_message_on_complete;
@ -278,9 +277,9 @@ static void fail_send_message_batch_in_call_combiner(void* arg,
// Pulls a slice from the send_message byte stream and adds it to calld->slices. // Pulls a slice from the send_message byte stream and adds it to calld->slices.
static grpc_error* pull_slice_from_send_message(call_data* calld) { static grpc_error* pull_slice_from_send_message(call_data* calld) {
grpc_slice incoming_slice; grpc_slice incoming_slice;
grpc_error* error = grpc_byte_stream_pull( grpc_error* error =
calld->send_message_batch->payload->send_message.send_message, calld->send_message_batch->payload->send_message.send_message->Pull(
&incoming_slice); &incoming_slice);
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
grpc_slice_buffer_add(&calld->slices, incoming_slice); grpc_slice_buffer_add(&calld->slices, incoming_slice);
} }
@ -289,12 +288,11 @@ static grpc_error* pull_slice_from_send_message(call_data* calld) {
// Reads as many slices as possible from the send_message byte stream. // Reads as many slices as possible from the send_message byte stream.
// If all data has been read, invokes finish_send_message(). Otherwise, // If all data has been read, invokes finish_send_message(). Otherwise,
// an async call to grpc_byte_stream_next() has been started, which will // an async call to ByteStream::Next() has been started, which will
// eventually result in calling on_send_message_next_done(). // eventually result in calling on_send_message_next_done().
static void continue_reading_send_message(grpc_call_element* elem) { static void continue_reading_send_message(grpc_call_element* elem) {
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
while (grpc_byte_stream_next( while (calld->send_message_batch->payload->send_message.send_message->Next(
calld->send_message_batch->payload->send_message.send_message,
~static_cast<size_t>(0), &calld->on_send_message_next_done)) { ~static_cast<size_t>(0), &calld->on_send_message_next_done)) {
grpc_error* error = pull_slice_from_send_message(calld); grpc_error* error = pull_slice_from_send_message(calld);
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
@ -303,15 +301,15 @@ static void continue_reading_send_message(grpc_call_element* elem) {
GRPC_ERROR_UNREF(error); GRPC_ERROR_UNREF(error);
return; return;
} }
if (calld->slices.length == if (calld->slices.length == calld->send_message_batch->payload->send_message
calld->send_message_batch->payload->send_message.send_message->length) { .send_message->length()) {
finish_send_message(elem); finish_send_message(elem);
break; break;
} }
} }
} }
// Async callback for grpc_byte_stream_next(). // Async callback for ByteStream::Next().
static void on_send_message_next_done(void* arg, grpc_error* error) { static void on_send_message_next_done(void* arg, grpc_error* error) {
grpc_call_element* elem = static_cast<grpc_call_element*>(arg); grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
@ -328,7 +326,7 @@ static void on_send_message_next_done(void* arg, grpc_error* error) {
return; return;
} }
if (calld->slices.length == if (calld->slices.length ==
calld->send_message_batch->payload->send_message.send_message->length) { calld->send_message_batch->payload->send_message.send_message->length()) {
finish_send_message(elem); finish_send_message(elem);
} else { } else {
continue_reading_send_message(elem); continue_reading_send_message(elem);
@ -340,7 +338,8 @@ static void start_send_message_batch(void* arg, grpc_error* unused) {
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
if (skip_compression( if (skip_compression(
elem, elem,
calld->send_message_batch->payload->send_message.send_message->flags, calld->send_message_batch->payload->send_message.send_message
->flags(),
calld->send_initial_metadata_state == HAS_COMPRESSION_ALGORITHM)) { calld->send_initial_metadata_state == HAS_COMPRESSION_ALGORITHM)) {
send_message_batch_continue(elem); send_message_batch_continue(elem);
} else { } else {
@ -365,9 +364,7 @@ static void compress_start_transport_stream_op_batch(
grpc_schedule_on_exec_ctx), grpc_schedule_on_exec_ctx),
GRPC_ERROR_REF(calld->cancel_error), "failing send_message op"); GRPC_ERROR_REF(calld->cancel_error), "failing send_message op");
} else { } else {
grpc_byte_stream_shutdown( calld->send_message_batch->payload->send_message.send_message->Shutdown(
calld->send_message_batch->payload->send_message.send_message,
GRPC_ERROR_REF(calld->cancel_error)); GRPC_ERROR_REF(calld->cancel_error));
} }
} }

@ -23,6 +23,7 @@
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <string.h> #include <string.h>
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/profiling/timers.h" #include "src/core/lib/profiling/timers.h"
#include "src/core/lib/slice/b64.h" #include "src/core/lib/slice/b64.h"
#include "src/core/lib/slice/percent_encoding.h" #include "src/core/lib/slice/percent_encoding.h"
@ -53,8 +54,8 @@ struct call_data {
*/ */
grpc_closure* recv_message_ready; grpc_closure* recv_message_ready;
grpc_closure* on_complete; grpc_closure* on_complete;
grpc_byte_stream** pp_recv_message; grpc_core::OrphanablePtr<grpc_core::ByteStream>* pp_recv_message;
grpc_slice_buffer_stream read_stream; grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> read_stream;
/** Receive closures are chained: we inject this closure as the on_done_recv /** Receive closures are chained: we inject this closure as the on_done_recv
up-call on transport_op, and remember to call our on_done_recv member up-call on transport_op, and remember to call our on_done_recv member
@ -232,7 +233,7 @@ static grpc_error* server_filter_incoming_metadata(grpc_call_element* elem,
grpc_base64_decode_with_len( grpc_base64_decode_with_len(
reinterpret_cast<const char*> GRPC_SLICE_START_PTR(query_slice), reinterpret_cast<const char*> GRPC_SLICE_START_PTR(query_slice),
GRPC_SLICE_LENGTH(query_slice), k_url_safe)); GRPC_SLICE_LENGTH(query_slice), k_url_safe));
grpc_slice_buffer_stream_init(&calld->read_stream, &read_slice_buffer, 0); calld->read_stream.Init(&read_slice_buffer, 0);
grpc_slice_buffer_destroy_internal(&read_slice_buffer); grpc_slice_buffer_destroy_internal(&read_slice_buffer);
calld->seen_path_with_query = true; calld->seen_path_with_query = true;
grpc_slice_unref_internal(query_slice); grpc_slice_unref_internal(query_slice);
@ -281,10 +282,10 @@ static void hs_on_complete(void* user_data, grpc_error* err) {
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
/* Call recv_message_ready if we got the payload via the path field */ /* Call recv_message_ready if we got the payload via the path field */
if (calld->seen_path_with_query && calld->recv_message_ready != nullptr) { if (calld->seen_path_with_query && calld->recv_message_ready != nullptr) {
*calld->pp_recv_message = calld->pp_recv_message->reset(
calld->payload_bin_delivered calld->payload_bin_delivered ? nullptr
? nullptr : reinterpret_cast<grpc_core::ByteStream*>(
: reinterpret_cast<grpc_byte_stream*>(&calld->read_stream); calld->read_stream.get()));
// Re-enter call combiner for recv_message_ready, since the surface // Re-enter call combiner for recv_message_ready, since the surface
// code will release the call combiner for each callback it receives. // code will release the call combiner for each callback it receives.
GRPC_CALL_COMBINER_START(calld->call_combiner, calld->recv_message_ready, GRPC_CALL_COMBINER_START(calld->call_combiner, calld->recv_message_ready,
@ -405,7 +406,7 @@ static void destroy_call_elem(grpc_call_element* elem,
grpc_closure* ignored) { grpc_closure* ignored) {
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
if (calld->seen_path_with_query && !calld->payload_bin_delivered) { if (calld->seen_path_with_query && !calld->payload_bin_delivered) {
grpc_byte_stream_destroy(&calld->read_stream.base); calld->read_stream->Orphan();
} }
} }

@ -100,7 +100,7 @@ struct call_data {
// call our next_recv_message_ready member after handling it. // call our next_recv_message_ready member after handling it.
grpc_closure recv_message_ready; grpc_closure recv_message_ready;
// Used by recv_message_ready. // Used by recv_message_ready.
grpc_byte_stream** recv_message; grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message;
// Original recv_message_ready callback, invoked after our own. // Original recv_message_ready callback, invoked after our own.
grpc_closure* next_recv_message_ready; grpc_closure* next_recv_message_ready;
}; };
@ -121,12 +121,12 @@ static void recv_message_ready(void* user_data, grpc_error* error) {
grpc_call_element* elem = static_cast<grpc_call_element*>(user_data); grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
if (*calld->recv_message != nullptr && calld->limits.max_recv_size >= 0 && if (*calld->recv_message != nullptr && calld->limits.max_recv_size >= 0 &&
(*calld->recv_message)->length > (*calld->recv_message)->length() >
static_cast<size_t>(calld->limits.max_recv_size)) { static_cast<size_t>(calld->limits.max_recv_size)) {
char* message_string; char* message_string;
gpr_asprintf(&message_string, gpr_asprintf(&message_string,
"Received message larger than max (%u vs. %d)", "Received message larger than max (%u vs. %d)",
(*calld->recv_message)->length, calld->limits.max_recv_size); (*calld->recv_message)->length(), calld->limits.max_recv_size);
grpc_error* new_error = grpc_error_set_int( grpc_error* new_error = grpc_error_set_int(
GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string), GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string),
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED); GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
@ -150,11 +150,11 @@ static void start_transport_stream_op_batch(
call_data* calld = static_cast<call_data*>(elem->call_data); call_data* calld = static_cast<call_data*>(elem->call_data);
// Check max send message size. // Check max send message size.
if (op->send_message && calld->limits.max_send_size >= 0 && if (op->send_message && calld->limits.max_send_size >= 0 &&
op->payload->send_message.send_message->length > op->payload->send_message.send_message->length() >
static_cast<size_t>(calld->limits.max_send_size)) { static_cast<size_t>(calld->limits.max_send_size)) {
char* message_string; char* message_string;
gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)", gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)",
op->payload->send_message.send_message->length, op->payload->send_message.send_message->length(),
calld->limits.max_send_size); calld->limits.max_send_size);
grpc_transport_stream_op_batch_finish_with_failure( grpc_transport_stream_op_batch_finish_with_failure(
op, op,

@ -93,7 +93,9 @@ static void start_transport_stream_op_batch(
/* Send message happens after client's user-agent (initial metadata) is /* Send message happens after client's user-agent (initial metadata) is
* received, so workaround_active must be set already */ * received, so workaround_active must be set already */
if (calld->workaround_active) { if (calld->workaround_active) {
op->payload->send_message.send_message->flags |= GRPC_WRITE_NO_COMPRESS; op->payload->send_message.send_message->set_flags(
op->payload->send_message.send_message->flags() |
GRPC_WRITE_NO_COMPRESS);
} }
} }

@ -29,7 +29,6 @@
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/endpoint.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/tcp_client_posix.h" #include "src/core/lib/iomgr/tcp_client_posix.h"
#include "src/core/lib/iomgr/tcp_posix.h" #include "src/core/lib/iomgr/tcp_posix.h"
#include "src/core/lib/surface/api_trace.h" #include "src/core/lib/surface/api_trace.h"

@ -23,7 +23,7 @@
#include <grpc/impl/codegen/grpc_types.h> #include <grpc/impl/codegen/grpc_types.h>
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/error.h"
/// Adds a port to \a server. Sets \a port_num to the port number. /// Adds a port to \a server. Sets \a port_num to the port number.
/// Takes ownership of \a args. /// Takes ownership of \a args.

@ -41,6 +41,5 @@ int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
GRPC_ERROR_UNREF(err); GRPC_ERROR_UNREF(err);
} }
return port_num; return port_num;
} }

@ -39,6 +39,7 @@
#include "src/core/lib/debug/stats.h" #include "src/core/lib/debug/stats.h"
#include "src/core/lib/gpr/env.h" #include "src/core/lib/gpr/env.h"
#include "src/core/lib/gpr/string.h" #include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/http/parser.h" #include "src/core/lib/http/parser.h"
#include "src/core/lib/iomgr/executor.h" #include "src/core/lib/iomgr/executor.h"
#include "src/core/lib/iomgr/timer.h" #include "src/core/lib/iomgr/timer.h"
@ -117,12 +118,6 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
grpc_connectivity_state state, grpc_connectivity_state state,
grpc_error* error, const char* reason); grpc_error* error, const char* reason);
static void incoming_byte_stream_destroy_locked(void* byte_stream,
grpc_error* error_ignored);
static void incoming_byte_stream_publish_error(
grpc_chttp2_incoming_byte_stream* bs, grpc_error* error);
static void incoming_byte_stream_unref(grpc_chttp2_incoming_byte_stream* bs);
static void benign_reclaimer_locked(void* t, grpc_error* error); static void benign_reclaimer_locked(void* t, grpc_error* error);
static void destructive_reclaimer_locked(void* t, grpc_error* error); static void destructive_reclaimer_locked(void* t, grpc_error* error);
@ -662,8 +657,8 @@ static int init_stream(grpc_transport* gt, grpc_stream* gs,
s->t = t; s->t = t;
s->refcount = refcount; s->refcount = refcount;
/* We reserve one 'active stream' that's dropped when the stream is /* We reserve one 'active stream' that's dropped when the stream is
read-closed. The others are for incoming_byte_streams that are actively read-closed. The others are for Chttp2IncomingByteStreams that are
reading */ actively reading */
GRPC_CHTTP2_STREAM_REF(s, "chttp2"); GRPC_CHTTP2_STREAM_REF(s, "chttp2");
grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[0], arena); grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[0], arena);
@ -1256,8 +1251,7 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
abort(); /* TODO(ctiller): what cleanup here? */ abort(); /* TODO(ctiller): what cleanup here? */
return; /* early out */ return; /* early out */
} }
if (s->fetched_send_message_length == s->fetching_send_message->length) { if (s->fetched_send_message_length == s->fetching_send_message->length()) {
grpc_byte_stream_destroy(s->fetching_send_message);
int64_t notify_offset = s->next_message_end_offset; int64_t notify_offset = s->next_message_end_offset;
if (notify_offset <= s->flow_controlled_bytes_written) { if (notify_offset <= s->flow_controlled_bytes_written) {
grpc_chttp2_complete_closure_step( grpc_chttp2_complete_closure_step(
@ -1274,20 +1268,19 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
cb->closure = s->fetching_send_message_finished; cb->closure = s->fetching_send_message_finished;
s->fetching_send_message_finished = nullptr; s->fetching_send_message_finished = nullptr;
grpc_chttp2_write_cb** list = grpc_chttp2_write_cb** list =
s->fetching_send_message->flags & GRPC_WRITE_THROUGH s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
? &s->on_write_finished_cbs ? &s->on_write_finished_cbs
: &s->on_flow_controlled_cbs; : &s->on_flow_controlled_cbs;
cb->next = *list; cb->next = *list;
*list = cb; *list = cb;
} }
s->fetching_send_message = nullptr; s->fetching_send_message.reset();
return; /* early out */ return; /* early out */
} else if (grpc_byte_stream_next(s->fetching_send_message, UINT32_MAX, } else if (s->fetching_send_message->Next(UINT32_MAX,
&s->complete_fetch_locked)) { &s->complete_fetch_locked)) {
grpc_error* error = grpc_error* error = s->fetching_send_message->Pull(&s->fetching_slice);
grpc_byte_stream_pull(s->fetching_send_message, &s->fetching_slice);
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
grpc_byte_stream_destroy(s->fetching_send_message); s->fetching_send_message.reset();
grpc_chttp2_cancel_stream(t, s, error); grpc_chttp2_cancel_stream(t, s, error);
} else { } else {
add_fetched_slice_locked(t, s); add_fetched_slice_locked(t, s);
@ -1300,14 +1293,14 @@ static void complete_fetch_locked(void* gs, grpc_error* error) {
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs); grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
grpc_chttp2_transport* t = s->t; grpc_chttp2_transport* t = s->t;
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
error = grpc_byte_stream_pull(s->fetching_send_message, &s->fetching_slice); error = s->fetching_send_message->Pull(&s->fetching_slice);
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
add_fetched_slice_locked(t, s); add_fetched_slice_locked(t, s);
continue_fetching_send_locked(t, s); continue_fetching_send_locked(t, s);
} }
} }
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
grpc_byte_stream_destroy(s->fetching_send_message); s->fetching_send_message.reset();
grpc_chttp2_cancel_stream(t, s, error); grpc_chttp2_cancel_stream(t, s, error);
} }
} }
@ -1439,7 +1432,7 @@ static void perform_stream_op_locked(void* stream_op,
GPR_ASSERT(s->id != 0); GPR_ASSERT(s->id != 0);
grpc_chttp2_mark_stream_writable(t, s); grpc_chttp2_mark_stream_writable(t, s);
if (!(op->send_message && if (!(op->send_message &&
(op->payload->send_message.send_message->flags & (op->payload->send_message.send_message->flags() &
GRPC_WRITE_BUFFER_HINT))) { GRPC_WRITE_BUFFER_HINT))) {
grpc_chttp2_initiate_write( grpc_chttp2_initiate_write(
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA); t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
@ -1466,7 +1459,7 @@ static void perform_stream_op_locked(void* stream_op,
if (op->send_message) { if (op->send_message) {
GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE(); GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE( GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(
op->payload->send_message.send_message->length); op->payload->send_message.send_message->length());
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE; on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
s->fetching_send_message_finished = add_closure_barrier(op->on_complete); s->fetching_send_message_finished = add_closure_barrier(op->on_complete);
if (s->write_closed) { if (s->write_closed) {
@ -1475,7 +1468,7 @@ static void perform_stream_op_locked(void* stream_op,
// streaming call might send another message before getting a // streaming call might send another message before getting a
// recv_message failure, breaking out of its loop, and then // recv_message failure, breaking out of its loop, and then
// starting recv_trailing_metadata. // starting recv_trailing_metadata.
grpc_byte_stream_destroy(op->payload->send_message.send_message); op->payload->send_message.send_message.reset();
grpc_chttp2_complete_closure_step( grpc_chttp2_complete_closure_step(
t, s, &s->fetching_send_message_finished, t, s, &s->fetching_send_message_finished,
t->is_client && s->received_trailing_metadata t->is_client && s->received_trailing_metadata
@ -1488,14 +1481,15 @@ static void perform_stream_op_locked(void* stream_op,
GPR_ASSERT(s->fetching_send_message == nullptr); GPR_ASSERT(s->fetching_send_message == nullptr);
uint8_t* frame_hdr = grpc_slice_buffer_tiny_add( uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
&s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES); &s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
uint32_t flags = op_payload->send_message.send_message->flags; uint32_t flags = op_payload->send_message.send_message->flags();
frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0; frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
size_t len = op_payload->send_message.send_message->length; size_t len = op_payload->send_message.send_message->length();
frame_hdr[1] = static_cast<uint8_t>(len >> 24); frame_hdr[1] = static_cast<uint8_t>(len >> 24);
frame_hdr[2] = static_cast<uint8_t>(len >> 16); frame_hdr[2] = static_cast<uint8_t>(len >> 16);
frame_hdr[3] = static_cast<uint8_t>(len >> 8); frame_hdr[3] = static_cast<uint8_t>(len >> 8);
frame_hdr[4] = static_cast<uint8_t>(len); frame_hdr[4] = static_cast<uint8_t>(len);
s->fetching_send_message = op_payload->send_message.send_message; s->fetching_send_message =
std::move(op_payload->send_message.send_message);
s->fetched_send_message_length = 0; s->fetched_send_message_length = 0;
s->next_message_end_offset = s->next_message_end_offset =
s->flow_controlled_bytes_written + s->flow_controlled_bytes_written +
@ -1947,12 +1941,12 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
} }
if (s->pending_byte_stream) { if (s->pending_byte_stream) {
if (s->on_next != nullptr) { if (s->on_next != nullptr) {
grpc_chttp2_incoming_byte_stream* bs = s->data_parser.parsing_frame; grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message"); error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
} }
incoming_byte_stream_publish_error(bs, error); bs->PublishError(error);
incoming_byte_stream_unref(bs); bs->Unref();
s->data_parser.parsing_frame = nullptr; s->data_parser.parsing_frame = nullptr;
} else { } else {
GRPC_ERROR_UNREF(s->byte_stream_error); GRPC_ERROR_UNREF(s->byte_stream_error);
@ -2096,10 +2090,7 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
GRPC_ERROR_REF(error), GRPC_ERROR_REF(error),
"send_trailing_metadata_finished"); "send_trailing_metadata_finished");
if (s->fetching_send_message != nullptr) { s->fetching_send_message.reset();
grpc_byte_stream_destroy(s->fetching_send_message);
s->fetching_send_message = nullptr;
}
grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished, grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
GRPC_ERROR_REF(error), GRPC_ERROR_REF(error),
"fetching_send_message_finished"); "fetching_send_message_finished");
@ -2715,7 +2706,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* gs,
static void reset_byte_stream(void* arg, grpc_error* error) { static void reset_byte_stream(void* arg, grpc_error* error) {
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg); grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
s->pending_byte_stream = false; s->pending_byte_stream = false;
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
grpc_chttp2_maybe_complete_recv_message(s->t, s); grpc_chttp2_maybe_complete_recv_message(s->t, s);
@ -2731,22 +2721,56 @@ static void reset_byte_stream(void* arg, grpc_error* error) {
} }
} }
static void incoming_byte_stream_unref(grpc_chttp2_incoming_byte_stream* bs) { namespace grpc_core {
if (gpr_unref(&bs->refs)) {
gpr_free(bs); Chttp2IncomingByteStream::Chttp2IncomingByteStream(
grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
uint32_t frame_size, uint32_t flags)
: ByteStream(frame_size, flags),
transport_(transport),
stream_(stream),
remaining_bytes_(frame_size) {
gpr_ref_init(&refs_, 2);
GRPC_ERROR_UNREF(stream->byte_stream_error);
stream->byte_stream_error = GRPC_ERROR_NONE;
}
void Chttp2IncomingByteStream::OrphanLocked(void* arg,
grpc_error* error_ignored) {
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
grpc_chttp2_stream* s = bs->stream_;
grpc_chttp2_transport* t = s->t;
bs->Unref();
s->pending_byte_stream = false;
grpc_chttp2_maybe_complete_recv_message(t, s);
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
}
void Chttp2IncomingByteStream::Orphan() {
GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(&destroy_action_,
&Chttp2IncomingByteStream::OrphanLocked, this,
grpc_combiner_scheduler(transport_->combiner)),
GRPC_ERROR_NONE);
}
void Chttp2IncomingByteStream::Unref() {
if (gpr_unref(&refs_)) {
Delete(this);
} }
} }
static void incoming_byte_stream_next_locked(void* argp, void Chttp2IncomingByteStream::Ref() { gpr_ref(&refs_); }
grpc_error* error_ignored) {
grpc_chttp2_incoming_byte_stream* bs =
static_cast<grpc_chttp2_incoming_byte_stream*>(argp);
grpc_chttp2_transport* t = bs->transport;
grpc_chttp2_stream* s = bs->stream;
void Chttp2IncomingByteStream::NextLocked(void* arg,
grpc_error* error_ignored) {
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
grpc_chttp2_transport* t = bs->transport_;
grpc_chttp2_stream* s = bs->stream_;
size_t cur_length = s->frame_storage.length; size_t cur_length = s->frame_storage.length;
if (!s->read_closed) { if (!s->read_closed) {
s->flow_control->IncomingByteStreamUpdate(bs->next_action.max_size_hint, s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
cur_length); cur_length);
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s); grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
} }
@ -2755,22 +2779,22 @@ static void incoming_byte_stream_next_locked(void* argp,
grpc_slice_buffer_swap(&s->frame_storage, grpc_slice_buffer_swap(&s->frame_storage,
&s->unprocessed_incoming_frames_buffer); &s->unprocessed_incoming_frames_buffer);
s->unprocessed_incoming_frames_decompressed = false; s->unprocessed_incoming_frames_decompressed = false;
GRPC_CLOSURE_SCHED(bs->next_action.on_complete, GRPC_ERROR_NONE); GRPC_CLOSURE_SCHED(bs->next_action_.on_complete, GRPC_ERROR_NONE);
} else if (s->byte_stream_error != GRPC_ERROR_NONE) { } else if (s->byte_stream_error != GRPC_ERROR_NONE) {
GRPC_CLOSURE_SCHED(bs->next_action.on_complete, GRPC_CLOSURE_SCHED(bs->next_action_.on_complete,
GRPC_ERROR_REF(s->byte_stream_error)); GRPC_ERROR_REF(s->byte_stream_error));
if (s->data_parser.parsing_frame != nullptr) { if (s->data_parser.parsing_frame != nullptr) {
incoming_byte_stream_unref(s->data_parser.parsing_frame); s->data_parser.parsing_frame->Unref();
s->data_parser.parsing_frame = nullptr; s->data_parser.parsing_frame = nullptr;
} }
} else if (s->read_closed) { } else if (s->read_closed) {
if (bs->remaining_bytes != 0) { if (bs->remaining_bytes_ != 0) {
s->byte_stream_error = s->byte_stream_error =
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message"); GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
GRPC_CLOSURE_SCHED(bs->next_action.on_complete, GRPC_CLOSURE_SCHED(bs->next_action_.on_complete,
GRPC_ERROR_REF(s->byte_stream_error)); GRPC_ERROR_REF(s->byte_stream_error));
if (s->data_parser.parsing_frame != nullptr) { if (s->data_parser.parsing_frame != nullptr) {
incoming_byte_stream_unref(s->data_parser.parsing_frame); s->data_parser.parsing_frame->Unref();
s->data_parser.parsing_frame = nullptr; s->data_parser.parsing_frame = nullptr;
} }
} else { } else {
@ -2778,122 +2802,94 @@ static void incoming_byte_stream_next_locked(void* argp,
GPR_ASSERT(false); GPR_ASSERT(false);
} }
} else { } else {
s->on_next = bs->next_action.on_complete; s->on_next = bs->next_action_.on_complete;
} }
incoming_byte_stream_unref(bs); bs->Unref();
} }
static bool incoming_byte_stream_next(grpc_byte_stream* byte_stream, bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
size_t max_size_hint, grpc_closure* on_complete) {
grpc_closure* on_complete) {
GPR_TIMER_SCOPE("incoming_byte_stream_next", 0); GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
grpc_chttp2_incoming_byte_stream* bs = if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
reinterpret_cast<grpc_chttp2_incoming_byte_stream*>(byte_stream);
grpc_chttp2_stream* s = bs->stream;
if (s->unprocessed_incoming_frames_buffer.length > 0) {
return true; return true;
} else { } else {
gpr_ref(&bs->refs); Ref();
bs->next_action.max_size_hint = max_size_hint; next_action_.max_size_hint = max_size_hint;
bs->next_action.on_complete = on_complete; next_action_.on_complete = on_complete;
GRPC_CLOSURE_SCHED( GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(&bs->next_action.closure, GRPC_CLOSURE_INIT(&next_action_.closure,
incoming_byte_stream_next_locked, bs, &Chttp2IncomingByteStream::NextLocked, this,
grpc_combiner_scheduler(bs->transport->combiner)), grpc_combiner_scheduler(transport_->combiner)),
GRPC_ERROR_NONE); GRPC_ERROR_NONE);
return false; return false;
} }
} }
static grpc_error* incoming_byte_stream_pull(grpc_byte_stream* byte_stream, grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
grpc_slice* slice) {
GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0); GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
grpc_chttp2_incoming_byte_stream* bs =
reinterpret_cast<grpc_chttp2_incoming_byte_stream*>(byte_stream);
grpc_chttp2_stream* s = bs->stream;
grpc_error* error; grpc_error* error;
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
if (s->unprocessed_incoming_frames_buffer.length > 0) { if (!stream_->unprocessed_incoming_frames_decompressed) {
if (!s->unprocessed_incoming_frames_decompressed) {
bool end_of_context; bool end_of_context;
if (!s->stream_decompression_ctx) { if (!stream_->stream_decompression_ctx) {
s->stream_decompression_ctx = grpc_stream_compression_context_create( stream_->stream_decompression_ctx =
s->stream_decompression_method); grpc_stream_compression_context_create(
stream_->stream_decompression_method);
} }
if (!grpc_stream_decompress(s->stream_decompression_ctx, if (!grpc_stream_decompress(stream_->stream_decompression_ctx,
&s->unprocessed_incoming_frames_buffer, &stream_->unprocessed_incoming_frames_buffer,
&s->decompressed_data_buffer, nullptr, &stream_->decompressed_data_buffer, nullptr,
MAX_SIZE_T, &end_of_context)) { MAX_SIZE_T, &end_of_context)) {
error = error =
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream decompression error."); GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream decompression error.");
return error; return error;
} }
GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0); GPR_ASSERT(stream_->unprocessed_incoming_frames_buffer.length == 0);
grpc_slice_buffer_swap(&s->unprocessed_incoming_frames_buffer, grpc_slice_buffer_swap(&stream_->unprocessed_incoming_frames_buffer,
&s->decompressed_data_buffer); &stream_->decompressed_data_buffer);
s->unprocessed_incoming_frames_decompressed = true; stream_->unprocessed_incoming_frames_decompressed = true;
if (end_of_context) { if (end_of_context) {
grpc_stream_compression_context_destroy(s->stream_decompression_ctx); grpc_stream_compression_context_destroy(
s->stream_decompression_ctx = nullptr; stream_->stream_decompression_ctx);
stream_->stream_decompression_ctx = nullptr;
} }
if (s->unprocessed_incoming_frames_buffer.length == 0) { if (stream_->unprocessed_incoming_frames_buffer.length == 0) {
*slice = grpc_empty_slice(); *slice = grpc_empty_slice();
} }
} }
error = grpc_deframe_unprocessed_incoming_frames( error = grpc_deframe_unprocessed_incoming_frames(
&s->data_parser, s, &s->unprocessed_incoming_frames_buffer, slice, &stream_->data_parser, stream_,
nullptr); &stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
return error; return error;
} }
} else { } else {
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message"); error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
GRPC_CLOSURE_SCHED(&s->reset_byte_stream, GRPC_ERROR_REF(error)); GRPC_CLOSURE_SCHED(&stream_->reset_byte_stream, GRPC_ERROR_REF(error));
return error; return error;
} }
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
static void incoming_byte_stream_destroy_locked(void* byte_stream, void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
grpc_error* error_ignored);
static void incoming_byte_stream_destroy(grpc_byte_stream* byte_stream) {
GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
grpc_chttp2_incoming_byte_stream* bs =
reinterpret_cast<grpc_chttp2_incoming_byte_stream*>(byte_stream);
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(&bs->destroy_action,
incoming_byte_stream_destroy_locked, bs,
grpc_combiner_scheduler(bs->transport->combiner)),
GRPC_ERROR_NONE);
}
static void incoming_byte_stream_publish_error(
grpc_chttp2_incoming_byte_stream* bs, grpc_error* error) {
grpc_chttp2_stream* s = bs->stream;
GPR_ASSERT(error != GRPC_ERROR_NONE); GPR_ASSERT(error != GRPC_ERROR_NONE);
GRPC_CLOSURE_SCHED(s->on_next, GRPC_ERROR_REF(error)); GRPC_CLOSURE_SCHED(stream_->on_next, GRPC_ERROR_REF(error));
s->on_next = nullptr; stream_->on_next = nullptr;
GRPC_ERROR_UNREF(s->byte_stream_error); GRPC_ERROR_UNREF(stream_->byte_stream_error);
s->byte_stream_error = GRPC_ERROR_REF(error); stream_->byte_stream_error = GRPC_ERROR_REF(error);
grpc_chttp2_cancel_stream(bs->transport, bs->stream, GRPC_ERROR_REF(error)); grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
} }
grpc_error* grpc_chttp2_incoming_byte_stream_push( grpc_error* Chttp2IncomingByteStream::Push(grpc_slice slice,
grpc_chttp2_incoming_byte_stream* bs, grpc_slice slice, grpc_slice* slice_out) {
grpc_slice* slice_out) { if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
grpc_chttp2_stream* s = bs->stream;
if (bs->remaining_bytes < GRPC_SLICE_LENGTH(slice)) {
grpc_error* error = grpc_error* error =
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream"); GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
GRPC_CLOSURE_SCHED(&stream_->reset_byte_stream, GRPC_ERROR_REF(error));
GRPC_CLOSURE_SCHED(&s->reset_byte_stream, GRPC_ERROR_REF(error));
grpc_slice_unref_internal(slice); grpc_slice_unref_internal(slice);
return error; return error;
} else { } else {
bs->remaining_bytes -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice); remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
if (slice_out != nullptr) { if (slice_out != nullptr) {
*slice_out = slice; *slice_out = slice;
} }
@ -2901,66 +2897,25 @@ grpc_error* grpc_chttp2_incoming_byte_stream_push(
} }
} }
grpc_error* grpc_chttp2_incoming_byte_stream_finished( grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
grpc_chttp2_incoming_byte_stream* bs, grpc_error* error, bool reset_on_error) {
bool reset_on_error) {
grpc_chttp2_stream* s = bs->stream;
if (error == GRPC_ERROR_NONE) { if (error == GRPC_ERROR_NONE) {
if (bs->remaining_bytes != 0) { if (remaining_bytes_ != 0) {
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message"); error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
} }
} }
if (error != GRPC_ERROR_NONE && reset_on_error) { if (error != GRPC_ERROR_NONE && reset_on_error) {
GRPC_CLOSURE_SCHED(&s->reset_byte_stream, GRPC_ERROR_REF(error)); GRPC_CLOSURE_SCHED(&stream_->reset_byte_stream, GRPC_ERROR_REF(error));
} }
incoming_byte_stream_unref(bs); Unref();
return error; return error;
} }
static void incoming_byte_stream_shutdown(grpc_byte_stream* byte_stream, void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
grpc_error* error) { GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
grpc_chttp2_incoming_byte_stream* bs =
reinterpret_cast<grpc_chttp2_incoming_byte_stream*>(byte_stream);
GRPC_ERROR_UNREF(grpc_chttp2_incoming_byte_stream_finished(
bs, error, true /* reset_on_error */));
} }
static const grpc_byte_stream_vtable grpc_chttp2_incoming_byte_stream_vtable = { } // namespace grpc_core
incoming_byte_stream_next, incoming_byte_stream_pull,
incoming_byte_stream_shutdown, incoming_byte_stream_destroy};
static void incoming_byte_stream_destroy_locked(void* byte_stream,
grpc_error* error_ignored) {
grpc_chttp2_incoming_byte_stream* bs =
static_cast<grpc_chttp2_incoming_byte_stream*>(byte_stream);
grpc_chttp2_stream* s = bs->stream;
grpc_chttp2_transport* t = s->t;
GPR_ASSERT(bs->base.vtable == &grpc_chttp2_incoming_byte_stream_vtable);
incoming_byte_stream_unref(bs);
s->pending_byte_stream = false;
grpc_chttp2_maybe_complete_recv_message(t, s);
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
}
grpc_chttp2_incoming_byte_stream* grpc_chttp2_incoming_byte_stream_create(
grpc_chttp2_transport* t, grpc_chttp2_stream* s, uint32_t frame_size,
uint32_t flags) {
grpc_chttp2_incoming_byte_stream* incoming_byte_stream =
static_cast<grpc_chttp2_incoming_byte_stream*>(
gpr_malloc(sizeof(*incoming_byte_stream)));
incoming_byte_stream->base.length = frame_size;
incoming_byte_stream->remaining_bytes = frame_size;
incoming_byte_stream->base.flags = flags;
incoming_byte_stream->base.vtable = &grpc_chttp2_incoming_byte_stream_vtable;
gpr_ref_init(&incoming_byte_stream->refs, 2);
incoming_byte_stream->transport = t;
incoming_byte_stream->stream = s;
GRPC_ERROR_UNREF(s->byte_stream_error);
s->byte_stream_error = GRPC_ERROR_NONE;
return incoming_byte_stream;
}
/******************************************************************************* /*******************************************************************************
* RESOURCE QUOTAS * RESOURCE QUOTAS

@ -27,6 +27,7 @@
#include <grpc/support/string_util.h> #include <grpc/support/string_util.h>
#include "src/core/ext/transport/chttp2/transport/internal.h" #include "src/core/ext/transport/chttp2/transport/internal.h"
#include "src/core/lib/gpr/string.h" #include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/slice/slice_string_helpers.h" #include "src/core/lib/slice/slice_string_helpers.h"
#include "src/core/lib/transport/transport.h" #include "src/core/lib/transport/transport.h"
@ -39,8 +40,7 @@ grpc_error* grpc_chttp2_data_parser_init(grpc_chttp2_data_parser* parser) {
void grpc_chttp2_data_parser_destroy(grpc_chttp2_data_parser* parser) { void grpc_chttp2_data_parser_destroy(grpc_chttp2_data_parser* parser) {
if (parser->parsing_frame != nullptr) { if (parser->parsing_frame != nullptr) {
GRPC_ERROR_UNREF(grpc_chttp2_incoming_byte_stream_finished( GRPC_ERROR_UNREF(parser->parsing_frame->Finished(
parser->parsing_frame,
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Parser destroyed"), false)); GRPC_ERROR_CREATE_FROM_STATIC_STRING("Parser destroyed"), false));
} }
GRPC_ERROR_UNREF(parser->error); GRPC_ERROR_UNREF(parser->error);
@ -100,7 +100,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
grpc_error* grpc_deframe_unprocessed_incoming_frames( grpc_error* grpc_deframe_unprocessed_incoming_frames(
grpc_chttp2_data_parser* p, grpc_chttp2_stream* s, grpc_chttp2_data_parser* p, grpc_chttp2_stream* s,
grpc_slice_buffer* slices, grpc_slice* slice_out, grpc_slice_buffer* slices, grpc_slice* slice_out,
grpc_byte_stream** stream_out) { grpc_core::OrphanablePtr<grpc_core::ByteStream>* stream_out) {
grpc_error* error = GRPC_ERROR_NONE; grpc_error* error = GRPC_ERROR_NONE;
grpc_chttp2_transport* t = s->t; grpc_chttp2_transport* t = s->t;
@ -197,12 +197,11 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
if (p->is_frame_compressed) { if (p->is_frame_compressed) {
message_flags |= GRPC_WRITE_INTERNAL_COMPRESS; message_flags |= GRPC_WRITE_INTERNAL_COMPRESS;
} }
p->parsing_frame = grpc_chttp2_incoming_byte_stream_create( p->parsing_frame = grpc_core::New<grpc_core::Chttp2IncomingByteStream>(
t, s, p->frame_size, message_flags); t, s, p->frame_size, message_flags);
*stream_out = &p->parsing_frame->base; stream_out->reset(p->parsing_frame);
if (p->parsing_frame->remaining_bytes == 0) { if (p->parsing_frame->remaining_bytes() == 0) {
GRPC_ERROR_UNREF(grpc_chttp2_incoming_byte_stream_finished( GRPC_ERROR_UNREF(p->parsing_frame->Finished(GRPC_ERROR_NONE, true));
p->parsing_frame, GRPC_ERROR_NONE, true));
p->parsing_frame = nullptr; p->parsing_frame = nullptr;
p->state = GRPC_CHTTP2_DATA_FH_0; p->state = GRPC_CHTTP2_DATA_FH_0;
} }
@ -226,8 +225,7 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
if (remaining == p->frame_size) { if (remaining == p->frame_size) {
s->stats.incoming.data_bytes += remaining; s->stats.incoming.data_bytes += remaining;
if (GRPC_ERROR_NONE != if (GRPC_ERROR_NONE !=
(error = grpc_chttp2_incoming_byte_stream_push( (error = p->parsing_frame->Push(
p->parsing_frame,
grpc_slice_sub(slice, static_cast<size_t>(cur - beg), grpc_slice_sub(slice, static_cast<size_t>(cur - beg),
static_cast<size_t>(end - beg)), static_cast<size_t>(end - beg)),
slice_out))) { slice_out))) {
@ -235,8 +233,7 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
return error; return error;
} }
if (GRPC_ERROR_NONE != if (GRPC_ERROR_NONE !=
(error = grpc_chttp2_incoming_byte_stream_finished( (error = p->parsing_frame->Finished(GRPC_ERROR_NONE, true))) {
p->parsing_frame, GRPC_ERROR_NONE, true))) {
grpc_slice_unref_internal(slice); grpc_slice_unref_internal(slice);
return error; return error;
} }
@ -247,8 +244,7 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
} else if (remaining < p->frame_size) { } else if (remaining < p->frame_size) {
s->stats.incoming.data_bytes += remaining; s->stats.incoming.data_bytes += remaining;
if (GRPC_ERROR_NONE != if (GRPC_ERROR_NONE !=
(error = grpc_chttp2_incoming_byte_stream_push( (error = p->parsing_frame->Push(
p->parsing_frame,
grpc_slice_sub(slice, static_cast<size_t>(cur - beg), grpc_slice_sub(slice, static_cast<size_t>(cur - beg),
static_cast<size_t>(end - beg)), static_cast<size_t>(end - beg)),
slice_out))) { slice_out))) {
@ -261,18 +257,16 @@ grpc_error* grpc_deframe_unprocessed_incoming_frames(
GPR_ASSERT(remaining > p->frame_size); GPR_ASSERT(remaining > p->frame_size);
s->stats.incoming.data_bytes += p->frame_size; s->stats.incoming.data_bytes += p->frame_size;
if (GRPC_ERROR_NONE != if (GRPC_ERROR_NONE !=
(grpc_chttp2_incoming_byte_stream_push( p->parsing_frame->Push(
p->parsing_frame,
grpc_slice_sub( grpc_slice_sub(
slice, static_cast<size_t>(cur - beg), slice, static_cast<size_t>(cur - beg),
static_cast<size_t>(cur + p->frame_size - beg)), static_cast<size_t>(cur + p->frame_size - beg)),
slice_out))) { slice_out)) {
grpc_slice_unref_internal(slice); grpc_slice_unref_internal(slice);
return error; return error;
} }
if (GRPC_ERROR_NONE != if (GRPC_ERROR_NONE !=
(error = grpc_chttp2_incoming_byte_stream_finished( (error = p->parsing_frame->Finished(GRPC_ERROR_NONE, true))) {
p->parsing_frame, GRPC_ERROR_NONE, true))) {
grpc_slice_unref_internal(slice); grpc_slice_unref_internal(slice);
return error; return error;
} }

@ -26,7 +26,6 @@
#include <grpc/slice.h> #include <grpc/slice.h>
#include <grpc/slice_buffer.h> #include <grpc/slice_buffer.h>
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/transport/byte_stream.h" #include "src/core/lib/transport/byte_stream.h"
#include "src/core/lib/transport/transport.h" #include "src/core/lib/transport/transport.h"
@ -40,8 +39,9 @@ typedef enum {
GRPC_CHTTP2_DATA_ERROR GRPC_CHTTP2_DATA_ERROR
} grpc_chttp2_stream_state; } grpc_chttp2_stream_state;
typedef struct grpc_chttp2_incoming_byte_stream namespace grpc_core {
grpc_chttp2_incoming_byte_stream; class Chttp2IncomingByteStream;
} // namespace grpc_core
typedef struct { typedef struct {
grpc_chttp2_stream_state state; grpc_chttp2_stream_state state;
@ -50,7 +50,7 @@ typedef struct {
grpc_error* error; grpc_error* error;
bool is_frame_compressed; bool is_frame_compressed;
grpc_chttp2_incoming_byte_stream* parsing_frame; grpc_core::Chttp2IncomingByteStream* parsing_frame;
} grpc_chttp2_data_parser; } grpc_chttp2_data_parser;
/* initialize per-stream state for data frame parsing */ /* initialize per-stream state for data frame parsing */
@ -79,6 +79,6 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
grpc_error* grpc_deframe_unprocessed_incoming_frames( grpc_error* grpc_deframe_unprocessed_incoming_frames(
grpc_chttp2_data_parser* p, grpc_chttp2_stream* s, grpc_chttp2_data_parser* p, grpc_chttp2_stream* s,
grpc_slice_buffer* slices, grpc_slice* slice_out, grpc_slice_buffer* slices, grpc_slice* slice_out,
grpc_byte_stream** stream_out); grpc_core::OrphanablePtr<grpc_core::ByteStream>* stream_out);
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_DATA_H */ #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_DATA_H */

@ -24,7 +24,6 @@
#include <grpc/slice.h> #include <grpc/slice.h>
#include <grpc/slice_buffer.h> #include <grpc/slice_buffer.h>
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/lib/iomgr/exec_ctx.h"
typedef enum { typedef enum {
GRPC_CHTTP2_GOAWAY_LSI0, GRPC_CHTTP2_GOAWAY_LSI0,

@ -23,7 +23,6 @@
#include <grpc/slice.h> #include <grpc/slice.h>
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/lib/iomgr/exec_ctx.h"
typedef struct { typedef struct {
uint8_t byte; uint8_t byte;

@ -23,7 +23,6 @@
#include <grpc/slice.h> #include <grpc/slice.h>
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/transport/transport.h" #include "src/core/lib/transport/transport.h"
typedef struct { typedef struct {

@ -24,7 +24,6 @@
#include <grpc/slice.h> #include <grpc/slice.h>
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/ext/transport/chttp2/transport/http2_settings.h" #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
#include "src/core/lib/iomgr/exec_ctx.h"
typedef enum { typedef enum {
GRPC_CHTTP2_SPS_ID0, GRPC_CHTTP2_SPS_ID0,

@ -23,7 +23,6 @@
#include <grpc/slice.h> #include <grpc/slice.h>
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/transport/transport.h" #include "src/core/lib/transport/transport.h"
typedef struct { typedef struct {

@ -25,7 +25,6 @@
#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/ext/transport/chttp2/transport/hpack_table.h" #include "src/core/ext/transport/chttp2/transport/hpack_table.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/transport/metadata.h" #include "src/core/lib/transport/metadata.h"
typedef struct grpc_chttp2_hpack_parser grpc_chttp2_hpack_parser; typedef struct grpc_chttp2_hpack_parser grpc_chttp2_hpack_parser;

@ -203,18 +203,58 @@ typedef struct grpc_chttp2_write_cb {
struct grpc_chttp2_write_cb* next; struct grpc_chttp2_write_cb* next;
} grpc_chttp2_write_cb; } grpc_chttp2_write_cb;
/* forward declared in frame_data.h */ namespace grpc_core {
struct grpc_chttp2_incoming_byte_stream {
grpc_byte_stream base; class Chttp2IncomingByteStream : public ByteStream {
gpr_refcount refs; public:
Chttp2IncomingByteStream(grpc_chttp2_transport* transport,
grpc_chttp2_stream* stream, uint32_t frame_size,
uint32_t flags);
void Orphan() override;
bool Next(size_t max_size_hint, grpc_closure* on_complete) override;
grpc_error* Pull(grpc_slice* slice) override;
void Shutdown(grpc_error* error) override;
// TODO(roth): When I converted this class to C++, I wanted to make it
// inherit from RefCounted or InternallyRefCounted instead of continuing
// to use its own custom ref-counting code. However, that would require
// using multiple inheritence, which sucks in general. And to make matters
// worse, it causes problems with our New<> and Delete<> wrappers.
// Specifically, unless RefCounted is first in the list of parent classes,
// it will see a different value of the address of the object than the one
// we actually allocated, in which case gpr_free() will be called on a
// different address than the one we got from gpr_malloc(), thus causing a
// crash. Given the fragility of depending on that, as well as a desire to
// avoid multiple inheritence in general, I've decided to leave this
// alone for now. We can revisit this once we're able to link against
// libc++, at which point we can eliminate New<> and Delete<> and
// switch to std::shared_ptr<>.
void Ref();
void Unref();
void PublishError(grpc_error* error);
grpc_error* Push(grpc_slice slice, grpc_slice* slice_out);
grpc_chttp2_transport* transport; /* immutable */ grpc_error* Finished(grpc_error* error, bool reset_on_error);
grpc_chttp2_stream* stream; /* immutable */
uint32_t remaining_bytes() const { return remaining_bytes_; }
private:
static void NextLocked(void* arg, grpc_error* error_ignored);
static void OrphanLocked(void* arg, grpc_error* error_ignored);
grpc_chttp2_transport* transport_; // Immutable.
grpc_chttp2_stream* stream_; // Immutable.
gpr_refcount refs_;
/* Accessed only by transport thread when stream->pending_byte_stream == false /* Accessed only by transport thread when stream->pending_byte_stream == false
* Accessed only by application thread when stream->pending_byte_stream == * Accessed only by application thread when stream->pending_byte_stream ==
* true */ * true */
uint32_t remaining_bytes; uint32_t remaining_bytes_;
/* Accessed only by transport thread when stream->pending_byte_stream == false /* Accessed only by transport thread when stream->pending_byte_stream == false
* Accessed only by application thread when stream->pending_byte_stream == * Accessed only by application thread when stream->pending_byte_stream ==
@ -223,11 +263,12 @@ struct grpc_chttp2_incoming_byte_stream {
grpc_closure closure; grpc_closure closure;
size_t max_size_hint; size_t max_size_hint;
grpc_closure* on_complete; grpc_closure* on_complete;
} next_action; } next_action_;
grpc_closure destroy_action; grpc_closure destroy_action_;
grpc_closure finished_action;
}; };
} // namespace grpc_core
typedef enum { typedef enum {
GRPC_CHTTP2_KEEPALIVE_STATE_WAITING, GRPC_CHTTP2_KEEPALIVE_STATE_WAITING,
GRPC_CHTTP2_KEEPALIVE_STATE_PINGING, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING,
@ -456,7 +497,7 @@ struct grpc_chttp2_stream {
grpc_metadata_batch* send_trailing_metadata; grpc_metadata_batch* send_trailing_metadata;
grpc_closure* send_trailing_metadata_finished; grpc_closure* send_trailing_metadata_finished;
grpc_byte_stream* fetching_send_message; grpc_core::OrphanablePtr<grpc_core::ByteStream> fetching_send_message;
uint32_t fetched_send_message_length; uint32_t fetched_send_message_length;
grpc_slice fetching_slice; grpc_slice fetching_slice;
int64_t next_message_end_offset; int64_t next_message_end_offset;
@ -468,7 +509,7 @@ struct grpc_chttp2_stream {
grpc_metadata_batch* recv_initial_metadata; grpc_metadata_batch* recv_initial_metadata;
grpc_closure* recv_initial_metadata_ready; grpc_closure* recv_initial_metadata_ready;
bool* trailing_metadata_available; bool* trailing_metadata_available;
grpc_byte_stream** recv_message; grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message;
grpc_closure* recv_message_ready; grpc_closure* recv_message_ready;
grpc_metadata_batch* recv_trailing_metadata; grpc_metadata_batch* recv_trailing_metadata;
grpc_closure* recv_trailing_metadata_finished; grpc_closure* recv_trailing_metadata_finished;
@ -719,18 +760,6 @@ void grpc_chttp2_unref_transport(grpc_chttp2_transport* t);
void grpc_chttp2_ref_transport(grpc_chttp2_transport* t); void grpc_chttp2_ref_transport(grpc_chttp2_transport* t);
#endif #endif
grpc_chttp2_incoming_byte_stream* grpc_chttp2_incoming_byte_stream_create(
grpc_chttp2_transport* t, grpc_chttp2_stream* s, uint32_t frame_size,
uint32_t flags);
grpc_error* grpc_chttp2_incoming_byte_stream_push(
grpc_chttp2_incoming_byte_stream* bs, grpc_slice slice,
grpc_slice* slice_out);
grpc_error* grpc_chttp2_incoming_byte_stream_finished(
grpc_chttp2_incoming_byte_stream* bs, grpc_error* error,
bool reset_on_error);
void grpc_chttp2_incoming_byte_stream_notify(
grpc_chttp2_incoming_byte_stream* bs, grpc_error* error);
void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id); void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id);
/** Add a new ping strike to ping_recv_state.ping_strikes. If /** Add a new ping strike to ping_recv_state.ping_strikes. If

@ -31,6 +31,7 @@
#include "src/core/ext/transport/cronet/transport/cronet_transport.h" #include "src/core/ext/transport/cronet/transport/cronet_transport.h"
#include "src/core/lib/gpr/host_port.h" #include "src/core/lib/gpr/host_port.h"
#include "src/core/lib/gpr/string.h" #include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/endpoint.h"
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
@ -122,7 +123,7 @@ struct read_state {
bool read_stream_closed; bool read_stream_closed;
/* vars for holding data destined for the application */ /* vars for holding data destined for the application */
struct grpc_slice_buffer_stream sbs; grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> sbs;
grpc_slice_buffer read_slice_buffer; grpc_slice_buffer read_slice_buffer;
/* vars for trailing metadata */ /* vars for trailing metadata */
@ -1041,16 +1042,14 @@ static enum e_op_result execute_stream_op(struct op_and_state* oas) {
grpc_slice_buffer write_slice_buffer; grpc_slice_buffer write_slice_buffer;
grpc_slice slice; grpc_slice slice;
grpc_slice_buffer_init(&write_slice_buffer); grpc_slice_buffer_init(&write_slice_buffer);
if (1 != grpc_byte_stream_next( if (1 != stream_op->payload->send_message.send_message->Next(
stream_op->payload->send_message.send_message, stream_op->payload->send_message.send_message->length(),
stream_op->payload->send_message.send_message->length,
nullptr)) { nullptr)) {
/* Should never reach here */ /* Should never reach here */
GPR_ASSERT(false); GPR_ASSERT(false);
} }
if (GRPC_ERROR_NONE != if (GRPC_ERROR_NONE !=
grpc_byte_stream_pull(stream_op->payload->send_message.send_message, stream_op->payload->send_message.send_message->Pull(&slice)) {
&slice)) {
/* Should never reach here */ /* Should never reach here */
GPR_ASSERT(false); GPR_ASSERT(false);
} }
@ -1062,9 +1061,10 @@ static enum e_op_result execute_stream_op(struct op_and_state* oas) {
} }
if (write_slice_buffer.count > 0) { if (write_slice_buffer.count > 0) {
size_t write_buffer_size; size_t write_buffer_size;
create_grpc_frame(&write_slice_buffer, &stream_state->ws.write_buffer, create_grpc_frame(
&write_buffer_size, &write_slice_buffer, &stream_state->ws.write_buffer,
stream_op->payload->send_message.send_message->flags); &write_buffer_size,
stream_op->payload->send_message.send_message->flags());
CRONET_LOG(GPR_DEBUG, "bidirectional_stream_write (%p, %p)", s->cbs, CRONET_LOG(GPR_DEBUG, "bidirectional_stream_write (%p, %p)", s->cbs,
stream_state->ws.write_buffer); stream_state->ws.write_buffer);
stream_state->state_callback_received[OP_SEND_MESSAGE] = false; stream_state->state_callback_received[OP_SEND_MESSAGE] = false;
@ -1089,6 +1089,7 @@ static enum e_op_result execute_stream_op(struct op_and_state* oas) {
} }
stream_state->state_op_done[OP_SEND_MESSAGE] = true; stream_state->state_op_done[OP_SEND_MESSAGE] = true;
oas->state.state_op_done[OP_SEND_MESSAGE] = true; oas->state.state_op_done[OP_SEND_MESSAGE] = true;
stream_op->payload->send_message.send_message.reset();
} else if (stream_op->send_trailing_metadata && } else if (stream_op->send_trailing_metadata &&
op_can_be_run(stream_op, s, &oas->state, op_can_be_run(stream_op, s, &oas->state,
OP_SEND_TRAILING_METADATA)) { OP_SEND_TRAILING_METADATA)) {
@ -1195,14 +1196,13 @@ static enum e_op_result execute_stream_op(struct op_and_state* oas) {
grpc_slice_buffer_destroy_internal( grpc_slice_buffer_destroy_internal(
&stream_state->rs.read_slice_buffer); &stream_state->rs.read_slice_buffer);
grpc_slice_buffer_init(&stream_state->rs.read_slice_buffer); grpc_slice_buffer_init(&stream_state->rs.read_slice_buffer);
grpc_slice_buffer_stream_init(&stream_state->rs.sbs, uint32_t flags = 0;
&stream_state->rs.read_slice_buffer, 0);
if (stream_state->rs.compressed) { if (stream_state->rs.compressed) {
stream_state->rs.sbs.base.flags |= GRPC_WRITE_INTERNAL_COMPRESS; flags |= GRPC_WRITE_INTERNAL_COMPRESS;
} }
*(reinterpret_cast<grpc_byte_buffer**>( stream_state->rs.sbs.Init(&stream_state->rs.read_slice_buffer, flags);
stream_op->payload->recv_message.recv_message)) = stream_op->payload->recv_message.recv_message->reset(
reinterpret_cast<grpc_byte_buffer*>(&stream_state->rs.sbs); stream_state->rs.sbs.get());
GRPC_CLOSURE_SCHED( GRPC_CLOSURE_SCHED(
stream_op->payload->recv_message.recv_message_ready, stream_op->payload->recv_message.recv_message_ready,
GRPC_ERROR_NONE); GRPC_ERROR_NONE);
@ -1252,14 +1252,13 @@ static enum e_op_result execute_stream_op(struct op_and_state* oas) {
grpc_slice_buffer_init(&stream_state->rs.read_slice_buffer); grpc_slice_buffer_init(&stream_state->rs.read_slice_buffer);
grpc_slice_buffer_add(&stream_state->rs.read_slice_buffer, grpc_slice_buffer_add(&stream_state->rs.read_slice_buffer,
read_data_slice); read_data_slice);
grpc_slice_buffer_stream_init(&stream_state->rs.sbs, uint32_t flags = 0;
&stream_state->rs.read_slice_buffer, 0);
if (stream_state->rs.compressed) { if (stream_state->rs.compressed) {
stream_state->rs.sbs.base.flags = GRPC_WRITE_INTERNAL_COMPRESS; flags = GRPC_WRITE_INTERNAL_COMPRESS;
} }
*(reinterpret_cast<grpc_byte_buffer**>( stream_state->rs.sbs.Init(&stream_state->rs.read_slice_buffer, flags);
stream_op->payload->recv_message.recv_message)) = stream_op->payload->recv_message.recv_message->reset(
reinterpret_cast<grpc_byte_buffer*>(&stream_state->rs.sbs); stream_state->rs.sbs.get());
GRPC_CLOSURE_SCHED(stream_op->payload->recv_message.recv_message_ready, GRPC_CLOSURE_SCHED(stream_op->payload->recv_message.recv_message_ready,
GRPC_ERROR_NONE); GRPC_ERROR_NONE);
stream_state->state_op_done[OP_RECV_MESSAGE] = true; stream_state->state_op_done[OP_RECV_MESSAGE] = true;

@ -25,6 +25,7 @@
#include <string.h> #include <string.h>
#include "src/core/ext/transport/inproc/inproc_transport.h" #include "src/core/ext/transport/inproc/inproc_transport.h"
#include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/surface/api_trace.h" #include "src/core/lib/surface/api_trace.h"
#include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/channel.h"
@ -99,7 +100,7 @@ typedef struct inproc_stream {
grpc_transport_stream_op_batch* recv_trailing_md_op; grpc_transport_stream_op_batch* recv_trailing_md_op;
grpc_slice_buffer recv_message; grpc_slice_buffer recv_message;
grpc_slice_buffer_stream recv_stream; grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> recv_stream;
bool recv_inited; bool recv_inited;
bool initial_md_sent; bool initial_md_sent;
@ -482,8 +483,7 @@ static void fail_helper_locked(inproc_stream* s, grpc_error* error) {
s->recv_message_op = nullptr; s->recv_message_op = nullptr;
} }
if (s->send_message_op) { if (s->send_message_op) {
grpc_byte_stream_destroy( s->send_message_op->payload->send_message.send_message.reset();
s->send_message_op->payload->send_message.send_message);
complete_if_batch_end_locked( complete_if_batch_end_locked(
s, error, s->send_message_op, s, error, s->send_message_op,
"fail_helper scheduling send-message-on-complete"); "fail_helper scheduling send-message-on-complete");
@ -521,7 +521,7 @@ static void fail_helper_locked(inproc_stream* s, grpc_error* error) {
static void message_transfer_locked(inproc_stream* sender, static void message_transfer_locked(inproc_stream* sender,
inproc_stream* receiver) { inproc_stream* receiver) {
size_t remaining = size_t remaining =
sender->send_message_op->payload->send_message.send_message->length; sender->send_message_op->payload->send_message.send_message->length();
if (receiver->recv_inited) { if (receiver->recv_inited) {
grpc_slice_buffer_destroy_internal(&receiver->recv_message); grpc_slice_buffer_destroy_internal(&receiver->recv_message);
} }
@ -530,12 +530,12 @@ static void message_transfer_locked(inproc_stream* sender,
do { do {
grpc_slice message_slice; grpc_slice message_slice;
grpc_closure unused; grpc_closure unused;
GPR_ASSERT(grpc_byte_stream_next( GPR_ASSERT(
sender->send_message_op->payload->send_message.send_message, SIZE_MAX, sender->send_message_op->payload->send_message.send_message->Next(
&unused)); SIZE_MAX, &unused));
grpc_error* error = grpc_byte_stream_pull( grpc_error* error =
sender->send_message_op->payload->send_message.send_message, sender->send_message_op->payload->send_message.send_message->Pull(
&message_slice); &message_slice);
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
cancel_stream_locked(sender, GRPC_ERROR_REF(error)); cancel_stream_locked(sender, GRPC_ERROR_REF(error));
break; break;
@ -544,13 +544,11 @@ static void message_transfer_locked(inproc_stream* sender,
remaining -= GRPC_SLICE_LENGTH(message_slice); remaining -= GRPC_SLICE_LENGTH(message_slice);
grpc_slice_buffer_add(&receiver->recv_message, message_slice); grpc_slice_buffer_add(&receiver->recv_message, message_slice);
} while (remaining > 0); } while (remaining > 0);
grpc_byte_stream_destroy( sender->send_message_op->payload->send_message.send_message.reset();
sender->send_message_op->payload->send_message.send_message);
grpc_slice_buffer_stream_init(&receiver->recv_stream, &receiver->recv_message, receiver->recv_stream.Init(&receiver->recv_message, 0);
0); receiver->recv_message_op->payload->recv_message.recv_message->reset(
*receiver->recv_message_op->payload->recv_message.recv_message = receiver->recv_stream.get());
&receiver->recv_stream.base;
INPROC_LOG(GPR_DEBUG, "message_transfer_locked %p scheduling message-ready", INPROC_LOG(GPR_DEBUG, "message_transfer_locked %p scheduling message-ready",
receiver); receiver);
GRPC_CLOSURE_SCHED( GRPC_CLOSURE_SCHED(
@ -606,8 +604,7 @@ static void op_state_machine(void* arg, grpc_error* error) {
(s->trailing_md_sent || other->recv_trailing_md_op)) { (s->trailing_md_sent || other->recv_trailing_md_op)) {
// A server send will never be matched if the client is waiting // A server send will never be matched if the client is waiting
// for trailing metadata already // for trailing metadata already
grpc_byte_stream_destroy( s->send_message_op->payload->send_message.send_message.reset();
s->send_message_op->payload->send_message.send_message);
complete_if_batch_end_locked( complete_if_batch_end_locked(
s, GRPC_ERROR_NONE, s->send_message_op, s, GRPC_ERROR_NONE, s->send_message_op,
"op_state_machine scheduling send-message-on-complete"); "op_state_machine scheduling send-message-on-complete");
@ -744,8 +741,7 @@ static void op_state_machine(void* arg, grpc_error* error) {
if ((s->trailing_md_sent || s->t->is_client) && s->send_message_op) { if ((s->trailing_md_sent || s->t->is_client) && s->send_message_op) {
// Nothing further will try to receive from this stream, so finish off // Nothing further will try to receive from this stream, so finish off
// any outstanding send_message op // any outstanding send_message op
grpc_byte_stream_destroy( s->send_message_op->payload->send_message.send_message.reset();
s->send_message_op->payload->send_message.send_message);
complete_if_batch_end_locked( complete_if_batch_end_locked(
s, new_err, s->send_message_op, s, new_err, s->send_message_op,
"op_state_machine scheduling send-message-on-complete"); "op_state_machine scheduling send-message-on-complete");
@ -803,8 +799,7 @@ static void op_state_machine(void* arg, grpc_error* error) {
s->send_message_op) { s->send_message_op) {
// Nothing further will try to receive from this stream, so finish off // Nothing further will try to receive from this stream, so finish off
// any outstanding send_message op // any outstanding send_message op
grpc_byte_stream_destroy( s->send_message_op->payload->send_message.send_message.reset();
s->send_message_op->payload->send_message.send_message);
complete_if_batch_end_locked( complete_if_batch_end_locked(
s, new_err, s->send_message_op, s, new_err, s->send_message_op,
"op_state_machine scheduling send-message-on-complete"); "op_state_machine scheduling send-message-on-complete");

@ -24,7 +24,6 @@
#include <grpc/impl/codegen/grpc_types.h> #include <grpc/impl/codegen/grpc_types.h>
#include "src/core/lib/channel/handshaker.h" #include "src/core/lib/channel/handshaker.h"
#include "src/core/lib/iomgr/exec_ctx.h"
// A handshaker factory is used to create handshakers. // A handshaker factory is used to create handshakers.

@ -24,7 +24,6 @@
#include <grpc/impl/codegen/grpc_types.h> #include <grpc/impl/codegen/grpc_types.h>
#include "src/core/lib/channel/handshaker_factory.h" #include "src/core/lib/channel/handshaker_factory.h"
#include "src/core/lib/iomgr/exec_ctx.h"
typedef enum { typedef enum {
HANDSHAKER_CLIENT = 0, HANDSHAKER_CLIENT = 0,

@ -22,7 +22,6 @@
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include "src/core/lib/compression/stream_compression_identity.h" #include "src/core/lib/compression/stream_compression_identity.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_internal.h"
#define OUTPUT_BLOCK_SIZE (1024) #define OUTPUT_BLOCK_SIZE (1024)

@ -71,6 +71,10 @@ unsigned gpr_cpu_current_cpu(void) {
gpr_log(GPR_ERROR, "Error determining current CPU: %s\n", strerror(errno)); gpr_log(GPR_ERROR, "Error determining current CPU: %s\n", strerror(errno));
return 0; return 0;
} }
if (static_cast<unsigned>(cpu) >= gpr_cpu_num_cores()) {
gpr_log(GPR_ERROR, "Cannot handle hot-plugged CPUs");
return 0;
}
return static_cast<unsigned>(cpu); return static_cast<unsigned>(cpu);
#endif #endif
} }

@ -32,6 +32,7 @@
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/string_util.h> #include <grpc/support/string_util.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include <inttypes.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>

@ -121,8 +121,11 @@ static grpc_security_status httpcli_ssl_channel_security_connector_create(
if (secure_peer_name != nullptr) { if (secure_peer_name != nullptr) {
c->secure_peer_name = gpr_strdup(secure_peer_name); c->secure_peer_name = gpr_strdup(secure_peer_name);
} }
result = tsi_create_ssl_client_handshaker_factory( tsi_ssl_client_handshaker_options options;
nullptr, pem_root_certs, nullptr, nullptr, 0, &c->handshaker_factory); memset(&options, 0, sizeof(options));
options.pem_root_certs = pem_root_certs;
result = tsi_create_ssl_client_handshaker_factory_with_options(
&options, &c->handshaker_factory);
if (result != TSI_OK) { if (result != TSI_OK) {
gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.", gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
tsi_result_to_string(result)); tsi_result_to_string(result));

@ -27,7 +27,6 @@
#include "src/core/lib/gpr/mpscq.h" #include "src/core/lib/gpr/mpscq.h"
#include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/exec_ctx.h"
// A simple, lock-free mechanism for serializing activity related to a // A simple, lock-free mechanism for serializing activity related to a
// single call. This is similar to a combiner but is more lightweight. // single call. This is similar to a combiner but is more lightweight.

@ -20,6 +20,8 @@
#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/endpoint.h"
grpc_core::TraceFlag grpc_tcp_trace(false, "tcp");
void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices, void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
grpc_closure* cb) { grpc_closure* cb) {
ep->vtable->read(ep, slices, cb); ep->vtable->read(ep, slices, cb);

@ -22,6 +22,7 @@
#ifdef GRPC_WINSOCK_SOCKET #ifdef GRPC_WINSOCK_SOCKET
#include "src/core/lib/iomgr/endpoint_pair.h" #include "src/core/lib/iomgr/endpoint_pair.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/sockaddr_utils.h"
#include <errno.h> #include <errno.h>
@ -46,19 +47,19 @@ static void create_sockets(SOCKET sv[2]) {
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
GPR_ASSERT(bind(lst_sock, (struct sockaddr*)&addr, sizeof(addr)) != GPR_ASSERT(bind(lst_sock, (grpc_sockaddr*)&addr, sizeof(addr)) !=
SOCKET_ERROR); SOCKET_ERROR);
GPR_ASSERT(listen(lst_sock, SOMAXCONN) != SOCKET_ERROR); GPR_ASSERT(listen(lst_sock, SOMAXCONN) != SOCKET_ERROR);
GPR_ASSERT(getsockname(lst_sock, (struct sockaddr*)&addr, &addr_len) != GPR_ASSERT(getsockname(lst_sock, (grpc_sockaddr*)&addr, &addr_len) !=
SOCKET_ERROR); SOCKET_ERROR);
cli_sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, cli_sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
WSA_FLAG_OVERLAPPED); WSA_FLAG_OVERLAPPED);
GPR_ASSERT(cli_sock != INVALID_SOCKET); GPR_ASSERT(cli_sock != INVALID_SOCKET);
GPR_ASSERT(WSAConnect(cli_sock, (struct sockaddr*)&addr, addr_len, NULL, NULL, GPR_ASSERT(WSAConnect(cli_sock, (grpc_sockaddr*)&addr, addr_len, NULL, NULL,
NULL, NULL) == 0); NULL, NULL) == 0);
svr_sock = accept(lst_sock, (struct sockaddr*)&addr, &addr_len); svr_sock = accept(lst_sock, (grpc_sockaddr*)&addr, &addr_len);
GPR_ASSERT(svr_sock != INVALID_SOCKET); GPR_ASSERT(svr_sock != INVALID_SOCKET);
closesocket(lst_sock); closesocket(lst_sock);

@ -59,7 +59,7 @@
//#define GRPC_EPOLLEX_CREATE_WORKERS_ON_HEAP 1 //#define GRPC_EPOLLEX_CREATE_WORKERS_ON_HEAP 1
#define MAX_EPOLL_EVENTS 100 #define MAX_EPOLL_EVENTS 100
#define MAX_EPOLL_EVENTS_HANDLED_EACH_POLL_CALL 16 #define MAX_EPOLL_EVENTS_HANDLED_EACH_POLL_CALL 1
grpc_core::DebugOnlyTraceFlag grpc_trace_pollable_refcount(false, grpc_core::DebugOnlyTraceFlag grpc_trace_pollable_refcount(false,
"pollable_refcount"); "pollable_refcount");
@ -198,7 +198,6 @@ struct grpc_pollset_worker {
struct grpc_pollset { struct grpc_pollset {
gpr_mu mu; gpr_mu mu;
gpr_atm worker_count;
pollable* active_pollable; pollable* active_pollable;
bool kicked_without_poller; bool kicked_without_poller;
grpc_closure* shutdown_closure; grpc_closure* shutdown_closure;
@ -686,7 +685,6 @@ static grpc_error* pollset_kick_all(grpc_pollset* pollset) {
static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) { static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
gpr_mu_init(&pollset->mu); gpr_mu_init(&pollset->mu);
gpr_atm_no_barrier_store(&pollset->worker_count, 0);
pollset->active_pollable = POLLABLE_REF(g_empty_pollable, "pollset"); pollset->active_pollable = POLLABLE_REF(g_empty_pollable, "pollset");
pollset->kicked_without_poller = false; pollset->kicked_without_poller = false;
pollset->shutdown_closure = nullptr; pollset->shutdown_closure = nullptr;
@ -760,20 +758,8 @@ static grpc_error* pollable_process_events(grpc_pollset* pollset,
pollable* pollable_obj, bool drain) { pollable* pollable_obj, bool drain) {
GPR_TIMER_SCOPE("pollable_process_events", 0); GPR_TIMER_SCOPE("pollable_process_events", 0);
static const char* err_desc = "pollset_process_events"; static const char* err_desc = "pollset_process_events";
// Use a simple heuristic to determine how many fd events to process
// per loop iteration. (events/workers)
int handle_count = 1;
int worker_count = gpr_atm_no_barrier_load(&pollset->worker_count);
GPR_ASSERT(worker_count > 0);
handle_count =
(pollable_obj->event_count - pollable_obj->event_cursor) / worker_count;
if (handle_count == 0) {
handle_count = 1;
} else if (handle_count > MAX_EPOLL_EVENTS_HANDLED_EACH_POLL_CALL) {
handle_count = MAX_EPOLL_EVENTS_HANDLED_EACH_POLL_CALL;
}
grpc_error* error = GRPC_ERROR_NONE; grpc_error* error = GRPC_ERROR_NONE;
for (int i = 0; (drain || i < handle_count) && for (int i = 0; (drain || i < MAX_EPOLL_EVENTS_HANDLED_EACH_POLL_CALL) &&
pollable_obj->event_cursor != pollable_obj->event_count; pollable_obj->event_cursor != pollable_obj->event_count;
i++) { i++) {
int n = pollable_obj->event_cursor++; int n = pollable_obj->event_cursor++;
@ -898,7 +884,6 @@ static bool begin_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
GPR_TIMER_SCOPE("begin_worker", 0); GPR_TIMER_SCOPE("begin_worker", 0);
bool do_poll = bool do_poll =
(pollset->shutdown_closure == nullptr && !pollset->already_shutdown); (pollset->shutdown_closure == nullptr && !pollset->already_shutdown);
gpr_atm_no_barrier_fetch_add(&pollset->worker_count, 1);
if (worker_hdl != nullptr) *worker_hdl = worker; if (worker_hdl != nullptr) *worker_hdl = worker;
worker->initialized_cv = false; worker->initialized_cv = false;
worker->kicked = false; worker->kicked = false;
@ -979,7 +964,6 @@ static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
if (worker->initialized_cv) { if (worker->initialized_cv) {
gpr_cv_destroy(&worker->cv); gpr_cv_destroy(&worker->cv);
} }
gpr_atm_no_barrier_fetch_add(&pollset->worker_count, -1);
} }
#ifndef NDEBUG #ifndef NDEBUG

@ -177,7 +177,6 @@ struct grpc_pollset {
int called_shutdown; int called_shutdown;
int kicked_without_pollers; int kicked_without_pollers;
grpc_closure* shutdown_done; grpc_closure* shutdown_done;
grpc_closure_list idle_jobs;
int pollset_set_count; int pollset_set_count;
/* all polled fds */ /* all polled fds */
size_t fd_count; size_t fd_count;
@ -812,7 +811,6 @@ static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
pollset->shutting_down = 0; pollset->shutting_down = 0;
pollset->called_shutdown = 0; pollset->called_shutdown = 0;
pollset->kicked_without_pollers = 0; pollset->kicked_without_pollers = 0;
pollset->idle_jobs.head = pollset->idle_jobs.tail = nullptr;
pollset->local_wakeup_cache = nullptr; pollset->local_wakeup_cache = nullptr;
pollset->kicked_without_pollers = 0; pollset->kicked_without_pollers = 0;
pollset->fd_count = 0; pollset->fd_count = 0;
@ -823,7 +821,6 @@ static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
static void pollset_destroy(grpc_pollset* pollset) { static void pollset_destroy(grpc_pollset* pollset) {
GPR_ASSERT(!pollset_has_workers(pollset)); GPR_ASSERT(!pollset_has_workers(pollset));
GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail);
while (pollset->local_wakeup_cache) { while (pollset->local_wakeup_cache) {
grpc_cached_wakeup_fd* next = pollset->local_wakeup_cache->next; grpc_cached_wakeup_fd* next = pollset->local_wakeup_cache->next;
grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd); grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd);
@ -855,7 +852,6 @@ exit:
} }
static void finish_shutdown(grpc_pollset* pollset) { static void finish_shutdown(grpc_pollset* pollset) {
GPR_ASSERT(grpc_closure_list_empty(pollset->idle_jobs));
size_t i; size_t i;
for (i = 0; i < pollset->fd_count; i++) { for (i = 0; i < pollset->fd_count; i++) {
GRPC_FD_UNREF(pollset->fds[i], "multipoller"); GRPC_FD_UNREF(pollset->fds[i], "multipoller");
@ -906,14 +902,6 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
} }
} }
worker.kicked_specifically = 0; worker.kicked_specifically = 0;
/* If there's work waiting for the pollset to be idle, and the
pollset is idle, then do that work */
if (!pollset_has_workers(pollset) &&
!grpc_closure_list_empty(pollset->idle_jobs)) {
GPR_TIMER_MARK("pollset_work.idle_jobs", 0);
GRPC_CLOSURE_LIST_SCHED(&pollset->idle_jobs);
goto done;
}
/* If we're shutting down then we don't execute any extended work */ /* If we're shutting down then we don't execute any extended work */
if (pollset->shutting_down) { if (pollset->shutting_down) {
GPR_TIMER_MARK("pollset_work.shutting_down", 0); GPR_TIMER_MARK("pollset_work.shutting_down", 0);
@ -1101,11 +1089,6 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
* pollset_work. * pollset_work.
* TODO(dklempner): Can we refactor the shutdown logic to avoid this? */ * TODO(dklempner): Can we refactor the shutdown logic to avoid this? */
gpr_mu_lock(&pollset->mu); gpr_mu_lock(&pollset->mu);
} else if (!grpc_closure_list_empty(pollset->idle_jobs)) {
GRPC_CLOSURE_LIST_SCHED(&pollset->idle_jobs);
gpr_mu_unlock(&pollset->mu);
grpc_core::ExecCtx::Get()->Flush();
gpr_mu_lock(&pollset->mu);
} }
} }
if (worker_hdl) *worker_hdl = nullptr; if (worker_hdl) *worker_hdl = nullptr;
@ -1118,9 +1101,6 @@ static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
pollset->shutting_down = 1; pollset->shutting_down = 1;
pollset->shutdown_done = closure; pollset->shutdown_done = closure;
pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
if (!pollset_has_workers(pollset)) {
GRPC_CLOSURE_LIST_SCHED(&pollset->idle_jobs);
}
if (!pollset->called_shutdown && !pollset_has_observers(pollset)) { if (!pollset->called_shutdown && !pollset_has_observers(pollset)) {
pollset->called_shutdown = 1; pollset->called_shutdown = 1;
finish_shutdown(pollset); finish_shutdown(pollset);

@ -224,26 +224,26 @@ void grpc_fd_notify_on_write(grpc_fd* fd, grpc_closure* closure) {
g_event_engine->fd_notify_on_write(fd, closure); g_event_engine->fd_notify_on_write(fd, closure);
} }
size_t grpc_pollset_size(void) { return g_event_engine->pollset_size; } static size_t pollset_size(void) { return g_event_engine->pollset_size; }
void grpc_pollset_init(grpc_pollset* pollset, gpr_mu** mu) { static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
GRPC_POLLING_API_TRACE("pollset_init(%p)", pollset); GRPC_POLLING_API_TRACE("pollset_init(%p)", pollset);
g_event_engine->pollset_init(pollset, mu); g_event_engine->pollset_init(pollset, mu);
} }
void grpc_pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) { static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
GRPC_POLLING_API_TRACE("pollset_shutdown(%p)", pollset); GRPC_POLLING_API_TRACE("pollset_shutdown(%p)", pollset);
g_event_engine->pollset_shutdown(pollset, closure); g_event_engine->pollset_shutdown(pollset, closure);
} }
void grpc_pollset_destroy(grpc_pollset* pollset) { static void pollset_destroy(grpc_pollset* pollset) {
GRPC_POLLING_API_TRACE("pollset_destroy(%p)", pollset); GRPC_POLLING_API_TRACE("pollset_destroy(%p)", pollset);
g_event_engine->pollset_destroy(pollset); g_event_engine->pollset_destroy(pollset);
} }
grpc_error* grpc_pollset_work(grpc_pollset* pollset, static grpc_error* pollset_work(grpc_pollset* pollset,
grpc_pollset_worker** worker, grpc_pollset_worker** worker,
grpc_millis deadline) { grpc_millis deadline) {
GRPC_POLLING_API_TRACE("pollset_work(%p, %" PRIdPTR ") begin", pollset, GRPC_POLLING_API_TRACE("pollset_work(%p, %" PRIdPTR ") begin", pollset,
deadline); deadline);
grpc_error* err = g_event_engine->pollset_work(pollset, worker, deadline); grpc_error* err = g_event_engine->pollset_work(pollset, worker, deadline);
@ -252,8 +252,8 @@ grpc_error* grpc_pollset_work(grpc_pollset* pollset,
return err; return err;
} }
grpc_error* grpc_pollset_kick(grpc_pollset* pollset, static grpc_error* pollset_kick(grpc_pollset* pollset,
grpc_pollset_worker* specific_worker) { grpc_pollset_worker* specific_worker) {
GRPC_POLLING_API_TRACE("pollset_kick(%p, %p)", pollset, specific_worker); GRPC_POLLING_API_TRACE("pollset_kick(%p, %p)", pollset, specific_worker);
return g_event_engine->pollset_kick(pollset, specific_worker); return g_event_engine->pollset_kick(pollset, specific_worker);
} }
@ -264,43 +264,57 @@ void grpc_pollset_add_fd(grpc_pollset* pollset, struct grpc_fd* fd) {
g_event_engine->pollset_add_fd(pollset, fd); g_event_engine->pollset_add_fd(pollset, fd);
} }
grpc_pollset_set* grpc_pollset_set_create(void) { void pollset_global_init() {}
void pollset_global_shutdown() {}
grpc_pollset_vtable grpc_posix_pollset_vtable = {
pollset_global_init, pollset_global_shutdown,
pollset_init, pollset_shutdown,
pollset_destroy, pollset_work,
pollset_kick, pollset_size};
static grpc_pollset_set* pollset_set_create(void) {
grpc_pollset_set* pss = g_event_engine->pollset_set_create(); grpc_pollset_set* pss = g_event_engine->pollset_set_create();
GRPC_POLLING_API_TRACE("pollset_set_create(%p)", pss); GRPC_POLLING_API_TRACE("pollset_set_create(%p)", pss);
return pss; return pss;
} }
void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set) { static void pollset_set_destroy(grpc_pollset_set* pollset_set) {
GRPC_POLLING_API_TRACE("pollset_set_destroy(%p)", pollset_set); GRPC_POLLING_API_TRACE("pollset_set_destroy(%p)", pollset_set);
g_event_engine->pollset_set_destroy(pollset_set); g_event_engine->pollset_set_destroy(pollset_set);
} }
void grpc_pollset_set_add_pollset(grpc_pollset_set* pollset_set, static void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) { grpc_pollset* pollset) {
GRPC_POLLING_API_TRACE("pollset_set_add_pollset(%p, %p)", pollset_set, GRPC_POLLING_API_TRACE("pollset_set_add_pollset(%p, %p)", pollset_set,
pollset); pollset);
g_event_engine->pollset_set_add_pollset(pollset_set, pollset); g_event_engine->pollset_set_add_pollset(pollset_set, pollset);
} }
void grpc_pollset_set_del_pollset(grpc_pollset_set* pollset_set, static void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) { grpc_pollset* pollset) {
GRPC_POLLING_API_TRACE("pollset_set_del_pollset(%p, %p)", pollset_set, GRPC_POLLING_API_TRACE("pollset_set_del_pollset(%p, %p)", pollset_set,
pollset); pollset);
g_event_engine->pollset_set_del_pollset(pollset_set, pollset); g_event_engine->pollset_set_del_pollset(pollset_set, pollset);
} }
void grpc_pollset_set_add_pollset_set(grpc_pollset_set* bag, static void pollset_set_add_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) { grpc_pollset_set* item) {
GRPC_POLLING_API_TRACE("pollset_set_add_pollset_set(%p, %p)", bag, item); GRPC_POLLING_API_TRACE("pollset_set_add_pollset_set(%p, %p)", bag, item);
g_event_engine->pollset_set_add_pollset_set(bag, item); g_event_engine->pollset_set_add_pollset_set(bag, item);
} }
void grpc_pollset_set_del_pollset_set(grpc_pollset_set* bag, static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) { grpc_pollset_set* item) {
GRPC_POLLING_API_TRACE("pollset_set_del_pollset_set(%p, %p)", bag, item); GRPC_POLLING_API_TRACE("pollset_set_del_pollset_set(%p, %p)", bag, item);
g_event_engine->pollset_set_del_pollset_set(bag, item); g_event_engine->pollset_set_del_pollset_set(bag, item);
} }
grpc_pollset_set_vtable grpc_posix_pollset_set_vtable = {
pollset_set_create, pollset_set_destroy,
pollset_set_add_pollset, pollset_set_del_pollset,
pollset_set_add_pollset_set, pollset_set_del_pollset_set};
void grpc_pollset_set_add_fd(grpc_pollset_set* pollset_set, grpc_fd* fd) { void grpc_pollset_set_add_fd(grpc_pollset_set* pollset_set, grpc_fd* fd) {
GRPC_POLLING_API_TRACE("pollset_set_add_fd(%p, %d)", pollset_set, GRPC_POLLING_API_TRACE("pollset_set_add_fd(%p, %d)", pollset_set,
grpc_fd_wrapped_fd(fd)); grpc_fd_wrapped_fd(fd));

@ -54,23 +54,32 @@ grpc_millis grpc_timespec_to_millis_round_up(gpr_timespec timespec);
namespace grpc_core { namespace grpc_core {
/** Execution context. /** Execution context.
* A bag of data that collects information along a callstack. * A bag of data that collects information along a callstack.
* Generally created at public API entry points, and passed down as * It is created on the stack at public API entry points, and stored internally
* pointer to child functions that manipulate it. * as a thread-local variable.
*
* Generally, to create an exec_ctx instance, add the following line at the top
* of the public API entry point or at the start of a thread's work function :
*
* grpc_core::ExecCtx exec_ctx;
*
* Access the created ExecCtx instance using :
* grpc_core::ExecCtx::Get()
* *
* Specific responsibilities (this may grow in the future): * Specific responsibilities (this may grow in the future):
* - track a list of work that needs to be delayed until the top of the * - track a list of work that needs to be delayed until the top of the
* call stack (this provides a convenient mechanism to run callbacks * call stack (this provides a convenient mechanism to run callbacks
* without worrying about locking issues) * without worrying about locking issues)
* - provide a decision maker (via grpc_exec_ctx_ready_to_finish) that provides * - provide a decision maker (via IsReadyToFinish) that provides a
* signal as to whether a borrowed thread should continue to do work or * signal as to whether a borrowed thread should continue to do work or
* should actively try to finish up and get this thread back to its owner * should actively try to finish up and get this thread back to its owner
* *
* CONVENTIONS: * CONVENTIONS:
* - Instance of this must ALWAYS be constructed on the stack, never * - Instance of this must ALWAYS be constructed on the stack, never
* heap allocated. * heap allocated.
* - Instances and pointers to them must always be called exec_ctx. * - Exactly one instance of ExecCtx must be created per thread. Instances must
* - Instances are always passed as the first argument to a function that * always be called exec_ctx.
* takes it, and always as a pointer (grpc_exec_ctx is never copied). * - Do not pass exec_ctx as a parameter to a function. Always access it using
* grpc_core::ExecCtx::Get()
*/ */
class ExecCtx { class ExecCtx {
public: public:
@ -171,6 +180,10 @@ on outside context */
return reinterpret_cast<ExecCtx*>(gpr_tls_get(&exec_ctx_)); return reinterpret_cast<ExecCtx*>(gpr_tls_get(&exec_ctx_));
} }
static void Set(ExecCtx* exec_ctx) {
gpr_tls_set(&exec_ctx_, reinterpret_cast<intptr_t>(exec_ctx));
}
protected: protected:
/** Check if ready to finish */ /** Check if ready to finish */
virtual bool CheckReadyToFinish() { return false; } virtual bool CheckReadyToFinish() { return false; }
@ -180,9 +193,6 @@ on outside context */
private: private:
/** Set exec_ctx_ to exec_ctx */ /** Set exec_ctx_ to exec_ctx */
void Set(ExecCtx* exec_ctx) {
gpr_tls_set(&exec_ctx_, reinterpret_cast<intptr_t>(exec_ctx));
}
grpc_closure_list closure_list_ = GRPC_CLOSURE_LIST_INIT; grpc_closure_list closure_list_ = GRPC_CLOSURE_LIST_INIT;
CombinerData combiner_data_ = {nullptr, nullptr}; CombinerData combiner_data_ = {nullptr, nullptr};

@ -27,6 +27,7 @@
#ifdef GRPC_WINSOCK_SOCKET #ifdef GRPC_WINSOCK_SOCKET
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/socket_windows.h" #include "src/core/lib/iomgr/socket_windows.h"
typedef enum { typedef enum {

@ -47,6 +47,7 @@ static grpc_iomgr_object g_root_object;
void grpc_iomgr_init() { void grpc_iomgr_init() {
grpc_core::ExecCtx exec_ctx; grpc_core::ExecCtx exec_ctx;
grpc_determine_iomgr_platform();
g_shutdown = 0; g_shutdown = 0;
gpr_mu_init(&g_mu); gpr_mu_init(&g_mu);
gpr_cv_init(&g_rcv); gpr_cv_init(&g_rcv);

@ -0,0 +1,63 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#include <grpc/support/thd_id.h>
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/executor.h"
#include "src/core/lib/iomgr/iomgr_custom.h"
#include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/pollset_custom.h"
#include "src/core/lib/iomgr/pollset_set_custom.h"
#include "src/core/lib/iomgr/resolve_address_custom.h"
gpr_thd_id g_init_thread;
static void iomgr_platform_init(void) {
grpc_core::ExecCtx exec_ctx;
grpc_executor_set_threading(false);
g_init_thread = gpr_thd_currentid();
grpc_pollset_global_init();
}
static void iomgr_platform_flush(void) {}
static void iomgr_platform_shutdown(void) { grpc_pollset_global_shutdown(); }
static grpc_iomgr_platform_vtable vtable = {
iomgr_platform_init, iomgr_platform_flush, iomgr_platform_shutdown};
void grpc_custom_iomgr_init(grpc_socket_vtable* socket,
grpc_custom_resolver_vtable* resolver,
grpc_custom_timer_vtable* timer,
grpc_custom_poller_vtable* poller) {
grpc_custom_endpoint_init(socket);
grpc_custom_timer_init(timer);
grpc_custom_pollset_init(poller);
grpc_custom_pollset_set_init();
grpc_custom_resolver_init(resolver);
grpc_set_iomgr_platform_vtable(&vtable);
}
#ifdef GRPC_CUSTOM_SOCKET
grpc_iomgr_platform_vtable* grpc_default_iomgr_platform_vtable() {
return &vtable;
}
#endif

@ -16,24 +16,32 @@
* *
*/ */
#ifndef GRPC_CORE_LIB_IOMGR_IOMGR_UV_H #ifndef GRPC_CORE_LIB_IOMGR_IOMGR_CUSTOM_H
#define GRPC_CORE_LIB_IOMGR_IOMGR_UV_H #define GRPC_CORE_LIB_IOMGR_IOMGR_CUSTOM_H
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/pollset_custom.h"
#include "src/core/lib/iomgr/resolve_address_custom.h"
#include "src/core/lib/iomgr/tcp_custom.h"
#include "src/core/lib/iomgr/timer_custom.h"
#include <grpc/support/thd_id.h> #include <grpc/support/thd_id.h>
/* The thread ID of the thread on which grpc was initialized. Used to verify /* The thread ID of the thread on which grpc was initialized. Used to verify
* that all calls into libuv are made on that same thread */ * that all calls into the custom iomgr are made on that same thread */
extern gpr_thd_id g_init_thread; extern gpr_thd_id g_init_thread;
#ifdef GRPC_UV_THREAD_CHECK #ifdef GRPC_CUSTOM_IOMGR_THREAD_CHECK
#define GRPC_UV_ASSERT_SAME_THREAD() \ #define GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD() \
GPR_ASSERT(gpr_thd_currentid() == g_init_thread) GPR_ASSERT(gpr_thd_currentid() == g_init_thread)
#else #else
#define GRPC_UV_ASSERT_SAME_THREAD() #define GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD()
#endif /* GRPC_UV_THREAD_CHECK */ #endif /* GRPC_UV_THREAD_CHECK */
#endif /* GRPC_CORE_LIB_IOMGR_IOMGR_UV_H */ void grpc_custom_iomgr_init(grpc_socket_vtable* socket,
grpc_custom_resolver_vtable* resolver,
grpc_custom_timer_vtable* timer,
grpc_custom_poller_vtable* poller);
#endif /* GRPC_CORE_LIB_IOMGR_IOMGR_CUSTOM_H */

@ -0,0 +1,43 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include <stddef.h>
#include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/timer.h"
#include "src/core/lib/iomgr/timer_manager.h"
static grpc_iomgr_platform_vtable* iomgr_platform_vtable = nullptr;
void grpc_set_iomgr_platform_vtable(grpc_iomgr_platform_vtable* vtable) {
iomgr_platform_vtable = vtable;
}
void grpc_determine_iomgr_platform() {
if (iomgr_platform_vtable == nullptr) {
grpc_set_default_iomgr_platform();
}
}
void grpc_iomgr_platform_init() { iomgr_platform_vtable->init(); }
void grpc_iomgr_platform_flush() { iomgr_platform_vtable->flush(); }
void grpc_iomgr_platform_shutdown() { iomgr_platform_vtable->shutdown(); }

@ -31,9 +31,21 @@ typedef struct grpc_iomgr_object {
struct grpc_iomgr_object* prev; struct grpc_iomgr_object* prev;
} grpc_iomgr_object; } grpc_iomgr_object;
typedef struct grpc_iomgr_platform_vtable {
void (*init)(void);
void (*flush)(void);
void (*shutdown)(void);
} grpc_iomgr_platform_vtable;
void grpc_iomgr_register_object(grpc_iomgr_object* obj, const char* name); void grpc_iomgr_register_object(grpc_iomgr_object* obj, const char* name);
void grpc_iomgr_unregister_object(grpc_iomgr_object* obj); void grpc_iomgr_unregister_object(grpc_iomgr_object* obj);
void grpc_determine_iomgr_platform();
void grpc_set_iomgr_platform_vtable(grpc_iomgr_platform_vtable* vtable);
void grpc_set_default_iomgr_platform();
void grpc_iomgr_platform_init(void); void grpc_iomgr_platform_init(void);
/** flush any globally queued work from iomgr */ /** flush any globally queued work from iomgr */
void grpc_iomgr_platform_flush(void); void grpc_iomgr_platform_flush(void);

@ -24,19 +24,44 @@
#include "src/core/lib/debug/trace.h" #include "src/core/lib/debug/trace.h"
#include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/ev_posix.h"
#include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/iomgr_posix.h" #include "src/core/lib/iomgr/iomgr_posix.h"
#include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/lib/iomgr/tcp_client.h"
#include "src/core/lib/iomgr/tcp_posix.h" #include "src/core/lib/iomgr/tcp_posix.h"
#include "src/core/lib/iomgr/tcp_server.h"
#include "src/core/lib/iomgr/timer.h"
void grpc_iomgr_platform_init(void) { extern grpc_tcp_server_vtable grpc_posix_tcp_server_vtable;
extern grpc_tcp_client_vtable grpc_posix_tcp_client_vtable;
extern grpc_timer_vtable grpc_generic_timer_vtable;
extern grpc_pollset_vtable grpc_posix_pollset_vtable;
extern grpc_pollset_set_vtable grpc_posix_pollset_set_vtable;
extern grpc_address_resolver_vtable grpc_posix_resolver_vtable;
static void iomgr_platform_init(void) {
grpc_wakeup_fd_global_init(); grpc_wakeup_fd_global_init();
grpc_event_engine_init(); grpc_event_engine_init();
} }
void grpc_iomgr_platform_flush(void) {} static void iomgr_platform_flush(void) {}
void grpc_iomgr_platform_shutdown(void) { static void iomgr_platform_shutdown(void) {
grpc_event_engine_shutdown(); grpc_event_engine_shutdown();
grpc_wakeup_fd_global_destroy(); grpc_wakeup_fd_global_destroy();
} }
static grpc_iomgr_platform_vtable vtable = {
iomgr_platform_init, iomgr_platform_flush, iomgr_platform_shutdown};
void grpc_set_default_iomgr_platform() {
grpc_set_tcp_client_impl(&grpc_posix_tcp_client_vtable);
grpc_set_tcp_server_impl(&grpc_posix_tcp_server_vtable);
grpc_set_timer_impl(&grpc_generic_timer_vtable);
grpc_set_pollset_vtable(&grpc_posix_pollset_vtable);
grpc_set_pollset_set_vtable(&grpc_posix_pollset_set_vtable);
grpc_set_resolver_impl(&grpc_posix_resolver_vtable);
grpc_set_iomgr_platform_vtable(&vtable);
}
#endif /* GRPC_POSIX_SOCKET */ #endif /* GRPC_POSIX_SOCKET */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2016 gRPC authors. * Copyright 2018 gRPC authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,26 +20,21 @@
#include "src/core/lib/iomgr/port.h" #include "src/core/lib/iomgr/port.h"
#ifdef GRPC_UV #if defined(GRPC_CUSTOM_SOCKET) && defined(GRPC_UV)
#include <grpc/support/thd_id.h> #include "src/core/lib/iomgr/iomgr_custom.h"
#include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/pollset_custom.h"
#include "src/core/lib/iomgr/tcp_custom.h"
#include "src/core/lib/iomgr/timer_custom.h"
#include "src/core/lib/debug/trace.h" extern grpc_socket_vtable grpc_uv_socket_vtable;
#include "src/core/lib/iomgr/executor.h" extern grpc_custom_resolver_vtable uv_resolver_vtable;
#include "src/core/lib/iomgr/iomgr_uv.h" extern grpc_custom_timer_vtable uv_timer_vtable;
#include "src/core/lib/iomgr/pollset_uv.h" extern grpc_custom_poller_vtable uv_pollset_vtable;
#include "src/core/lib/iomgr/tcp_uv.h"
gpr_thd_id g_init_thread; void grpc_set_default_iomgr_platform() {
grpc_custom_iomgr_init(&grpc_uv_socket_vtable, &uv_resolver_vtable,
void grpc_iomgr_platform_init(void) { &uv_timer_vtable, &uv_pollset_vtable);
grpc_core::ExecCtx exec_ctx;
grpc_pollset_global_init();
grpc_executor_set_threading(false);
g_init_thread = gpr_thd_currentid();
} }
void grpc_iomgr_platform_flush(void) {} #endif
void grpc_iomgr_platform_shutdown(void) { grpc_pollset_global_shutdown(); }
#endif /* GRPC_UV */

@ -29,7 +29,18 @@
#include "src/core/lib/iomgr/iocp_windows.h" #include "src/core/lib/iomgr/iocp_windows.h"
#include "src/core/lib/iomgr/iomgr.h" #include "src/core/lib/iomgr/iomgr.h"
#include "src/core/lib/iomgr/pollset_windows.h" #include "src/core/lib/iomgr/pollset_windows.h"
#include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/lib/iomgr/socket_windows.h" #include "src/core/lib/iomgr/socket_windows.h"
#include "src/core/lib/iomgr/tcp_client.h"
#include "src/core/lib/iomgr/tcp_server.h"
#include "src/core/lib/iomgr/timer.h"
extern grpc_tcp_server_vtable grpc_windows_tcp_server_vtable;
extern grpc_tcp_client_vtable grpc_windows_tcp_client_vtable;
extern grpc_timer_vtable grpc_generic_timer_vtable;
extern grpc_pollset_vtable grpc_windows_pollset_vtable;
extern grpc_pollset_set_vtable grpc_windows_pollset_set_vtable;
extern grpc_address_resolver_vtable grpc_windows_resolver_vtable;
/* Windows' io manager is going to be fully designed using IO completion /* Windows' io manager is going to be fully designed using IO completion
ports. All of what we're doing here is basically make sure that ports. All of what we're doing here is basically make sure that
@ -46,18 +57,31 @@ static void winsock_shutdown(void) {
GPR_ASSERT(status == 0); GPR_ASSERT(status == 0);
} }
void grpc_iomgr_platform_init(void) { static void iomgr_platform_init(void) {
winsock_init(); winsock_init();
grpc_iocp_init(); grpc_iocp_init();
grpc_pollset_global_init(); grpc_pollset_global_init();
} }
void grpc_iomgr_platform_flush(void) { grpc_iocp_flush(); } static void iomgr_platform_flush(void) { grpc_iocp_flush(); }
void grpc_iomgr_platform_shutdown(void) { static void iomgr_platform_shutdown(void) {
grpc_pollset_global_shutdown(); grpc_pollset_global_shutdown();
grpc_iocp_shutdown(); grpc_iocp_shutdown();
winsock_shutdown(); winsock_shutdown();
} }
static grpc_iomgr_platform_vtable vtable = {
iomgr_platform_init, iomgr_platform_flush, iomgr_platform_shutdown};
void grpc_set_default_iomgr_platform() {
grpc_set_tcp_client_impl(&grpc_windows_tcp_client_vtable);
grpc_set_tcp_server_impl(&grpc_windows_tcp_server_vtable);
grpc_set_timer_impl(&grpc_generic_timer_vtable);
grpc_set_pollset_vtable(&grpc_windows_pollset_vtable);
grpc_set_pollset_set_vtable(&grpc_windows_pollset_set_vtable);
grpc_set_resolver_impl(&grpc_windows_resolver_vtable);
grpc_set_iomgr_platform_vtable(&vtable);
}
#endif /* GRPC_WINSOCK_SOCKET */ #endif /* GRPC_WINSOCK_SOCKET */

@ -25,7 +25,7 @@
#include <grpc/support/atm.h> #include <grpc/support/atm.h>
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/closure.h"
namespace grpc_core { namespace grpc_core {

@ -0,0 +1,56 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/pollset.h"
grpc_pollset_vtable* grpc_pollset_impl;
void grpc_set_pollset_vtable(grpc_pollset_vtable* vtable) {
grpc_pollset_impl = vtable;
}
void grpc_pollset_global_init() { grpc_pollset_impl->global_init(); }
void grpc_pollset_global_shutdown() { grpc_pollset_impl->global_shutdown(); }
void grpc_pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
grpc_pollset_impl->init(pollset, mu);
}
void grpc_pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
grpc_pollset_impl->shutdown(pollset, closure);
}
void grpc_pollset_destroy(grpc_pollset* pollset) {
grpc_pollset_impl->destroy(pollset);
}
grpc_error* grpc_pollset_work(grpc_pollset* pollset,
grpc_pollset_worker** worker,
grpc_millis deadline) {
return grpc_pollset_impl->work(pollset, worker, deadline);
}
grpc_error* grpc_pollset_kick(grpc_pollset* pollset,
grpc_pollset_worker* specific_worker) {
return grpc_pollset_impl->kick(pollset, specific_worker);
}
size_t grpc_pollset_size(void) { return grpc_pollset_impl->pollset_size(); }

@ -38,6 +38,24 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_fd_refcount;
typedef struct grpc_pollset grpc_pollset; typedef struct grpc_pollset grpc_pollset;
typedef struct grpc_pollset_worker grpc_pollset_worker; typedef struct grpc_pollset_worker grpc_pollset_worker;
typedef struct grpc_pollset_vtable {
void (*global_init)(void);
void (*global_shutdown)(void);
void (*init)(grpc_pollset* pollset, gpr_mu** mu);
void (*shutdown)(grpc_pollset* pollset, grpc_closure* closure);
void (*destroy)(grpc_pollset* pollset);
grpc_error* (*work)(grpc_pollset* pollset, grpc_pollset_worker** worker,
grpc_millis deadline);
grpc_error* (*kick)(grpc_pollset* pollset,
grpc_pollset_worker* specific_worker);
size_t (*pollset_size)(void);
} grpc_pollset_vtable;
void grpc_set_pollset_vtable(grpc_pollset_vtable* vtable);
void grpc_pollset_global_init(void);
void grpc_pollset_global_shutdown(void);
size_t grpc_pollset_size(void); size_t grpc_pollset_size(void);
/* Initialize a pollset: assumes *pollset contains all zeros */ /* Initialize a pollset: assumes *pollset contains all zeros */
void grpc_pollset_init(grpc_pollset* pollset, gpr_mu** mu); void grpc_pollset_init(grpc_pollset* pollset, gpr_mu** mu);

@ -0,0 +1,106 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#include <stddef.h>
#include <string.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/iomgr_custom.h"
#include "src/core/lib/iomgr/pollset.h"
#include "src/core/lib/iomgr/pollset_custom.h"
#include "src/core/lib/iomgr/timer.h"
#include "src/core/lib/debug/trace.h"
static grpc_custom_poller_vtable* poller_vtable;
struct grpc_pollset {
gpr_mu mu;
};
static size_t pollset_size() { return sizeof(grpc_pollset); }
static void pollset_global_init() { poller_vtable->init(); }
static void pollset_global_shutdown() { poller_vtable->shutdown(); }
static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
gpr_mu_init(&pollset->mu);
*mu = &pollset->mu;
}
static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_NONE);
}
static void pollset_destroy(grpc_pollset* pollset) {
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
gpr_mu_destroy(&pollset->mu);
}
static grpc_error* pollset_work(grpc_pollset* pollset,
grpc_pollset_worker** worker_hdl,
grpc_millis deadline) {
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
gpr_mu_unlock(&pollset->mu);
grpc_millis now = grpc_core::ExecCtx::Get()->Now();
size_t timeout = 0;
if (deadline > now) {
timeout = deadline - now;
}
// We yield here because the poll() call might yield
// control back to the application
grpc_core::ExecCtx* curr = grpc_core::ExecCtx::Get();
grpc_core::ExecCtx::Set(nullptr);
poller_vtable->poll(timeout);
grpc_core::ExecCtx::Set(curr);
grpc_core::ExecCtx::Get()->InvalidateNow();
if (grpc_core::ExecCtx::Get()->HasWork()) {
grpc_core::ExecCtx::Get()->Flush();
}
gpr_mu_lock(&pollset->mu);
return GRPC_ERROR_NONE;
}
static grpc_error* pollset_kick(grpc_pollset* pollset,
grpc_pollset_worker* specific_worker) {
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
poller_vtable->kick();
return GRPC_ERROR_NONE;
}
grpc_pollset_vtable custom_pollset_vtable = {
pollset_global_init, pollset_global_shutdown,
pollset_init, pollset_shutdown,
pollset_destroy, pollset_work,
pollset_kick, pollset_size};
void grpc_custom_pollset_init(grpc_custom_poller_vtable* vtable) {
poller_vtable = vtable;
grpc_set_pollset_vtable(&custom_pollset_vtable);
}

@ -0,0 +1,35 @@
/*
*
* 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.
*
*/
#ifndef GRPC_CORE_LIB_IOMGR_POLLSET_CUSTOM_H
#define GRPC_CORE_LIB_IOMGR_POLLSET_CUSTOM_H
#include <grpc/support/port_platform.h>
#include <stddef.h>
typedef struct grpc_custom_poller_vtable {
void (*init)();
void (*poll)(size_t timeout_ms);
void (*kick)();
void (*shutdown)();
} grpc_custom_poller_vtable;
void grpc_custom_pollset_init(grpc_custom_poller_vtable* vtable);
#endif /* GRPC_CORE_LIB_IOMGR_POLLSET_CUSTOM_H */

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2016 gRPC authors. * Copyright 2018 gRPC authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -18,28 +18,38 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h" #include "src/core/lib/iomgr/pollset_set.h"
#ifdef GRPC_UV grpc_pollset_set_vtable* grpc_pollset_set_impl;
#include "src/core/lib/iomgr/pollset_set.h" void grpc_set_pollset_set_vtable(grpc_pollset_set_vtable* vtable) {
grpc_pollset_set_impl = vtable;
}
grpc_pollset_set* grpc_pollset_set_create(void) { grpc_pollset_set* grpc_pollset_set_create() {
return (grpc_pollset_set*)((intptr_t)0xdeafbeef); return grpc_pollset_set_impl->create();
} }
void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set) {} void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set) {
grpc_pollset_set_impl->destroy(pollset_set);
}
void grpc_pollset_set_add_pollset(grpc_pollset_set* pollset_set, void grpc_pollset_set_add_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) {} grpc_pollset* pollset) {
grpc_pollset_set_impl->add_pollset(pollset_set, pollset);
}
void grpc_pollset_set_del_pollset(grpc_pollset_set* pollset_set, void grpc_pollset_set_del_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) {} grpc_pollset* pollset) {
grpc_pollset_set_impl->del_pollset(pollset_set, pollset);
}
void grpc_pollset_set_add_pollset_set(grpc_pollset_set* bag, void grpc_pollset_set_add_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) {} grpc_pollset_set* item) {
grpc_pollset_set_impl->add_pollset_set(bag, item);
}
void grpc_pollset_set_del_pollset_set(grpc_pollset_set* bag, void grpc_pollset_set_del_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) {} grpc_pollset_set* item) {
grpc_pollset_set_impl->del_pollset_set(bag, item);
#endif /* GRPC_UV */ }

@ -30,6 +30,17 @@
typedef struct grpc_pollset_set grpc_pollset_set; typedef struct grpc_pollset_set grpc_pollset_set;
typedef struct grpc_pollset_set_vtable {
grpc_pollset_set* (*create)(void);
void (*destroy)(grpc_pollset_set* pollset_set);
void (*add_pollset)(grpc_pollset_set* pollset_set, grpc_pollset* pollset);
void (*del_pollset)(grpc_pollset_set* pollset_set, grpc_pollset* pollset);
void (*add_pollset_set)(grpc_pollset_set* bag, grpc_pollset_set* item);
void (*del_pollset_set)(grpc_pollset_set* bag, grpc_pollset_set* item);
} grpc_pollset_set_vtable;
void grpc_set_pollset_set_vtable(grpc_pollset_set_vtable* vtable);
grpc_pollset_set* grpc_pollset_set_create(void); grpc_pollset_set* grpc_pollset_set_create(void);
void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set); void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set);
void grpc_pollset_set_add_pollset(grpc_pollset_set* pollset_set, void grpc_pollset_set_add_pollset(grpc_pollset_set* pollset_set,

@ -0,0 +1,48 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#include "src/core/lib/iomgr/pollset_set.h"
grpc_pollset_set* pollset_set_create(void) {
return (grpc_pollset_set*)((intptr_t)0xdeafbeef);
}
void pollset_set_destroy(grpc_pollset_set* pollset_set) {}
void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) {}
void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) {}
void pollset_set_add_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) {}
void pollset_set_del_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) {}
static grpc_pollset_set_vtable vtable = {
pollset_set_create, pollset_set_destroy,
pollset_set_add_pollset, pollset_set_del_pollset,
pollset_set_add_pollset_set, pollset_set_del_pollset_set};
void grpc_custom_pollset_set_init() { grpc_set_pollset_set_vtable(&vtable); }

@ -1,6 +1,6 @@
/* /*
* *
* Copyright 2016 gRPC authors. * Copyright 2018 gRPC authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,19 +16,11 @@
* *
*/ */
#ifndef GRPC_CORE_LIB_IOMGR_TIMER_UV_H #ifndef GRPC_CORE_LIB_IOMGR_POLLSET_SET_CUSTOM_H
#define GRPC_CORE_LIB_IOMGR_TIMER_UV_H #define GRPC_CORE_LIB_IOMGR_POLLSET_SET_CUSTOM_H
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/exec_ctx.h" void grpc_custom_pollset_set_init();
struct grpc_timer { #endif /* GRPC_CORE_LIB_IOMGR_POLLSET_SET_CUSTOM_H */
grpc_closure* closure;
/* This is actually a uv_timer_t*, but we want to keep platform-specific
types out of headers */
void* uv_timer;
int pending;
};
#endif /* GRPC_CORE_LIB_IOMGR_TIMER_UV_H */

@ -25,22 +25,27 @@
#include "src/core/lib/iomgr/pollset_set_windows.h" #include "src/core/lib/iomgr/pollset_set_windows.h"
grpc_pollset_set* grpc_pollset_set_create(void) { static grpc_pollset_set* pollset_set_create(void) {
return (grpc_pollset_set*)((intptr_t)0xdeafbeef); return (grpc_pollset_set*)((intptr_t)0xdeafbeef);
} }
void grpc_pollset_set_destroy(grpc_pollset_set* pollset_set) {} static void pollset_set_destroy(grpc_pollset_set* pollset_set) {}
void grpc_pollset_set_add_pollset(grpc_pollset_set* pollset_set, static void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) {} grpc_pollset* pollset) {}
void grpc_pollset_set_del_pollset(grpc_pollset_set* pollset_set, static void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
grpc_pollset* pollset) {} grpc_pollset* pollset) {}
void grpc_pollset_set_add_pollset_set(grpc_pollset_set* bag, static void pollset_set_add_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) {} grpc_pollset_set* item) {}
void grpc_pollset_set_del_pollset_set(grpc_pollset_set* bag, static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
grpc_pollset_set* item) {} grpc_pollset_set* item) {}
grpc_pollset_set_vtable grpc_windows_pollset_set_vtable = {
pollset_set_create, pollset_set_destroy,
pollset_set_add_pollset, pollset_set_del_pollset,
pollset_set_add_pollset_set, pollset_set_del_pollset_set};
#endif /* GRPC_WINSOCK_SOCKET */ #endif /* GRPC_WINSOCK_SOCKET */

@ -22,137 +22,72 @@
#ifdef GRPC_UV #ifdef GRPC_UV
#include <uv.h>
#include <string.h>
#include <grpc/support/alloc.h> #include <grpc/support/alloc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include <grpc/support/sync.h> #include "src/core/lib/iomgr/pollset_custom.h"
#include "src/core/lib/iomgr/iomgr_uv.h"
#include "src/core/lib/iomgr/pollset.h"
#include "src/core/lib/iomgr/pollset_uv.h"
#include "src/core/lib/debug/trace.h" #include <uv.h>
grpc_core::DebugOnlyTraceFlag grpc_trace_fd_refcount(false, "fd_refcount");
struct grpc_pollset {
uv_timer_t* timer;
int shutting_down;
};
/* Indicates that grpc_pollset_work should run an iteration of the UV loop /* Indicates that grpc_pollset_work should run an iteration of the UV loop
before running callbacks. This defaults to 1, and should be disabled if before running callbacks. This defaults to 1, and should be disabled if
grpc_pollset_work will be called within the callstack of uv_run */ grpc_pollset_work will be called within the callstack of uv_run */
int grpc_pollset_work_run_loop; int grpc_pollset_work_run_loop = 1;
gpr_mu grpc_polling_mu;
/* This is used solely to kick the uv loop, by setting a callback to be run static bool g_kicked = false;
immediately in the next loop iteration.
Note: In the future, if there is a bug that involves missing wakeups in the
future, try adding a uv_async_t to kick the loop differently */
uv_timer_t* dummy_uv_handle;
size_t grpc_pollset_size() { return sizeof(grpc_pollset); } typedef struct uv_poller_handle {
uv_timer_t poll_timer;
uv_timer_t kick_timer;
int refs;
} uv_poller_handle;
void dummy_timer_cb(uv_timer_t* handle) {} static uv_poller_handle* g_handle;
void dummy_handle_close_cb(uv_handle_t* handle) { gpr_free(handle); } static void init() {
g_handle = (uv_poller_handle*)gpr_malloc(sizeof(uv_poller_handle));
void grpc_pollset_global_init(void) { g_handle->refs = 2;
gpr_mu_init(&grpc_polling_mu); uv_timer_init(uv_default_loop(), &g_handle->poll_timer);
dummy_uv_handle = (uv_timer_t*)gpr_malloc(sizeof(uv_timer_t)); uv_timer_init(uv_default_loop(), &g_handle->kick_timer);
uv_timer_init(uv_default_loop(), dummy_uv_handle);
grpc_pollset_work_run_loop = 1;
}
void grpc_pollset_global_shutdown(void) {
GRPC_UV_ASSERT_SAME_THREAD();
gpr_mu_destroy(&grpc_polling_mu);
uv_close((uv_handle_t*)dummy_uv_handle, dummy_handle_close_cb);
} }
static void timer_run_cb(uv_timer_t* timer) {} static void empty_timer_cb(uv_timer_t* handle) {}
static void timer_close_cb(uv_handle_t* handle) { static void kick_timer_cb(uv_timer_t* handle) { g_kicked = false; }
handle->data = (void*)1;
gpr_free(handle);
}
void grpc_pollset_init(grpc_pollset* pollset, gpr_mu** mu) { static void run_loop(size_t timeout) {
GRPC_UV_ASSERT_SAME_THREAD(); if (grpc_pollset_work_run_loop) {
*mu = &grpc_polling_mu; if (timeout == 0) {
pollset->timer = (uv_timer_t*)gpr_malloc(sizeof(uv_timer_t)); uv_run(uv_default_loop(), UV_RUN_NOWAIT);
uv_timer_init(uv_default_loop(), pollset->timer); } else {
pollset->shutting_down = 0; uv_timer_start(&g_handle->poll_timer, empty_timer_cb, timeout, 0);
uv_run(uv_default_loop(), UV_RUN_ONCE);
uv_timer_stop(&g_handle->poll_timer);
}
}
} }
void grpc_pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) { static void kick() {
GPR_ASSERT(!pollset->shutting_down); if (!g_kicked) {
GRPC_UV_ASSERT_SAME_THREAD(); g_kicked = true;
pollset->shutting_down = 1; uv_timer_start(&g_handle->kick_timer, kick_timer_cb, 0, 0);
if (grpc_pollset_work_run_loop) {
// Drain any pending UV callbacks without blocking
uv_run(uv_default_loop(), UV_RUN_NOWAIT);
} else {
// kick the loop once
uv_timer_start(dummy_uv_handle, dummy_timer_cb, 0, 0);
} }
GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_NONE);
} }
void grpc_pollset_destroy(grpc_pollset* pollset) { static void close_timer_cb(uv_handle_t* handle) {
GRPC_UV_ASSERT_SAME_THREAD(); g_handle->refs--;
uv_close((uv_handle_t*)pollset->timer, timer_close_cb); if (g_handle->refs == 0) {
// timer.data is a boolean indicating that the timer has finished closing gpr_free(g_handle);
pollset->timer->data = (void*)0;
if (grpc_pollset_work_run_loop) {
while (!pollset->timer->data) {
uv_run(uv_default_loop(), UV_RUN_NOWAIT);
}
} }
} }
grpc_error* grpc_pollset_work(grpc_pollset* pollset, static void shutdown() {
grpc_pollset_worker** worker_hdl, uv_close((uv_handle_t*)&g_handle->poll_timer, close_timer_cb);
grpc_millis deadline) { uv_close((uv_handle_t*)&g_handle->kick_timer, close_timer_cb);
uint64_t timeout;
GRPC_UV_ASSERT_SAME_THREAD();
gpr_mu_unlock(&grpc_polling_mu);
if (grpc_pollset_work_run_loop) { if (grpc_pollset_work_run_loop) {
grpc_millis now = grpc_core::ExecCtx::Get()->Now(); GPR_ASSERT(uv_run(uv_default_loop(), UV_RUN_DEFAULT) == 0);
if (deadline >= now) {
timeout = deadline - now;
} else {
timeout = 0;
}
/* We special-case timeout=0 so that we don't bother with the timer when
the loop won't block anyway */
if (timeout > 0) {
uv_timer_start(pollset->timer, timer_run_cb, timeout, 0);
/* Run until there is some I/O activity or the timer triggers. It doesn't
matter which happens */
uv_run(uv_default_loop(), UV_RUN_ONCE);
uv_timer_stop(pollset->timer);
} else {
uv_run(uv_default_loop(), UV_RUN_NOWAIT);
}
}
if (!grpc_closure_list_empty(*grpc_core::ExecCtx::Get()->closure_list())) {
grpc_core::ExecCtx::Get()->Flush();
} }
gpr_mu_lock(&grpc_polling_mu);
return GRPC_ERROR_NONE;
} }
grpc_error* grpc_pollset_kick(grpc_pollset* pollset, grpc_custom_poller_vtable uv_pollset_vtable = {init, run_loop, kick, shutdown};
grpc_pollset_worker* specific_worker) {
GRPC_UV_ASSERT_SAME_THREAD();
uv_timer_start(dummy_uv_handle, dummy_timer_cb, 0, 0);
return GRPC_ERROR_NONE;
}
#endif /* GRPC_UV */ #endif /* GRPC_UV */

@ -21,7 +21,12 @@
extern int grpc_pollset_work_run_loop; extern int grpc_pollset_work_run_loop;
void grpc_pollset_global_init(void); typedef struct grpc_custom_poller_vtable {
void grpc_pollset_global_shutdown(void); void (*init)(void);
void (*run_loop)(int blocking);
} grpc_custom_poller_vtable;
void grpc_custom_pollset_global_init(grpc_custom_poller_vtable* vtable);
void grpc_custom_pollset_global_shutdown(void);
#endif /* GRPC_CORE_LIB_IOMGR_POLLSET_UV_H */ #endif /* GRPC_CORE_LIB_IOMGR_POLLSET_UV_H */

@ -38,7 +38,7 @@ gpr_mu grpc_polling_mu;
static grpc_pollset_worker* g_active_poller; static grpc_pollset_worker* g_active_poller;
static grpc_pollset_worker g_global_root_worker; static grpc_pollset_worker g_global_root_worker;
void grpc_pollset_global_init(void) { static void pollset_global_init(void) {
gpr_mu_init(&grpc_polling_mu); gpr_mu_init(&grpc_polling_mu);
g_active_poller = NULL; g_active_poller = NULL;
g_global_root_worker.links[GRPC_POLLSET_WORKER_LINK_GLOBAL].next = g_global_root_worker.links[GRPC_POLLSET_WORKER_LINK_GLOBAL].next =
@ -46,7 +46,7 @@ void grpc_pollset_global_init(void) {
&g_global_root_worker; &g_global_root_worker;
} }
void grpc_pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); } static void pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); }
static void remove_worker(grpc_pollset_worker* worker, static void remove_worker(grpc_pollset_worker* worker,
grpc_pollset_worker_link_type type) { grpc_pollset_worker_link_type type) {
@ -80,21 +80,21 @@ static void push_front_worker(grpc_pollset_worker* root,
worker->links[type].next->links[type].prev = worker; worker->links[type].next->links[type].prev = worker;
} }
size_t grpc_pollset_size(void) { return sizeof(grpc_pollset); } static size_t pollset_size(void) { return sizeof(grpc_pollset); }
/* There isn't really any such thing as a pollset under Windows, due to the /* There isn't really any such thing as a pollset under Windows, due to the
nature of the IO completion ports. We're still going to provide a minimal nature of the IO completion ports. We're still going to provide a minimal
set of features for the sake of the rest of grpc. But grpc_pollset_work set of features for the sake of the rest of grpc. But grpc_pollset_work
won't actually do any polling, and return as quickly as possible. */ won't actually do any polling, and return as quickly as possible. */
void grpc_pollset_init(grpc_pollset* pollset, gpr_mu** mu) { static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
*mu = &grpc_polling_mu; *mu = &grpc_polling_mu;
pollset->root_worker.links[GRPC_POLLSET_WORKER_LINK_POLLSET].next = pollset->root_worker.links[GRPC_POLLSET_WORKER_LINK_POLLSET].next =
pollset->root_worker.links[GRPC_POLLSET_WORKER_LINK_POLLSET].prev = pollset->root_worker.links[GRPC_POLLSET_WORKER_LINK_POLLSET].prev =
&pollset->root_worker; &pollset->root_worker;
} }
void grpc_pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) { static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
pollset->shutting_down = 1; pollset->shutting_down = 1;
grpc_pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST); grpc_pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
if (!pollset->is_iocp_worker) { if (!pollset->is_iocp_worker) {
@ -104,11 +104,11 @@ void grpc_pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
} }
} }
void grpc_pollset_destroy(grpc_pollset* pollset) {} static void pollset_destroy(grpc_pollset* pollset) {}
grpc_error* grpc_pollset_work(grpc_pollset* pollset, static grpc_error* pollset_work(grpc_pollset* pollset,
grpc_pollset_worker** worker_hdl, grpc_pollset_worker** worker_hdl,
grpc_millis deadline) { grpc_millis deadline) {
grpc_pollset_worker worker; grpc_pollset_worker worker;
if (worker_hdl) *worker_hdl = &worker; if (worker_hdl) *worker_hdl = &worker;
@ -182,8 +182,8 @@ done:
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
grpc_error* grpc_pollset_kick(grpc_pollset* p, static grpc_error* pollset_kick(grpc_pollset* p,
grpc_pollset_worker* specific_worker) { grpc_pollset_worker* specific_worker) {
if (specific_worker != NULL) { if (specific_worker != NULL) {
if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) { if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
for (specific_worker = for (specific_worker =
@ -220,4 +220,10 @@ grpc_error* grpc_pollset_kick(grpc_pollset* p,
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
grpc_pollset_vtable grpc_windows_pollset_vtable = {
pollset_global_init, pollset_global_shutdown,
pollset_init, pollset_shutdown,
pollset_destroy, pollset_work,
pollset_kick, pollset_size};
#endif /* GRPC_WINSOCK_SOCKET */ #endif /* GRPC_WINSOCK_SOCKET */

@ -21,8 +21,11 @@
#ifndef GRPC_CORE_LIB_IOMGR_PORT_H #ifndef GRPC_CORE_LIB_IOMGR_PORT_H
#define GRPC_CORE_LIB_IOMGR_PORT_H #define GRPC_CORE_LIB_IOMGR_PORT_H
#if defined(GRPC_UV) #ifdef GRPC_UV
// Do nothing #define GRPC_CUSTOM_SOCKET
#endif
#if defined(GRPC_CUSTOM_SOCKET)
// Do Nothing
#elif defined(GPR_MANYLINUX1) #elif defined(GPR_MANYLINUX1)
#define GRPC_HAVE_ARPA_NAMESER 1 #define GRPC_HAVE_ARPA_NAMESER 1
#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IFADDRS 1
@ -33,13 +36,10 @@
#define GRPC_POSIX_FORK 1 #define GRPC_POSIX_FORK 1
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_SOCKETUTILS 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#define GRPC_LINUX_EPOLL 1 #define GRPC_LINUX_EPOLL 1
#elif defined(GPR_WINDOWS) #elif defined(GPR_WINDOWS)
#define GRPC_TIMER_USE_GENERIC 1
#define GRPC_WINSOCK_SOCKET 1 #define GRPC_WINSOCK_SOCKET 1
#define GRPC_WINDOWS_SOCKETUTILS 1 #define GRPC_WINDOWS_SOCKETUTILS 1
#elif defined(GPR_ANDROID) #elif defined(GPR_ANDROID)
@ -49,10 +49,8 @@
#define GRPC_HAVE_UNIX_SOCKET 1 #define GRPC_HAVE_UNIX_SOCKET 1
#define GRPC_LINUX_EVENTFD 1 #define GRPC_LINUX_EVENTFD 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_SOCKETUTILS 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif defined(GPR_LINUX) #elif defined(GPR_LINUX)
#define GRPC_HAVE_ARPA_NAMESER 1 #define GRPC_HAVE_ARPA_NAMESER 1
#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IFADDRS 1
@ -64,9 +62,7 @@
#define GRPC_POSIX_FORK 1 #define GRPC_POSIX_FORK 1
#define GRPC_POSIX_HOST_NAME_MAX 1 #define GRPC_POSIX_HOST_NAME_MAX 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#ifdef __GLIBC_PREREQ #ifdef __GLIBC_PREREQ
#if __GLIBC_PREREQ(2, 4) #if __GLIBC_PREREQ(2, 4)
#define GRPC_LINUX_EPOLL 1 #define GRPC_LINUX_EPOLL 1
@ -100,11 +96,9 @@
#define GRPC_POSIX_FORK 1 #define GRPC_POSIX_FORK 1
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_SOCKETUTILS 1
#define GRPC_POSIX_SYSCONF 1 #define GRPC_POSIX_SYSCONF 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif defined(GPR_FREEBSD) #elif defined(GPR_FREEBSD)
#define GRPC_HAVE_ARPA_NAMESER 1 #define GRPC_HAVE_ARPA_NAMESER 1
#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IFADDRS 1
@ -114,36 +108,31 @@
#define GRPC_POSIX_FORK 1 #define GRPC_POSIX_FORK 1
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_SOCKETUTILS 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif defined(GPR_OPENBSD) #elif defined(GPR_OPENBSD)
#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IFADDRS 1
#define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IPV6_RECVPKTINFO 1
#define GRPC_HAVE_UNIX_SOCKET 1 #define GRPC_HAVE_UNIX_SOCKET 1
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_SOCKETUTILS 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif defined(GPR_NACL) #elif defined(GPR_NACL)
#define GRPC_HAVE_ARPA_NAMESER 1 #define GRPC_HAVE_ARPA_NAMESER 1
#define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
#define GRPC_POSIX_SOCKET 1 #define GRPC_POSIX_SOCKET 1
#define GRPC_POSIX_SOCKETADDR 1
#define GRPC_POSIX_SOCKETUTILS 1 #define GRPC_POSIX_SOCKETUTILS 1
#define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif !defined(GPR_NO_AUTODETECT_PLATFORM) #elif !defined(GPR_NO_AUTODETECT_PLATFORM)
#error "Platform not recognized" #error "Platform not recognized"
#endif #endif
#if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \ #if defined(GRPC_POSIX_SOCKET) + defined(GRPC_WINSOCK_SOCKET) + \
defined(GRPC_CUSTOM_SOCKET) + defined(GRPC_UV) != \ defined(GRPC_CUSTOM_SOCKET) != \
1 1
#error Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET #error \
"Must define exactly one of GRPC_POSIX_SOCKET, GRPC_WINSOCK_SOCKET, GRPC_CUSTOM_SOCKET"
#endif #endif
#if defined(GRPC_POSIX_HOST_NAME_MAX) && defined(GRPC_POSIX_SYSCONF) #if defined(GRPC_POSIX_HOST_NAME_MAX) && defined(GRPC_POSIX_SYSCONF)

@ -0,0 +1,50 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include <grpc/support/alloc.h>
#include "src/core/lib/iomgr/resolve_address.h"
grpc_address_resolver_vtable* grpc_resolve_address_impl;
void grpc_set_resolver_impl(grpc_address_resolver_vtable* vtable) {
grpc_resolve_address_impl = vtable;
}
void grpc_resolve_address(const char* addr, const char* default_port,
grpc_pollset_set* interested_parties,
grpc_closure* on_done,
grpc_resolved_addresses** addresses) {
grpc_resolve_address_impl->resolve_address(
addr, default_port, interested_parties, on_done, addresses);
}
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addrs) {
if (addrs != nullptr) {
gpr_free(addrs->addrs);
}
gpr_free(addrs);
}
grpc_error* grpc_blocking_resolve_address(const char* name,
const char* default_port,
grpc_resolved_addresses** addresses) {
return grpc_resolve_address_impl->blocking_resolve_address(name, default_port,
addresses);
}

@ -22,14 +22,28 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <stddef.h> #include <stddef.h>
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/port.h"
#ifdef GRPC_UV
#include <uv.h>
#endif
#ifdef GRPC_WINSOCK_SOCKET
#include <ws2tcpip.h>
#endif
#ifdef GRPC_POSIX_SOCKET
#include <sys/socket.h>
#endif
#include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/pollset_set.h"
#define GRPC_MAX_SOCKADDR_SIZE 128 #define GRPC_MAX_SOCKADDR_SIZE 128
typedef struct { typedef struct {
char addr[GRPC_MAX_SOCKADDR_SIZE]; char addr[GRPC_MAX_SOCKADDR_SIZE];
size_t len; socklen_t len;
} grpc_resolved_address; } grpc_resolved_address;
typedef struct { typedef struct {
@ -37,20 +51,33 @@ typedef struct {
grpc_resolved_address* addrs; grpc_resolved_address* addrs;
} grpc_resolved_addresses; } grpc_resolved_addresses;
typedef struct grpc_address_resolver_vtable {
void (*resolve_address)(const char* addr, const char* default_port,
grpc_pollset_set* interested_parties,
grpc_closure* on_done,
grpc_resolved_addresses** addresses);
grpc_error* (*blocking_resolve_address)(const char* name,
const char* default_port,
grpc_resolved_addresses** addresses);
} grpc_address_resolver_vtable;
void grpc_set_resolver_impl(grpc_address_resolver_vtable* vtable);
/* Asynchronously resolve addr. Use default_port if a port isn't designated /* Asynchronously resolve addr. Use default_port if a port isn't designated
in addr, otherwise use the port in addr. */ in addr, otherwise use the port in addr. */
/* TODO(ctiller): add a timeout here */ /* TODO(ctiller): add a timeout here */
extern void (*grpc_resolve_address)(const char* addr, const char* default_port, void grpc_resolve_address(const char* addr, const char* default_port,
grpc_pollset_set* interested_parties, grpc_pollset_set* interested_parties,
grpc_closure* on_done, grpc_closure* on_done,
grpc_resolved_addresses** addresses); grpc_resolved_addresses** addresses);
/* Destroy resolved addresses */ /* Destroy resolved addresses */
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addresses); void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addresses);
/* Resolve addr in a blocking fashion. Returns NULL on failure. On success, /* Resolve addr in a blocking fashion. On success,
result must be freed with grpc_resolved_addresses_destroy. */ result must be freed with grpc_resolved_addresses_destroy. */
extern grpc_error* (*grpc_blocking_resolve_address)( grpc_error* grpc_blocking_resolve_address(const char* name,
const char* name, const char* default_port, const char* default_port,
grpc_resolved_addresses** addresses); grpc_resolved_addresses** addresses);
#endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_H */ #endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_H */

@ -0,0 +1,187 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#include <grpc/support/alloc.h>
#include <grpc/support/string_util.h>
#include <grpc/support/log.h>
#include "src/core/lib/gpr/host_port.h"
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/iomgr/iomgr_custom.h"
#include "src/core/lib/iomgr/resolve_address_custom.h"
#include "src/core/lib/iomgr/sockaddr_utils.h"
#include <string.h>
typedef struct grpc_custom_resolver {
grpc_closure* on_done;
grpc_resolved_addresses** addresses;
char* host;
char* port;
} grpc_custom_resolver;
static grpc_custom_resolver_vtable* resolve_address_vtable = nullptr;
static int retry_named_port_failure(grpc_custom_resolver* r,
grpc_resolved_addresses** res) {
// This loop is copied from resolve_address_posix.c
const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
if (strcmp(r->port, svc[i][0]) == 0) {
gpr_free(r->port);
r->port = gpr_strdup(svc[i][1]);
if (res) {
grpc_error* error =
resolve_address_vtable->resolve(r->host, r->port, res);
if (error != GRPC_ERROR_NONE) {
GRPC_ERROR_UNREF(error);
return 0;
}
} else {
resolve_address_vtable->resolve_async(r, r->host, r->port);
}
return 1;
}
}
return 0;
}
void grpc_custom_resolve_callback(grpc_custom_resolver* r,
grpc_resolved_addresses* result,
grpc_error* error) {
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
grpc_core::ExecCtx exec_ctx;
if (error == GRPC_ERROR_NONE) {
*r->addresses = result;
} else if (retry_named_port_failure(r, nullptr)) {
return;
}
if (r->on_done) {
GRPC_CLOSURE_SCHED(r->on_done, error);
}
gpr_free(r->host);
gpr_free(r->port);
gpr_free(r);
}
static grpc_error* try_split_host_port(const char* name,
const char* default_port, char** host,
char** port) {
/* parse name, splitting it into host and port parts */
grpc_error* error;
gpr_split_host_port(name, host, port);
if (*host == nullptr) {
char* msg;
gpr_asprintf(&msg, "unparseable host:port: '%s'", name);
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
return error;
}
if (*port == nullptr) {
// TODO(murgatroid99): add tests for this case
if (default_port == nullptr) {
char* msg;
gpr_asprintf(&msg, "no port in name '%s'", name);
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
return error;
}
*port = gpr_strdup(default_port);
}
return GRPC_ERROR_NONE;
}
static grpc_error* blocking_resolve_address_impl(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) {
char* host;
char* port;
grpc_error* err;
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
err = try_split_host_port(name, default_port, &host, &port);
if (err != GRPC_ERROR_NONE) {
gpr_free(host);
gpr_free(port);
return err;
}
/* Call getaddrinfo */
grpc_custom_resolver resolver;
resolver.host = host;
resolver.port = port;
grpc_resolved_addresses* addrs;
grpc_core::ExecCtx* curr = grpc_core::ExecCtx::Get();
grpc_core::ExecCtx::Set(nullptr);
err = resolve_address_vtable->resolve(host, port, &addrs);
if (err != GRPC_ERROR_NONE) {
if (retry_named_port_failure(&resolver, &addrs)) {
GRPC_ERROR_UNREF(err);
err = GRPC_ERROR_NONE;
}
}
grpc_core::ExecCtx::Set(curr);
if (err == GRPC_ERROR_NONE) {
*addresses = addrs;
}
gpr_free(resolver.host);
gpr_free(resolver.port);
return err;
}
static void resolve_address_impl(const char* name, const char* default_port,
grpc_pollset_set* interested_parties,
grpc_closure* on_done,
grpc_resolved_addresses** addrs) {
grpc_custom_resolver* r = nullptr;
char* host = nullptr;
char* port = nullptr;
grpc_error* err;
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
err = try_split_host_port(name, default_port, &host, &port);
if (err != GRPC_ERROR_NONE) {
GRPC_CLOSURE_SCHED(on_done, err);
gpr_free(host);
gpr_free(port);
return;
}
r = (grpc_custom_resolver*)gpr_malloc(sizeof(grpc_custom_resolver));
r->on_done = on_done;
r->addresses = addrs;
r->host = host;
r->port = port;
/* Call getaddrinfo */
resolve_address_vtable->resolve_async(r, r->host, r->port);
}
static grpc_address_resolver_vtable custom_resolver_vtable = {
resolve_address_impl, blocking_resolve_address_impl};
void grpc_custom_resolver_init(grpc_custom_resolver_vtable* impl) {
resolve_address_vtable = impl;
grpc_set_resolver_impl(&custom_resolver_vtable);
}

@ -0,0 +1,43 @@
/*
*
* 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.
*
*/
#ifndef GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_CUSTOM_H
#define GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_CUSTOM_H
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/lib/iomgr/sockaddr.h"
typedef struct grpc_custom_resolver grpc_custom_resolver;
typedef struct grpc_custom_resolver_vtable {
grpc_error* (*resolve)(char* host, char* port, grpc_resolved_addresses** res);
void (*resolve_async)(grpc_custom_resolver* resolver, char* host, char* port);
} grpc_custom_resolver_vtable;
void grpc_custom_resolve_callback(grpc_custom_resolver* resolver,
grpc_resolved_addresses* result,
grpc_error* error);
/* Internal APIs */
void grpc_custom_resolver_init(grpc_custom_resolver_vtable* impl);
#endif /* GRPC_CORE_LIB_IOMGR_RESOLVE_ADDRESS_CUSTOM_H */

@ -42,7 +42,7 @@
#include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/unix_sockets_posix.h" #include "src/core/lib/iomgr/unix_sockets_posix.h"
static grpc_error* blocking_resolve_address_impl( static grpc_error* posix_blocking_resolve_address(
const char* name, const char* default_port, const char* name, const char* default_port,
grpc_resolved_addresses** addresses) { grpc_resolved_addresses** addresses) {
grpc_core::ExecCtx exec_ctx; grpc_core::ExecCtx exec_ctx;
@ -141,10 +141,6 @@ done:
return err; return err;
} }
grpc_error* (*grpc_blocking_resolve_address)(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) = blocking_resolve_address_impl;
typedef struct { typedef struct {
char* name; char* name;
char* default_port; char* default_port;
@ -165,17 +161,10 @@ static void do_request_thread(void* rp, grpc_error* error) {
gpr_free(r); gpr_free(r);
} }
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addrs) { static void posix_resolve_address(const char* name, const char* default_port,
if (addrs != nullptr) { grpc_pollset_set* interested_parties,
gpr_free(addrs->addrs); grpc_closure* on_done,
} grpc_resolved_addresses** addrs) {
gpr_free(addrs);
}
static void resolve_address_impl(const char* name, const char* default_port,
grpc_pollset_set* interested_parties,
grpc_closure* on_done,
grpc_resolved_addresses** addrs) {
request* r = static_cast<request*>(gpr_malloc(sizeof(request))); request* r = static_cast<request*>(gpr_malloc(sizeof(request)));
GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r, GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r,
grpc_executor_scheduler(GRPC_EXECUTOR_SHORT)); grpc_executor_scheduler(GRPC_EXECUTOR_SHORT));
@ -186,9 +175,6 @@ static void resolve_address_impl(const char* name, const char* default_port,
GRPC_CLOSURE_SCHED(&r->request_closure, GRPC_ERROR_NONE); GRPC_CLOSURE_SCHED(&r->request_closure, GRPC_ERROR_NONE);
} }
void (*grpc_resolve_address)( grpc_address_resolver_vtable grpc_posix_resolver_vtable = {
const char* name, const char* default_port, posix_resolve_address, posix_blocking_resolve_address};
grpc_pollset_set* interested_parties, grpc_closure* on_done,
grpc_resolved_addresses** addrs) = resolve_address_impl;
#endif #endif

@ -1,286 +0,0 @@
/*
*
* 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.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#ifdef GRPC_UV
#include <uv.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include "src/core/lib/gpr/host_port.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr_uv.h"
#include "src/core/lib/iomgr/resolve_address.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/sockaddr_utils.h"
#include <string.h>
typedef struct request {
grpc_closure* on_done;
grpc_resolved_addresses** addresses;
struct addrinfo* hints;
char* host;
char* port;
} request;
static int retry_named_port_failure(int status, request* r,
uv_getaddrinfo_cb getaddrinfo_cb) {
if (status != 0) {
// This loop is copied from resolve_address_posix.c
const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
if (strcmp(r->port, svc[i][0]) == 0) {
int retry_status;
uv_getaddrinfo_t* req =
(uv_getaddrinfo_t*)gpr_malloc(sizeof(uv_getaddrinfo_t));
req->data = r;
r->port = gpr_strdup(svc[i][1]);
retry_status = uv_getaddrinfo(uv_default_loop(), req, getaddrinfo_cb,
r->host, r->port, r->hints);
if (retry_status < 0 || getaddrinfo_cb == NULL) {
// The callback will not be called
gpr_free(req);
}
return retry_status;
}
}
}
/* If this function calls uv_getaddrinfo, it will return that function's
return value. That function only returns numbers <=0, so we can safely
return 1 to indicate that we never retried */
return 1;
}
static grpc_error* handle_addrinfo_result(int status, struct addrinfo* result,
grpc_resolved_addresses** addresses) {
struct addrinfo* resp;
size_t i;
if (status != 0) {
grpc_error* error;
*addresses = NULL;
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("getaddrinfo failed");
error =
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
grpc_slice_from_static_string(uv_strerror(status)));
return error;
}
(*addresses) =
(grpc_resolved_addresses*)gpr_malloc(sizeof(grpc_resolved_addresses));
(*addresses)->naddrs = 0;
for (resp = result; resp != NULL; resp = resp->ai_next) {
(*addresses)->naddrs++;
}
(*addresses)->addrs = (grpc_resolved_address*)gpr_malloc(
sizeof(grpc_resolved_address) * (*addresses)->naddrs);
i = 0;
for (resp = result; resp != NULL; resp = resp->ai_next) {
memcpy(&(*addresses)->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
(*addresses)->addrs[i].len = resp->ai_addrlen;
i++;
}
{
for (i = 0; i < (*addresses)->naddrs; i++) {
char* buf;
grpc_sockaddr_to_string(&buf, &(*addresses)->addrs[i], 0);
gpr_free(buf);
}
}
return GRPC_ERROR_NONE;
}
static void getaddrinfo_callback(uv_getaddrinfo_t* req, int status,
struct addrinfo* res) {
request* r = (request*)req->data;
grpc_core::ExecCtx exec_ctx;
grpc_error* error;
int retry_status;
char* port = r->port;
gpr_free(req);
retry_status = retry_named_port_failure(status, r, getaddrinfo_callback);
if (retry_status == 0) {
/* The request is being retried. It is using its own port string, so we free
* the original one */
gpr_free(port);
return;
}
/* Either no retry was attempted, or the retry failed. Either way, the
original error probably has more interesting information */
error = handle_addrinfo_result(status, res, r->addresses);
GRPC_CLOSURE_SCHED(r->on_done, error);
gpr_free(r->hints);
gpr_free(r->host);
gpr_free(r->port);
gpr_free(r);
uv_freeaddrinfo(res);
}
static grpc_error* try_split_host_port(const char* name,
const char* default_port, char** host,
char** port) {
/* parse name, splitting it into host and port parts */
grpc_error* error;
gpr_split_host_port(name, host, port);
if (*host == NULL) {
char* msg;
gpr_asprintf(&msg, "unparseable host:port: '%s'", name);
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
return error;
}
if (*port == NULL) {
// TODO(murgatroid99): add tests for this case
if (default_port == NULL) {
char* msg;
gpr_asprintf(&msg, "no port in name '%s'", name);
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
gpr_free(msg);
return error;
}
*port = gpr_strdup(default_port);
}
return GRPC_ERROR_NONE;
}
static grpc_error* blocking_resolve_address_impl(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) {
char* host;
char* port;
struct addrinfo hints;
uv_getaddrinfo_t req;
int s;
grpc_error* err;
int retry_status;
request r;
GRPC_UV_ASSERT_SAME_THREAD();
req.addrinfo = NULL;
err = try_split_host_port(name, default_port, &host, &port);
if (err != GRPC_ERROR_NONE) {
goto done;
}
/* Call getaddrinfo */
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */
hints.ai_socktype = SOCK_STREAM; /* stream socket */
hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
s = uv_getaddrinfo(uv_default_loop(), &req, NULL, host, port, &hints);
r.addresses = addresses;
r.hints = &hints;
r.host = host;
r.port = port;
retry_status = retry_named_port_failure(s, &r, NULL);
if (retry_status <= 0) {
s = retry_status;
}
err = handle_addrinfo_result(s, req.addrinfo, addresses);
done:
gpr_free(host);
gpr_free(port);
if (req.addrinfo) {
uv_freeaddrinfo(req.addrinfo);
}
return err;
}
grpc_error* (*grpc_blocking_resolve_address)(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) = blocking_resolve_address_impl;
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addrs) {
if (addrs != NULL) {
gpr_free(addrs->addrs);
}
gpr_free(addrs);
}
static void resolve_address_impl(const char* name, const char* default_port,
grpc_pollset_set* interested_parties,
grpc_closure* on_done,
grpc_resolved_addresses** addrs) {
uv_getaddrinfo_t* req = NULL;
request* r = NULL;
struct addrinfo* hints = NULL;
char* host = NULL;
char* port = NULL;
grpc_error* err;
int s;
GRPC_UV_ASSERT_SAME_THREAD();
err = try_split_host_port(name, default_port, &host, &port);
if (err != GRPC_ERROR_NONE) {
GRPC_CLOSURE_SCHED(on_done, err);
gpr_free(host);
gpr_free(port);
return;
}
r = (request*)gpr_malloc(sizeof(request));
r->on_done = on_done;
r->addresses = addrs;
r->host = host;
r->port = port;
req = (uv_getaddrinfo_t*)gpr_malloc(sizeof(uv_getaddrinfo_t));
req->data = r;
/* Call getaddrinfo */
hints = (addrinfo*)gpr_malloc(sizeof(struct addrinfo));
memset(hints, 0, sizeof(struct addrinfo));
hints->ai_family = AF_UNSPEC; /* ipv4 or ipv6 */
hints->ai_socktype = SOCK_STREAM; /* stream socket */
hints->ai_flags = AI_PASSIVE; /* for wildcard IP address */
r->hints = hints;
s = uv_getaddrinfo(uv_default_loop(), req, getaddrinfo_callback, host, port,
hints);
if (s != 0) {
*addrs = NULL;
err = GRPC_ERROR_CREATE_FROM_STATIC_STRING("getaddrinfo failed");
err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR,
grpc_slice_from_static_string(uv_strerror(s)));
GRPC_CLOSURE_SCHED(on_done, err);
gpr_free(r);
gpr_free(req);
gpr_free(hints);
gpr_free(host);
gpr_free(port);
}
}
void (*grpc_resolve_address)(
const char* name, const char* default_port,
grpc_pollset_set* interested_parties, grpc_closure* on_done,
grpc_resolved_addresses** addrs) = resolve_address_impl;
#endif /* GRPC_UV */

@ -51,7 +51,7 @@ typedef struct {
grpc_resolved_addresses** addresses; grpc_resolved_addresses** addresses;
} request; } request;
static grpc_error* blocking_resolve_address_impl( static grpc_error* windows_blocking_resolve_address(
const char* name, const char* default_port, const char* name, const char* default_port,
grpc_resolved_addresses** addresses) { grpc_resolved_addresses** addresses) {
grpc_core::ExecCtx exec_ctx; grpc_core::ExecCtx exec_ctx;
@ -130,10 +130,6 @@ done:
return error; return error;
} }
grpc_error* (*grpc_blocking_resolve_address)(
const char* name, const char* default_port,
grpc_resolved_addresses** addresses) = blocking_resolve_address_impl;
/* Callback to be passed to grpc_executor to asynch-ify /* Callback to be passed to grpc_executor to asynch-ify
* grpc_blocking_resolve_address */ * grpc_blocking_resolve_address */
static void do_request_thread(void* rp, grpc_error* error) { static void do_request_thread(void* rp, grpc_error* error) {
@ -150,17 +146,10 @@ static void do_request_thread(void* rp, grpc_error* error) {
gpr_free(r); gpr_free(r);
} }
void grpc_resolved_addresses_destroy(grpc_resolved_addresses* addrs) { static void windows_resolve_address(const char* name, const char* default_port,
if (addrs != NULL) { grpc_pollset_set* interested_parties,
gpr_free(addrs->addrs); grpc_closure* on_done,
} grpc_resolved_addresses** addresses) {
gpr_free(addrs);
}
static void resolve_address_impl(const char* name, const char* default_port,
grpc_pollset_set* interested_parties,
grpc_closure* on_done,
grpc_resolved_addresses** addresses) {
request* r = (request*)gpr_malloc(sizeof(request)); request* r = (request*)gpr_malloc(sizeof(request));
GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r, GRPC_CLOSURE_INIT(&r->request_closure, do_request_thread, r,
grpc_executor_scheduler(GRPC_EXECUTOR_SHORT)); grpc_executor_scheduler(GRPC_EXECUTOR_SHORT));
@ -171,9 +160,6 @@ static void resolve_address_impl(const char* name, const char* default_port,
GRPC_CLOSURE_SCHED(&r->request_closure, GRPC_ERROR_NONE); GRPC_CLOSURE_SCHED(&r->request_closure, GRPC_ERROR_NONE);
} }
void (*grpc_resolve_address)( grpc_address_resolver_vtable grpc_windows_resolver_vtable = {
const char* name, const char* default_port, windows_resolve_address, windows_blocking_resolve_address};
grpc_pollset_set* interested_parties, grpc_closure* on_done,
grpc_resolved_addresses** addresses) = resolve_address_impl;
#endif #endif

@ -24,7 +24,7 @@
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include "src/core/lib/debug/trace.h" #include "src/core/lib/debug/trace.h"
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/closure.h"
/** \file Tracks resource usage against a pool. /** \file Tracks resource usage against a pool.
@ -139,8 +139,4 @@ void grpc_resource_user_alloc_slices(
grpc_resource_user_slice_allocator* slice_allocator, size_t length, grpc_resource_user_slice_allocator* slice_allocator, size_t length,
size_t count, grpc_slice_buffer* dest); size_t count, grpc_slice_buffer* dest);
/* Allocate one slice of length \a size synchronously. */
grpc_slice grpc_resource_user_slice_malloc(grpc_resource_user* resource_user,
size_t size);
#endif /* GRPC_CORE_LIB_IOMGR_RESOURCE_QUOTA_H */ #endif /* GRPC_CORE_LIB_IOMGR_RESOURCE_QUOTA_H */

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save