grpc 1.37.1 → 1.38.0.pre1

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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -0,0 +1,39 @@
1
+ // Copyright 2021 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ #ifndef GRPC_EVENT_ENGINE_PORT_H
15
+ #define GRPC_EVENT_ENGINE_PORT_H
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ // Platform-specific sockaddr includes
20
+ #ifdef GRPC_UV
21
+ #include <uv.h>
22
+ #elif defined(GPR_ANDROID) || defined(GPR_LINUX) || defined(GPR_APPLE) || \
23
+ defined(GPR_FREEBSD) || defined(GPR_OPENBSD) || defined(GPR_SOLARIS) || \
24
+ defined(GPR_AIX) || defined(GPR_NACL) || defined(GPR_FUCHSIA) || \
25
+ defined(GRPC_POSIX_SOCKET)
26
+ #define GRPC_EVENT_ENGINE_POSIX
27
+ #include <netdb.h>
28
+ #include <netinet/in.h>
29
+ #include <sys/socket.h>
30
+ #elif defined(GPR_WINDOWS)
31
+ #include <winsock2.h>
32
+ #include <ws2tcpip.h>
33
+ // must be included after the above
34
+ #include <mswsock.h>
35
+ #else
36
+ #error UNKNOWN PLATFORM
37
+ #endif
38
+
39
+ #endif // GRPC_EVENT_ENGINE_PORT_H
@@ -0,0 +1,81 @@
1
+ // Copyright 2021 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ #ifndef GRPC_EVENT_ENGINE_SLICE_ALLOCATOR_H
15
+ #define GRPC_EVENT_ENGINE_SLICE_ALLOCATOR_H
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include <functional>
20
+
21
+ #include "absl/status/status.h"
22
+
23
+ // forward-declaring an internal struct, not used publicly.
24
+ struct grpc_resource_quota;
25
+ struct grpc_resource_user;
26
+
27
+ namespace grpc_event_engine {
28
+ namespace experimental {
29
+
30
+ // TODO(nnoble): forward declared here, needs definition.
31
+ class SliceBuffer;
32
+
33
+ class SliceAllocator {
34
+ public:
35
+ // gRPC-internal constructor
36
+ explicit SliceAllocator(grpc_resource_user* user);
37
+ // Not copyable
38
+ SliceAllocator(SliceAllocator& other) = delete;
39
+ SliceAllocator& operator=(const SliceAllocator& other) = delete;
40
+ // Moveable
41
+ SliceAllocator(SliceAllocator&& other) = default;
42
+ SliceAllocator& operator=(SliceAllocator&& other) = default;
43
+ ~SliceAllocator();
44
+
45
+ using AllocateCallback =
46
+ std::function<void(absl::Status, SliceBuffer* buffer)>;
47
+ // TODO(hork): explain what happens under resource exhaustion.
48
+ /// Requests \a size bytes from gRPC, and populates \a dest with the allocated
49
+ /// slices. Ownership of the \a SliceBuffer is not transferred.
50
+ absl::Status Allocate(size_t size, SliceBuffer* dest,
51
+ SliceAllocator::AllocateCallback cb);
52
+
53
+ private:
54
+ grpc_resource_user* resource_user_;
55
+ };
56
+
57
+ class SliceAllocatorFactory {
58
+ public:
59
+ // gRPC-internal constructor
60
+ explicit SliceAllocatorFactory(grpc_resource_quota* quota);
61
+ // Not copyable
62
+ SliceAllocatorFactory(SliceAllocatorFactory& other) = delete;
63
+ SliceAllocatorFactory& operator=(const SliceAllocatorFactory& other) = delete;
64
+ // Moveable
65
+ SliceAllocatorFactory(SliceAllocatorFactory&& other) = default;
66
+ SliceAllocatorFactory& operator=(SliceAllocatorFactory&& other) = default;
67
+ ~SliceAllocatorFactory();
68
+
69
+ /// On Endpoint creation, call \a CreateSliceAllocator with the name of the
70
+ /// endpoint peer (a URI string, most likely). Note: \a peer_name must outlive
71
+ /// the Endpoint.
72
+ SliceAllocator CreateSliceAllocator(absl::string_view peer_name);
73
+
74
+ private:
75
+ grpc_resource_quota* resource_quota_;
76
+ };
77
+
78
+ } // namespace experimental
79
+ } // namespace grpc_event_engine
80
+
81
+ #endif // GRPC_EVENT_ENGINE_SLICE_ALLOCATOR_H
data/include/grpc/grpc.h CHANGED
@@ -414,7 +414,7 @@ GRPCAPI void grpc_server_register_completion_queue(grpc_server* server,
414
414
  // There might be more methods added later, so users should take care to memset
415
415
  // this to 0 before using it.
416
416
  typedef struct {
417
- void (*on_serving_status_change)(void* user_data, const char* uri,
417
+ void (*on_serving_status_update)(void* user_data, const char* uri,
418
418
  grpc_status_code code,
419
419
  const char* error_message);
420
420
  void* user_data;
@@ -424,7 +424,7 @@ typedef struct grpc_server_config_fetcher grpc_server_config_fetcher;
424
424
 
425
425
  /** EXPERIMENTAL. Creates an xDS config fetcher. */
426
426
  GRPCAPI grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
427
- grpc_server_xds_status_notifier notifier);
427
+ grpc_server_xds_status_notifier notifier, const grpc_channel_args* args);
428
428
 
429
429
  /** EXPERIMENTAL. Destroys a config fetcher. */
430
430
  GRPCAPI void grpc_server_config_fetcher_destroy(
@@ -29,10 +29,24 @@ extern "C" {
29
29
  #define GRPC_X509_CN_PROPERTY_NAME "x509_common_name"
30
30
  #define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name"
31
31
  #define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert"
32
+ // Please note that internally, we just faithfully pass whatever value we got by
33
+ // calling SSL_get_peer_cert_chain() in OpenSSL/BoringSSL. This will mean in
34
+ // OpenSSL, the following conditions might apply:
35
+ // 1. On the client side, this property returns the full certificate chain. On
36
+ // the server side, this property will return the certificate chain without the
37
+ // leaf certificate. Application can use GRPC_X509_PEM_CERT_PROPERTY_NAME to
38
+ // get the peer leaf certificate.
39
+ // 2. If the session is resumed, this property could be empty for OpenSSL (but
40
+ // not for BoringSSL).
41
+ // For more, please refer to the official OpenSSL manual:
42
+ // https://www.openssl.org/docs/man1.1.0/man3/SSL_get_peer_cert_chain.html.
32
43
  #define GRPC_X509_PEM_CERT_CHAIN_PROPERTY_NAME "x509_pem_cert_chain"
33
44
  #define GRPC_SSL_SESSION_REUSED_PROPERTY "ssl_session_reused"
34
45
  #define GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME "security_level"
46
+ #define GRPC_PEER_DNS_PROPERTY_NAME "peer_dns"
35
47
  #define GRPC_PEER_SPIFFE_ID_PROPERTY_NAME "peer_spiffe_id"
48
+ #define GRPC_PEER_EMAIL_PROPERTY_NAME "peer_email"
49
+ #define GRPC_PEER_IP_PROPERTY_NAME "peer_ip"
36
50
 
37
51
  /** Environment variable that points to the default SSL roots file. This file
38
52
  must be a PEM encoded file with all the roots such as the one that can be
@@ -353,6 +353,17 @@ typedef struct {
353
353
  /* Timeout in milliseconds to use for calls to the grpclb load balancer.
354
354
  If 0 or unset, the balancer calls will have no deadline. */
355
355
  #define GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS "grpc.grpclb_call_timeout_ms"
356
+ /* Specifies the xDS bootstrap config as a JSON string.
357
+ FOR TESTING PURPOSES ONLY -- DO NOT USE IN PRODUCTION.
358
+ This option allows controlling the bootstrap configuration on a
359
+ per-channel basis, which is useful in tests. However, this results
360
+ in having a separate xDS client instance per channel rather than
361
+ using the global instance, which is not the intended way to use xDS.
362
+ Currently, this will (a) add unnecessary load on the xDS server and
363
+ (b) break use of CSDS, and there may be additional side effects in
364
+ the future. */
365
+ #define GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG \
366
+ "grpc.TEST_ONLY_DO_NOT_USE_IN_PROD.xds_bootstrap_config"
356
367
  /* Timeout in milliseconds to wait for the serverlist from the grpclb load
357
368
  balancer before using fallback backend addresses from the resolver.
358
369
  If 0, enter fallback mode immediately. Default value is 10000. */
@@ -39,6 +39,11 @@
39
39
  #endif
40
40
  #endif // GPR_ABSEIL_SYNC
41
41
 
42
+ /*
43
+ * Defines GRPC_ERROR_IS_ABSEIL_STATUS to use absl::Status for grpc_error_handle
44
+ */
45
+ // #define GRPC_ERROR_IS_ABSEIL_STATUS 1
46
+
42
47
  /* Get windows.h included everywhere (we need it) */
43
48
  #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
44
49
  #ifndef WIN32_LEAN_AND_MEAN
@@ -2,6 +2,15 @@
2
2
  framework module grpc {
3
3
  umbrella header "grpc.h"
4
4
 
5
+ header "byte_buffer.h"
6
+ header "byte_buffer_reader.h"
7
+ header "census.h"
8
+ header "compression.h"
9
+ header "fork.h"
10
+ header "grpc.h"
11
+ header "grpc_posix.h"
12
+ header "grpc_security.h"
13
+ header "grpc_security_constants.h"
5
14
  header "impl/codegen/atm.h"
6
15
  header "impl/codegen/byte_buffer.h"
7
16
  header "impl/codegen/byte_buffer_reader.h"
@@ -19,6 +28,10 @@ framework module grpc {
19
28
  header "impl/codegen/sync.h"
20
29
  header "impl/codegen/sync_abseil.h"
21
30
  header "impl/codegen/sync_generic.h"
31
+ header "load_reporting.h"
32
+ header "slice.h"
33
+ header "slice_buffer.h"
34
+ header "status.h"
22
35
  header "support/alloc.h"
23
36
  header "support/atm.h"
24
37
  header "support/cpu.h"
@@ -31,22 +44,9 @@ framework module grpc {
31
44
  header "support/sync_generic.h"
32
45
  header "support/thd_id.h"
33
46
  header "support/time.h"
34
- header "byte_buffer.h"
35
- header "byte_buffer_reader.h"
36
- header "census.h"
37
- header "compression.h"
38
- header "fork.h"
39
- header "grpc.h"
40
- header "grpc_posix.h"
41
- header "grpc_security.h"
42
- header "grpc_security_constants.h"
43
- header "load_reporting.h"
44
- header "slice.h"
45
- header "slice_buffer.h"
46
- header "status.h"
47
47
  header "support/workaround_list.h"
48
48
 
49
- textual header "impl/codegen/atm_gcc_atomic.h"
49
+ textual header "impl/codegen/atm_gcc_atomic.h"
50
50
  textual header "impl/codegen/atm_gcc_sync.h"
51
51
  textual header "impl/codegen/atm_windows.h"
52
52
  textual header "impl/codegen/sync_custom.h"
@@ -89,7 +89,7 @@ static void backup_poller_shutdown_unref(backup_poller* p) {
89
89
  }
90
90
  }
91
91
 
92
- static void done_poller(void* arg, grpc_error* /*error*/) {
92
+ static void done_poller(void* arg, grpc_error_handle /*error*/) {
93
93
  backup_poller_shutdown_unref(static_cast<backup_poller*>(arg));
94
94
  }
95
95
 
@@ -112,7 +112,7 @@ static void g_poller_unref() {
112
112
  }
113
113
  }
114
114
 
115
- static void run_poller(void* arg, grpc_error* error) {
115
+ static void run_poller(void* arg, grpc_error_handle error) {
116
116
  backup_poller* p = static_cast<backup_poller*>(arg);
117
117
  if (error != GRPC_ERROR_NONE) {
118
118
  if (error != GRPC_ERROR_CANCELLED) {
@@ -127,7 +127,7 @@ static void run_poller(void* arg, grpc_error* error) {
127
127
  backup_poller_shutdown_unref(p);
128
128
  return;
129
129
  }
130
- grpc_error* err =
130
+ grpc_error_handle err =
131
131
  grpc_pollset_work(p->pollset, nullptr, grpc_core::ExecCtx::Get()->Now());
132
132
  gpr_mu_unlock(p->pollset_mu);
133
133
  GRPC_LOG_IF_ERROR("Run client channel backup poller", err);
@@ -1,28 +1,23 @@
1
- /*
2
- *
3
- * Copyright 2015 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
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
21
19
  #include "src/core/lib/surface/channel.h"
22
20
 
23
- #include <inttypes.h>
24
-
25
- #include <grpc/support/alloc.h>
26
21
  #include <grpc/support/log.h>
27
22
 
28
23
  #include "src/core/ext/filters/client_channel/client_channel.h"
@@ -32,195 +27,205 @@
32
27
 
33
28
  grpc_connectivity_state grpc_channel_check_connectivity_state(
34
29
  grpc_channel* channel, int try_to_connect) {
35
- /* forward through to the underlying client channel */
36
- grpc_channel_element* client_channel_elem =
37
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
38
30
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
39
31
  grpc_core::ExecCtx exec_ctx;
40
- grpc_connectivity_state state;
41
32
  GRPC_API_TRACE(
42
33
  "grpc_channel_check_connectivity_state(channel=%p, try_to_connect=%d)", 2,
43
34
  (channel, try_to_connect));
44
- if (GPR_LIKELY(client_channel_elem->filter == &grpc_client_channel_filter)) {
45
- state = grpc_client_channel_check_connectivity_state(client_channel_elem,
46
- try_to_connect);
47
-
48
- return state;
35
+ // Forward through to the underlying client channel.
36
+ grpc_core::ClientChannel* client_channel =
37
+ grpc_core::ClientChannel::GetFromChannel(channel);
38
+ if (GPR_UNLIKELY(client_channel == nullptr)) {
39
+ gpr_log(GPR_ERROR,
40
+ "grpc_channel_check_connectivity_state called on something that is "
41
+ "not a client channel");
42
+ return GRPC_CHANNEL_SHUTDOWN;
49
43
  }
50
- gpr_log(GPR_ERROR,
51
- "grpc_channel_check_connectivity_state called on something that is "
52
- "not a client channel, but '%s'",
53
- client_channel_elem->filter->name);
44
+ return client_channel->CheckConnectivityState(try_to_connect);
45
+ }
54
46
 
55
- return GRPC_CHANNEL_SHUTDOWN;
47
+ int grpc_channel_num_external_connectivity_watchers(grpc_channel* channel) {
48
+ grpc_core::ClientChannel* client_channel =
49
+ grpc_core::ClientChannel::GetFromChannel(channel);
50
+ if (client_channel == nullptr) {
51
+ gpr_log(GPR_ERROR,
52
+ "grpc_channel_num_external_connectivity_watchers called on "
53
+ "something that is not a client channel");
54
+ return 0;
55
+ }
56
+ return client_channel->NumExternalConnectivityWatchers();
56
57
  }
57
58
 
58
- typedef enum {
59
- WAITING,
60
- READY_TO_CALL_BACK,
61
- CALLING_BACK_AND_FINISHED,
62
- } callback_phase;
59
+ int grpc_channel_support_connectivity_watcher(grpc_channel* channel) {
60
+ return grpc_core::ClientChannel::GetFromChannel(channel) != nullptr;
61
+ }
63
62
 
63
+ namespace grpc_core {
64
64
  namespace {
65
- struct state_watcher {
66
- gpr_mu mu;
67
- callback_phase phase;
68
- grpc_closure on_complete;
69
- grpc_closure on_timeout;
70
- grpc_closure watcher_timer_init;
71
- grpc_timer alarm;
72
- grpc_connectivity_state state;
73
- grpc_completion_queue* cq;
74
- grpc_cq_completion completion_storage;
75
- grpc_channel* channel;
76
- grpc_error* error;
77
- void* tag;
78
- };
79
- } // namespace
80
-
81
- static void delete_state_watcher(state_watcher* w) {
82
- grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
83
- grpc_channel_get_channel_stack(w->channel));
84
- if (client_channel_elem->filter == &grpc_client_channel_filter) {
85
- GRPC_CHANNEL_INTERNAL_UNREF(w->channel, "watch_channel_connectivity");
86
- } else {
87
- abort();
88
- }
89
- gpr_mu_destroy(&w->mu);
90
- gpr_free(w);
91
- }
92
65
 
93
- static void finished_completion(void* pw, grpc_cq_completion* /*ignored*/) {
94
- bool should_delete = false;
95
- state_watcher* w = static_cast<state_watcher*>(pw);
96
- gpr_mu_lock(&w->mu);
97
- switch (w->phase) {
98
- case WAITING:
99
- case READY_TO_CALL_BACK:
100
- GPR_UNREACHABLE_CODE(return );
101
- case CALLING_BACK_AND_FINISHED:
102
- should_delete = true;
103
- break;
66
+ class StateWatcher {
67
+ public:
68
+ StateWatcher(grpc_channel* channel, grpc_completion_queue* cq, void* tag,
69
+ grpc_connectivity_state last_observed_state,
70
+ gpr_timespec deadline)
71
+ : channel_(channel), cq_(cq), tag_(tag), state_(last_observed_state) {
72
+ GPR_ASSERT(grpc_cq_begin_op(cq, tag));
73
+ GRPC_CHANNEL_INTERNAL_REF(channel, "watch_channel_connectivity");
74
+ GRPC_CLOSURE_INIT(&on_complete_, WatchComplete, this, nullptr);
75
+ GRPC_CLOSURE_INIT(&on_timeout_, TimeoutComplete, this, nullptr);
76
+ auto* watcher_timer_init_state = new WatcherTimerInitState(
77
+ this, grpc_timespec_to_millis_round_up(deadline));
78
+ ClientChannel* client_channel = ClientChannel::GetFromChannel(channel);
79
+ GPR_ASSERT(client_channel != nullptr);
80
+ client_channel->AddExternalConnectivityWatcher(
81
+ grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)), &state_,
82
+ &on_complete_, watcher_timer_init_state->closure());
104
83
  }
105
- gpr_mu_unlock(&w->mu);
106
84
 
107
- if (should_delete) {
108
- delete_state_watcher(w);
85
+ ~StateWatcher() {
86
+ GRPC_CHANNEL_INTERNAL_UNREF(channel_, "watch_channel_connectivity");
109
87
  }
110
- }
111
-
112
- static void partly_done(state_watcher* w, bool due_to_completion,
113
- grpc_error* error) {
114
- bool end_op = false;
115
- void* end_op_tag = nullptr;
116
- grpc_error* end_op_error = nullptr;
117
- grpc_completion_queue* end_op_cq = nullptr;
118
- grpc_cq_completion* end_op_completion_storage = nullptr;
119
88
 
120
- if (due_to_completion) {
121
- grpc_timer_cancel(&w->alarm);
122
- } else {
123
- grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
124
- grpc_channel_get_channel_stack(w->channel));
125
- grpc_client_channel_watch_connectivity_state(
126
- client_channel_elem,
127
- grpc_polling_entity_create_from_pollset(grpc_cq_pollset(w->cq)),
128
- nullptr, &w->on_complete, nullptr);
129
- }
89
+ private:
90
+ // A fire-and-forget object used to delay starting the timer until the
91
+ // ClientChannel actually starts the watch.
92
+ class WatcherTimerInitState {
93
+ public:
94
+ WatcherTimerInitState(StateWatcher* state_watcher, grpc_millis deadline)
95
+ : state_watcher_(state_watcher), deadline_(deadline) {
96
+ GRPC_CLOSURE_INIT(&closure_, WatcherTimerInit, this, nullptr);
97
+ }
130
98
 
131
- gpr_mu_lock(&w->mu);
99
+ grpc_closure* closure() { return &closure_; }
132
100
 
133
- if (due_to_completion) {
134
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
135
- GRPC_LOG_IF_ERROR("watch_completion_error", GRPC_ERROR_REF(error));
101
+ private:
102
+ static void WatcherTimerInit(void* arg, grpc_error_handle /*error*/) {
103
+ auto* self = static_cast<WatcherTimerInitState*>(arg);
104
+ grpc_timer_init(&self->state_watcher_->timer_, self->deadline_,
105
+ &self->state_watcher_->on_timeout_);
106
+ delete self;
136
107
  }
137
- GRPC_ERROR_UNREF(error);
138
- error = GRPC_ERROR_NONE;
139
- } else {
140
- if (error == GRPC_ERROR_NONE) {
141
- error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
142
- "Timed out waiting for connection state change");
143
- } else if (error == GRPC_ERROR_CANCELLED) {
144
- error = GRPC_ERROR_NONE;
108
+
109
+ StateWatcher* state_watcher_;
110
+ grpc_millis deadline_;
111
+ grpc_closure closure_;
112
+ };
113
+
114
+ enum CallbackPhase { kWaiting, kReadyToCallBack, kCallingBackAndFinished };
115
+
116
+ // Called when the completion is returned to the CQ.
117
+ static void FinishedCompletion(void* arg, grpc_cq_completion* /*ignored*/) {
118
+ auto* self = static_cast<StateWatcher*>(arg);
119
+ bool should_delete = false;
120
+ {
121
+ MutexLock lock(&self->mu_);
122
+ switch (self->phase_) {
123
+ case kWaiting:
124
+ case kReadyToCallBack:
125
+ GPR_UNREACHABLE_CODE(return );
126
+ case kCallingBackAndFinished:
127
+ should_delete = true;
128
+ }
145
129
  }
130
+ if (should_delete) delete self;
146
131
  }
147
- switch (w->phase) {
148
- case WAITING:
149
- GRPC_ERROR_REF(error);
150
- w->error = error;
151
- w->phase = READY_TO_CALL_BACK;
152
- break;
153
- case READY_TO_CALL_BACK:
154
- if (error != GRPC_ERROR_NONE) {
155
- GPR_ASSERT(!due_to_completion);
156
- GRPC_ERROR_UNREF(w->error);
157
- GRPC_ERROR_REF(error);
158
- w->error = error;
132
+
133
+ void PartlyDone(bool due_to_completion, grpc_error_handle error) {
134
+ bool end_op = false;
135
+ void* end_op_tag = nullptr;
136
+ grpc_error_handle end_op_error = GRPC_ERROR_NONE;
137
+ grpc_completion_queue* end_op_cq = nullptr;
138
+ grpc_cq_completion* end_op_completion_storage = nullptr;
139
+ if (due_to_completion) {
140
+ grpc_timer_cancel(&timer_);
141
+ } else {
142
+ grpc_core::ClientChannel* client_channel =
143
+ grpc_core::ClientChannel::GetFromChannel(channel_);
144
+ GPR_ASSERT(client_channel != nullptr);
145
+ client_channel->CancelExternalConnectivityWatcher(&on_complete_);
146
+ }
147
+ {
148
+ MutexLock lock(&mu_);
149
+ if (due_to_completion) {
150
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
151
+ GRPC_LOG_IF_ERROR("watch_completion_error", GRPC_ERROR_REF(error));
152
+ }
153
+ GRPC_ERROR_UNREF(error);
154
+ error = GRPC_ERROR_NONE;
155
+ } else {
156
+ if (error == GRPC_ERROR_NONE) {
157
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
158
+ "Timed out waiting for connection state change");
159
+ } else if (error == GRPC_ERROR_CANCELLED) {
160
+ error = GRPC_ERROR_NONE;
161
+ }
162
+ }
163
+ switch (phase_) {
164
+ case kWaiting:
165
+ GRPC_ERROR_REF(error);
166
+ error_ = error;
167
+ phase_ = kReadyToCallBack;
168
+ break;
169
+ case kReadyToCallBack:
170
+ if (error != GRPC_ERROR_NONE) {
171
+ GPR_ASSERT(!due_to_completion);
172
+ GRPC_ERROR_UNREF(error_);
173
+ GRPC_ERROR_REF(error);
174
+ error_ = error;
175
+ }
176
+ phase_ = kCallingBackAndFinished;
177
+ end_op = true;
178
+ end_op_cq = cq_;
179
+ end_op_tag = tag_;
180
+ end_op_error = error_;
181
+ end_op_completion_storage = &completion_storage_;
182
+ break;
183
+ case kCallingBackAndFinished:
184
+ GPR_UNREACHABLE_CODE(return );
159
185
  }
160
- w->phase = CALLING_BACK_AND_FINISHED;
161
- end_op = true;
162
- end_op_cq = w->cq;
163
- end_op_tag = w->tag;
164
- end_op_error = w->error;
165
- end_op_completion_storage = &w->completion_storage;
166
- break;
167
- case CALLING_BACK_AND_FINISHED:
168
- GPR_UNREACHABLE_CODE(return );
169
- break;
186
+ }
187
+ if (end_op) {
188
+ grpc_cq_end_op(end_op_cq, end_op_tag, end_op_error, FinishedCompletion,
189
+ this, end_op_completion_storage);
190
+ }
191
+ GRPC_ERROR_UNREF(error);
170
192
  }
171
- gpr_mu_unlock(&w->mu);
172
193
 
173
- if (end_op) {
174
- grpc_cq_end_op(end_op_cq, end_op_tag, end_op_error, finished_completion, w,
175
- end_op_completion_storage);
194
+ static void WatchComplete(void* arg, grpc_error_handle error) {
195
+ auto* self = static_cast<StateWatcher*>(arg);
196
+ self->PartlyDone(/*due_to_completion=*/true, GRPC_ERROR_REF(error));
176
197
  }
177
198
 
178
- GRPC_ERROR_UNREF(error);
179
- }
180
-
181
- static void watch_complete(void* pw, grpc_error* error) {
182
- partly_done(static_cast<state_watcher*>(pw), true, GRPC_ERROR_REF(error));
183
- }
199
+ static void TimeoutComplete(void* arg, grpc_error_handle error) {
200
+ auto* self = static_cast<StateWatcher*>(arg);
201
+ self->PartlyDone(/*due_to_completion=*/false, GRPC_ERROR_REF(error));
202
+ }
184
203
 
185
- static void timeout_complete(void* pw, grpc_error* error) {
186
- partly_done(static_cast<state_watcher*>(pw), false, GRPC_ERROR_REF(error));
187
- }
204
+ grpc_channel* channel_;
205
+ grpc_completion_queue* cq_;
206
+ void* tag_;
188
207
 
189
- int grpc_channel_num_external_connectivity_watchers(grpc_channel* channel) {
190
- grpc_channel_element* client_channel_elem =
191
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
192
- return grpc_client_channel_num_external_connectivity_watchers(
193
- client_channel_elem);
194
- }
208
+ grpc_connectivity_state state_;
195
209
 
196
- typedef struct watcher_timer_init_arg {
197
- state_watcher* w;
198
- gpr_timespec deadline;
199
- } watcher_timer_init_arg;
210
+ grpc_cq_completion completion_storage_;
200
211
 
201
- static void watcher_timer_init(void* arg, grpc_error* /*error_ignored*/) {
202
- watcher_timer_init_arg* wa = static_cast<watcher_timer_init_arg*>(arg);
212
+ grpc_closure on_complete_;
213
+ grpc_timer timer_;
214
+ grpc_closure on_timeout_;
203
215
 
204
- grpc_timer_init(&wa->w->alarm, grpc_timespec_to_millis_round_up(wa->deadline),
205
- &wa->w->on_timeout);
206
- gpr_free(wa);
207
- }
216
+ Mutex mu_;
217
+ CallbackPhase phase_ ABSL_GUARDED_BY(mu_) = kWaiting;
218
+ grpc_error_handle error_ ABSL_GUARDED_BY(mu_) = GRPC_ERROR_NONE;
219
+ };
208
220
 
209
- int grpc_channel_support_connectivity_watcher(grpc_channel* channel) {
210
- grpc_channel_element* client_channel_elem =
211
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
212
- return client_channel_elem->filter != &grpc_client_channel_filter ? 0 : 1;
213
- }
221
+ } // namespace
222
+ } // namespace grpc_core
214
223
 
215
224
  void grpc_channel_watch_connectivity_state(
216
225
  grpc_channel* channel, grpc_connectivity_state last_observed_state,
217
226
  gpr_timespec deadline, grpc_completion_queue* cq, void* tag) {
218
- grpc_channel_element* client_channel_elem =
219
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
220
227
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
221
228
  grpc_core::ExecCtx exec_ctx;
222
- state_watcher* w = static_cast<state_watcher*>(gpr_malloc(sizeof(*w)));
223
-
224
229
  GRPC_API_TRACE(
225
230
  "grpc_channel_watch_connectivity_state("
226
231
  "channel=%p, last_observed_state=%d, "
@@ -230,35 +235,5 @@ void grpc_channel_watch_connectivity_state(
230
235
  7,
231
236
  (channel, (int)last_observed_state, deadline.tv_sec, deadline.tv_nsec,
232
237
  (int)deadline.clock_type, cq, tag));
233
-
234
- GPR_ASSERT(grpc_cq_begin_op(cq, tag));
235
-
236
- gpr_mu_init(&w->mu);
237
- GRPC_CLOSURE_INIT(&w->on_complete, watch_complete, w,
238
- grpc_schedule_on_exec_ctx);
239
- GRPC_CLOSURE_INIT(&w->on_timeout, timeout_complete, w,
240
- grpc_schedule_on_exec_ctx);
241
- w->phase = WAITING;
242
- w->state = last_observed_state;
243
- w->cq = cq;
244
- w->tag = tag;
245
- w->channel = channel;
246
- w->error = nullptr;
247
-
248
- watcher_timer_init_arg* wa = static_cast<watcher_timer_init_arg*>(
249
- gpr_malloc(sizeof(watcher_timer_init_arg)));
250
- wa->w = w;
251
- wa->deadline = deadline;
252
- GRPC_CLOSURE_INIT(&w->watcher_timer_init, watcher_timer_init, wa,
253
- grpc_schedule_on_exec_ctx);
254
-
255
- if (client_channel_elem->filter == &grpc_client_channel_filter) {
256
- GRPC_CHANNEL_INTERNAL_REF(channel, "watch_channel_connectivity");
257
- grpc_client_channel_watch_connectivity_state(
258
- client_channel_elem,
259
- grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)), &w->state,
260
- &w->on_complete, &w->watcher_timer_init);
261
- } else {
262
- abort();
263
- }
238
+ new grpc_core::StateWatcher(channel, cq, tag, last_observed_state, deadline);
264
239
  }