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,50 @@
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
+ #include <grpc/support/port_platform.h>
15
+
16
+ #include <grpc/event_engine/endpoint_config.h>
17
+ #include <grpc/event_engine/event_engine.h>
18
+ #include <grpc/event_engine/port.h>
19
+ #include <grpc/impl/codegen/grpc_types.h>
20
+ #include <grpc/support/log.h>
21
+
22
+ #include "absl/strings/str_format.h"
23
+ #include "absl/strings/str_join.h"
24
+
25
+ #include "src/core/lib/event_engine/sockaddr.h"
26
+
27
+ namespace grpc_event_engine {
28
+ namespace experimental {
29
+
30
+ EventEngine::ResolvedAddress::ResolvedAddress(const sockaddr* address,
31
+ socklen_t size)
32
+ : size_(size) {
33
+ GPR_ASSERT(size <= sizeof(address_));
34
+ memcpy(&address_, address, size);
35
+ }
36
+
37
+ const struct sockaddr* EventEngine::ResolvedAddress::address() const {
38
+ return reinterpret_cast<const struct sockaddr*>(address_);
39
+ }
40
+
41
+ socklen_t EventEngine::ResolvedAddress::size() const { return size_; }
42
+
43
+ std::shared_ptr<grpc_event_engine::experimental::EventEngine>
44
+ DefaultEventEngineFactory() {
45
+ // TODO(nnoble): delete when uv-ee is merged
46
+ abort();
47
+ }
48
+
49
+ } // namespace experimental
50
+ } // namespace grpc_event_engine
@@ -0,0 +1,89 @@
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
+ #include <grpc/support/port_platform.h>
15
+
16
+ #include "grpc/event_engine/slice_allocator.h"
17
+
18
+ #include <functional>
19
+
20
+ #include "absl/status/status.h"
21
+
22
+ #include "src/core/lib/iomgr/resource_quota.h"
23
+
24
+ namespace grpc_event_engine {
25
+ namespace experimental {
26
+
27
+ SliceAllocator::SliceAllocator(grpc_resource_user* user)
28
+ : resource_user_(user) {
29
+ grpc_resource_user_ref(resource_user_);
30
+ };
31
+
32
+ SliceAllocator::~SliceAllocator() {
33
+ if (resource_user_ != nullptr) {
34
+ grpc_resource_user_unref(resource_user_);
35
+ }
36
+ };
37
+
38
+ SliceAllocator::SliceAllocator(SliceAllocator&& other) noexcept
39
+ : resource_user_(other.resource_user_) {
40
+ other.resource_user_ = nullptr;
41
+ }
42
+
43
+ SliceAllocator& SliceAllocator::operator=(SliceAllocator&& other) noexcept {
44
+ resource_user_ = other.resource_user_;
45
+ other.resource_user_ = nullptr;
46
+ return *this;
47
+ }
48
+
49
+ absl::Status SliceAllocator::Allocate(size_t size, SliceBuffer* dest,
50
+ SliceAllocator::AllocateCallback cb) {
51
+ // TODO(hork): merge the implementation from the uv-ee branch.
52
+ (void)size;
53
+ (void)dest;
54
+ (void)cb;
55
+ return absl::OkStatus();
56
+ };
57
+
58
+ SliceAllocatorFactory::SliceAllocatorFactory(grpc_resource_quota* quota)
59
+ : resource_quota_(quota) {
60
+ grpc_resource_quota_ref_internal(resource_quota_);
61
+ };
62
+
63
+ SliceAllocatorFactory::~SliceAllocatorFactory() {
64
+ if (resource_quota_ != nullptr) {
65
+ grpc_resource_quota_unref_internal(resource_quota_);
66
+ }
67
+ }
68
+
69
+ SliceAllocatorFactory::SliceAllocatorFactory(
70
+ SliceAllocatorFactory&& other) noexcept
71
+ : resource_quota_(other.resource_quota_) {
72
+ other.resource_quota_ = nullptr;
73
+ }
74
+
75
+ SliceAllocatorFactory& SliceAllocatorFactory::operator=(
76
+ SliceAllocatorFactory&& other) noexcept {
77
+ resource_quota_ = other.resource_quota_;
78
+ other.resource_quota_ = nullptr;
79
+ return *this;
80
+ }
81
+
82
+ SliceAllocator SliceAllocatorFactory::CreateSliceAllocator(
83
+ absl::string_view peer_name) {
84
+ return SliceAllocator(
85
+ grpc_resource_user_create(resource_quota_, peer_name.data()));
86
+ }
87
+
88
+ } // namespace experimental
89
+ } // namespace grpc_event_engine
@@ -0,0 +1,40 @@
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
+ #include <grpc/support/port_platform.h>
15
+
16
+ #ifdef GRPC_USE_EVENT_ENGINE
17
+ #include <string.h>
18
+
19
+ #include "grpc/event_engine/event_engine.h"
20
+ #include "grpc/event_engine/port.h"
21
+ #include "grpc/support/log.h"
22
+
23
+ uint16_t grpc_htons(uint16_t hostshort) { return htons(hostshort); }
24
+
25
+ uint16_t grpc_ntohs(uint16_t netshort) { return ntohs(netshort); }
26
+
27
+ uint32_t grpc_htonl(uint32_t hostlong) { return htonl(hostlong); }
28
+
29
+ uint32_t grpc_ntohl(uint32_t netlong) { return ntohl(netlong); }
30
+
31
+ int grpc_inet_pton(int af, const char* src, void* dst) {
32
+ return inet_pton(af, src, dst);
33
+ }
34
+
35
+ const char* grpc_inet_ntop(int af, const void* src, char* dst, size_t size) {
36
+ inet_ntop(af, src, dst, size);
37
+ return dst;
38
+ }
39
+
40
+ #endif // GRPC_USE_EVENT_ENGINE
@@ -0,0 +1,44 @@
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_CORE_LIB_EVENT_ENGINE_SOCKADDR_H
15
+ #define GRPC_CORE_LIB_EVENT_ENGINE_SOCKADDR_H
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #ifdef GRPC_USE_EVENT_ENGINE
20
+ #include <grpc/event_engine/port.h>
21
+
22
+ #include "src/core/lib/iomgr/port.h"
23
+
24
+ typedef struct sockaddr grpc_sockaddr;
25
+ typedef struct sockaddr_in grpc_sockaddr_in;
26
+ typedef struct sockaddr_in6 grpc_sockaddr_in6;
27
+ typedef struct in_addr grpc_in_addr;
28
+ typedef struct in6_addr grpc_in6_addr;
29
+
30
+ #define GRPC_INET_ADDRSTRLEN INET_ADDRSTRLEN
31
+ #define GRPC_INET6_ADDRSTRLEN INET6_ADDRSTRLEN
32
+
33
+ #define GRPC_SOCK_STREAM SOCK_STREAM
34
+ #define GRPC_SOCK_DGRAM SOCK_DGRAM
35
+
36
+ #define GRPC_AF_UNSPEC AF_UNSPEC
37
+ #define GRPC_AF_UNIX AF_UNIX
38
+ #define GRPC_AF_INET AF_INET
39
+ #define GRPC_AF_INET6 AF_INET6
40
+
41
+ #define GRPC_AI_PASSIVE AI_PASSIVE
42
+
43
+ #endif
44
+ #endif // GRPC_CORE_LIB_EVENT_ENGINE_SOCKADDR_H
@@ -28,7 +28,8 @@
28
28
 
