grpc 1.47.0 → 1.48.0.pre1

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

Potentially problematic release.


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

Files changed (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  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 +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -23,7 +23,6 @@
23
23
  #include <string.h>
24
24
 
25
25
  #include <algorithm>
26
- #include <new>
27
26
  #include <utility>
28
27
 
29
28
  #include "absl/strings/cord.h"
@@ -40,6 +39,9 @@
40
39
 
41
40
  #include <grpc/support/log.h>
42
41
 
42
+ #include "src/core/lib/slice/percent_encoding.h"
43
+ #include "src/core/lib/slice/slice.h"
44
+
43
45
  namespace grpc_core {
44
46
 
45
47
  namespace {
@@ -224,23 +226,10 @@ absl::optional<std::string> StatusGetStr(const absl::Status& status,
224
226
 
225
227
  void StatusSetTime(absl::Status* status, StatusTimeProperty key,
226
228
  absl::Time time) {
227
- #if !defined(__clang__) && defined(_MSC_VER) && _MSC_VER < 1910
228
- // Abseil has a workaround for MSVC 2015 which prevents absl::Time
229
- // from being is_trivially_copyable but it's still safe to be
230
- // memcopied.
231
- #elif defined(__GNUG__) && __GNUC__ < 5
232
- // GCC versions < 5 do not support std::is_trivially_copyable
233
- #else
234
- static_assert(std::is_trivially_copyable<absl::Time>::value,
235
- "absl::Time needs to be able to be memcopied");
236
- #endif
237
- // This is required not to get uninitialized padding of absl::Time.
238
- alignas(absl::Time) char buf[sizeof(time)] = {
239
- 0,
240
- };
241
- new (buf) absl::Time(time);
229
+ std::string time_str =
230
+ absl::FormatTime(absl::RFC3339_full, time, absl::UTCTimeZone());
242
231
  status->SetPayload(GetStatusTimePropertyUrl(key),
243
- absl::Cord(absl::string_view(buf, sizeof(time))));
232
+ absl::Cord(std::move(time_str)));
244
233
  }
245
234
 
246
235
  absl::optional<absl::Time> StatusGetTime(const absl::Status& status,
@@ -249,14 +238,16 @@ absl::optional<absl::Time> StatusGetTime(const absl::Status& status,
249
238
  status.GetPayload(GetStatusTimePropertyUrl(key));
250
239
  if (p.has_value()) {
251
240
  absl::optional<absl::string_view> sv = p->TryFlat();
241
+ absl::Time time;
252
242
  if (sv.has_value()) {
253
- // copy the content before casting to avoid misaligned address access
254
- alignas(absl::Time) char buf[sizeof(const absl::Time)];
255
- memcpy(buf, sv->data(), sizeof(const absl::Time));
256
- return *reinterpret_cast<const absl::Time*>(buf);
243
+ if (absl::ParseTime(absl::RFC3339_full, sv.value(), &time, nullptr)) {
244
+ return time;
245
+ }
257
246
  } else {
258
247
  std::string s = std::string(*p);
259
- return *reinterpret_cast<const absl::Time*>(s.c_str());
248
+ if (absl::ParseTime(absl::RFC3339_full, s, &time, nullptr)) {
249
+ return time;
250
+ }
260
251
  }
261
252
  }
262
253
  return {};
@@ -324,9 +315,14 @@ std::string StatusToString(const absl::Status& status) {
324
315
  absl::CHexEscape(payload_view), "\""));
325
316
  } else if (absl::StartsWith(type_url, kTypeTimeTag)) {
326
317
  type_url.remove_prefix(kTypeTimeTag.size());
327
- absl::Time t =
328
- *reinterpret_cast<const absl::Time*>(payload_view.data());
329
- kvs.push_back(absl::StrCat(type_url, ":\"", absl::FormatTime(t), "\""));
318
+ absl::Time t;
319
+ if (absl::ParseTime(absl::RFC3339_full, payload_view, &t, nullptr)) {
320
+ kvs.push_back(
321
+ absl::StrCat(type_url, ":\"", absl::FormatTime(t), "\""));
322
+ } else {
323
+ kvs.push_back(absl::StrCat(type_url, ":\"",
324
+ absl::CHexEscape(payload_view), "\""));
325
+ }
330
326
  } else {
331
327
  kvs.push_back(absl::StrCat(type_url, ":\"",
332
328
  absl::CHexEscape(payload_view), "\""));
@@ -357,9 +353,21 @@ namespace internal {
357
353
  google_rpc_Status* StatusToProto(const absl::Status& status, upb_Arena* arena) {
358
354
  google_rpc_Status* msg = google_rpc_Status_new(arena);
359
355
  google_rpc_Status_set_code(msg, int32_t(status.code()));
356
+ // Protobuf string field requires to be utf-8 encoding but C++ string doesn't
357
+ // this requirement so it can be a non utf-8 string. So it should be converted
358
+ // to a percent-encoded string to keep it as a utf-8 string.
359
+ Slice message_percent_slice =
360
+ PercentEncodeSlice(Slice::FromExternalString(status.message()),
361
+ PercentEncodingType::Compatible);
362
+ char* message_percent = reinterpret_cast<char*>(
363
+ upb_Arena_Malloc(arena, message_percent_slice.length()));
364
+ if (message_percent_slice.length() > 0) {
365
+ memcpy(message_percent, message_percent_slice.data(),
366
+ message_percent_slice.length());
367
+ }
360
368
  google_rpc_Status_set_message(
361
- msg, upb_StringView_FromDataAndSize(status.message().data(),
362
- status.message().size()));
369
+ msg, upb_StringView_FromDataAndSize(message_percent,
370
+ message_percent_slice.length()));
363
371
  status.ForEachPayload([&](absl::string_view type_url,
364
372
  const absl::Cord& payload) {
365
373
  google_protobuf_Any* any = google_rpc_Status_add_details(msg, arena);
@@ -389,9 +397,15 @@ google_rpc_Status* StatusToProto(const absl::Status& status, upb_Arena* arena) {
389
397
 
390
398
  absl::Status StatusFromProto(google_rpc_Status* msg) {
391
399
  int32_t code = google_rpc_Status_code(msg);
392
- upb_StringView message = google_rpc_Status_message(msg);
393
- absl::Status status(static_cast<absl::StatusCode>(code),
394
- absl::string_view(message.data, message.size));
400
+ upb_StringView message_percent_upb = google_rpc_Status_message(msg);
401
+ Slice message_percent_slice = Slice::FromExternalString(
402
+ absl::string_view(message_percent_upb.data, message_percent_upb.size));
403
+ Slice message_slice =
404
+ PermissivePercentDecodeSlice(std::move(message_percent_slice));
405
+ absl::Status status(
406
+ static_cast<absl::StatusCode>(code),
407
+ absl::string_view(reinterpret_cast<const char*>(message_slice.data()),
408
+ message_slice.size()));
395
409
  size_t detail_len;
396
410
  const google_protobuf_Any* const* details =
397
411
  google_rpc_Status_details(msg, &detail_len);
@@ -17,6 +17,7 @@
17
17
  #include "src/core/lib/gprpp/time.h"
18
18
 
19
19
  #include <atomic>
20
+ #include <chrono>
20
21
  #include <cstdint>
21
22
  #include <limits>
22
23
  #include <string>
@@ -190,6 +191,13 @@ std::string Duration::ToJsonString() const {
190
191
  return absl::StrFormat("%d.%09ds", ts.tv_sec, ts.tv_nsec);
191
192
  }
192
193
 
194
+ Duration::operator grpc_event_engine::experimental::EventEngine::Duration()
195
+ const {
196
+ return std::chrono::milliseconds(
197
+ Clamp(millis_, std::numeric_limits<int64_t>::min() / GPR_NS_PER_MS,
198
+ std::numeric_limits<int64_t>::max() / GPR_NS_PER_MS));
199
+ }
200
+
193
201
  void TestOnlySetProcessEpoch(gpr_timespec epoch) {
194
202
  g_process_epoch_seconds.store(
195
203
  gpr_convert_clock_type(epoch, GPR_CLOCK_MONOTONIC).tv_sec);
@@ -23,6 +23,7 @@
23
23
  #include <ostream>
24
24
  #include <string>
25
25
 
26
+ #include <grpc/event_engine/event_engine.h>
26
27
  #include <grpc/impl/codegen/gpr_types.h>
27
28
  #include <grpc/support/time.h>
28
29
 
@@ -207,6 +208,9 @@ class Duration {
207
208
  constexpr int64_t millis() const { return millis_; }
208
209
  double seconds() const { return static_cast<double>(millis_) / 1000.0; }
209
210
 
211
+ // NOLINTNEXTLINE: google-explicit-constructor
212
+ operator grpc_event_engine::experimental::EventEngine::Duration() const;
213
+
210
214
  gpr_timespec as_timespec() const;
211
215
 
212
216
  std::string ToString() const;
@@ -20,20 +20,21 @@
20
20
 
21
21
  #include "src/core/lib/http/format_request.h"
22
22
 
23
- #include <stdarg.h>
24
23
  #include <stdio.h>
25
24
  #include <string.h>
26
25
 
26
+ #include <algorithm>
27
+ #include <string>
27
28
  #include <vector>
28
29
 
30
+ #include "absl/strings/str_cat.h"
29
31
  #include "absl/strings/str_format.h"
30
32
  #include "absl/strings/str_join.h"
33
+ #include "absl/strings/string_view.h"
31
34
 
32
35
  #include <grpc/slice.h>
33
- #include <grpc/support/alloc.h>
34
- #include <grpc/support/string_util.h>
35
36
 
36
- #include "src/core/lib/gpr/string.h"
37
+ #include "src/core/lib/http/httpcli.h"
37
38
 
38
39
  static void fill_common_header(const grpc_http_request* request,
39
40
  const char* host, const char* path,
@@ -23,7 +23,7 @@
23
23
 
24
24
  #include <grpc/slice.h>
25
25
 
26
- #include "src/core/lib/http/httpcli.h"
26
+ #include "src/core/lib/http/parser.h"
27
27
 
28
28
  grpc_slice grpc_httpcli_format_get_request(const grpc_http_request* request,
29
29
  const char* host, const char* path);
@@ -21,32 +21,38 @@
21
21
  #include "src/core/lib/http/httpcli.h"
22
22
 
23
23
  #include <limits.h>
24
- #include <string.h>
25
24
 
26
25
  #include <string>
26
+ #include <utility>
27
27
 
28
+ #include "absl/container/inlined_vector.h"
28
29
  #include "absl/functional/bind_front.h"
30
+ #include "absl/status/status.h"
29
31
  #include "absl/strings/str_format.h"
30
- #include "absl/strings/string_view.h"
31
32
 
32
33
  #include <grpc/grpc.h>
34
+ #include <grpc/grpc_security.h>
35
+ #include <grpc/slice_buffer.h>
33
36
  #include <grpc/support/alloc.h>
34
37
  #include <grpc/support/log.h>
35
- #include <grpc/support/string_util.h>
36
38
 
37
39
  #include "src/core/lib/address_utils/sockaddr_utils.h"
38
40
  #include "src/core/lib/channel/channel_args.h"
39
- #include "src/core/lib/gpr/string.h"
40
- #include "src/core/lib/gprpp/memory.h"
41
+ #include "src/core/lib/channel/channel_args_preconditioning.h"
42
+ #include "src/core/lib/config/core_configuration.h"
41
43
  #include "src/core/lib/http/format_request.h"
42
44
  #include "src/core/lib/http/parser.h"
43
45
  #include "src/core/lib/iomgr/endpoint.h"
44
46
  #include "src/core/lib/iomgr/iomgr_internal.h"
47
+ #include "src/core/lib/iomgr/pollset_set.h"
45
48
  #include "src/core/lib/iomgr/resolve_address.h"
46
- #include "src/core/lib/iomgr/tcp_client.h"
47
49
  #include "src/core/lib/resource_quota/api.h"
50
+ #include "src/core/lib/security/credentials/credentials.h"
51
+ #include "src/core/lib/security/security_connector/security_connector.h"
48
52
  #include "src/core/lib/slice/slice_internal.h"
53
+ #include "src/core/lib/slice/slice_refcount.h"
49
54
  #include "src/core/lib/transport/error_utils.h"
55
+ #include "src/core/lib/transport/handshaker_registry.h"
50
56
  #include "src/core/lib/transport/tcp_connect_handshaker.h"
51
57
 
52
58
  namespace grpc_core {
@@ -234,7 +240,7 @@ void HttpRequest::Orphan() {
234
240
  }
235
241
 
236
242
  void HttpRequest::AppendError(grpc_error_handle error) {
237
- if (overall_error_ == GRPC_ERROR_NONE) {
243
+ if (GRPC_ERROR_IS_NONE(overall_error_)) {
238
244
  overall_error_ =
239
245
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed HTTP/1 client request");
240
246
  }
@@ -253,7 +259,7 @@ void HttpRequest::OnReadInternal(grpc_error_handle error) {
253
259
  have_read_byte_ = 1;
254
260
  grpc_error_handle err =
255
261
  grpc_http_parser_parse(&parser_, incoming_.slices[i], nullptr);
256
- if (err != GRPC_ERROR_NONE) {
262
+ if (!GRPC_ERROR_IS_NONE(err)) {
257
263
  Finish(err);
258
264
  return;
259
265
  }
@@ -262,7 +268,7 @@ void HttpRequest::OnReadInternal(grpc_error_handle error) {
262
268
  if (cancelled_) {
263
269
  Finish(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
264
270
  "HTTP1 request cancelled during read", &overall_error_, 1));
265
- } else if (error == GRPC_ERROR_NONE) {
271
+ } else if (GRPC_ERROR_IS_NONE(error)) {
266
272
  DoRead();
267
273
  } else if (!have_read_byte_) {
268
274
  NextAddress(GRPC_ERROR_REF(error));
@@ -275,7 +281,7 @@ void HttpRequest::ContinueDoneWriteAfterScheduleOnExecCtx(
275
281
  void* arg, grpc_error_handle error) {
276
282
  RefCountedPtr<HttpRequest> req(static_cast<HttpRequest*>(arg));
277
283
  MutexLock lock(&req->mu_);
278
- if (error == GRPC_ERROR_NONE && !req->cancelled_) {
284
+ if (GRPC_ERROR_IS_NONE(error) && !req->cancelled_) {
279
285
  req->OnWritten();
280
286
  } else {
281
287
  req->NextAddress(GRPC_ERROR_REF(error));
@@ -300,7 +306,7 @@ void HttpRequest::OnHandshakeDone(void* arg, grpc_error_handle error) {
300
306
  }
301
307
  MutexLock lock(&req->mu_);
302
308
  req->own_endpoint_ = true;
303
- if (error != GRPC_ERROR_NONE) {
309
+ if (!GRPC_ERROR_IS_NONE(error)) {
304
310
  req->handshake_mgr_.reset();
305
311
  req->NextAddress(GRPC_ERROR_REF(error));
306
312
  return;
@@ -364,7 +370,7 @@ void HttpRequest::DoHandshake(const grpc_resolved_address* addr) {
364
370
  }
365
371
 
366
372
  void HttpRequest::NextAddress(grpc_error_handle error) {
367
- if (error != GRPC_ERROR_NONE) {
373
+ if (!GRPC_ERROR_IS_NONE(error)) {
368
374
  AppendError(error);
369
375
  }
370
376
  if (cancelled_) {
@@ -23,17 +23,33 @@
23
23
 
24
24
  #include <stddef.h>
25
25
 
26
- #include <grpc/support/time.h>
26
+ #include <functional>
27
+ #include <vector>
27
28
 
29
+ #include "absl/base/thread_annotations.h"
30
+ #include "absl/status/statusor.h"
31
+ #include "absl/types/optional.h"
32
+
33
+ #include <grpc/grpc.h>
34
+ #include <grpc/impl/codegen/grpc_types.h>
35
+ #include <grpc/slice.h>
36
+
37
+ #include "src/core/lib/gprpp/debug_location.h"
28
38
  #include "src/core/lib/gprpp/orphanable.h"
39
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
40
+ #include "src/core/lib/gprpp/sync.h"
41
+ #include "src/core/lib/gprpp/time.h"
29
42
  #include "src/core/lib/http/parser.h"
43
+ #include "src/core/lib/iomgr/closure.h"
30
44
  #include "src/core/lib/iomgr/endpoint.h"
45
+ #include "src/core/lib/iomgr/error.h"
46
+ #include "src/core/lib/iomgr/exec_ctx.h"
47
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
31
48
  #include "src/core/lib/iomgr/iomgr_internal.h"
32
49
  #include "src/core/lib/iomgr/polling_entity.h"
33
- #include "src/core/lib/iomgr/pollset_set.h"
34
50
  #include "src/core/lib/iomgr/resolve_address.h"
51
+ #include "src/core/lib/iomgr/resolved_address.h"
35
52
  #include "src/core/lib/resource_quota/resource_quota.h"
36
- #include "src/core/lib/security/credentials/credentials.h"
37
53
  #include "src/core/lib/transport/handshaker.h"
38
54
  #include "src/core/lib/uri/uri_parser.h"
39
55
 
@@ -20,24 +20,36 @@
20
20
 
21
21
  #include <string.h>
22
22
 
23
+ #include "absl/status/status.h"
23
24
  #include "absl/strings/str_cat.h"
24
25
  #include "absl/strings/string_view.h"
25
26
 
27
+ #include <grpc/grpc.h>
28
+ #include <grpc/grpc_security.h>
29
+ #include <grpc/impl/codegen/grpc_types.h>
26
30
  #include <grpc/support/alloc.h>
27
31
  #include <grpc/support/log.h>
28
32
  #include <grpc/support/string_util.h>
29
33
 
30
34
  #include "src/core/lib/channel/channel_args.h"
31
- #include "src/core/lib/config/core_configuration.h"
32
- #include "src/core/lib/gpr/string.h"
35
+ #include "src/core/lib/gprpp/debug_location.h"
33
36
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
34
- #include "src/core/lib/iomgr/pollset.h"
37
+ #include "src/core/lib/gprpp/unique_type_name.h"
38
+ #include "src/core/lib/iomgr/closure.h"
39
+ #include "src/core/lib/iomgr/endpoint.h"
40
+ #include "src/core/lib/iomgr/error.h"
41
+ #include "src/core/lib/iomgr/exec_ctx.h"
42
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
43
+ #include "src/core/lib/promise/arena_promise.h"
44
+ #include "src/core/lib/promise/poll.h"
35
45
  #include "src/core/lib/promise/promise.h"
36
46
  #include "src/core/lib/security/credentials/credentials.h"
47
+ #include "src/core/lib/security/security_connector/security_connector.h"
37
48
  #include "src/core/lib/security/security_connector/ssl_utils.h"
38
49
  #include "src/core/lib/security/transport/security_handshaker.h"
39
- #include "src/core/lib/slice/slice_internal.h"
50
+ #include "src/core/lib/transport/handshaker.h"
40
51
  #include "src/core/tsi/ssl_transport_security.h"
52
+ #include "src/core/tsi/transport_security_interface.h"
41
53
 
42
54
  namespace grpc_core {
43
55
 
@@ -19,7 +19,9 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include "src/core/lib/security/credentials/credentials.h"
22
+ #include <grpc/grpc.h>
23
+
24
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
23
25
 
24
26
  namespace grpc_core {
25
27
 
@@ -20,14 +20,13 @@
20
20
 
21
21
  #include "src/core/lib/http/parser.h"
22
22
 
23
- #include <stdbool.h>
24
23
  #include <string.h>
25
24
 
25
+ #include <algorithm>
26
+
26
27
  #include <grpc/support/alloc.h>
27
28
  #include <grpc/support/log.h>
28
29
 
29
- #include "src/core/lib/gpr/useful.h"
30
-
31
30
  grpc_core::TraceFlag grpc_http1_trace(false, "http1");
32
31
 
33
32
  static char* buf2str(void* buffer, size_t length) {
@@ -236,7 +235,7 @@ static grpc_error_handle add_header(grpc_http_parser* parser) {
236
235
  (*hdrs)[(*hdr_count)++] = hdr;
237
236
 
238
237
  done:
239
- if (error != GRPC_ERROR_NONE) {
238
+ if (!GRPC_ERROR_IS_NONE(error)) {
240
239
  gpr_free(hdr.key);
241
240
  gpr_free(hdr.value);
242
241
  }
@@ -249,7 +248,7 @@ static grpc_error_handle finish_line(grpc_http_parser* parser,
249
248
  switch (parser->state) {
250
249
  case GRPC_HTTP_FIRST_LINE:
251
250
  err = handle_first_line(parser);
252
- if (err != GRPC_ERROR_NONE) return err;
251
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
253
252
  parser->state = GRPC_HTTP_HEADERS;
254
253
  break;
255
254
  case GRPC_HTTP_HEADERS:
@@ -264,7 +263,7 @@ static grpc_error_handle finish_line(grpc_http_parser* parser,
264
263
  break;
265
264
  } else {
266
265
  err = add_header(parser);
267
- if (err != GRPC_ERROR_NONE) {
266
+ if (!GRPC_ERROR_IS_NONE(err)) {
268
267
  return err;
269
268
  }
270
269
  }
@@ -449,7 +448,7 @@ grpc_error_handle grpc_http_parser_parse(grpc_http_parser* parser,
449
448
  bool found_body_start = false;
450
449
  grpc_error_handle err =
451
450
  addbyte(parser, GRPC_SLICE_START_PTR(slice)[i], &found_body_start);
452
- if (err != GRPC_ERROR_NONE) return err;
451
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
453
452
  if (found_body_start && start_of_body != nullptr) *start_of_body = i + 1;
454
453
  }
455
454
  return GRPC_ERROR_NONE;
@@ -21,6 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
24
27
  #include <grpc/slice.h>
25
28
 
26
29
  #include "src/core/lib/debug/trace.h"
@@ -217,7 +217,7 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
217
217
  grpc_error_handle original_error = DecodeCancelStateError(original_state);
218
218
  // If error is set, invoke the cancellation closure immediately.
219
219
  // Otherwise, store the new closure.
220
- if (original_error != GRPC_ERROR_NONE) {
220
+ if (!GRPC_ERROR_IS_NONE(original_error)) {
221
221
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_combiner_trace)) {
222
222
  gpr_log(GPR_INFO,
223
223
  "call_combiner=%p: scheduling notify_on_cancel callback=%p "
@@ -263,7 +263,7 @@ void CallCombiner::Cancel(grpc_error_handle error) {
263
263
  while (true) {
264
264
  gpr_atm original_state = gpr_atm_acq_load(&cancel_state_);
265
265
  grpc_error_handle original_error = DecodeCancelStateError(original_state);
266
- if (original_error != GRPC_ERROR_NONE) {
266
+ if (!GRPC_ERROR_IS_NONE(original_error)) {
267
267
  #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
268
268
  internal::StatusFreeHeapPtr(status_ptr);
269
269
  #else
@@ -56,7 +56,7 @@ struct grpc_endpoint_vtable {
56
56
  Callback success indicates that the endpoint can accept more reads, failure
57
57
  indicates the endpoint is closed.
58
58
  Valid slices may be placed into \a slices even when the callback is
59
- invoked with error != GRPC_ERROR_NONE. */
59
+ invoked with !GRPC_ERROR_IS_NONE(error). */
60
60
  void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
61
61
  grpc_closure* cb, bool urgent, int min_progress_size);
62
62
 
@@ -147,7 +147,7 @@ static void CallWriteCb(CFStreamEndpoint* ep, grpc_error_handle error) {
147
147
  static void ReadAction(void* arg, grpc_error_handle error) {
148
148
  CFStreamEndpoint* ep = static_cast<CFStreamEndpoint*>(arg);
149
149
  GPR_ASSERT(ep->read_cb != nullptr);
150
- if (error != GRPC_ERROR_NONE) {
150
+ if (!GRPC_ERROR_IS_NONE(error)) {
151
151
  grpc_slice_buffer_reset_and_unref_internal(ep->read_slices);
152
152
  CallReadCb(ep, GRPC_ERROR_REF(error));
153
153
  EP_UNREF(ep, "read");
@@ -189,7 +189,7 @@ static void ReadAction(void* arg, grpc_error_handle error) {
189
189
  static void WriteAction(void* arg, grpc_error_handle error) {
190
190
  CFStreamEndpoint* ep = static_cast<CFStreamEndpoint*>(arg);
191
191
  GPR_ASSERT(ep->write_cb != nullptr);
192
- if (error != GRPC_ERROR_NONE) {
192
+ if (!GRPC_ERROR_IS_NONE(error)) {
193
193
  grpc_slice_buffer_reset_and_unref_internal(ep->write_slices);
194
194
  CallWriteCb(ep, GRPC_ERROR_REF(error));
195
195
  EP_UNREF(ep, "write");
@@ -71,7 +71,7 @@ std::string grpc_error_std_string(absl::Status error) {
71
71
  absl::Status grpc_os_error(const grpc_core::DebugLocation& location, int err,
72
72
  const char* call_name) {
73
73
  absl::Status s =
74
- StatusCreate(absl::StatusCode::kUnknown, "OS Error", location, {});
74
+ StatusCreate(absl::StatusCode::kUnknown, strerror(err), location, {});
75
75
  grpc_core::StatusSetInt(&s, grpc_core::StatusIntProperty::kErrorNo, err);
76
76
  grpc_core::StatusSetStr(&s, grpc_core::StatusStrProperty::kOsError,
77
77
  strerror(err));
@@ -87,6 +87,8 @@ absl::Status grpc_wsa_error(const grpc_core::DebugLocation& location, int err,
87
87
  absl::Status s =
88
88
  StatusCreate(absl::StatusCode::kUnavailable, "WSA Error", location, {});
89
89
  StatusSetInt(&s, grpc_core::StatusIntProperty::kWsaError, err);
90
+ StatusSetInt(&s, grpc_core::StatusIntProperty::kRpcStatus,
91
+ GRPC_STATUS_UNAVAILABLE);
90
92
  StatusSetStr(&s, grpc_core::StatusStrProperty::kOsError, utf8_message);
91
93
  StatusSetStr(&s, grpc_core::StatusStrProperty::kSyscall, call_name);
92
94
  return s;
@@ -95,7 +97,7 @@ absl::Status grpc_wsa_error(const grpc_core::DebugLocation& location, int err,
95
97
 
96
98
  grpc_error_handle grpc_error_set_int(grpc_error_handle src,
97
99
  grpc_error_ints which, intptr_t value) {
98
- if (src == GRPC_ERROR_NONE) {
100
+ if (GRPC_ERROR_IS_NONE(src)) {
99
101
  src = absl::UnknownError("");
100
102
  StatusSetInt(&src, grpc_core::StatusIntProperty::kRpcStatus,
101
103
  GRPC_STATUS_OK);
@@ -136,7 +138,7 @@ bool grpc_error_get_int(grpc_error_handle error, grpc_error_ints which,
136
138
  grpc_error_handle grpc_error_set_str(grpc_error_handle src,
137
139
  grpc_error_strs which,
138
140
  absl::string_view str) {
139
- if (src == GRPC_ERROR_NONE) {
141
+ if (GRPC_ERROR_IS_NONE(src)) {
140
142
  src = absl::UnknownError("");
141
143
  StatusSetInt(&src, grpc_core::StatusIntProperty::kRpcStatus,
142
144
  GRPC_STATUS_OK);
@@ -211,7 +213,7 @@ grpc_error_handle grpc_error_add_child(grpc_error_handle src,
211
213
 
212
214
  bool grpc_log_error(const char* what, grpc_error_handle error, const char* file,
213
215
  int line) {
214
- GPR_DEBUG_ASSERT(error != GRPC_ERROR_NONE);
216
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(error));
215
217
  gpr_log(file, line, GPR_LOG_SEVERITY_ERROR, "%s: %s", what,
216
218
  grpc_core::StatusToString(error).c_str());
217
219
  return false;
@@ -562,7 +564,7 @@ static grpc_error_handle copy_error_and_unref(grpc_error_handle in) {
562
564
  grpc_error_handle out;
563
565
  if (grpc_error_is_special(in)) {
564
566
  out = GRPC_ERROR_CREATE_FROM_STATIC_STRING("unknown");
565
- if (in == GRPC_ERROR_NONE) {
567
+ if (GRPC_ERROR_IS_NONE(in)) {
566
568
  internal_set_str(&out, GRPC_ERROR_STR_DESCRIPTION,
567
569
  grpc_slice_from_static_string("no error"));
568
570
  internal_set_int(&out, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK);
@@ -675,8 +677,8 @@ bool grpc_error_get_str(grpc_error_handle err, grpc_error_strs which,
675
677
 
676
678
  grpc_error_handle grpc_error_add_child(grpc_error_handle src,
677
679
  grpc_error_handle child) {
678
- if (src != GRPC_ERROR_NONE) {
679
- if (child == GRPC_ERROR_NONE) {
680
+ if (!GRPC_ERROR_IS_NONE(src)) {
681
+ if (GRPC_ERROR_IS_NONE(child)) {
680
682
  /* \a child is empty. Simply return the ref to \a src */
681
683
  return src;
682
684
  } else if (child != src) {
@@ -906,7 +908,7 @@ static char* finish_kvs(kv_pairs* kvs) {
906
908
  }
907
909
 
908
910
  const char* grpc_error_string(grpc_error_handle err) {
909
- if (err == GRPC_ERROR_NONE) return no_error_string;
911
+ if (GRPC_ERROR_IS_NONE(err)) return no_error_string;
910
912
  if (err == GRPC_ERROR_OOM) return oom_error_string;
911
913
  if (err == GRPC_ERROR_CANCELLED) return cancelled_error_string;
912
914
 
@@ -978,7 +980,7 @@ grpc_error_handle grpc_wsa_error(const char* file, int line, int err,
978
980
 
979
981
  bool grpc_log_error(const char* what, grpc_error_handle error, const char* file,
980
982
  int line) {
981
- GPR_DEBUG_ASSERT(error != GRPC_ERROR_NONE);
983
+ GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(error));
982
984
  const char* msg = grpc_error_string(error);
983
985
  gpr_log(file, line, GPR_LOG_SEVERITY_ERROR, "%s: %s", what, msg);
984
986
  GRPC_ERROR_UNREF(error);
@@ -161,6 +161,8 @@ void grpc_enable_error_creation();
161
161
  #define GRPC_ERROR_REF(err) (err)
162
162
  #define GRPC_ERROR_UNREF(err) (void)(err)
163
163
 
164
+ #define GRPC_ERROR_IS_NONE(err) (err).ok()
165
+
164
166
  #define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc) \
165
167
  StatusCreate(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, {})
166
168
  #define GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc) \
@@ -208,7 +210,7 @@ absl::Status grpc_os_error(const grpc_core::DebugLocation& location, int err,
208
210
  const char* call_name) GRPC_MUST_USE_RESULT;
209
211
 
210
212
  inline absl::Status grpc_assert_never_ok(absl::Status error) {
211
- GPR_ASSERT(error != GRPC_ERROR_NONE);
213
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
212
214
  return error;
213
215
  }
214
216
 
@@ -236,6 +238,8 @@ absl::Status grpc_wsa_error(const grpc_core::DebugLocation& location, int err,
236
238
  #define GRPC_ERROR_CANCELLED ((grpc_error_handle)4)
237
239
  #define GRPC_ERROR_SPECIAL_MAX GRPC_ERROR_CANCELLED
238
240
 
241
+ #define GRPC_ERROR_IS_NONE(err) ((err) == GRPC_ERROR_NONE)
242
+
239
243
  inline bool grpc_error_is_special(grpc_error_handle err) {
240
244
  return err <= GRPC_ERROR_SPECIAL_MAX;
241
245
  }
@@ -340,7 +344,7 @@ grpc_error_handle grpc_os_error(const char* file, int line, int err,
340
344
  const char* call_name) GRPC_MUST_USE_RESULT;
341
345
 
342
346
  inline grpc_error_handle grpc_assert_never_ok(grpc_error_handle error) {
343
- GPR_ASSERT(error != GRPC_ERROR_NONE);
347
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
344
348
  return error;
345
349
  }
346
350
 
@@ -387,8 +391,8 @@ bool grpc_log_error(const char* what, grpc_error_handle error, const char* file,
387
391
  int line);
388
392
  inline bool grpc_log_if_error(const char* what, grpc_error_handle error,
389
393
  const char* file, int line) {
390
- return error == GRPC_ERROR_NONE ? true
391
- : grpc_log_error(what, error, file, line);
394
+ return GRPC_ERROR_IS_NONE(error) ? true
395
+ : grpc_log_error(what, error, file, line);
392
396
  }
393
397
 
394
398
  #define GRPC_LOG_IF_ERROR(what, error) \
@@ -413,7 +417,7 @@ class AtomicError {
413
417
  /// returns get() == GRPC_ERROR_NONE
414
418
  bool ok() {
415
419
  gpr_spinlock_lock(&lock_);
416
- bool ret = error_ == GRPC_ERROR_NONE;
420
+ bool ret = GRPC_ERROR_IS_NONE(error_);
417
421
  gpr_spinlock_unlock(&lock_);
418
422
  return ret;
419
423
  }