grpc 1.28.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -41,13 +41,12 @@ typedef struct grpc_httpcli_context {
41
41
  grpc_pollset_set* pollset_set;
42
42
  } grpc_httpcli_context;
43
43
 
44
- typedef struct {
44
+ struct grpc_httpcli_handshaker {
45
45
  const char* default_port;
46
46
  void (*handshake)(void* arg, grpc_endpoint* endpoint, const char* host,
47
47
  grpc_millis deadline,
48
48
  void (*on_done)(void* arg, grpc_endpoint* endpoint));
49
- } grpc_httpcli_handshaker;
50
-
49
+ };
51
50
  extern const grpc_httpcli_handshaker grpc_httpcli_plaintext;
52
51
  extern const grpc_httpcli_handshaker grpc_httpcli_ssl;
53
52
 
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include "absl/strings/string_view.h"
26
+
25
27
  #include <grpc/support/alloc.h>
26
28
  #include <grpc/support/log.h>
27
29
  #include <grpc/support/string_util.h>
@@ -30,7 +32,6 @@
30
32
  #include "src/core/lib/channel/handshaker_registry.h"
31
33
  #include "src/core/lib/gpr/string.h"
32
34
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
- #include "src/core/lib/gprpp/string_view.h"
34
35
  #include "src/core/lib/iomgr/pollset.h"
35
36
  #include "src/core/lib/security/credentials/credentials.h"
36
37
  #include "src/core/lib/security/security_connector/ssl_utils.h"
@@ -111,7 +112,7 @@ class grpc_httpcli_ssl_channel_security_connector final
111
112
  return strcmp(secure_peer_name_, other->secure_peer_name_);
112
113
  }
113
114
 
