grpc 1.37.1 → 1.39.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 (636) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +96 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +334 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +91 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +28 -13
  12. data/include/grpc/impl/codegen/port_platform.h +22 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
  17. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  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/ring_hash/ring_hash.cc +755 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  44. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  76. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  77. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  78. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  79. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  80. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  81. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  82. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
  83. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  84. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  85. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  86. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  89. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  90. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  91. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  92. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  93. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  96. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  98. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  99. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  101. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  103. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
  105. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  107. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  109. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  110. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  111. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  112. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  114. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  115. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  116. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  120. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  122. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  123. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  125. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  127. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  128. data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
  129. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  130. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  131. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  132. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  133. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  134. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  135. data/src/core/ext/xds/xds_api.cc +348 -199
  136. data/src/core/ext/xds/xds_api.h +21 -12
  137. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  138. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  139. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  140. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  141. data/src/core/ext/xds/xds_channel_args.h +5 -2
  142. data/src/core/ext/xds/xds_client.cc +310 -178
  143. data/src/core/ext/xds/xds_client.h +41 -27
  144. data/src/core/ext/xds/xds_client_stats.h +3 -2
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  146. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  147. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  148. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  149. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  150. data/src/core/lib/channel/channel_stack.cc +10 -9
  151. data/src/core/lib/channel/channel_stack.h +10 -9
  152. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  153. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  154. data/src/core/lib/channel/channelz.cc +21 -13
  155. data/src/core/lib/channel/channelz.h +3 -0
  156. data/src/core/lib/channel/connected_channel.cc +4 -4
  157. data/src/core/lib/channel/handshaker.cc +7 -6
  158. data/src/core/lib/channel/handshaker.h +5 -5
  159. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  160. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  161. data/src/core/lib/event_engine/event_engine.cc +50 -0
  162. data/src/core/lib/event_engine/slice_allocator.cc +89 -0
  163. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  164. data/src/core/lib/event_engine/sockaddr.h +44 -0
  165. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  166. data/src/core/lib/gprpp/ref_counted.h +28 -14
  167. data/src/core/lib/gprpp/status_helper.cc +407 -0
  168. data/src/core/lib/gprpp/status_helper.h +183 -0
  169. data/src/core/lib/http/httpcli.cc +11 -11
  170. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  171. data/src/core/lib/http/parser.cc +16 -16
  172. data/src/core/lib/http/parser.h +4 -4
  173. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  174. data/src/core/lib/iomgr/buffer_list.h +4 -5
  175. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  176. data/src/core/lib/iomgr/call_combiner.h +12 -14
  177. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  178. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  179. data/src/core/lib/iomgr/closure.h +7 -6
  180. data/src/core/lib/iomgr/combiner.cc +14 -12
  181. data/src/core/lib/iomgr/combiner.h +2 -2
  182. data/src/core/lib/iomgr/endpoint.cc +1 -1
  183. data/src/core/lib/iomgr/endpoint.h +2 -2
  184. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  185. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  186. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  187. data/src/core/lib/iomgr/error.cc +168 -61
  188. data/src/core/lib/iomgr/error.h +217 -106
  189. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  190. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  191. data/src/core/lib/iomgr/error_internal.h +5 -1
  192. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  193. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  194. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  195. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  196. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  197. data/src/core/lib/iomgr/ev_posix.h +9 -9
  198. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  199. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  200. data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
  201. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  202. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  203. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  204. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  205. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  206. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  207. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  208. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  209. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  210. data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
  211. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  212. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  213. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  214. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  215. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  216. data/src/core/lib/iomgr/executor.cc +8 -8
  217. data/src/core/lib/iomgr/executor.h +2 -2
  218. data/src/core/lib/iomgr/iomgr.cc +2 -2
  219. data/src/core/lib/iomgr/iomgr.h +1 -1
  220. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  221. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  222. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  223. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  224. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  225. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  226. data/src/core/lib/iomgr/load_file.cc +4 -4
  227. data/src/core/lib/iomgr/load_file.h +2 -2
  228. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  229. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  230. data/src/core/lib/iomgr/pollset.cc +5 -5
  231. data/src/core/lib/iomgr/pollset.h +9 -9
  232. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  233. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  234. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  235. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  236. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  237. data/src/core/lib/iomgr/port.h +7 -5
  238. data/src/core/lib/iomgr/python_util.h +1 -1
  239. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  240. data/src/core/lib/iomgr/resolve_address.h +12 -6
  241. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  242. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  243. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  244. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  245. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  246. data/src/core/lib/iomgr/sockaddr.h +1 -0
  247. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  248. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  250. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  251. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  252. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  253. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  254. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  257. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  258. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  259. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  260. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  261. data/src/core/lib/iomgr/tcp_server.h +12 -11
  262. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  263. data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
  264. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  265. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  266. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  267. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  268. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  269. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  270. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  271. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  272. data/src/core/lib/iomgr/timer.h +6 -1
  273. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  274. data/src/core/lib/iomgr/timer_custom.h +1 -1
  275. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  276. data/src/core/lib/iomgr/udp_server.cc +21 -20
  277. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  278. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  279. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  280. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  281. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  282. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  283. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  284. data/src/core/lib/iomgr/work_serializer.h +17 -1
  285. data/src/core/lib/json/json.h +1 -1
  286. data/src/core/lib/json/json_reader.cc +4 -4
  287. data/src/core/lib/matchers/matchers.cc +39 -39
  288. data/src/core/lib/matchers/matchers.h +28 -28
  289. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  290. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  291. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  292. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  293. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  294. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  295. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  296. data/src/core/lib/security/credentials/credentials.h +2 -2
  297. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  298. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  307. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  308. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  309. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  310. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  311. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  312. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  313. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  314. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  315. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  316. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  317. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  318. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  319. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  320. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  321. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  322. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  323. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  324. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  325. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  326. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  327. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  328. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  329. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  330. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  331. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  332. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  333. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  334. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  335. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  336. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  337. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  338. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  339. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  340. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  341. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  342. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  343. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  344. data/src/core/lib/security/transport/tsi_error.h +2 -1
  345. data/src/core/lib/security/util/json_util.cc +2 -2
  346. data/src/core/lib/security/util/json_util.h +1 -1
  347. data/src/core/lib/surface/call.cc +67 -46
  348. data/src/core/lib/surface/call.h +13 -2
  349. data/src/core/lib/surface/channel.cc +6 -6
  350. data/src/core/lib/surface/channel.h +3 -2
  351. data/src/core/lib/surface/channel_ping.cc +1 -1
  352. data/src/core/lib/surface/completion_queue.cc +68 -69
  353. data/src/core/lib/surface/completion_queue.h +3 -2
  354. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  355. data/src/core/lib/surface/init.cc +1 -3
  356. data/src/core/lib/surface/init.h +10 -1
  357. data/src/core/lib/surface/lame_client.cc +11 -11
  358. data/src/core/lib/surface/lame_client.h +1 -1
  359. data/src/core/lib/surface/server.cc +28 -22
  360. data/src/core/lib/surface/server.h +16 -15
  361. data/src/core/lib/surface/validate_metadata.cc +7 -7
  362. data/src/core/lib/surface/validate_metadata.h +3 -2
  363. data/src/core/lib/surface/version.cc +4 -2
  364. data/src/core/lib/transport/byte_stream.cc +5 -5
  365. data/src/core/lib/transport/byte_stream.h +8 -8
  366. data/src/core/lib/transport/connectivity_state.cc +1 -1
  367. data/src/core/lib/transport/error_utils.cc +21 -10
  368. data/src/core/lib/transport/error_utils.h +11 -5
  369. data/src/core/lib/transport/metadata_batch.cc +37 -37
  370. data/src/core/lib/transport/metadata_batch.h +19 -18
  371. data/src/core/lib/transport/transport.cc +4 -3
  372. data/src/core/lib/transport/transport.h +6 -4
  373. data/src/core/lib/transport/transport_op_string.cc +6 -6
  374. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  375. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  376. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  377. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  378. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  379. data/src/core/tsi/ssl_transport_security.cc +32 -14
  380. data/src/core/tsi/ssl_transport_security.h +3 -4
  381. data/src/ruby/bin/math_services_pb.rb +1 -1
  382. data/src/ruby/ext/grpc/extconf.rb +2 -0
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  384. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  385. data/src/ruby/lib/grpc/version.rb +1 -1
  386. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  388. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  389. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  390. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  391. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  392. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  393. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  394. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  395. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  396. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  397. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  398. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  399. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  400. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  401. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  402. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  403. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  404. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  405. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  406. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  407. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  408. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  409. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  410. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  411. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  412. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  413. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  414. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  415. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  416. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  417. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  418. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  419. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  420. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  421. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  422. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  423. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  424. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  425. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  426. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  427. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  428. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  429. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  430. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  431. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  432. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  433. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  434. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  435. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  436. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  437. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  438. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  439. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  440. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  441. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  442. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  443. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  444. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  445. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  446. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  447. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  448. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  449. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  450. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  451. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  452. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  453. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  455. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  456. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  457. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  458. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  459. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  460. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  461. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  462. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  463. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  464. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  465. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  466. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  467. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  468. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  469. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  470. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  471. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  472. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  473. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  474. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  475. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  476. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  477. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  478. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  479. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  480. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  481. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  482. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  483. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  484. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  485. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  486. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  487. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  488. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  492. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  493. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  494. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  495. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  496. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  497. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  498. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  499. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  500. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  501. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  505. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  506. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  507. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  508. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  509. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  511. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  543. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  544. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  545. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  546. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  547. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  548. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  549. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  550. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  551. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  552. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  553. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  554. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  555. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  556. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  557. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  558. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  559. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  560. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  561. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  562. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  563. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  566. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  567. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  568. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  569. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  571. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  573. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  576. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  577. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  579. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  580. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  581. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  582. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  583. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  584. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  585. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  587. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  588. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  589. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  591. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  592. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  593. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  595. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  596. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  597. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  598. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  600. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  601. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  604. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  606. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  615. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  616. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  617. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  618. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  623. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  624. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  625. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  626. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  627. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  628. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  629. metadata +94 -46
  630. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  631. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  632. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  633. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  635. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  636. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -0,0 +1,91 @@
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
+ struct grpc_slice_buffer;
27
+
28
+ namespace grpc_event_engine {
29
+ namespace experimental {
30
+
31
+ // TODO(hork): stubbed out here, to be replaced with a real version in next PR.
32
+ class SliceBuffer {
33
+ public:
34
+ SliceBuffer() { abort(); }
35
+ explicit SliceBuffer(grpc_slice_buffer*) { abort(); }
36
+ };
37
+
38
+ class SliceAllocator {
39
+ public:
40
+ // gRPC-internal constructor
41
+ explicit SliceAllocator(grpc_resource_user* user);
42
+ // Not copyable
43
+ SliceAllocator(SliceAllocator& other) = delete;
44
+ SliceAllocator& operator=(const SliceAllocator& other) = delete;
45
+ // Moveable
46
+ SliceAllocator(SliceAllocator&& other) noexcept;
47
+ SliceAllocator& operator=(SliceAllocator&& other) noexcept;
48
+ ~SliceAllocator();
49
+
50
+ using AllocateCallback =
51
+ std::function<void(absl::Status, SliceBuffer* buffer)>;
52
+ /// Requests \a size bytes from gRPC, and populates \a dest with the allocated
53
+ /// slices. Ownership of the \a SliceBuffer is not transferred.
54
+ ///
55
+ /// gRPC provides a ResourceQuota system to cap the amount of memory used by
56
+ /// the library. When a memory limit has been reached, slice allocation is
57
+ /// interrupted to attempt to reclaim memory from participating gRPC
58
+ /// internals. When there is sufficient memory available, slice allocation
59
+ /// proceeds as normal.
60
+ absl::Status Allocate(size_t size, SliceBuffer* dest,
61
+ SliceAllocator::AllocateCallback cb);
62
+
63
+ private:
64
+ grpc_resource_user* resource_user_;
65
+ };
66
+
67
+ class SliceAllocatorFactory {
68
+ public:
69
+ // gRPC-internal constructor
70
+ explicit SliceAllocatorFactory(grpc_resource_quota* quota);
71
+ // Not copyable
72
+ SliceAllocatorFactory(SliceAllocatorFactory& other) = delete;
73
+ SliceAllocatorFactory& operator=(const SliceAllocatorFactory& other) = delete;
74
+ // Moveable
75
+ SliceAllocatorFactory(SliceAllocatorFactory&& other) noexcept;
76
+ SliceAllocatorFactory& operator=(SliceAllocatorFactory&& other) noexcept;
77
+ ~SliceAllocatorFactory();
78
+
79
+ /// On Endpoint creation, call \a CreateSliceAllocator with the name of the
80
+ /// endpoint peer (a URI string, most likely). Note: \a peer_name must outlive
81
+ /// the Endpoint.
82
+ SliceAllocator CreateSliceAllocator(absl::string_view peer_name);
83
+
84
+ private:
85
+ grpc_resource_quota* resource_quota_;
86
+ };
87
+
88
+ } // namespace experimental
89
+ } // namespace grpc_event_engine
90
+
91
+ #endif // GRPC_EVENT_ENGINE_SLICE_ALLOCATOR_H
data/include/grpc/grpc.h CHANGED
@@ -115,8 +115,7 @@ GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_pluck(
115
115
  of GRPC_CQ_CALLBACK and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING.
116
116
  This function is experimental. */
117
117
  GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_callback(
118
- grpc_experimental_completion_queue_functor* shutdown_callback,
119
- void* reserved);
118
+ grpc_completion_queue_functor* shutdown_callback, void* reserved);
120
119
 