29
29
  extern "C" {
30
30
  #ifdef __linux__
31
- #if defined(__x86_64__) && !defined(GPR_MUSL_LIBC_COMPAT)
31
+ #if defined(__x86_64__) && !defined(GPR_MUSL_LIBC_COMPAT) && \
32
+ !defined(__ANDROID__)
32
33
  __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
33
34
  void* __wrap_memcpy(void* destination, const void* source, size_t num) {
34
35
  return memcpy(destination, source, num);
@@ -215,31 +215,45 @@ class NonPolymorphicRefCount {
215
215
  ~NonPolymorphicRefCount() = default;
216
216
  };
217
217
 
218
+ // Behavior of RefCounted<> upon ref count reaching 0.
219
+ enum UnrefBehavior {
220
+ // Default behavior: Delete the object.
221
+ kUnrefDelete,
222
+ // Do not delete the object upon unref. This is useful in cases where all
223
+ // existing objects must be tracked in a registry but the object's entry in
224
+ // the registry cannot be removed from the object's dtor due to
225
+ // synchronization issues. In this case, the registry can be cleaned up
226
+ // later by identifying entries for which RefIfNonZero() returns null.
227
+ kUnrefNoDelete,
228
+ // Call the object's dtor but do not delete it. This is useful for cases
229
+ // where the object is stored in memory allocated elsewhere (e.g., the call
230
+ // arena).
231
+ kUnrefCallDtor,
232
+ };
233
+
218
234
  namespace internal {
219
- template <typename T, bool DoDelete>
235
+ template <typename T, UnrefBehavior UnrefBehaviorArg>
220
236
  class Delete;
221
237
  template <typename T>
222
- class Delete<T, true> {
238
+ class Delete<T, kUnrefDelete> {
223
239
  public:
224
240
  explicit Delete(T* t) { delete t; }
225
241
  };
226
242
  template <typename T>
227
- class Delete<T, false> {
243
+ class Delete<T, kUnrefNoDelete> {
228
244
  public:
229
245
  explicit Delete(T* /*t*/) {}
230
246
  };
247
+ template <typename T>
248
+ class Delete<T, kUnrefCallDtor> {
249
+ public:
250
+ explicit Delete(T* t) { t->~T(); }
251
+ };
231
252
  } // namespace internal
232
253
 
233
254
  // A base class for reference-counted objects.
234
255
  // New objects should be created via new and start with a refcount of 1.
235
- // When the refcount reaches 0, the object will be deleted via delete.
236
- //
237
- // If DeleteUponUnref is false, deletion will not occur when the ref
238
- // count reaches 0. This is useful in cases where all existing objects
239
- // must be tracked in a registry but the object's entry in the registry
240
- // cannot be removed from the object's dtor due to synchronization issues.
241
- // In this case, the registry can be cleaned up later by identifying
242
- // entries for which RefIfNonZero() returns null.
256
+ // When the refcount reaches 0, executes the specified UnrefBehavior.
243
257
  //
244
258
  // This will commonly be used by CRTP (curiously-recurring template pattern)
245
259
  // e.g., class MyClass : public RefCounted<MyClass>
@@ -264,7 +278,7 @@ class Delete<T, false> {
264
278
  // ch->Unref();
265
279
  //
266
280
  template <typename Child, typename Impl = PolymorphicRefCount,
267
- bool DeleteUponUnref = true>
281
+ UnrefBehavior UnrefBehaviorArg = kUnrefDelete>
268
282
  class RefCounted : public Impl {
269
283
  public:
270
284
  // Note: Depending on the Impl used, this dtor can be implicitly virtual.
@@ -287,12 +301,12 @@ class RefCounted : public Impl {
287
301
  // friend of this class.
288
302
  void Unref() {
289
303
  if (GPR_UNLIKELY(refs_.Unref())) {
290
- internal::Delete<Child, DeleteUponUnref>(static_cast<Child*>(this));
304
+ internal::Delete<Child, UnrefBehaviorArg>(static_cast<Child*>(this));
291
305
  }
292
306
  }
293
307
  void Unref(const DebugLocation& location, const char* reason) {
294
308
  if (GPR_UNLIKELY(refs_.Unref(location, reason))) {
295
- internal::Delete<Child, DeleteUponUnref>(static_cast<Child*>(this));
309
+ internal::Delete<Child, UnrefBehaviorArg>(static_cast<Child*>(this));
296
310
  }
297
311
  }
298
312
 
@@ -0,0 +1,407 @@
1
+ //
2
+ //
3
+ // Copyright 2021 the gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/gprpp/status_helper.h"
22
+ #include "src/core/lib/gprpp/time_util.h"
23
+
24
+ #include <grpc/support/log.h>
25
+
26
+ #include "absl/strings/cord.h"
27
+ #include "absl/strings/escaping.h"
28
+ #include "absl/strings/match.h"
29
+ #include "absl/strings/str_format.h"
30
+ #include "absl/strings/str_join.h"
31
+ #include "absl/time/clock.h"
32
+
33
+ #include "google/protobuf/any.upb.h"
34
+ #include "google/rpc/status.upb.h"
35
+ #include "upb/upb.hpp"
36
+
37
+ namespace grpc_core {
38
+
39
+ namespace {
40
+
41
+ #define TYPE_URL_PREFIX "type.googleapis.com/grpc.status."
42
+ #define TYPE_INT_TAG "int."
43
+ #define TYPE_STR_TAG "str."
44
+ #define TYPE_TIME_TAG "time."
45
+ #define TYPE_CHILDREN_TAG "children"
46
+ #define TYPE_URL(name) (TYPE_URL_PREFIX name)
47
+ const absl::string_view kTypeUrlPrefix = TYPE_URL_PREFIX;
48
+ const absl::string_view kTypeIntTag = TYPE_INT_TAG;
49
+ const absl::string_view kTypeStrTag = TYPE_STR_TAG;
50
+ const absl::string_view kTypeTimeTag = TYPE_TIME_TAG;
51
+ const absl::string_view kTypeChildrenTag = TYPE_CHILDREN_TAG;
52
+ const absl::string_view kChildrenPropertyUrl = TYPE_URL(TYPE_CHILDREN_TAG);
53
+
54
+ const char* GetStatusIntPropertyUrl(StatusIntProperty key) {
55
+ switch (key) {
56
+ case StatusIntProperty::kErrorNo:
57
+ return TYPE_URL(TYPE_INT_TAG "errno");
58
+ case StatusIntProperty::kFileLine:
59
+ return TYPE_URL(TYPE_INT_TAG "file_line");
60
+ case StatusIntProperty::kStreamId:
61
+ return TYPE_URL(TYPE_INT_TAG "stream_id");
62
+ case StatusIntProperty::kRpcStatus:
63
+ return TYPE_URL(TYPE_INT_TAG "grpc_status");
64
+ case StatusIntProperty::kOffset:
65
+ return TYPE_URL(TYPE_INT_TAG "offset");
66
+ case StatusIntProperty::kIndex:
67
+ return TYPE_URL(TYPE_INT_TAG "index");
68
+ case StatusIntProperty::kSize:
69
+ return TYPE_URL(TYPE_INT_TAG "size");
70
+ case StatusIntProperty::kHttp2Error:
71
+ return TYPE_URL(TYPE_INT_TAG "http2_error");
72
+ case StatusIntProperty::kTsiCode:
73
+ return TYPE_URL(TYPE_INT_TAG "tsi_code");
74
+ case StatusIntProperty::kWsaError:
75
+ return TYPE_URL(TYPE_INT_TAG "wsa_error");
76
+ case StatusIntProperty::kFd:
77
+ return TYPE_URL(TYPE_INT_TAG "fd");
78
+ case StatusIntProperty::kHttpStatus:
79
+ return TYPE_URL(TYPE_INT_TAG "http_status");
80
+ case StatusIntProperty::kOccurredDuringWrite:
81
+ return TYPE_URL(TYPE_INT_TAG "occurred_during_write");
82
+ case StatusIntProperty::ChannelConnectivityState:
83
+ return TYPE_URL(TYPE_INT_TAG "channel_connectivity_state");
84
+ case StatusIntProperty::kLbPolicyDrop:
85
+ return TYPE_URL(TYPE_INT_TAG "lb_policy_drop");
86
+ }
87
+ GPR_UNREACHABLE_CODE(return "unknown");
88
+ }
89
+
90
+ const char* GetStatusStrPropertyUrl(StatusStrProperty key) {
91
+ switch (key) {
92
+ case StatusStrProperty::kDescription:
93
+ return TYPE_URL(TYPE_STR_TAG "description");
94
+ case StatusStrProperty::kFile:
95
+ return TYPE_URL(TYPE_STR_TAG "file");
96
+ case StatusStrProperty::kOsError:
97
+ return TYPE_URL(TYPE_STR_TAG "os_error");
98
+ case StatusStrProperty::kSyscall:
99
+ return TYPE_URL(TYPE_STR_TAG "syscall");
100
+ case StatusStrProperty::kTargetAddress:
101
+ return TYPE_URL(TYPE_STR_TAG "target_address");
102
+ case StatusStrProperty::kGrpcMessage:
103
+ return TYPE_URL(TYPE_STR_TAG "grpc_message");
104
+ case StatusStrProperty::kRawBytes:
105
+ return TYPE_URL(TYPE_STR_TAG "raw_bytes");
106
+ case StatusStrProperty::kTsiError:
107
+ return TYPE_URL(TYPE_STR_TAG "tsi_error");
108
+ case StatusStrProperty::kFilename:
109
+ return TYPE_URL(TYPE_STR_TAG "filename");
110
+ case StatusStrProperty::kKey:
111
+ return TYPE_URL(TYPE_STR_TAG "key");
112
+ case StatusStrProperty::kValue:
113
+ return TYPE_URL(TYPE_STR_TAG "value");
114
+ }
115
+ GPR_UNREACHABLE_CODE(return "unknown");
116
+ }
117
+
118
+ const char* GetStatusTimePropertyUrl(StatusTimeProperty key) {
119
+ switch (key) {
120
+ case StatusTimeProperty::kCreated:
121
+ return TYPE_URL(TYPE_TIME_TAG "created_time");
122
+ }
123
+ GPR_UNREACHABLE_CODE(return "unknown");
124
+ }
125
+
126
+ void EncodeUInt32ToBytes(uint32_t v, char* buf) {
127
+ buf[0] = v & 0xFF;
128
+ buf[1] = (v >> 8) & 0xFF;
129
+ buf[2] = (v >> 16) & 0xFF;
130
+ buf[3] = (v >> 24) & 0xFF;
131
+ }
132
+
133
+ uint32_t DecodeUInt32FromBytes(const char* buf) {
134
+ return buf[0] | (uint32_t(buf[1]) << 8) | (uint32_t(buf[2]) << 16) |
135
+ (uint32_t(buf[3]) << 24);
136
+ }
137
+
138
+ std::vector<absl::Status> ParseChildren(absl::Cord children) {
139
+ std::vector<absl::Status> result;
140
+ upb::Arena arena;
141
+ // Cord is flattened to iterate the buffer easily at the cost of memory copy.
142
+ // TODO(veblush): Optimize this once CordReader is introduced.
143
+ absl::string_view buf = children.Flatten();
144
+ size_t cur = 0;
145
+ while (buf.size() - cur >= sizeof(uint32_t)) {
146
+ size_t msg_size = DecodeUInt32FromBytes(buf.data() + cur);
147
+ cur += sizeof(uint32_t);
148
+ GPR_ASSERT(buf.size() - cur >= msg_size);
149
+ google_rpc_Status* msg =
150
+ google_rpc_Status_parse(buf.data() + cur, msg_size, arena.ptr());
151
+ cur += msg_size;
152
+ result.push_back(internal::StatusFromProto(msg));
153
+ }
154
+ return result;
155
+ }
156
+
157
+ } // namespace
158
+
159
+ absl::Status StatusCreate(absl::StatusCode code, absl::string_view msg,
160
+ const DebugLocation& location,
161
+ std::initializer_list<absl::Status> children) {
162
+ absl::Status s(code, msg);
163
+ if (location.file() != nullptr) {
164
+ StatusSetStr(&s, StatusStrProperty::kFile, location.file());
165
+ }
166
+ if (location.line() != -1) {
167
+ StatusSetInt(&s, StatusIntProperty::kFileLine, location.line());
168
+ }
169
+ StatusSetTime(&s, StatusTimeProperty::kCreated, absl::Now());
170
+ for (const absl::Status& child : children) {
171
+ if (!child.ok()) {
172
+ StatusAddChild(&s, child);
173
+ }
174
+ }
175
+ return s;
176
+ }
177
+
178
+ void StatusSetInt(absl::Status* status, StatusIntProperty key, intptr_t value) {
179
+ status->SetPayload(GetStatusIntPropertyUrl(key),
180
+ absl::Cord(std::to_string(value)));
181
+ }
182
+
183
+ absl::optional<intptr_t> StatusGetInt(const absl::Status& status,
184
+ StatusIntProperty key) {
185
+ absl::optional<absl::Cord> p =
186
+ status.GetPayload(GetStatusIntPropertyUrl(key));
187
+ if (p.has_value()) {
188
+ absl::optional<absl::string_view> sv = p->TryFlat();
189
+ intptr_t value;
190
+ if (sv.has_value()) {
191
+ if (absl::SimpleAtoi(*sv, &value)) {
192
+ return value;
193
+ }
194
+ } else {
195
+ if (absl::SimpleAtoi(std::string(*p), &value)) {
196
+ return value;
197
+ }
198
+ }
199
+ }
200
+ return {};
201
+ }
202
+
203
+ void StatusSetStr(absl::Status* status, StatusStrProperty key,
204
+ absl::string_view value) {
205
+ status->SetPayload(GetStatusStrPropertyUrl(key), absl::Cord(value));
206
+ }
207
+
208
+ absl::optional<std::string> StatusGetStr(const absl::Status& status,
209
+ StatusStrProperty key) {
210
+ absl::optional<absl::Cord> p =
211
+ status.GetPayload(GetStatusStrPropertyUrl(key));
212
+ if (p.has_value()) {
213
+ return std::string(*p);
214
+ }
215
+ return {};
216
+ }
217
+
218
+ void StatusSetTime(absl::Status* status, StatusTimeProperty key,
219
+ absl::Time time) {
220
+ status->SetPayload(GetStatusTimePropertyUrl(key),
221
+ absl::Cord(absl::string_view(
222
+ reinterpret_cast<const char*>(&time), sizeof(time))));
223
+ }
224
+
225
+ absl::optional<absl::Time> StatusGetTime(const absl::Status& status,
226
+ StatusTimeProperty key) {
227
+ absl::optional<absl::Cord> p =
228
+ status.GetPayload(GetStatusTimePropertyUrl(key));
229
+ if (p.has_value()) {
230
+ absl::optional<absl::string_view> sv = p->TryFlat();
231
+ if (sv.has_value()) {
232
+ return *reinterpret_cast<const absl::Time*>(sv->data());
233
+ } else {
234
+ std::string s = std::string(*p);
235
+ return *reinterpret_cast<const absl::Time*>(s.c_str());
236
+ }
237
+ }
238
+ return {};
239
+ }
240
+
241
+ void StatusAddChild(absl::Status* status, absl::Status child) {
242
+ upb::Arena arena;
243
+ // Serialize msg to buf
244
+ google_rpc_Status* msg = internal::StatusToProto(child, arena.ptr());
245
+ size_t buf_len = 0;
246
+ char* buf = google_rpc_Status_serialize(msg, arena.ptr(), &buf_len);
247
+ // Append (msg-length and msg) to children payload
248
+ absl::optional<absl::Cord> old_children =
249
+ status->GetPayload(kChildrenPropertyUrl);
250
+ absl::Cord children;
251
+ if (old_children.has_value()) {
252
+ children = *old_children;
253
+ }
254
+ char head_buf[sizeof(uint32_t)];
255
+ EncodeUInt32ToBytes(buf_len, head_buf);
256
+ children.Append(absl::string_view(head_buf, sizeof(uint32_t)));
257
+ children.Append(absl::string_view(buf, buf_len));
258
+ status->SetPayload(kChildrenPropertyUrl, std::move(children));
259
+ }
260
+
261
+ std::vector<absl::Status> StatusGetChildren(absl::Status status) {
262
+ absl::optional<absl::Cord> children = status.GetPayload(kChildrenPropertyUrl);
263
+ return children.has_value() ? ParseChildren(*children)
264
+ : std::vector<absl::Status>();
265
+ }
266
+
267
+ std::string StatusToString(const absl::Status& status) {
268
+ if (status.ok()) {
269
+ return "OK";
270
+ }
271
+ std::string head;
272
+ absl::StrAppend(&head, absl::StatusCodeToString(status.code()));
273
+ if (!status.message().empty()) {
274
+ absl::StrAppend(&head, ":", status.message());
275
+ }
276
+ std::vector<std::string> kvs;
277
+ absl::optional<absl::Cord> children;
278
+ status.ForEachPayload([&](absl::string_view type_url,
279
+ const absl::Cord& payload) {
280
+ if (absl::StartsWith(type_url, kTypeUrlPrefix)) {
281
+ type_url.remove_prefix(kTypeUrlPrefix.size());
282
+ if (type_url == kTypeChildrenTag) {
283
+ children = payload;
284
+ return;
285
+ }
286
+ absl::string_view payload_view;
287
+ std::string payload_storage;
288
+ if (payload.TryFlat().has_value()) {
289
+ payload_view = payload.TryFlat().value();
290
+ } else {
291
+ payload_storage = std::string(payload);
292
+ payload_view = payload_storage;
293
+ }
294
+ if (absl::StartsWith(type_url, kTypeIntTag)) {
295
+ type_url.remove_prefix(kTypeIntTag.size());
296
+ kvs.push_back(absl::StrCat(type_url, ":", payload_view));
297
+ } else if (absl::StartsWith(type_url, kTypeStrTag)) {
298
+ type_url.remove_prefix(kTypeStrTag.size());
299
+ kvs.push_back(absl::StrCat(type_url, ":\"",
300
+ absl::CHexEscape(payload_view), "\""));
301
+ } else if (absl::StartsWith(type_url, kTypeTimeTag)) {
302
+ type_url.remove_prefix(kTypeTimeTag.size());
303
+ absl::Time t =
304
+ *reinterpret_cast<const absl::Time*>(payload_view.data());
305
+ kvs.push_back(absl::StrCat(type_url, ":\"", absl::FormatTime(t), "\""));
306
+ } else {
307
+ kvs.push_back(absl::StrCat(type_url, ":\"",
308
+ absl::CHexEscape(payload_view), "\""));
309
+ }
310
+ } else {
311
+ absl::optional<absl::string_view> payload_view = payload.TryFlat();
312
+ std::string payload_str = absl::CHexEscape(
313
+ payload_view.has_value() ? *payload_view : std::string(payload));
314
+ kvs.push_back(absl::StrCat(type_url, ":\"", payload_str, "\""));
315
+ }
316
+ });
317
+ if (children.has_value()) {
318
+ std::vector<absl::Status> children_status = ParseChildren(*children);
319
+ std::vector<std::string> children_text;
320
+ children_text.reserve(children_status.size());
321
+ for (const absl::Status& child_status : children_status) {
322
+ children_text.push_back(StatusToString(child_status));
323
+ }
324
+ kvs.push_back(
325
+ absl::StrCat("children:[", absl::StrJoin(children_text, ", "), "]"));
326
+ }
327
+ return kvs.empty() ? head
328
+ : absl::StrCat(head, " {", absl::StrJoin(kvs, ", "), "}");
329
+ }
330
+
331
+ namespace internal {
332
+
333
+ google_rpc_Status* StatusToProto(absl::Status status, upb_arena* arena) {
334
+ google_rpc_Status* msg = google_rpc_Status_new(arena);
335
+ google_rpc_Status_set_code(msg, int32_t(status.code()));
336
+ google_rpc_Status_set_message(
337
+ msg, upb_strview_make(status.message().data(), status.message().size()));
338
+ status.ForEachPayload([&](absl::string_view type_url,
339
+ const absl::Cord& payload) {
340
+ google_protobuf_Any* any = google_rpc_Status_add_details(msg, arena);
341
+ char* type_url_buf =
342
+ reinterpret_cast<char*>(upb_arena_malloc(arena, type_url.size()));
343
+ memcpy(type_url_buf, type_url.data(), type_url.size());
344
+ google_protobuf_Any_set_type_url(
345
+ any, upb_strview_make(type_url_buf, type_url.size()));
346
+ absl::optional<absl::string_view> v_view = payload.TryFlat();
347
+ if (v_view.has_value()) {
348
+ google_protobuf_Any_set_value(
349
+ any, upb_strview_make(v_view->data(), v_view->size()));
350
+ } else {
351
+ char* buf =
352
+ reinterpret_cast<char*>(upb_arena_malloc(arena, payload.size()));
353
+ char* cur = buf;
354
+ for (absl::string_view chunk : payload.Chunks()) {
355
+ memcpy(cur, chunk.data(), chunk.size());
356
+ cur += chunk.size();
357
+ }
358
+ google_protobuf_Any_set_value(any, upb_strview_make(buf, payload.size()));
359
+ }
360
+ });
361
+ return msg;
362
+ }
363
+
364
+ absl::Status StatusFromProto(google_rpc_Status* msg) {
365
+ int32_t code = google_rpc_Status_code(msg);
366
+ upb_strview message = google_rpc_Status_message(msg);
367
+ absl::Status status(static_cast<absl::StatusCode>(code),
368
+ absl::string_view(message.data, message.size));
369
+ size_t detail_len;
370
+ const google_protobuf_Any* const* details =
371
+ google_rpc_Status_details(msg, &detail_len);
372
+ for (size_t i = 0; i < detail_len; i++) {
373
+ upb_strview type_url = google_protobuf_Any_type_url(details[i]);
374
+ upb_strview value = google_protobuf_Any_value(details[i]);
375
+ status.SetPayload(absl::string_view(type_url.data, type_url.size),
376
+ absl::Cord(absl::string_view(value.data, value.size)));
377
+ }
378
+ return status;
379
+ }
380
+
381
+ uintptr_t StatusAllocPtr(absl::Status s) {
382
+ // This relies the fact that absl::Status has only one member, StatusRep*
383
+ // so the sizeof(absl::Status) has the same size of intptr_t and StatusRep*
384
+ // can be stolen using placement allocation.
385
+ static_assert(sizeof(intptr_t) == sizeof(absl::Status),
386
+ "absl::Status should be as big as intptr_t");
387
+ // This does two things;
388
+ // 1. Copies StatusRep* of absl::Status to ptr
389
+ // 2. Increases the counter of StatusRep if it's not inlined
390
+ uintptr_t ptr;
391
+ new (&ptr) absl::Status(s);
392
+ return ptr;
393
+ }
394
+
395
+ void StatusFreePtr(uintptr_t ptr) {
396
+ // Decreases the counter of StatusRep if it's not inlined.
397
+ reinterpret_cast<absl::Status*>(&ptr)->~Status();
398
+ }
399
+
400
+ absl::Status StatusGetFromPtr(uintptr_t ptr) {
401
+ // Constructs Status from ptr having the address of StatusRep.
402
+ return *reinterpret_cast<absl::Status*>(&ptr);
403
+ }
404
+
405
+ } // namespace internal
406
+
407
+ } // namespace grpc_core