114
- bool check_call_host(grpc_core::StringView /*host*/,
115
+ bool check_call_host(absl::string_view /*host*/,
115
116
  grpc_auth_context* /*auth_context*/,
116
117
  grpc_closure* /*on_call_host_checked*/,
117
118
  grpc_error** error) override {
@@ -154,12 +155,11 @@ httpcli_ssl_channel_security_connector_create(
154
155
 
155
156
  /* handshaker */
156
157
 
157
- typedef struct {
158
+ struct on_done_closure {
158
159
  void (*func)(void* arg, grpc_endpoint* endpoint);
159
160
  void* arg;
160
161
  grpc_core::RefCountedPtr<grpc_core::HandshakeManager> handshake_mgr;
161
- } on_done_closure;
162
-
162
+ };
163
163
  static void on_handshake_done(void* arg, grpc_error* error) {
164
164
  auto* args = static_cast<grpc_core::HandshakerArgs*>(arg);
165
165
  on_done_closure* c = static_cast<on_done_closure*>(args->user_data);
@@ -79,7 +79,7 @@ typedef struct grpc_http_response {
79
79
  char* body = nullptr;
80
80
  } grpc_http_response;
81
81
 
82
- typedef struct {
82
+ struct grpc_http_parser {
83
83
  grpc_http_parser_state state;
84
84
  grpc_http_type type;
85
85
 
@@ -94,8 +94,7 @@ typedef struct {
94
94
  uint8_t cur_line[GRPC_HTTP_PARSER_MAX_HEADER_LENGTH];
95
95
  size_t cur_line_length;
96
96
  size_t cur_line_end_length;
97
- } grpc_http_parser;
98
-
97
+ };
99
98
  void grpc_http_parser_init(grpc_http_parser* parser, grpc_http_type type,
100
99
  void* request_or_response);
101
100
  void grpc_http_parser_destroy(grpc_http_parser* parser);
@@ -21,12 +21,13 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "absl/types/optional.h"
25
+
24
26
  #include "src/core/lib/iomgr/port.h"
25
27
 
26
28
  #include <grpc/support/time.h>
27
29
 
28
30
  #include "src/core/lib/gprpp/memory.h"
29
- #include "src/core/lib/gprpp/optional.h"
30
31
  #include "src/core/lib/iomgr/error.h"
31
32
  #include "src/core/lib/iomgr/internal_errqueue.h"
32
33
 
@@ -34,52 +35,52 @@ namespace grpc_core {
34
35
 
35
36
  struct ConnectionMetrics {
36
37
  /* Delivery rate in Bytes/s. */
37
- Optional<uint64_t> delivery_rate;
38
+ absl::optional<uint64_t> delivery_rate;
38
39
  /* If the delivery rate is limited by the application, this is set to true. */
39
- Optional<bool> is_delivery_rate_app_limited;
40
+ absl::optional<bool> is_delivery_rate_app_limited;
40
41
  /* Total packets retransmitted. */
41
- Optional<uint32_t> packet_retx;
42
+ absl::optional<uint32_t> packet_retx;
42
43
  /* Total packets retransmitted spuriously. This metric is smaller than or
43
44
  equal to packet_retx. */
44
- Optional<uint32_t> packet_spurious_retx;
45
+ absl::optional<uint32_t> packet_spurious_retx;
45
46
  /* Total packets sent. */
46
- Optional<uint32_t> packet_sent;
47
+ absl::optional<uint32_t> packet_sent;
47
48
  /* Total packets delivered. */
48
- Optional<uint32_t> packet_delivered;
49
+ absl::optional<uint32_t> packet_delivered;
49
50
  /* Total packets delivered with ECE marked. This metric is smaller than or
50
51
  equal to packet_delivered. */
51
- Optional<uint32_t> packet_delivered_ce;
52
+ absl::optional<uint32_t> packet_delivered_ce;
52
53
  /* Total bytes lost so far. */
53
- Optional<uint64_t> data_retx;
54
+ absl::optional<uint64_t> data_retx;
54
55
  /* Total bytes sent so far. */
55
- Optional<uint64_t> data_sent;
56
+ absl::optional<uint64_t> data_sent;
56
57
  /* Total bytes in write queue but not sent. */
57
- Optional<uint64_t> data_notsent;
58
+ absl::optional<uint64_t> data_notsent;
58
59
  /* Pacing rate of the connection in Bps */
59
- Optional<uint64_t> pacing_rate;
60
+ absl::optional<uint64_t> pacing_rate;
60
61
  /* Minimum RTT observed in usec. */
61
- Optional<uint32_t> min_rtt;
62
+ absl::optional<uint32_t> min_rtt;
62
63
  /* Smoothed RTT in usec */
63
- Optional<uint32_t> srtt;
64
+ absl::optional<uint32_t> srtt;
64
65
  /* Send congestion window. */
65
- Optional<uint32_t> congestion_window;
66
+ absl::optional<uint32_t> congestion_window;
66
67
  /* Slow start threshold in packets. */
67
- Optional<uint32_t> snd_ssthresh;
68
+ absl::optional<uint32_t> snd_ssthresh;
68
69
  /* Maximum degree of reordering (i.e., maximum number of packets reodered)
69
70
  on the connection. */
70
- Optional<uint32_t> reordering;
71
+ absl::optional<uint32_t> reordering;
71
72
  /* Represents the number of recurring retransmissions of the first sequence
72
73
  that is not acknowledged yet. */
73
- Optional<uint8_t> recurring_retrans;
74
+ absl::optional<uint8_t> recurring_retrans;
74
75
  /* The cumulative time (in usec) that the transport protocol was busy
75
76
  sending data. */
76
- Optional<uint64_t> busy_usec;
77
+ absl::optional<uint64_t> busy_usec;
77
78
  /* The cumulative time (in usec) that the transport protocol was limited by
78
79
  the receive window size. */
79
- Optional<uint64_t> rwnd_limited_usec;
80
+ absl::optional<uint64_t> rwnd_limited_usec;
80
81
  /* The cumulative time (in usec) that the transport protocol was limited by
81
82
  the send buffer size. */
82
- Optional<uint64_t> sndbuf_limited_usec;
83
+ absl::optional<uint64_t> sndbuf_limited_usec;
83
84
  };
84
85
 
85
86
  struct Timestamp {
@@ -23,9 +23,10 @@
23
23
 
24
24
  #include <stddef.h>
25
25
 
26
+ #include "absl/container/inlined_vector.h"
27
+
26
28
  #include <grpc/support/atm.h>
27
29
 
28
- #include "src/core/lib/gprpp/inlined_vector.h"
29
30
  #include "src/core/lib/gprpp/mpscq.h"
30
31
  #include "src/core/lib/gprpp/ref_counted.h"
31
32
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -208,7 +209,7 @@ class CallCombinerClosureList {
208
209
 
209
210
  // There are generally a maximum of 6 closures to run in the call
210
211
  // combiner, one for each pending op.
211
- InlinedVector<CallCombinerClosure, 6> closures_;
212
+ absl::InlinedVector<CallCombinerClosure, 6> closures_;
212
213
  };
213
214
 
214
215
  } // namespace grpc_core
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/debug/trace.h"
33
33
  #include "src/core/lib/iomgr/closure.h"
34
34
  #include "src/core/lib/iomgr/error_cfstream.h"
35
+ #include "src/core/lib/iomgr/ev_apple.h"
35
36
  #include "src/core/lib/iomgr/exec_ctx.h"
36
37
 
37
38
  extern grpc_core::TraceFlag grpc_tcp_trace;
@@ -147,8 +148,8 @@ CFStreamHandle::CFStreamHandle(CFReadStreamRef read_stream,
147
148
  kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes |
148
149
  kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
149
150
  CFStreamHandle::WriteCallback, &ctx);
150
- CFReadStreamSetDispatchQueue(read_stream, dispatch_queue_);
151
- CFWriteStreamSetDispatchQueue(write_stream, dispatch_queue_);
151
+ grpc_apple_register_read_stream(read_stream, dispatch_queue_);
152
+ grpc_apple_register_write_stream(write_stream, dispatch_queue_);
152
153
  }
153
154
 
154
155
  CFStreamHandle::~CFStreamHandle() {
@@ -121,12 +121,11 @@ inline grpc_closure* grpc_closure_init(grpc_closure* closure,
121
121
 
122
122
  namespace closure_impl {
123
123
 
124
- typedef struct {
124
+ struct wrapped_closure {
125
125
  grpc_iomgr_cb_func cb;
126
126
  void* cb_arg;
127
127
  grpc_closure wrapper;
128
- } wrapped_closure;
129
-
128
+ };
130
129
  inline void closure_wrapper(void* arg, grpc_error* error) {
131
130
  wrapped_closure* wc = static_cast<wrapped_closure*>(arg);
132
131
  grpc_iomgr_cb_func cb = wc->cb;
@@ -0,0 +1,47 @@
1
+ /*
2
+ *
3
+ * Copyright 2020 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/iomgr/port.h"
22
+
23
+ #ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
24
+
25
+ #include <netinet/in.h>
26
+ #include "src/core/lib/iomgr/socket_utils_posix.h"
27
+
28
+ #ifndef GRPC_SET_SOCKET_DUALSTACK_CUSTOM
29
+
30
+ /* This should be 0 in production, but it may be enabled for testing or
31
+ debugging purposes, to simulate an environment where IPv6 sockets can't
32
+ also speak IPv4. */
33
+ int grpc_forbid_dualstack_sockets_for_testing = 0;
34
+
35
+ int grpc_set_socket_dualstack(int fd) {
36
+ if (!grpc_forbid_dualstack_sockets_for_testing) {
37
+ const int off = 0;
38
+ return 0 == setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &off, sizeof(off));
39
+ } else {
40
+ /* Force an IPv6-only socket, for testing purposes. */
41
+ const int on = 1;
42
+ setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
43
+ return 0;
44
+ }
45
+ }
46
+ #endif // GRPC_SET_SOCKET_DUALSTACK_CUSTOM
47
+ #endif // GRPC_POSIX_SOCKET_UTILS_COMMON
@@ -39,7 +39,7 @@
39
39
 
40
40
  extern grpc_core::TraceFlag grpc_tcp_trace;
41
41
 
42
- typedef struct {
42
+ struct CFStreamEndpoint {
43
43
  grpc_endpoint base;
44
44
  gpr_refcount refcount;
45
45
 
@@ -58,8 +58,7 @@ typedef struct {
58
58
  char* peer_string;
59
59
  grpc_resource_user* resource_user;
60
60
  grpc_resource_user_slice_allocator slice_allocator;
61
- } CFStreamEndpoint;
62
-
61
+ };
63
62
  static void CFStreamFree(CFStreamEndpoint* ep) {
64
63
  grpc_resource_user_unref(ep->resource_user);
65
64
  CFRelease(ep->read_stream);
@@ -23,11 +23,10 @@
23
23
 
24
24
  #include "src/core/lib/iomgr/endpoint.h"
25
25
 
26
- typedef struct {
26
+ struct grpc_endpoint_pair {
27
27
  grpc_endpoint* client;
28
28
  grpc_endpoint* server;
29
- } grpc_endpoint_pair;
30
-
29
+ };
31
30
  grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char* name,
32
31
  grpc_channel_args* args);
33
32
 
@@ -446,12 +446,11 @@ grpc_error* grpc_error_set_int(grpc_error* src, grpc_error_ints which,
446
446
  return new_err;
447
447
  }
448
448
 
449
- typedef struct {
449
+ struct special_error_status_map {
450
450
  grpc_status_code code;
451
451
  const char* msg;
452
452
  size_t len;
453
- } special_error_status_map;
454
-
453
+ };
455
454
  const special_error_status_map error_status_map[] = {
456
455
  {GRPC_STATUS_OK, "", 0}, // GRPC_ERROR_NONE
457
456
  {GRPC_STATUS_INVALID_ARGUMENT, "", 0}, // GRPC_ERROR_RESERVED_1
@@ -532,17 +531,15 @@ static const char* no_error_string = "\"No Error\"";
532
531
  static const char* oom_error_string = "\"Out of memory\"";
533
532
  static const char* cancelled_error_string = "\"Cancelled\"";
534
533
 
535
- typedef struct {
534
+ struct kv_pair {
536
535
  char* key;
537
536
  char* value;
538
- } kv_pair;
539
-
540
- typedef struct {
537
+ };
538
+ struct kv_pairs {
541
539
  kv_pair* kvs;
542
540
  size_t num_kvs;
543
541
  size_t cap_kvs;
544
- } kv_pairs;
545
-
542
+ };
546
543
  static void append_chr(char c, char** s, size_t* sz, size_t* cap) {
547
544
  if (*sz == *cap) {
548
545
  *cap = GPR_MAX(8, 3 * *cap / 2);
@@ -30,7 +30,6 @@
30
30
  #include <grpc/support/time.h>
31
31
 
32
32
  #include "src/core/lib/debug/trace.h"
33
- #include "src/core/lib/gprpp/inlined_vector.h"
34
33
 
35
34
  /// Opaque representation of an error.
36
35
  /// See https://github.com/grpc/grpc/blob/master/doc/core/grpc-error.md for a
@@ -0,0 +1,356 @@
1
+ /*
2
+ *
3
+ * Copyright 2020 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ /// Event engine based on Apple's CFRunLoop API family. If the CFRunLoop engine
20
+ /// is enabled (see iomgr_posix_cfstream.cc), a global thread is started to
21
+ /// handle and trigger all the CFStream events. The CFStream streams register
22
+ /// themselves with the run loop with functions grpc_apple_register_read_stream
23
+ /// and grpc_apple_register_read_stream. Pollsets are dummy and block on a
24
+ /// condition variable in pollset_work().
25
+
26
+ #include <grpc/support/port_platform.h>
27
+
28
+ #include "src/core/lib/iomgr/port.h"
29
+
30
+ #ifdef GRPC_APPLE_EV
31
+
32
+ #include <CoreFoundation/CoreFoundation.h>
33
+
34
+ #include <list>
35
+
36
+ #include "src/core/lib/gprpp/thd.h"
37
+ #include "src/core/lib/iomgr/ev_apple.h"
38
+
39
+ grpc_core::DebugOnlyTraceFlag grpc_apple_polling_trace(false, "apple_polling");
40
+
41
+ #ifndef NDEBUG
42
+ #define GRPC_POLLING_TRACE(format, ...) \
43
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_apple_polling_trace)) { \
44
+ gpr_log(GPR_DEBUG, "(polling) " format, __VA_ARGS__); \
45
+ }
46
+ #else
47
+ #define GRPC_POLLING_TRACE(...)
48
+ #endif // NDEBUG
49
+
50
+ #define GRPC_POLLSET_KICK_BROADCAST ((grpc_pollset_worker*)1)
51
+
52
+ struct GlobalRunLoopContext {
53
+ grpc_core::CondVar init_cv;
54
+ grpc_core::CondVar input_source_cv;
55
+
56
+ grpc_core::Mutex mu;
57
+
58
+ // Whether an input source registration is pending. Protected by mu.
59
+ bool input_source_registered = false;
60
+
61
+ // The reference to the global run loop object. Protected by mu.
62
+ CFRunLoopRef run_loop;
63
+
64
+ // Whether the pollset has been globally shut down. Protected by mu.
65
+ bool is_shutdown = false;
66
+ };
67
+
68
+ struct GrpcAppleWorker {
69
+ // The condition varible to kick the worker. Works with the pollset's lock
70
+ // (GrpcApplePollset.mu).
71
+ grpc_core::CondVar cv;
72
+
73
+ // Whether the worker is kicked. Protected by the pollset's lock
74
+ // (GrpcApplePollset.mu).
75
+ bool kicked = false;
76
+ };
77
+
78
+ struct GrpcApplePollset {
79
+ grpc_core::Mutex mu;
80
+
81
+ // Tracks the current workers in the pollset. Protected by mu.
82
+ std::list<GrpcAppleWorker*> workers;
83
+
84
+ // Whether the pollset is shut down. Protected by mu.
85
+ bool is_shutdown = false;
86
+
87
+ // Closure to call when shutdown is done. Protected by mu.
88
+ grpc_closure* shutdown_closure;
89
+
90
+ // Whether there's an outstanding kick that was not processed. Protected by
91
+ // mu.
92
+ bool kicked_without_poller = false;
93
+ };
94
+
95
+ static GlobalRunLoopContext* gGlobalRunLoopContext = nullptr;
96
+ static grpc_core::Thread* gGlobalRunLoopThread = nullptr;
97
+
98
+ /// Register the stream with the dispatch queue. Callbacks of the stream will be
99
+ /// issued to the dispatch queue when a network event happens and will be
100
+ /// managed by Grand Central Dispatch.
101
+ static void grpc_apple_register_read_stream_queue(
102
+ CFReadStreamRef read_stream, dispatch_queue_t dispatch_queue) {
103
+ CFReadStreamSetDispatchQueue(read_stream, dispatch_queue);
104
+ }
105
+
106
+ /// Register the stream with the dispatch queue. Callbacks of the stream will be
107
+ /// issued to the dispatch queue when a network event happens and will be
108
+ /// managed by Grand Central Dispatch.
109
+ static void grpc_apple_register_write_stream_queue(
110
+ CFWriteStreamRef write_stream, dispatch_queue_t dispatch_queue) {
111
+ CFWriteStreamSetDispatchQueue(write_stream, dispatch_queue);
112
+ }
113
+
114
+ /// Register the stream with the global run loop. Callbacks of the stream will
115
+ /// be issued to the run loop when a network event happens and will be driven by
116
+ /// the global run loop thread gGlobalRunLoopThread.
117
+ static void grpc_apple_register_read_stream_run_loop(
118
+ CFReadStreamRef read_stream, dispatch_queue_t dispatch_queue) {
119
+ GRPC_POLLING_TRACE("Register read stream: %p", read_stream);
120
+ grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
121
+ CFReadStreamScheduleWithRunLoop(read_stream, gGlobalRunLoopContext->run_loop,
122
+ kCFRunLoopDefaultMode);
123
+ gGlobalRunLoopContext->input_source_registered = true;
124
+ gGlobalRunLoopContext->input_source_cv.Signal();
125
+ }
126
+
127
+ /// Register the stream with the global run loop. Callbacks of the stream will
128
+ /// be issued to the run loop when a network event happens, and will be driven
129
+ /// by the global run loop thread gGlobalRunLoopThread.
130
+ static void grpc_apple_register_write_stream_run_loop(
131
+ CFWriteStreamRef write_stream, dispatch_queue_t dispatch_queue) {
132
+ GRPC_POLLING_TRACE("Register write stream: %p", write_stream);
133
+ grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
134
+ CFWriteStreamScheduleWithRunLoop(
135
+ write_stream, gGlobalRunLoopContext->run_loop, kCFRunLoopDefaultMode);
136
+ gGlobalRunLoopContext->input_source_registered = true;
137
+ gGlobalRunLoopContext->input_source_cv.Signal();
138
+ }
139
+
140
+ /// The default implementation of stream registration is to register the stream
141
+ /// to a dispatch queue. However, if the CFRunLoop based pollset is enabled (by
142
+ /// macro and environment variable, see docs in iomgr_posix_cfstream.cc), the
143
+ /// CFStream streams are registered with the global run loop instead (see
144
+ /// pollset_global_init below).
145
+ static void (*grpc_apple_register_read_stream_impl)(
146
+ CFReadStreamRef, dispatch_queue_t) = grpc_apple_register_read_stream_queue;
147
+ static void (*grpc_apple_register_write_stream_impl)(CFWriteStreamRef,
148
+ dispatch_queue_t) =
149
+ grpc_apple_register_write_stream_queue;
150
+
151
+ void grpc_apple_register_read_stream(CFReadStreamRef read_stream,
152
+ dispatch_queue_t dispatch_queue) {
153
+ grpc_apple_register_read_stream_impl(read_stream, dispatch_queue);
154
+ }
155
+
156
+ void grpc_apple_register_write_stream(CFWriteStreamRef write_stream,
157
+ dispatch_queue_t dispatch_queue) {
158
+ grpc_apple_register_write_stream_impl(write_stream, dispatch_queue);
159
+ }
160
+
161
+ /// Drive the run loop in a global singleton thread until the global run loop is
162
+ /// shutdown.
163
+ static void GlobalRunLoopFunc(void* arg) {
164
+ grpc_core::ReleasableMutexLock lock(&gGlobalRunLoopContext->mu);
165
+ gGlobalRunLoopContext->run_loop = CFRunLoopGetCurrent();
166
+ gGlobalRunLoopContext->init_cv.Signal();
167
+
168
+ while (!gGlobalRunLoopContext->is_shutdown) {
169
+ // CFRunLoopRun() will return immediately if no stream is registered on it.
170
+ // So we wait on a conditional variable until a stream is registered;
171
+ // otherwise we'll be running a spinning loop.
172
+ while (!gGlobalRunLoopContext->input_source_registered) {
173
+ gGlobalRunLoopContext->input_source_cv.Wait(&gGlobalRunLoopContext->mu);
174
+ }
175
+ gGlobalRunLoopContext->input_source_registered = false;
176
+ lock.Unlock();
177
+ CFRunLoopRun();
178
+ lock.Lock();
179
+ }
180
+ lock.Unlock();
181
+ }
182
+
183
+ // pollset implementation
184
+
185
+ static void pollset_global_init(void) {
186
+ gGlobalRunLoopContext = new GlobalRunLoopContext;
187
+
188
+ grpc_apple_register_read_stream_impl =
189
+ grpc_apple_register_read_stream_run_loop;
190
+ grpc_apple_register_write_stream_impl =
191
+ grpc_apple_register_write_stream_run_loop;
192
+
193
+ grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
194
+ gGlobalRunLoopThread =
195
+ new grpc_core::Thread("apple_ev", GlobalRunLoopFunc, nullptr);
196
+ gGlobalRunLoopThread->Start();
197
+ while (gGlobalRunLoopContext->run_loop == NULL)
198
+ gGlobalRunLoopContext->init_cv.Wait(&gGlobalRunLoopContext->mu);
199
+ }
200
+
201
+ static void pollset_global_shutdown(void) {
202
+ {
203
+ grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
204
+ gGlobalRunLoopContext->is_shutdown = true;
205
+ CFRunLoopStop(gGlobalRunLoopContext->run_loop);
206
+ }
207
+ gGlobalRunLoopThread->Join();
208
+ delete gGlobalRunLoopThread;
209
+ delete gGlobalRunLoopContext;
210
+ }
211
+
212
+ /// The caller must acquire the lock GrpcApplePollset.mu before calling this
213
+ /// function. The lock may be temporarily released when waiting on the condition
214
+ /// variable but will be re-acquired before the function returns.
215
+ ///
216
+ /// The Apple pollset simply waits on a condition variable until it is kicked.
217
+ /// The network events are handled in the global run loop thread. Processing of
218
+ /// these events will eventually trigger the kick.
219
+ static grpc_error* pollset_work(grpc_pollset* pollset,
220
+ grpc_pollset_worker** worker,
221
+ grpc_millis deadline) {
222
+ GRPC_POLLING_TRACE("pollset work: %p, worker: %p, deadline: %" PRIu64,
223
+ pollset, worker, deadline);
224
+ GrpcApplePollset* apple_pollset =
225
+ reinterpret_cast<GrpcApplePollset*>(pollset);
226
+ GrpcAppleWorker actual_worker;
227
+ if (worker) {
228
+ *worker = reinterpret_cast<grpc_pollset_worker*>(&actual_worker);
229
+ }
230
+
231
+ if (apple_pollset->kicked_without_poller) {
232
+ // Process the outstanding kick and reset the flag. Do not block.
233
+ apple_pollset->kicked_without_poller = false;
234
+ } else {
235
+ // Block until kicked, timed out, or the pollset shuts down.
236
+ apple_pollset->workers.push_front(&actual_worker);
237
+ auto it = apple_pollset->workers.begin();
238
+
239
+ while (!actual_worker.kicked && !apple_pollset->is_shutdown) {
240
+ if (actual_worker.cv.Wait(
241
+ &apple_pollset->mu,
242
+ grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME))) {
243
+ // timed out
244
+ break;
245
+ }
246
+ }
247
+
248
+ apple_pollset->workers.erase(it);
249
+
250
+ // If the pollset is shut down asynchronously and this is the last pending
251
+ // worker, the shutdown process is complete at this moment and the shutdown
252
+ // callback will be called.
253
+ if (apple_pollset->is_shutdown && apple_pollset->workers.empty()) {
254
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, apple_pollset->shutdown_closure,
255
+ GRPC_ERROR_NONE);
256
+ }
257
+ }
258
+
259
+ return GRPC_ERROR_NONE;
260
+ }
261
+
262
+ /// Kick a specific worker. The caller must acquire the lock GrpcApplePollset.mu
263
+ /// before calling this function.
264
+ static void kick_worker(GrpcAppleWorker* worker) {
265
+ worker->kicked = true;
266
+ worker->cv.Signal();
267
+ }
268
+
269
+ /// The caller must acquire the lock GrpcApplePollset.mu before calling this
270
+ /// function. The kick action simply signals the condition variable of the
271
+ /// worker.
272
+ static grpc_error* pollset_kick(grpc_pollset* pollset,
273
+ grpc_pollset_worker* specific_worker) {
274
+ GrpcApplePollset* apple_pollset =
275
+ reinterpret_cast<GrpcApplePollset*>(pollset);
276
+
277
+ GRPC_POLLING_TRACE("pollset kick: %p, worker:%p", pollset, specific_worker);
278
+
279
+ if (specific_worker == nullptr) {
280
+ if (apple_pollset->workers.empty()) {
281
+ apple_pollset->kicked_without_poller = true;
282
+ } else {
283
+ GrpcAppleWorker* actual_worker = apple_pollset->workers.front();
284
+ kick_worker(actual_worker);
285
+ }
286
+ } else if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
287
+ for (auto& actual_worker : apple_pollset->workers) {
288
+ kick_worker(actual_worker);
289
+ }
290
+ } else {
291
+ GrpcAppleWorker* actual_worker =
292
+ reinterpret_cast<GrpcAppleWorker*>(specific_worker);
293
+ kick_worker(actual_worker);
294
+ }
295
+
296
+ return GRPC_ERROR_NONE;
297
+ }
298
+
299
+ static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
300
+ GRPC_POLLING_TRACE("pollset init: %p", pollset);
301
+ GrpcApplePollset* apple_pollset = new (pollset) GrpcApplePollset();
302
+ *mu = apple_pollset->mu.get();
303
+ }
304
+
305
+ /// The caller must acquire the lock GrpcApplePollset.mu before calling this
306
+ /// function.
307
+ static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
308
+ GRPC_POLLING_TRACE("pollset shutdown: %p", pollset);
309
+
310
+ GrpcApplePollset* apple_pollset =
311
+ reinterpret_cast<GrpcApplePollset*>(pollset);
312
+ apple_pollset->is_shutdown = true;
313
+ pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
314
+
315
+ // If there is any worker blocked, shutdown will be done asynchronously.
316
+ if (apple_pollset->workers.empty()) {
317
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
318
+ } else {
319
+ apple_pollset->shutdown_closure = closure;
320
+ }
321
+ }
322
+
323
+ static void pollset_destroy(grpc_pollset* pollset) {
324
+ GRPC_POLLING_TRACE("pollset destroy: %p", pollset);
325
+ GrpcApplePollset* apple_pollset =
326
+ reinterpret_cast<GrpcApplePollset*>(pollset);
327
+ apple_pollset->~GrpcApplePollset();
328
+ }
329
+
330
+ size_t pollset_size(void) { return sizeof(GrpcApplePollset); }
331
+
332
+ grpc_pollset_vtable grpc_apple_pollset_vtable = {
333
+ pollset_global_init, pollset_global_shutdown,
334
+ pollset_init, pollset_shutdown,
335
+ pollset_destroy, pollset_work,
336
+ pollset_kick, pollset_size};
337
+
338
+ // pollset_set implementation
339
+
340
+ grpc_pollset_set* pollset_set_create(void) { return nullptr; }
341
+ void pollset_set_destroy(grpc_pollset_set* pollset_set) {}
342
+ void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
343
+ grpc_pollset* pollset) {}
344
+ void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
345
+ grpc_pollset* pollset) {}
346
+ void pollset_set_add_pollset_set(grpc_pollset_set* bag,
347
+ grpc_pollset_set* item) {}
348
+ void pollset_set_del_pollset_set(grpc_pollset_set* bag,
349
+ grpc_pollset_set* item) {}
350
+
351
+ grpc_pollset_set_vtable grpc_apple_pollset_set_vtable = {
352
+ pollset_set_create, pollset_set_destroy,
353
+ pollset_set_add_pollset, pollset_set_del_pollset,
354
+ pollset_set_add_pollset_set, pollset_set_del_pollset_set};
355
+
356
+ #endif