121
120
  /** Create a completion queue */
122
121
  GRPCAPI grpc_completion_queue* grpc_completion_queue_create(
@@ -414,7 +413,7 @@ GRPCAPI void grpc_server_register_completion_queue(grpc_server* server,
414
413
  // There might be more methods added later, so users should take care to memset
415
414
  // this to 0 before using it.
416
415
  typedef struct {
417
- void (*on_serving_status_change)(void* user_data, const char* uri,
416
+ void (*on_serving_status_update)(void* user_data, const char* uri,
418
417
  grpc_status_code code,
419
418
  const char* error_message);
420
419
  void* user_data;
@@ -424,7 +423,7 @@ typedef struct grpc_server_config_fetcher grpc_server_config_fetcher;
424
423
 
425
424
  /** EXPERIMENTAL. Creates an xDS config fetcher. */
426
425
  GRPCAPI grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
427
- grpc_server_xds_status_notifier notifier);
426
+ grpc_server_xds_status_notifier notifier, const grpc_channel_args* args);
428
427
 
429
428
  /** EXPERIMENTAL. Destroys a config fetcher. */
430
429
  GRPCAPI void grpc_server_config_fetcher_destroy(
@@ -555,6 +554,14 @@ GRPCAPI char* grpc_channelz_get_subchannel(intptr_t subchannel_id);
555
554
  is allocated and must be freed by the application. */
556
555
  GRPCAPI char* grpc_channelz_get_socket(intptr_t socket_id);
557
556
 
557
+ /**
558
+ * EXPERIMENTAL - Subject to change.
559
+ * Fetch a vtable for grpc_channel_arg that points to
560
+ * grpc_authorization_policy_provider.
561
+ */
562
+ GRPCAPI const grpc_arg_pointer_vtable*
563
+ grpc_authorization_policy_provider_arg_vtable(void);
564
+
558
565
  #ifdef __cplusplus
559
566
  }
560
567
  #endif
@@ -1085,6 +1085,38 @@ GRPCAPI grpc_channel_credentials* grpc_xds_credentials_create(
1085
1085
  GRPCAPI grpc_server_credentials* grpc_xds_server_credentials_create(
1086
1086
  grpc_server_credentials* fallback_credentials);
1087
1087
 
1088
+ /**
1089
+ * EXPERIMENTAL - Subject to change.
1090
+ * An opaque type that is responsible for providing authorization policies to
1091
+ * gRPC.
1092
+ */
1093
+ typedef struct grpc_authorization_policy_provider
1094
+ grpc_authorization_policy_provider;
1095
+
1096
+ /**
1097
+ * EXPERIMENTAL - Subject to change.
1098
+ * Creates a grpc_authorization_policy_provider using SDK authorization policy
1099
+ * from static string.
1100
+ * - authz_policy is the input SDK authorization policy.
1101
+ * - code is the error status code on failure. On success, it equals
1102
+ * GRPC_STATUS_OK.
1103
+ * - error_details contains details about the error if any. If the
1104
+ * initialization is successful, it will be null. Caller must use gpr_free to
1105
+ * destroy this string.
1106
+ */
1107
+ GRPCAPI grpc_authorization_policy_provider*
1108
+ grpc_authorization_policy_provider_static_data_create(
1109
+ const char* authz_policy, grpc_status_code* code,
1110
+ const char** error_details);
1111
+
1112
+ /**
1113
+ * EXPERIMENTAL - Subject to change.
1114
+ * Releases grpc_authorization_policy_provider object. The creator of
1115
+ * grpc_authorization_policy_provider is responsible for its release.
1116
+ */
1117
+ GRPCAPI void grpc_authorization_policy_provider_release(
1118
+ grpc_authorization_policy_provider* provider);
1119
+
1088
1120
  #ifdef __cplusplus
1089
1121
  }
1090
1122
  #endif
@@ -29,10 +29,25 @@ 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_URI_PROPERTY_NAME "peer_uri"
49
+ #define GRPC_PEER_EMAIL_PROPERTY_NAME "peer_email"
50
+ #define GRPC_PEER_IP_PROPERTY_NAME "peer_ip"
36
51
 
37
52
  /** Environment variable that points to the default SSL roots file. This file
38
53
  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. */
@@ -417,6 +428,10 @@ typedef struct {
417
428
  #define GRPC_ARG_CHANNEL_POOL_DOMAIN "grpc.channel_pooling_domain"
418
429
  /** gRPC Objective-C channel pooling id. */
419
430
  #define GRPC_ARG_CHANNEL_ID "grpc.channel_id"
431
+ /** Channel argument for grpc_authorization_policy_provider. If present, enables
432
+ gRPC authorization check. */
433
+ #define GRPC_ARG_AUTHORIZATION_POLICY_PROVIDER \
434
+ "grpc.authorization_policy_provider"
420
435
  /** \} */
421
436
 
422
437
  /** Result of a grpc call. If the caller satisfies the prerequisites of a
@@ -731,21 +746,20 @@ typedef enum {
731
746
  /** Events are popped out by calling grpc_completion_queue_pluck() API ONLY*/
732
747
  GRPC_CQ_PLUCK,
733
748
 
734
- /** EXPERIMENTAL: Events trigger a callback specified as the tag */
749
+ /** Events trigger a callback specified as the tag */
735
750
  GRPC_CQ_CALLBACK
736
751
  } grpc_cq_completion_type;
737
752
 
738
- /** EXPERIMENTAL: Specifies an interface class to be used as a tag
739
- for callback-based completion queues. This can be used directly,
740
- as the first element of a struct in C, or as a base class in C++.
741
- Its "run" value should be assigned to some non-member function, such as
742
- a static method. */
743
- typedef struct grpc_experimental_completion_queue_functor {
753
+ /** Specifies an interface class to be used as a tag for callback-based
754
+ * completion queues. This can be used directly, as the first element of a
755
+ * struct in C, or as a base class in C++. Its "run" value should be assigned to
756
+ * some non-member function, such as a static method. */
757
+ typedef struct grpc_completion_queue_functor {
744
758
  /** The run member specifies a function that will be called when this
745
759
  tag is extracted from the completion queue. Its arguments will be a
746
760
  pointer to this functor and a boolean that indicates whether the
747
761
  operation succeeded (non-zero) or failed (zero) */
748
- void (*functor_run)(struct grpc_experimental_completion_queue_functor*, int);
762
+ void (*functor_run)(struct grpc_completion_queue_functor*, int);
749
763
 
750
764
  /** The inlineable member specifies whether this functor can be run inline.
751
765
  This should only be used for trivial internally-defined functors. */
@@ -753,10 +767,11 @@ typedef struct grpc_experimental_completion_queue_functor {
753
767
 
754
768
  /** The following fields are not API. They are meant for internal use. */
755
769
  int internal_success;
756
- struct grpc_experimental_completion_queue_functor* internal_next;
757
- } grpc_experimental_completion_queue_functor;
770
+ struct grpc_completion_queue_functor* internal_next;
771
+ } grpc_completion_queue_functor;
758
772
 
759
- /* The upgrade to version 2 is currently experimental. */
773
+ typedef grpc_completion_queue_functor
774
+ grpc_experimental_completion_queue_functor;
760
775
 
761
776
  #define GRPC_CQ_CURRENT_VERSION 2
762
777
  #define GRPC_CQ_VERSION_MINIMUM_FOR_CALLBACKABLE 2
@@ -771,10 +786,10 @@ typedef struct grpc_completion_queue_attributes {
771
786
 
772
787
  /* END OF VERSION 1 CQ ATTRIBUTES */
773
788
 
774
- /* EXPERIMENTAL: START OF VERSION 2 CQ ATTRIBUTES */
789
+ /* START OF VERSION 2 CQ ATTRIBUTES */
775
790
  /** When creating a callbackable CQ, pass in a functor to get invoked when
776
791
  * shutdown is complete */
777
- grpc_experimental_completion_queue_functor* cq_shutdown_cb;
792
+ grpc_completion_queue_functor* cq_shutdown_cb;
778
793
 
779
794
  /* END OF VERSION 2 CQ ATTRIBUTES */
780
795
  } grpc_completion_queue_attributes;
@@ -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
@@ -659,4 +664,21 @@ typedef unsigned __int64 uint64_t;
659
664
  #define __STDC_FORMAT_MACROS
660
665
  #endif
661
666
 
667
+ /* Selectively enable EventEngine on specific platforms. This default can be
668
+ * overridden using the GRPC_USE_EVENT_ENGINE compiler flag.
669
+ */
670
+ #ifndef GRPC_USE_EVENT_ENGINE
671
+ /* Not enabled by default on any platforms yet. (2021.06) */
672
+ #elif GRPC_USE_EVENT_ENGINE == 0
673
+ /* Building with `-DGRPC_USE_EVENT_ENGINE=0` will override the default. */
674
+ #undef GRPC_USE_EVENT_ENGINE
675
+ #endif /* GRPC_USE_EVENT_ENGINE */
676
+
677
+ #ifdef GRPC_USE_EVENT_ENGINE
678
+ #undef GPR_SUPPORT_CHANNELS_FROM_FD
679
+ #define GRPC_ARES 0
680
+ #endif /* GRPC_USE_EVENT_ENGINE */
681
+
682
+ #define GRPC_CALLBACK_API_NONEXPERIMENTAL
683
+
662
684
  #endif /* GRPC_IMPL_CODEGEN_PORT_PLATFORM_H */
@@ -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
  }