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
@@ -28,8 +28,9 @@
28
28
  #include "src/core/lib/security/transport/auth_filters.h"
29
29
  #include "src/core/lib/slice/slice_internal.h"
30
30
 
31
- static void recv_initial_metadata_ready(void* arg, grpc_error* error);
32
- static void recv_trailing_metadata_ready(void* user_data, grpc_error* error);
31
+ static void recv_initial_metadata_ready(void* arg, grpc_error_handle error);
32
+ static void recv_trailing_metadata_ready(void* user_data,
33
+ grpc_error_handle error);
33
34
 
34
35
  namespace {
35
36
  enum async_state {
@@ -79,10 +80,10 @@ struct call_data {
79
80
  grpc_transport_stream_op_batch* recv_initial_metadata_batch;
80
81
  grpc_closure* original_recv_initial_metadata_ready;
81
82
  grpc_closure recv_initial_metadata_ready;
82
- grpc_error* recv_initial_metadata_error = GRPC_ERROR_NONE;
83
+ grpc_error_handle recv_initial_metadata_error = GRPC_ERROR_NONE;
83
84
  grpc_closure recv_trailing_metadata_ready;
84
85
  grpc_closure* original_recv_trailing_metadata_ready;
85
- grpc_error* recv_trailing_metadata_error;
86
+ grpc_error_handle recv_trailing_metadata_error;
86
87
  bool seen_recv_trailing_metadata_ready = false;
87
88
  grpc_metadata_array md;
88
89
  const grpc_metadata* consumed_md;
@@ -135,7 +136,7 @@ static void on_md_processing_done_inner(grpc_call_element* elem,
135
136
  size_t num_consumed_md,
136
137
  const grpc_metadata* response_md,
137
138
  size_t num_response_md,
138
- grpc_error* error) {
139
+ grpc_error_handle error) {
139
140
  call_data* calld = static_cast<call_data*>(elem->call_data);
140
141
  grpc_transport_stream_op_batch* batch = calld->recv_initial_metadata_batch;
141
142
  /* TODO(jboeuf): Implement support for response_md. */
@@ -175,7 +176,7 @@ static void on_md_processing_done(
175
176
  // If the call was not cancelled while we were in flight, process the result.
176
177
  if (gpr_atm_full_cas(&calld->state, static_cast<gpr_atm>(STATE_INIT),
177
178
  static_cast<gpr_atm>(STATE_DONE))) {
178
- grpc_error* error = GRPC_ERROR_NONE;
179
+ grpc_error_handle error = GRPC_ERROR_NONE;
179
180
  if (status != GRPC_STATUS_OK) {
180
181
  if (error_details == nullptr) {
181
182
  error_details = "Authentication metadata processing failed.";
@@ -196,7 +197,7 @@ static void on_md_processing_done(
196
197
  GRPC_CALL_STACK_UNREF(calld->owning_call, "server_auth_metadata");
197
198
  }
198
199
 
199
- static void cancel_call(void* arg, grpc_error* error) {
200
+ static void cancel_call(void* arg, grpc_error_handle error) {
200
201
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
201
202
  call_data* calld = static_cast<call_data*>(elem->call_data);
202
203
  // If the result was not already processed, invoke the callback now.
@@ -206,9 +207,10 @@ static void cancel_call(void* arg, grpc_error* error) {
206
207
  on_md_processing_done_inner(elem, nullptr, 0, nullptr, 0,
207
208
  GRPC_ERROR_REF(error));
208
209
  }
210
+ GRPC_CALL_STACK_UNREF(calld->owning_call, "cancel_call");
209
211
  }
210
212
 
211
- static void recv_initial_metadata_ready(void* arg, grpc_error* error) {
213
+ static void recv_initial_metadata_ready(void* arg, grpc_error_handle error) {
212
214
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
213
215
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
214
216
  call_data* calld = static_cast<call_data*>(elem->call_data);
@@ -218,6 +220,9 @@ static void recv_initial_metadata_ready(void* arg, grpc_error* error) {
218
220
  chand->creds->auth_metadata_processor().process != nullptr) {
219
221
  // We're calling out to the application, so we need to make sure
220
222
  // to drop the call combiner early if we get cancelled.
223
+ // TODO(yashykt): We would not need this ref if call combiners used
224
+ // Closure::Run() instead of ExecCtx::Run()
225
+ GRPC_CALL_STACK_REF(calld->owning_call, "cancel_call");
221
226
  GRPC_CLOSURE_INIT(&calld->cancel_closure, cancel_call, elem,
222
227
  grpc_schedule_on_exec_ctx);
223
228
  calld->call_combiner->SetNotifyOnCancel(&calld->cancel_closure);
@@ -242,7 +247,8 @@ static void recv_initial_metadata_ready(void* arg, grpc_error* error) {
242
247
  grpc_core::Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
243
248
  }
244
249
 
245
- static void recv_trailing_metadata_ready(void* user_data, grpc_error* err) {
250
+ static void recv_trailing_metadata_ready(void* user_data,
251
+ grpc_error_handle err) {
246
252
  grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
247
253
  call_data* calld = static_cast<call_data*>(elem->call_data);
248
254
  if (calld->original_recv_initial_metadata_ready != nullptr) {
@@ -280,7 +286,7 @@ static void server_auth_start_transport_stream_op_batch(
280
286
  }
281
287
 
282
288
  /* Constructor for call_data */
283
- static grpc_error* server_auth_init_call_elem(
289
+ static grpc_error_handle server_auth_init_call_elem(
284
290
  grpc_call_element* elem, const grpc_call_element_args* args) {
285
291
  new (elem->call_data) call_data(elem, *args);
286
292
  return GRPC_ERROR_NONE;
@@ -295,16 +301,16 @@ static void server_auth_destroy_call_elem(
295
301
  }
296
302
 
297
303
  /* Constructor for channel_data */
298
- static grpc_error* server_auth_init_channel_elem(
304
+ static grpc_error_handle server_auth_init_channel_elem(
299
305
  grpc_channel_element* elem, grpc_channel_element_args* args) {
300
306
  GPR_ASSERT(!args->is_last);
301
307
  grpc_auth_context* auth_context =
302
308
  grpc_find_auth_context_in_args(args->channel_args);
303
309
  if (auth_context == nullptr) {
304
- grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
310
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
305
311
  "No authorization context found. This might be a TRANSIENT failure due "
306
312
  "to certificates not having been loaded yet.");
307
- gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
313
+ gpr_log(GPR_DEBUG, "%s", grpc_error_std_string(error).c_str());
308
314
  return error;
309
315
  }
310
316
  GPR_ASSERT(auth_context != nullptr);
@@ -20,7 +20,8 @@
20
20
 
21
21
  #include "src/core/lib/security/transport/tsi_error.h"
22
22
 
23
- grpc_error* grpc_set_tsi_error_result(grpc_error* error, tsi_result result) {
23
+ grpc_error_handle grpc_set_tsi_error_result(grpc_error_handle error,
24
+ tsi_result result) {
24
25
  return grpc_error_set_int(
25
26
  grpc_error_set_str(
26
27
  error, GRPC_ERROR_STR_TSI_ERROR,
@@ -24,6 +24,7 @@
24
24
  #include "src/core/lib/iomgr/error.h"
25
25
  #include "src/core/tsi/transport_security_interface.h"
26
26
 
27
- grpc_error* grpc_set_tsi_error_result(grpc_error* error, tsi_result result);
27
+ grpc_error_handle grpc_set_tsi_error_result(grpc_error_handle error,
28
+ tsi_result result);
28
29
 
29
30
  #endif /* GRPC_CORE_LIB_SECURITY_TRANSPORT_TSI_ERROR_H */
@@ -30,7 +30,7 @@
30
30
 
31
31
  const char* grpc_json_get_string_property(const grpc_core::Json& json,
32
32
  const char* prop_name,
33
- grpc_error** error) {
33
+ grpc_error_handle* error) {
34
34
  if (json.type() != grpc_core::Json::Type::OBJECT) {
35
35
  if (error != nullptr) {
36
36
  *error =
@@ -62,7 +62,7 @@ const char* grpc_json_get_string_property(const grpc_core::Json& json,
62
62
  bool grpc_copy_json_string_property(const grpc_core::Json& json,
63
63
  const char* prop_name,
64
64
  char** copied_value) {
65
- grpc_error* error = GRPC_ERROR_NONE;
65
+ grpc_error_handle error = GRPC_ERROR_NONE;
66
66
  const char* prop_value =
67
67
  grpc_json_get_string_property(json, prop_name, &error);
68
68
  GRPC_LOG_IF_ERROR("Could not copy JSON property", error);
@@ -35,7 +35,7 @@
35
35
  // Gets a child property from a json node.
36
36
  const char* grpc_json_get_string_property(const grpc_core::Json& json,
37
37
  const char* prop_name,
38
- grpc_error** error);
38
+ grpc_error_handle* error);
39
39
 
40
40
  // Copies the value of the json child property specified by prop_name.
41
41
  // Returns false if the property was not found.
@@ -170,6 +170,8 @@ struct grpc_call {
170
170
  bool destroy_called = false;
171
171
  /** flag indicating that cancellation is inherited */
172
172
  bool cancellation_is_inherited = false;
173
+ // Trailers-only response status
174
+ bool is_trailers_only = false;
173
175
  /** which ops are in-flight */
174
176
  bool sent_initial_metadata = false;
175
177
  bool sending_message = false;
@@ -223,6 +225,7 @@ struct grpc_call {
223
225
  grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> sending_stream;
224
226
 
225
227
  grpc_core::OrphanablePtr<grpc_core::ByteStream> receiving_stream;
228
+ bool call_failed_before_recv_message = false;
226
229
  grpc_byte_buffer** receiving_buffer = nullptr;
227
230
  grpc_slice receiving_slice = grpc_empty_slice();
228
231
  grpc_closure receiving_slice_ready;
@@ -290,14 +293,15 @@ static void execute_batch(grpc_call* call,
290
293
 
291
294
  static void cancel_with_status(grpc_call* c, grpc_status_code status,
292
295
  const char* description);
293
- static void cancel_with_error(grpc_call* c, grpc_error* error);
294
- static void destroy_call(void* call_stack, grpc_error* error);
295
- static void receiving_slice_ready(void* bctlp, grpc_error* error);
296
- static void set_final_status(grpc_call* call, grpc_error* error);
296
+ static void cancel_with_error(grpc_call* c, grpc_error_handle error);
297
+ static void destroy_call(void* call_stack, grpc_error_handle error);
298
+ static void receiving_slice_ready(void* bctlp, grpc_error_handle error);
299
+ static void set_final_status(grpc_call* call, grpc_error_handle error);
297
300
  static void process_data_after_md(batch_control* bctl);
298
301
  static void post_batch_completion(batch_control* bctl);
299
302
 
300
- static void add_init_error(grpc_error** composite, grpc_error* new_err) {
303
+ static void add_init_error(grpc_error_handle* composite,
304
+ grpc_error_handle new_err) {
301
305
  if (new_err == GRPC_ERROR_NONE) return;
302
306
  if (*composite == GRPC_ERROR_NONE) {
303
307
  *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
@@ -335,15 +339,15 @@ size_t grpc_call_get_initial_size_estimate() {
335
339
  sizeof(grpc_linked_mdelem) * ESTIMATED_MDELEM_COUNT;
336
340
  }
337
341
 
338
- grpc_error* grpc_call_create(const grpc_call_create_args* args,
339
- grpc_call** out_call) {
342
+ grpc_error_handle grpc_call_create(const grpc_call_create_args* args,
343
+ grpc_call** out_call) {
340
344
  GPR_TIMER_SCOPE("grpc_call_create", 0);
341
345
 
342
346
  GRPC_CHANNEL_INTERNAL_REF(args->channel, "call");
343
347
 
344
348
  grpc_core::Arena* arena;
345
349
  grpc_call* call;
346
- grpc_error* error = GRPC_ERROR_NONE;
350
+ grpc_error_handle error = GRPC_ERROR_NONE;
347
351
  grpc_channel_stack* channel_stack =
348
352
  grpc_channel_get_channel_stack(args->channel);
349
353
  size_t initial_size = grpc_channel_get_call_size_estimate(args->channel);
@@ -524,7 +528,7 @@ void grpc_call_internal_unref(grpc_call* c REF_ARG) {
524
528
  GRPC_CALL_STACK_UNREF(CALL_STACK_FROM_CALL(c), REF_REASON);
525
529
  }
526
530
 
527
- static void release_call(void* call, grpc_error* /*error*/) {
531
+ static void release_call(void* call, grpc_error_handle /*error*/) {
528
532
  grpc_call* c = static_cast<grpc_call*>(call);
529
533
  grpc_channel* channel = c->channel;
530
534
  grpc_core::Arena* arena = c->arena;
@@ -533,7 +537,7 @@ static void release_call(void* call, grpc_error* /*error*/) {
533
537
  GRPC_CHANNEL_INTERNAL_UNREF(channel, "call");
534
538
  }
535
539
 
536
- static void destroy_call(void* call, grpc_error* /*error*/) {
540
+ static void destroy_call(void* call, grpc_error_handle /*error*/) {
537
541
  GPR_TIMER_SCOPE("destroy_call", 0);
538
542
  size_t i;
539
543
  int ii;
@@ -559,8 +563,8 @@ static void destroy_call(void* call, grpc_error* /*error*/) {
559
563
  GRPC_CQ_INTERNAL_UNREF(c->cq, "bind");
560
564
  }
561
565
 
562
- grpc_error* status_error =
563
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&c->status_error));
566
+ grpc_error_handle status_error =
567
+ reinterpret_cast<grpc_error_handle>(gpr_atm_acq_load(&c->status_error));
564
568
  grpc_error_get_status(status_error, c->send_deadline,
565
569
  &c->final_info.final_status, nullptr, nullptr,
566
570
  &(c->final_info.error_string));
@@ -610,11 +614,8 @@ void grpc_call_unref(grpc_call* c) {
610
614
  // Unset the call combiner cancellation closure. This has the
611
615
  // effect of scheduling the previously set cancellation closure, if
612
616
  // any, so that it can release any internal references it may be
613
- // holding to the call stack. Also flush the closures on exec_ctx so that
614
- // filters that schedule cancel notification closures on exec_ctx do not
615
- // need to take a ref of the call stack to guarantee closure liveness.
617
+ // holding to the call stack.
616
618
  c->call_combiner.SetNotifyOnCancel(nullptr);
617
- grpc_core::ExecCtx::Get()->Flush();
618
619
  }
619
620
  GRPC_CALL_INTERNAL_UNREF(c, "destroy");
620
621
  }
@@ -630,7 +631,8 @@ grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
630
631
 
631
632
  // This is called via the call combiner to start sending a batch down
632
633
  // the filter stack.
633
- static void execute_batch_in_call_combiner(void* arg, grpc_error* /*ignored*/) {
634
+ static void execute_batch_in_call_combiner(void* arg,
635
+ grpc_error_handle /*ignored*/) {
634
636
  GPR_TIMER_SCOPE("execute_batch_in_call_combiner", 0);
635
637
  grpc_transport_stream_op_batch* batch =
636
638
  static_cast<grpc_transport_stream_op_batch*>(arg);
@@ -691,7 +693,7 @@ struct cancel_state {
691
693
  };
692
694
  // The on_complete callback used when sending a cancel_stream batch down
693
695
  // the filter stack. Yields the call combiner when the batch is done.
694
- static void done_termination(void* arg, grpc_error* /*error*/) {
696
+ static void done_termination(void* arg, grpc_error_handle /*error*/) {
695
697
  cancel_state* state = static_cast<cancel_state*>(arg);
696
698
  GRPC_CALL_COMBINER_STOP(&state->call->call_combiner,
697
699
  "on_complete for cancel_stream op");
@@ -699,7 +701,7 @@ static void done_termination(void* arg, grpc_error* /*error*/) {
699
701
  gpr_free(state);
700
702
  }
701
703
 
702
- static void cancel_with_error(grpc_call* c, grpc_error* error) {
704
+ static void cancel_with_error(grpc_call* c, grpc_error_handle error) {
703
705
  if (!gpr_atm_rel_cas(&c->cancelled_with_error, 0, 1)) {
704
706
  GRPC_ERROR_UNREF(error);
705
707
  return;
@@ -725,8 +727,8 @@ void grpc_call_cancel_internal(grpc_call* call) {
725
727
  cancel_with_error(call, GRPC_ERROR_CANCELLED);
726
728
  }
727
729
 
728
- static grpc_error* error_from_status(grpc_status_code status,
729
- const char* description) {
730
+ static grpc_error_handle error_from_status(grpc_status_code status,
731
+ const char* description) {
730
732
  // copying 'description' is needed to ensure the grpc_call_cancel_with_status
731
733
  // guarantee that can be short-lived.
732
734
  return grpc_error_set_int(
@@ -741,10 +743,10 @@ static void cancel_with_status(grpc_call* c, grpc_status_code status,
741
743
  cancel_with_error(c, error_from_status(status, description));
742
744
  }
743
745
 
744
- static void set_final_status(grpc_call* call, grpc_error* error) {
746
+ static void set_final_status(grpc_call* call, grpc_error_handle error) {
745
747
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
746
748
  gpr_log(GPR_DEBUG, "set_final_status %s", call->is_client ? "CLI" : "SVR");
747
- gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
749
+ gpr_log(GPR_DEBUG, "%s", grpc_error_std_string(error).c_str());
748
750
  }
749
751
  if (call->is_client) {
750
752
  grpc_error_get_status(error, call->send_deadline,
@@ -770,7 +772,7 @@ static void set_final_status(grpc_call* call, grpc_error* error) {
770
772
  call->final_op.server.core_server->channelz_node();
771
773
  if (channelz_node != nullptr) {
772
774
  if (*call->final_op.server.cancelled ||
773
- reinterpret_cast<grpc_error*>(
775
+ reinterpret_cast<grpc_error_handle>(
774
776
  gpr_atm_acq_load(&call->status_error)) != GRPC_ERROR_NONE) {
775
777
  channelz_node->RecordCallFailed();
776
778
  } else {
@@ -952,7 +954,7 @@ static int prepare_application_metadata(grpc_call* call, int count,
952
954
  for (i = 0; i < total_count; i++) {
953
955
  grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
954
956
  grpc_linked_mdelem* l = linked_from_md(md);
955
- grpc_error* error = grpc_metadata_batch_link_tail(batch, l);
957
+ grpc_error_handle error = grpc_metadata_batch_link_tail(batch, l);
956
958
  if (error != GRPC_ERROR_NONE) {
957
959
  GRPC_MDELEM_UNREF(l->md);
958
960
  }
@@ -1053,14 +1055,14 @@ static void recv_initial_filter(grpc_call* call, grpc_metadata_batch* b) {
1053
1055
  }
1054
1056
 
1055
1057
  static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
1056
- grpc_error* batch_error) {
1058
+ grpc_error_handle batch_error) {
1057
1059
  grpc_call* call = static_cast<grpc_call*>(args);
1058
1060
  if (batch_error != GRPC_ERROR_NONE) {
1059
1061
  set_final_status(call, batch_error);
1060
1062
  } else if (b->idx.named.grpc_status != nullptr) {
1061
1063
  grpc_status_code status_code =
1062
1064
  grpc_get_status_code_from_metadata(b->idx.named.grpc_status->md);
1063
- grpc_error* error = GRPC_ERROR_NONE;
1065
+ grpc_error_handle error = GRPC_ERROR_NONE;
1064
1066
  if (status_code != GRPC_STATUS_OK) {
1065
1067
  char* peer = grpc_call_get_peer(call);
1066
1068
  error = grpc_error_set_int(
@@ -1171,8 +1173,8 @@ static void finish_batch_completion(void* user_data,
1171
1173
  }
1172
1174
 
1173
1175
  static void reset_batch_errors(batch_control* bctl) {
1174
- GRPC_ERROR_UNREF(
1175
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)));
1176
+ GRPC_ERROR_UNREF(reinterpret_cast<grpc_error_handle>(
1177
+ gpr_atm_acq_load(&bctl->batch_error)));
1176
1178
  gpr_atm_rel_store(&bctl->batch_error,
1177
1179
  reinterpret_cast<gpr_atm>(GRPC_ERROR_NONE));
1178
1180
  }
@@ -1180,8 +1182,8 @@ static void reset_batch_errors(batch_control* bctl) {
1180
1182
  static void post_batch_completion(batch_control* bctl) {
1181
1183
  grpc_call* next_child_call;
1182
1184
  grpc_call* call = bctl->call;
1183
- grpc_error* error = GRPC_ERROR_REF(
1184
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)));
1185
+ grpc_error_handle error = GRPC_ERROR_REF(reinterpret_cast<grpc_error_handle>(
1186
+ gpr_atm_acq_load(&bctl->batch_error)));
1185
1187
 
1186
1188
  if (bctl->op.send_initial_metadata) {
1187
1189
  grpc_metadata_batch_destroy(
@@ -1254,7 +1256,7 @@ static void finish_batch_step(batch_control* bctl) {
1254
1256
  }
1255
1257
 
1256
1258
  static void continue_receiving_slices(batch_control* bctl) {
1257
- grpc_error* error;
1259
+ grpc_error_handle error;
1258
1260
  grpc_call* call = bctl->call;
1259
1261
  for (;;) {
1260
1262
  size_t remaining = call->receiving_stream->length() -
@@ -1285,7 +1287,7 @@ static void continue_receiving_slices(batch_control* bctl) {
1285
1287
  }
1286
1288
  }
1287
1289
 
1288
- static void receiving_slice_ready(void* bctlp, grpc_error* error) {
1290
+ static void receiving_slice_ready(void* bctlp, grpc_error_handle error) {
1289
1291
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1290
1292
  grpc_call* call = bctl->call;
1291
1293
  bool release_error = false;
@@ -1345,13 +1347,13 @@ static void process_data_after_md(batch_control* bctl) {
1345
1347
  }
1346
1348
  }
1347
1349
 
1348
- static void receiving_stream_ready(void* bctlp, grpc_error* error) {
1350
+ static void receiving_stream_ready(void* bctlp, grpc_error_handle error) {
1349
1351
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1350
1352
  grpc_call* call = bctl->call;
1351
1353
  if (error != GRPC_ERROR_NONE) {
1352
1354
  call->receiving_stream.reset();
1353
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1354
- GRPC_ERROR_NONE) {
1355
+ if (reinterpret_cast<grpc_error_handle>(
1356
+ gpr_atm_acq_load(&bctl->batch_error)) == GRPC_ERROR_NONE) {
1355
1357
  gpr_atm_rel_store(&bctl->batch_error,
1356
1358
  reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1357
1359
  }
@@ -1371,7 +1373,7 @@ static void receiving_stream_ready(void* bctlp, grpc_error* error) {
1371
1373
  // a recv_message op down the filter stack. Yields the call combiner
1372
1374
  // before processing the received message.
1373
1375
  static void receiving_stream_ready_in_call_combiner(void* bctlp,
1374
- grpc_error* error) {
1376
+ grpc_error_handle error) {
1375
1377
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1376
1378
  grpc_call* call = bctl->call;
1377
1379
  GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_message_ready");
@@ -1464,7 +1466,8 @@ static void validate_filtered_metadata(batch_control* bctl) {
1464
1466
  }
1465
1467
  }
1466
1468
 
1467
- static void receiving_initial_metadata_ready(void* bctlp, grpc_error* error) {
1469
+ static void receiving_initial_metadata_ready(void* bctlp,
1470
+ grpc_error_handle error) {
1468
1471
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1469
1472
  grpc_call* call = bctl->call;
1470
1473
 
@@ -1483,8 +1486,8 @@ static void receiving_initial_metadata_ready(void* bctlp, grpc_error* error) {
1483
1486
  call->send_deadline = md->deadline;
1484
1487
  }
1485
1488
  } else {
1486
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1487
- GRPC_ERROR_NONE) {
1489
+ if (reinterpret_cast<grpc_error_handle>(
1490
+ gpr_atm_acq_load(&bctl->batch_error)) == GRPC_ERROR_NONE) {
1488
1491
  gpr_atm_rel_store(&bctl->batch_error,
1489
1492
  reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1490
1493
  }
@@ -1523,7 +1526,8 @@ static void receiving_initial_metadata_ready(void* bctlp, grpc_error* error) {
1523
1526
  finish_batch_step(bctl);
1524
1527
  }
1525
1528
 
1526
- static void receiving_trailing_metadata_ready(void* bctlp, grpc_error* error) {
1529
+ static void receiving_trailing_metadata_ready(void* bctlp,
1530
+ grpc_error_handle error) {
1527
1531
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1528
1532
  grpc_call* call = bctl->call;
1529
1533
  GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_trailing_metadata_ready");
@@ -1533,12 +1537,12 @@ static void receiving_trailing_metadata_ready(void* bctlp, grpc_error* error) {
1533
1537
  finish_batch_step(bctl);
1534
1538
  }
1535
1539
 
1536
- static void finish_batch(void* bctlp, grpc_error* error) {
1540
+ static void finish_batch(void* bctlp, grpc_error_handle error) {
1537
1541
  batch_control* bctl = static_cast<batch_control*>(bctlp);
1538
1542
  grpc_call* call = bctl->call;
1539
1543
  GRPC_CALL_COMBINER_STOP(&call->call_combiner, "on_complete");
1540
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1541
- GRPC_ERROR_NONE) {
1544
+ if (reinterpret_cast<grpc_error_handle>(
1545
+ gpr_atm_acq_load(&bctl->batch_error)) == GRPC_ERROR_NONE) {
1542
1546
  gpr_atm_rel_store(&bctl->batch_error,
1543
1547
  reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1544
1548
  }
@@ -1755,7 +1759,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1755
1759
  call->send_extra_metadata_count = 1;
1756
1760
  call->send_extra_metadata[0].md = grpc_get_reffed_status_elem(
1757
1761
  op->data.send_status_from_server.status);
1758
- grpc_error* status_error =
1762
+ grpc_error_handle status_error =
1759
1763
  op->data.send_status_from_server.status == GRPC_STATUS_OK
1760
1764
  ? GRPC_ERROR_NONE
1761
1765
  : grpc_error_set_int(
@@ -1823,7 +1827,10 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1823
1827
  &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1824
1828
  stream_op_payload->recv_initial_metadata.recv_initial_metadata_ready =
1825
1829
  &call->receiving_initial_metadata_ready;
1826
- if (!call->is_client) {
1830
+ if (call->is_client) {
1831
+ stream_op_payload->recv_initial_metadata.trailing_metadata_available =
1832
+ &call->is_trailers_only;
1833
+ } else {
1827
1834
  stream_op_payload->recv_initial_metadata.peer_string =
1828
1835
  &call->peer_string;
1829
1836
  }
@@ -1844,6 +1851,8 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1844
1851
  stream_op->recv_message = true;
1845
1852
  call->receiving_buffer = op->data.recv_message.recv_message;
1846
1853
  stream_op_payload->recv_message.recv_message = &call->receiving_stream;
1854
+ stream_op_payload->recv_message.call_failed_before_recv_message =
1855
+ &call->call_failed_before_recv_message;
1847
1856
  GRPC_CLOSURE_INIT(&call->receiving_stream_ready,
1848
1857
  receiving_stream_ready_in_call_combiner, bctl,
1849
1858
  grpc_schedule_on_exec_ctx);
@@ -2013,6 +2022,18 @@ grpc_compression_algorithm grpc_call_compression_for_level(
2013
2022
  return algo;
2014
2023
  }
2015
2024
 
2025
+ bool grpc_call_is_trailers_only(const grpc_call* call) {
2026
+ bool result = call->is_trailers_only;
2027
+ GPR_DEBUG_ASSERT(
2028
+ !result || call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */]
2029
+ .list.count == 0);
2030
+ return result;
2031
+ }
2032
+
2033
+ bool grpc_call_failed_before_recv_message(const grpc_call* c) {
2034
+ return c->call_failed_before_recv_message;
2035
+ }
2036
+
2016
2037
  const char* grpc_call_error_to_string(grpc_call_error error) {
2017
2038
  switch (error) {
2018
2039
  case GRPC_CALL_ERROR: