grpc 1.83.1 → 1.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +21 -17
  3. data/include/grpc/credentials.h +10 -0
  4. data/include/grpc/grpc_security_constants.h +2 -0
  5. data/include/grpc/impl/channel_arg_names.h +9 -0
  6. data/src/core/call/call_filters.h +4 -2
  7. data/src/core/call/client_call.cc +20 -8
  8. data/src/core/call/client_call.h +4 -0
  9. data/src/core/call/interception_chain.cc +2 -0
  10. data/src/core/call/interception_chain.h +14 -1
  11. data/src/core/call/metadata.cc +1 -3
  12. data/src/core/call/metadata_batch.h +13 -5
  13. data/src/core/call/server_call.cc +31 -14
  14. data/src/core/call/server_call.h +4 -0
  15. data/src/core/channelz/text_encode.cc +9 -4
  16. data/src/core/channelz/v2tov1/convert.cc +2 -2
  17. data/src/core/client_channel/backup_poller.cc +1 -2
  18. data/src/core/client_channel/client_channel.cc +6 -33
  19. data/src/core/client_channel/client_channel_filter.cc +22 -55
  20. data/src/core/client_channel/client_channel_filter.h +2 -2
  21. data/src/core/client_channel/client_channel_service_config.cc +3 -19
  22. data/src/core/client_channel/direct_channel.cc +7 -1
  23. data/src/core/client_channel/direct_channel.h +2 -2
  24. data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
  25. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -12
  26. data/src/core/client_channel/subchannel.cc +310 -1058
  27. data/src/core/client_channel/subchannel.h +44 -329
  28. data/src/core/client_channel/subchannel_metrics.cc +48 -0
  29. data/src/core/client_channel/subchannel_metrics.h +60 -0
  30. data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
  31. data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
  32. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
  33. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
  34. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
  35. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
  36. data/src/core/credentials/call/json_util.h +1 -0
  37. data/src/core/credentials/call/jwt/json_token.cc +10 -2
  38. data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
  39. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
  40. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +42 -79
  41. data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -5
  42. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +52 -31
  43. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +21 -8
  44. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -4
  45. data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
  46. data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
  47. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +12 -6
  48. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
  49. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -18
  50. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +9 -6
  51. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +45 -56
  52. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
  53. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +26 -0
  54. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +1 -1
  55. data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
  56. data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +2 -4
  57. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +13 -15
  58. data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
  59. data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
  60. data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
  61. data/src/core/credentials/transport/tls/ssl_utils.cc +39 -28
  62. data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
  63. data/src/core/credentials/transport/tls/tls_security_connector.cc +48 -33
  64. data/src/core/credentials/transport/tls/tls_security_connector.h +31 -10
  65. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +15 -11
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
  67. data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
  68. data/src/core/ext/filters/rbac/rbac_filter.h +21 -3
  69. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  70. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  71. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -20
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +32 -67
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
  74. data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -4
  75. data/src/core/ext/transport/chttp2/transport/frame.h +2 -0
  76. data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -4
  77. data/src/core/ext/transport/chttp2/transport/goaway.h +7 -0
  78. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -3
  79. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
  80. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +141 -130
  81. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +22 -22
  82. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +402 -269
  83. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +80 -49
  84. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +1 -2
  85. data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
  86. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +178 -5
  87. data/src/core/ext/transport/chttp2/transport/http2_transport.h +345 -5
  88. data/src/core/ext/transport/chttp2/transport/parsing.cc +5 -5
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +3 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +3 -4
  92. data/src/core/ext/transport/chttp2/transport/read_context.h +30 -3
  93. data/src/core/ext/transport/chttp2/transport/stream.h +65 -23
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -5
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +4 -17
  97. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
  98. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
  99. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
  100. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
  103. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
  104. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
  105. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
  106. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +5 -5
  107. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.c +3 -3
  108. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.h +5 -5
  109. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
  110. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
  111. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
  112. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
  113. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +715 -0
  114. data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
  115. data/src/core/filter/auth/server_auth_filter.cc +2 -3
  116. data/src/core/filter/composite/composite_filter.cc +45 -33
  117. data/src/core/filter/composite/composite_filter.h +5 -4
  118. data/src/core/filter/ext_proc/ext_proc_filter.cc +224 -0
  119. data/src/core/filter/ext_proc/ext_proc_filter.h +155 -0
  120. data/src/core/filter/ext_proc/ext_proc_messages.cc +701 -0
  121. data/src/core/filter/ext_proc/ext_proc_messages.h +297 -0
  122. data/src/core/filter/filter_args.h +13 -2
  123. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
  124. data/src/core/handshaker/security/security_handshaker.cc +9 -6
  125. data/src/core/lib/channel/channel_stack.cc +3 -0
  126. data/src/core/lib/channel/channel_stack.h +2 -0
  127. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -2
  128. data/src/core/lib/channel/promise_based_filter.cc +132 -20
  129. data/src/core/lib/channel/promise_based_filter.h +42 -12
  130. data/src/core/lib/compression/compression_internal.cc +4 -5
  131. data/src/core/lib/debug/trace_flags.cc +8 -0
  132. data/src/core/lib/debug/trace_flags.h +3 -0
  133. data/src/core/lib/event_engine/ares_resolver.cc +54 -50
  134. data/src/core/lib/event_engine/ares_resolver.h +3 -2
  135. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +3 -3
  136. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -10
  137. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +74 -33
  138. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +4 -4
  139. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -2
  140. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
  141. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
  142. data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
  143. data/src/core/lib/experiments/experiments.cc +60 -96
  144. data/src/core/lib/experiments/experiments.h +34 -50
  145. data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
  146. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
  147. data/src/core/lib/iomgr/error.cc +2 -6
  148. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  149. data/src/core/lib/iomgr/ev_poll_posix.cc +5 -9
  150. data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
  151. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -2
  152. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
  153. data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
  154. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
  155. data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
  156. data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
  157. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
  158. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  159. data/src/core/lib/iomgr/systemd_utils.cc +0 -1
  160. data/src/core/lib/iomgr/tcp_client.h +1 -1
  161. data/src/core/lib/iomgr/tcp_posix.cc +23 -15
  162. data/src/core/lib/iomgr/tcp_server.h +1 -1
  163. data/src/core/lib/iomgr/tcp_server_posix.cc +2 -3
  164. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
  165. data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
  166. data/src/core/lib/iomgr/tcp_windows.cc +5 -10
  167. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  168. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  169. data/src/core/lib/iomgr/vsock.h +3 -1
  170. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  171. data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
  172. data/src/core/lib/security/authorization/rbac_policy.h +21 -3
  173. data/src/core/lib/surface/call.cc +3 -9
  174. data/src/core/lib/surface/call_utils.h +113 -0
  175. data/src/core/lib/surface/channel_create.cc +1 -1
  176. data/src/core/lib/surface/channel_create.h +0 -2
  177. data/src/core/lib/surface/channel_init.cc +77 -38
  178. data/src/core/lib/surface/channel_init.h +30 -16
  179. data/src/core/lib/surface/filter_stack_call.cc +5 -10
  180. data/src/core/lib/surface/init.cc +13 -27
  181. data/src/core/lib/surface/version.cc +1 -1
  182. data/src/core/lib/transport/error_utils.cc +0 -27
  183. data/src/core/lib/transport/error_utils.h +0 -16
  184. data/src/core/lib/transport/transport.h +7 -5
  185. data/src/core/load_balancing/pick_first/pick_first.cc +2 -0
  186. data/src/core/load_balancing/rls/rls.cc +28 -11
  187. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -42
  188. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +0 -2
  189. data/src/core/load_balancing/xds/cds.cc +3 -1
  190. data/src/core/load_balancing/xds/xds_cluster_impl.cc +0 -1
  191. data/src/core/mitigation_engine/mitigation.h +14 -5
  192. data/src/core/mitigation_engine/mitigation_engine.h +7 -3
  193. data/src/core/mitigation_engine/mitigation_provider.h +2 -1
  194. data/src/core/plugin_registry/grpc_plugin_registry.cc +39 -8
  195. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +42 -41
  196. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
  197. data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
  198. data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
  199. data/src/core/resolver/endpoint_addresses.h +3 -0
  200. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +2 -1
  201. data/src/core/resolver/xds/xds_resolver.cc +35 -9
  202. data/src/core/server/server.cc +2 -6
  203. data/src/core/server/server_config_selector.h +18 -3
  204. data/src/core/server/server_config_selector_filter.cc +178 -91
  205. data/src/core/server/server_config_selector_filter.h +58 -3
  206. data/src/core/server/xds_server_config_fetcher.cc +196 -129
  207. data/src/core/server/xds_server_config_fetcher.h +49 -0
  208. data/src/core/server/xds_server_config_fetcher_legacy.cc +41 -37
  209. data/src/core/telemetry/histogram.h +94 -14
  210. data/src/core/telemetry/instrument.cc +179 -74
  211. data/src/core/telemetry/instrument.h +78 -30
  212. data/src/core/telemetry/metrics.h +5 -0
  213. data/src/core/{resolver/dns/dns_resolver_plugin.h → telemetry/telemetry_label.h} +12 -8
  214. data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
  215. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  216. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -1
  217. data/src/core/tsi/ssl_telemetry_utils.cc +216 -259
  218. data/src/core/tsi/ssl_telemetry_utils.h +12 -2
  219. data/src/core/tsi/ssl_transport_security.cc +238 -80
  220. data/src/core/tsi/ssl_transport_security.h +63 -33
  221. data/src/core/tsi/tls_telemetry.cc +31 -0
  222. data/src/core/tsi/tls_telemetry.h +47 -0
  223. data/src/core/tsi/transport_security.cc +2 -2
  224. data/src/core/tsi/transport_security.h +1 -1
  225. data/src/core/tsi/transport_security_interface.h +1 -1
  226. data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
  227. data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
  228. data/src/core/util/http_client/httpcli.cc +16 -53
  229. data/src/core/util/http_client/httpcli.h +0 -7
  230. data/src/core/util/http_client/httpcli_security_connector.cc +13 -8
  231. data/src/core/util/linux/cpu.cc +1 -1
  232. data/src/core/util/load_file.cc +3 -9
  233. data/src/core/util/load_file.h +3 -4
  234. data/src/core/util/matchers.h +8 -0
  235. data/src/core/util/posix/cpu.cc +1 -1
  236. data/src/core/util/status_helper.cc +0 -20
  237. data/src/core/util/status_helper.h +3 -14
  238. data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
  239. data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
  240. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -10
  241. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
  242. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
  243. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
  244. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
  245. data/src/core/xds/grpc/xds_client_grpc.cc +4 -8
  246. data/src/core/xds/grpc/xds_client_grpc.h +0 -4
  247. data/src/core/xds/grpc/xds_cluster.h +1 -0
  248. data/src/core/xds/grpc/xds_cluster_parser.cc +1 -5
  249. data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
  250. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +0 -2
  251. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
  252. data/src/core/xds/grpc/xds_common_types.cc +0 -91
  253. data/src/core/xds/grpc/xds_common_types.h +1 -47
  254. data/src/core/xds/grpc/xds_common_types_parser.cc +84 -378
  255. data/src/core/xds/grpc/xds_common_types_parser.h +9 -11
  256. data/src/core/xds/grpc/xds_endpoint_parser.cc +0 -2
  257. data/src/core/xds/grpc/xds_grpc_service_parser.cc +177 -0
  258. data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h} +14 -9
  259. data/src/core/xds/grpc/xds_http_composite_filter.cc +26 -21
  260. data/src/core/xds/grpc/xds_http_composite_filter.h +4 -3
  261. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +418 -0
  262. data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
  263. data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -12
  264. data/src/core/xds/grpc/xds_http_fault_filter.h +1 -4
  265. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  266. data/src/core/xds/grpc/xds_http_filter.h +6 -5
  267. data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -127
  268. data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
  269. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +13 -14
  270. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -2
  271. data/src/core/xds/grpc/xds_http_rbac_filter.cc +403 -25
  272. data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
  273. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -13
  274. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +1 -4
  275. data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -292
  276. data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
  277. data/src/core/xds/grpc/xds_listener.cc +2 -0
  278. data/src/core/xds/grpc/xds_listener.h +5 -0
  279. data/src/core/xds/grpc/xds_listener_parser.cc +16 -11
  280. data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
  281. data/src/core/xds/grpc/xds_metadata_parser.cc +6 -1
  282. data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
  283. data/src/core/xds/grpc/xds_route_config.cc +2 -0
  284. data/src/core/xds/grpc/xds_route_config.h +3 -1
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +13 -79
  286. data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
  287. data/src/core/xds/grpc/xds_routing.cc +116 -69
  288. data/src/core/xds/grpc/xds_routing.h +19 -8
  289. data/src/core/xds/grpc/xds_tls_context.cc +117 -0
  290. data/src/core/xds/grpc/xds_tls_context.h +76 -0
  291. data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
  292. data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
  293. data/src/core/xds/grpc/xds_transport_grpc.cc +41 -38
  294. data/src/core/xds/grpc/xds_transport_grpc.h +4 -2
  295. data/src/ruby/ext/grpc/rb_call.c +26 -15
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +6 -5
  297. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  298. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  299. data/src/ruby/lib/grpc/version.rb +1 -1
  300. data/src/ruby/pb/test/client.rb +5 -4
  301. data/src/ruby/spec/call_spec.rb +14 -0
  302. data/src/ruby/spec/generic/server_interceptors_spec.rb +3 -6
  303. metadata +50 -35
  304. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
  305. data/src/core/lib/iomgr/resolve_address.cc +0 -59
  306. data/src/core/lib/iomgr/resolve_address.h +0 -125
  307. data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
  308. data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
  309. data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
  310. data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
  311. data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
  312. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
  313. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
  314. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
  315. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
  316. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
  317. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
  318. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
  319. data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -64
  320. data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
  321. data/src/core/util/json/json_util.cc +0 -101
  322. data/src/core/util/json/json_util.h +0 -163
@@ -23,177 +23,29 @@
23
23
  #include <openssl/ssl.h>
24
24
  #include <openssl/x509.h>
25
25
 
26
- namespace grpc_core {
27
-
28
- #if defined(OPENSSL_IS_BORINGSSL)
26
+ #include "absl/strings/string_view.h"
29
27
 
28
+ namespace grpc_core {
30
29
  namespace {
31
30
 
32
- TlsTelemetryHandshakeResult MapVerifyResultToTlsTelemetryHandshakeResult(
33
- long verify_result) {
34
- if (verify_result == X509_V_OK) return TlsTelemetryHandshakeResult::kSuccess;
35
- switch (verify_result) {
36
- case X509_V_ERR_CERT_REVOKED:
37
- return TlsTelemetryHandshakeResult::kCertificateRevoked;
38
- case X509_V_ERR_CERT_HAS_EXPIRED:
39
- return TlsTelemetryHandshakeResult::kCertificateExpired;
40
- case X509_V_ERR_CERT_NOT_YET_VALID:
41
- return TlsTelemetryHandshakeResult::kCertificateNotYetValid;
42
- case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
43
- case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
44
- case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
45
- case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
46
- case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
47
- return TlsTelemetryHandshakeResult::kCertificateAuthorityInvalid;
48
- case X509_V_ERR_HOSTNAME_MISMATCH:
49
- return TlsTelemetryHandshakeResult::kCertificateHostnameMismatch;
50
- case X509_V_ERR_CERT_REJECTED:
51
- return TlsTelemetryHandshakeResult::kCertificateVerificationFailed;
52
- case X509_V_ERR_UNABLE_TO_GET_CRL:
53
- return TlsTelemetryHandshakeResult::kCrlNotFound;
54
- case X509_V_ERR_CRL_HAS_EXPIRED:
55
- case X509_V_ERR_CRL_NOT_YET_VALID:
56
- return TlsTelemetryHandshakeResult::kCrlExpired;
57
- case X509_V_ERR_CRL_SIGNATURE_FAILURE:
58
- return TlsTelemetryHandshakeResult::kCrlSignatureFailure;
59
- case X509_V_ERR_INVALID_CA:
60
- case X509_V_ERR_INVALID_NON_CA:
61
- case X509_V_ERR_INVALID_PURPOSE:
62
- case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
63
- case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
64
- return TlsTelemetryHandshakeResult::kCertificateMalformed;
65
- case X509_V_ERR_CERT_SIGNATURE_FAILURE:
66
- return TlsTelemetryHandshakeResult::kSignatureVerificationFailed;
31
+ // Most of the TSI error states are relatively generic and don't allow us to
32
+ // report more granular failure details.
33
+ TlsTelemetryHandshakeResult MapTsiResultToTlsTelemetryHandshakeResult(
34
+ tsi_result status) {
35
+ switch (status) {
36
+ case TSI_OK:
37
+ return TlsTelemetryHandshakeResult::kSuccess;
38
+ case TSI_HANDSHAKE_SHUTDOWN:
39
+ return TlsTelemetryHandshakeResult::kCancelled;
40
+ case TSI_CLOSE_NOTIFY:
41
+ return TlsTelemetryHandshakeResult::kPeerConnectionClosed;
42
+ case TSI_OUT_OF_RESOURCES:
43
+ return TlsTelemetryHandshakeResult::kInternalSystemError;
67
44
  default:
68
- return TlsTelemetryHandshakeResult::kCertificateVerificationFailed;
69
- }
70
- }
71
-
72
- } // namespace
73
-
74
- TlsTelemetryHandshakeResult MapSslErrorToTlsTelemetryHandshakeResult(
75
- int ssl_error, unsigned long err_code, long verify_result) {
76
- if (ssl_error == SSL_ERROR_NONE) {
77
- return MapVerifyResultToTlsTelemetryHandshakeResult(verify_result);
78
- }
79
-
80
- if (ssl_error == SSL_ERROR_ZERO_RETURN) {
81
- return TlsTelemetryHandshakeResult::kPeerConnectionClosed;
82
- }
83
-
84
- if (ssl_error == SSL_ERROR_SYSCALL) {
85
- return TlsTelemetryHandshakeResult::kPeerConnectionClosed;
86
- }
87
-
88
- if (ssl_error == SSL_ERROR_SSL) {
89
- int reason = ERR_GET_REASON(err_code);
90
- switch (reason) {
91
- // Cipher suite mismatch failures
92
- case SSL_R_NO_CIPHERS_AVAILABLE:
93
- case SSL_R_NO_CIPHERS_PASSED:
94
- case SSL_R_NO_CIPHER_MATCH:
95
- case SSL_R_NO_SHARED_CIPHER:
96
- case SSL_R_REQUIRED_CIPHER_MISSING:
97
- case SSL_R_UNSUPPORTED_CIPHER:
98
- case SSL_R_WRONG_CIPHER_RETURNED:
99
- case SSL_R_CIPHER_MISMATCH_ON_EARLY_DATA:
100
- case SSL_R_CIPHER_OR_HASH_UNAVAILABLE:
101
- return TlsTelemetryHandshakeResult::kCipherSuiteMismatch;
102
-
103
- // Protocol version unsupported failures
104
- case SSL_R_UNKNOWN_PROTOCOL:
105
- case SSL_R_UNKNOWN_SSL_VERSION:
106
- case SSL_R_UNSUPPORTED_PROTOCOL:
107
- case SSL_R_WRONG_SSL_VERSION:
108
- case SSL_R_WRONG_VERSION_NUMBER:
109
- case SSL_R_UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY:
110
- case SSL_R_WRONG_VERSION_ON_EARLY_DATA:
111
- case SSL_R_NO_SUPPORTED_VERSIONS_ENABLED:
112
- case SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH:
113
- return TlsTelemetryHandshakeResult::kProtocolVersionUnsupported;
114
-
115
- // Inappropriate fallback
116
- case SSL_R_INAPPROPRIATE_FALLBACK:
117
- return TlsTelemetryHandshakeResult::kInappropriateFallback;
118
-
119
- // No application protocol
120
- case SSL_R_NO_APPLICATION_PROTOCOL:
121
- case SSL_R_INVALID_ALPN_PROTOCOL:
122
- case SSL_R_INVALID_ALPN_PROTOCOL_LIST:
123
- case SSL_R_NEGOTIATED_BOTH_NPN_AND_ALPN:
124
- case SSL_R_ALPN_MISMATCH_ON_EARLY_DATA:
125
- return TlsTelemetryHandshakeResult::kNoApplicationProtocol;
126
-
127
- // Cryptographic failures: Signature verification failed
128
- case SSL_R_BAD_SIGNATURE:
129
- case SSL_R_WRONG_SIGNATURE_TYPE:
130
- return TlsTelemetryHandshakeResult::kSignatureVerificationFailed;
131
-
132
- // Cryptographic failures: Decryption failed
133
- case SSL_R_DECRYPTION_FAILED:
134
- case SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC:
135
- case SSL_R_BLOCK_CIPHER_PAD_IS_WRONG:
136
- return TlsTelemetryHandshakeResult::kDecryptionFailed;
137
-
138
- // Cryptographic failures: Key exchange failure
139
- case SSL_R_WRONG_CURVE:
140
- case SSL_R_BAD_ECPOINT:
141
- return TlsTelemetryHandshakeResult::kKeyExchangeFailure;
142
-
143
- // Unexpected message
144
- case SSL_R_UNEXPECTED_MESSAGE:
145
- case SSL_R_UNEXPECTED_RECORD:
146
- case SSL_R_APP_DATA_IN_HANDSHAKE:
147
- case SSL_R_EXCESS_HANDSHAKE_DATA:
148
- return TlsTelemetryHandshakeResult::kUnexpectedMessage;
149
-
150
- // Handshake timeout
151
- case SSL_R_READ_TIMEOUT_EXPIRED:
152
- return TlsTelemetryHandshakeResult::kHandshakeTimeout;
153
-
154
- // Certificate verification failures
155
- case SSL_R_CERTIFICATE_VERIFY_FAILED: {
156
- TlsTelemetryHandshakeResult result =
157
- MapVerifyResultToTlsTelemetryHandshakeResult(verify_result);
158
- if (result == TlsTelemetryHandshakeResult::kSuccess) {
159
- // There's no more detail on certificate failure, this is as granular
160
- // as we can get.
161
- return TlsTelemetryHandshakeResult::kCertificateVerificationFailed;
162
- }
163
- return result;
164
- }
165
-
166
- // Certificate malformed
167
- case SSL_R_DECODE_ERROR:
168
- return TlsTelemetryHandshakeResult::kCertificateMalformed;
169
-
170
- // Peer Certificate required but missing
171
- case SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE:
172
- case SSL_R_NO_CERTIFICATES_RETURNED:
173
- case SSL_R_NO_CERTIFICATE_SET:
174
- case SSL_R_NO_CERTIFICATE_ASSIGNED:
175
- case SSL_R_SSLV3_ALERT_NO_CERTIFICATE:
176
- case SSL_R_TLSV1_ALERT_CERTIFICATE_REQUIRED:
177
- return TlsTelemetryHandshakeResult::kPeerCertificateRequiredButMissing;
178
-
179
- // Internal / Resource failures
180
- case ERR_R_MALLOC_FAILURE:
181
- case ERR_R_INTERNAL_ERROR:
182
- case ERR_R_OVERFLOW:
183
- return TlsTelemetryHandshakeResult::kInternalSystemError;
184
-
185
- default:
186
- break;
187
- }
45
+ return TlsTelemetryHandshakeResult::kInternalSystemError;
188
46
  }
189
-
190
- return TlsTelemetryHandshakeResult::kUnknownFailure;
191
47
  }
192
48
 
193
- #else // !defined(OPENSSL_IS_BORINGSSL)
194
-
195
- namespace {
196
-
197
49
  TlsTelemetryHandshakeResult MapVerifyResultToTlsTelemetryHandshakeResult(
198
50
  long verify_result) {
199
51
  if (verify_result == X509_V_OK) return TlsTelemetryHandshakeResult::kSuccess;
@@ -237,107 +89,212 @@ TlsTelemetryHandshakeResult MapVerifyResultToTlsTelemetryHandshakeResult(
237
89
  } // namespace
238
90
 
239
91
  TlsTelemetryHandshakeResult MapSslErrorToTlsTelemetryHandshakeResult(
240
- int ssl_error, unsigned long err_code, long verify_result) {
241
- if (ssl_error == SSL_ERROR_NONE) {
242
- return MapVerifyResultToTlsTelemetryHandshakeResult(verify_result);
243
- }
244
-
245
- if (ssl_error == SSL_ERROR_ZERO_RETURN) {
246
- return TlsTelemetryHandshakeResult::kPeerConnectionClosed;
247
- }
248
-
249
- if (ssl_error == SSL_ERROR_SYSCALL) {
250
- return TlsTelemetryHandshakeResult::kPeerConnectionClosed;
251
- }
252
-
253
- if (ssl_error == SSL_ERROR_SSL) {
254
- int reason = ERR_GET_REASON(err_code);
255
- switch (reason) {
256
- // Cipher suite mismatch failures
257
- case SSL_R_NO_CIPHERS_AVAILABLE:
258
- case SSL_R_NO_CIPHER_MATCH:
259
- case SSL_R_NO_SHARED_CIPHER:
260
- case SSL_R_REQUIRED_CIPHER_MISSING:
261
- case SSL_R_WRONG_CIPHER_RETURNED:
262
- return TlsTelemetryHandshakeResult::kCipherSuiteMismatch;
263
-
264
- // Protocol version unsupported failures
265
- case SSL_R_UNKNOWN_PROTOCOL:
266
- case SSL_R_UNKNOWN_SSL_VERSION:
267
- case SSL_R_UNSUPPORTED_PROTOCOL:
268
- case SSL_R_WRONG_SSL_VERSION:
269
- case SSL_R_WRONG_VERSION_NUMBER:
270
- return TlsTelemetryHandshakeResult::kProtocolVersionUnsupported;
271
-
272
- // Inappropriate fallback
273
- case SSL_R_INAPPROPRIATE_FALLBACK:
274
- return TlsTelemetryHandshakeResult::kInappropriateFallback;
275
-
276
- // No application protocol
277
- #ifdef SSL_R_NO_APPLICATION_PROTOCOL
278
- case SSL_R_NO_APPLICATION_PROTOCOL:
279
- return TlsTelemetryHandshakeResult::kNoApplicationProtocol;
92
+ tsi_result status, int ssl_error, unsigned long err_code,
93
+ long verify_result) {
94
+ TlsTelemetryHandshakeResult result =
95
+ MapTsiResultToTlsTelemetryHandshakeResult(status);
96
+ switch (ssl_error) {
97
+ case SSL_ERROR_NONE: {
98
+ TlsTelemetryHandshakeResult verify_res =
99
+ MapVerifyResultToTlsTelemetryHandshakeResult(verify_result);
100
+ if (verify_res != TlsTelemetryHandshakeResult::kSuccess) {
101
+ result = verify_res;
102
+ }
103
+ break;
104
+ }
105
+ case SSL_ERROR_ZERO_RETURN:
106
+ result = TlsTelemetryHandshakeResult::kPeerConnectionClosed;
107
+ break;
108
+ case SSL_ERROR_SYSCALL:
109
+ result = TlsTelemetryHandshakeResult::kInternalSystemError;
110
+ break;
111
+ case SSL_ERROR_SSL: {
112
+ int reason = ERR_GET_REASON(err_code);
113
+ switch (reason) {
114
+ // Cipher suite mismatch failures
115
+ case SSL_R_NO_CIPHERS_AVAILABLE:
116
+ case SSL_R_NO_SHARED_CIPHER:
117
+ case SSL_R_REQUIRED_CIPHER_MISSING:
118
+ case SSL_R_WRONG_CIPHER_RETURNED:
119
+ case SSL_R_NO_CIPHER_MATCH:
120
+ #if defined(OPENSSL_IS_BORINGSSL)
121
+ case SSL_R_NO_CIPHERS_PASSED:
122
+ case SSL_R_UNSUPPORTED_CIPHER:
123
+ case SSL_R_CIPHER_MISMATCH_ON_EARLY_DATA:
124
+ case SSL_R_CIPHER_OR_HASH_UNAVAILABLE:
280
125
  #endif
281
-
282
- // Cryptographic failures: Signature verification failed
283
- case SSL_R_BAD_SIGNATURE:
284
- case SSL_R_WRONG_SIGNATURE_TYPE:
285
- return TlsTelemetryHandshakeResult::kSignatureVerificationFailed;
286
-
287
- // Cryptographic failures: Decryption failed
288
- case SSL_R_DECRYPTION_FAILED:
289
- case SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC:
290
- case SSL_R_BLOCK_CIPHER_PAD_IS_WRONG:
291
- return TlsTelemetryHandshakeResult::kDecryptionFailed;
292
-
293
- // Cryptographic failures: Key exchange failure
294
- case SSL_R_WRONG_CURVE:
295
- case SSL_R_BAD_ECPOINT:
296
- return TlsTelemetryHandshakeResult::kKeyExchangeFailure;
297
-
298
- // Unexpected message
299
- case SSL_R_UNEXPECTED_MESSAGE:
300
- case SSL_R_UNEXPECTED_RECORD:
301
- case SSL_R_APP_DATA_IN_HANDSHAKE:
302
- return TlsTelemetryHandshakeResult::kUnexpectedMessage;
303
-
304
- // Handshake timeout
305
- case SSL_R_READ_TIMEOUT_EXPIRED:
306
- return TlsTelemetryHandshakeResult::kHandshakeTimeout;
307
-
308
- // Certificate verification failures
309
- case SSL_R_CERTIFICATE_VERIFY_FAILED: {
310
- TlsTelemetryHandshakeResult result =
311
- MapVerifyResultToTlsTelemetryHandshakeResult(verify_result);
312
- if (result == TlsTelemetryHandshakeResult::kSuccess) {
313
- // There's no more detail on certificate failure, this is as granular
314
- // as we can get.
315
- return TlsTelemetryHandshakeResult::kCertificateVerificationFailed;
126
+ result = TlsTelemetryHandshakeResult::kCipherSuiteMismatch;
127
+ break;
128
+ // Protocol version unsupported failures
129
+ case SSL_R_UNKNOWN_PROTOCOL:
130
+ case SSL_R_UNKNOWN_SSL_VERSION:
131
+ case SSL_R_UNSUPPORTED_PROTOCOL:
132
+ case SSL_R_WRONG_SSL_VERSION:
133
+ case SSL_R_WRONG_VERSION_NUMBER:
134
+ #if defined(OPENSSL_IS_BORINGSSL)
135
+ case SSL_R_UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY:
136
+ case SSL_R_WRONG_VERSION_ON_EARLY_DATA:
137
+ case SSL_R_NO_SUPPORTED_VERSIONS_ENABLED:
138
+ case SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH:
139
+ #endif
140
+ result = TlsTelemetryHandshakeResult::kProtocolVersionUnsupported;
141
+ break;
142
+ // Inappropriate fallback
143
+ case SSL_R_INAPPROPRIATE_FALLBACK:
144
+ result = TlsTelemetryHandshakeResult::kInappropriateFallback;
145
+ break;
146
+ // No application protocol
147
+ #if defined(OPENSSL_IS_BORINGSSL) || defined(SSL_R_NO_APPLICATION_PROTOCOL)
148
+ case SSL_R_NO_APPLICATION_PROTOCOL:
149
+ #endif
150
+ #if defined(OPENSSL_IS_BORINGSSL)
151
+ case SSL_R_INVALID_ALPN_PROTOCOL:
152
+ case SSL_R_INVALID_ALPN_PROTOCOL_LIST:
153
+ case SSL_R_NEGOTIATED_BOTH_NPN_AND_ALPN:
154
+ case SSL_R_ALPN_MISMATCH_ON_EARLY_DATA:
155
+ #endif
156
+ #if defined(OPENSSL_IS_BORINGSSL) || defined(SSL_R_NO_APPLICATION_PROTOCOL)
157
+ result = TlsTelemetryHandshakeResult::kNoApplicationProtocol;
158
+ break;
159
+ #endif
160
+ // Cryptographic failures: Signature verification failed
161
+ case SSL_R_BAD_SIGNATURE:
162
+ case SSL_R_WRONG_SIGNATURE_TYPE:
163
+ result = TlsTelemetryHandshakeResult::kSignatureVerificationFailed;
164
+ break;
165
+ // Cryptographic failures: Decryption failed
166
+ case SSL_R_DECRYPTION_FAILED:
167
+ case SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC:
168
+ case SSL_R_BLOCK_CIPHER_PAD_IS_WRONG:
169
+ result = TlsTelemetryHandshakeResult::kDecryptionFailed;
170
+ break;
171
+ // Cryptographic failures: Key exchange failure
172
+ case SSL_R_WRONG_CURVE:
173
+ case SSL_R_BAD_ECPOINT:
174
+ result = TlsTelemetryHandshakeResult::kKeyExchangeFailure;
175
+ break;
176
+ // Unexpected message
177
+ case SSL_R_UNEXPECTED_MESSAGE:
178
+ case SSL_R_UNEXPECTED_RECORD:
179
+ case SSL_R_APP_DATA_IN_HANDSHAKE:
180
+ #if defined(OPENSSL_IS_BORINGSSL)
181
+ case SSL_R_EXCESS_HANDSHAKE_DATA:
182
+ #endif
183
+ result = TlsTelemetryHandshakeResult::kUnexpectedMessage;
184
+ break;
185
+ // Handshake timeout
186
+ case SSL_R_READ_TIMEOUT_EXPIRED:
187
+ result = TlsTelemetryHandshakeResult::kCancelled;
188
+ break;
189
+ // Certificate verification failures
190
+ case SSL_R_CERTIFICATE_VERIFY_FAILED: {
191
+ result = MapVerifyResultToTlsTelemetryHandshakeResult(verify_result);
192
+ // If there is not a more granular failure, use the generic
193
+ // certificate verification failed result.
194
+ if (result == TlsTelemetryHandshakeResult::kSuccess) {
195
+ result =
196
+ TlsTelemetryHandshakeResult::kCertificateVerificationFailed;
197
+ }
198
+ break;
316
199
  }
317
- return result;
200
+ // Certificate malformed
201
+ #if defined(OPENSSL_IS_BORINGSSL)
202
+ case SSL_R_DECODE_ERROR:
203
+ result = TlsTelemetryHandshakeResult::kCertificateMalformed;
204
+ break;
205
+ #endif
206
+ // Peer Certificate required but missing
207
+ case SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE:
208
+ case SSL_R_NO_CERTIFICATES_RETURNED:
209
+ case SSL_R_NO_CERTIFICATE_SET:
210
+ case SSL_R_NO_CERTIFICATE_ASSIGNED:
211
+ case SSL_R_SSLV3_ALERT_NO_CERTIFICATE:
212
+ #if defined(OPENSSL_IS_BORINGSSL)
213
+ case SSL_R_TLSV1_ALERT_CERTIFICATE_REQUIRED:
214
+ #endif
215
+ result =
216
+ TlsTelemetryHandshakeResult::kPeerCertificateRequiredButMissing;
217
+ break;
218
+ // Internal / Resource failures
219
+ case ERR_R_MALLOC_FAILURE:
220
+ case ERR_R_INTERNAL_ERROR:
221
+ #if defined(OPENSSL_IS_BORINGSSL)
222
+ case ERR_R_OVERFLOW:
223
+ #endif
224
+ result = TlsTelemetryHandshakeResult::kInternalSystemError;
225
+ break;
226
+ default:
227
+ // This branch should not be reached in practice. This is kept as a
228
+ // safety - to reach this default, the error is NOT SSL_ERROR_NONE, so
229
+ // there is some error.
230
+ if (result == TlsTelemetryHandshakeResult::kSuccess) {
231
+ result = TlsTelemetryHandshakeResult::kUnknownFailure;
232
+ }
233
+ break;
318
234
  }
319
-
320
- // Peer Certificate required but missing
321
- case SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE:
322
- case SSL_R_NO_CERTIFICATES_RETURNED:
323
- case SSL_R_NO_CERTIFICATE_SET:
324
- case SSL_R_NO_CERTIFICATE_ASSIGNED:
325
- case SSL_R_SSLV3_ALERT_NO_CERTIFICATE:
326
- return TlsTelemetryHandshakeResult::kPeerCertificateRequiredButMissing;
327
-
328
- // Internal / Resource failures
329
- case ERR_R_MALLOC_FAILURE:
330
- case ERR_R_INTERNAL_ERROR:
331
- return TlsTelemetryHandshakeResult::kInternalSystemError;
332
-
333
- default:
334
- break;
235
+ break;
335
236
  }
237
+ default:
238
+ break;
336
239
  }
337
-
338
- return TlsTelemetryHandshakeResult::kUnknownFailure;
240
+ return result;
339
241
  }
340
242
 
341
- #endif // OPENSSL_IS_BORINGSSL
243
+ absl::string_view TlsTelemetryHandshakeResultToString(
244
+ TlsTelemetryHandshakeResult result) {
245
+ switch (result) {
246
+ case TlsTelemetryHandshakeResult::kSuccess:
247
+ return "OK";
248
+ case TlsTelemetryHandshakeResult::kCertificateVerificationFailed:
249
+ return "CERTIFICATE_VERIFICATION_FAILED";
250
+ case TlsTelemetryHandshakeResult::kCertificateRevoked:
251
+ return "CERTIFICATE_REVOKED";
252
+ case TlsTelemetryHandshakeResult::kCertificateExpired:
253
+ return "CERTIFICATE_EXPIRED";
254
+ case TlsTelemetryHandshakeResult::kCertificateNotYetValid:
255
+ return "CERTIFICATE_NOT_YET_VALID";
256
+ case TlsTelemetryHandshakeResult::kCertificateAuthorityInvalid:
257
+ return "CERTIFICATE_AUTHORITY_INVALID";
258
+ case TlsTelemetryHandshakeResult::kPeerCertificateRequiredButMissing:
259
+ return "PEER_CERTIFICATE_REQUIRED_BUT_MISSING";
260
+ case TlsTelemetryHandshakeResult::kCrlNotFound:
261
+ return "CRL_NOT_FOUND";
262
+ case TlsTelemetryHandshakeResult::kCrlExpired:
263
+ return "CRL_EXPIRED";
264
+ case TlsTelemetryHandshakeResult::kCrlSignatureFailure:
265
+ return "CRL_SIGNATURE_FAILURE";
266
+ case TlsTelemetryHandshakeResult::kCertificateHostnameMismatch:
267
+ return "CERTIFICATE_HOSTNAME_MISMATCH";
268
+ case TlsTelemetryHandshakeResult::kCertificateMalformed:
269
+ return "CERTIFICATE_MALFORMED";
270
+ case TlsTelemetryHandshakeResult::kCipherSuiteMismatch:
271
+ return "CIPHER_SUITE_MISMATCH";
272
+ case TlsTelemetryHandshakeResult::kProtocolVersionUnsupported:
273
+ return "PROTOCOL_VERSION_UNSUPPORTED";
274
+ case TlsTelemetryHandshakeResult::kInappropriateFallback:
275
+ return "INAPPROPRIATE_FALLBACK";
276
+ case TlsTelemetryHandshakeResult::kNoApplicationProtocol:
277
+ return "NO_APPLICATION_PROTOCOL";
278
+ case TlsTelemetryHandshakeResult::kSignatureVerificationFailed:
279
+ return "SIGNATURE_VERIFICATION_FAILED";
280
+ case TlsTelemetryHandshakeResult::kDecryptionFailed:
281
+ return "DECRYPTION_FAILED";
282
+ case TlsTelemetryHandshakeResult::kKeyExchangeFailure:
283
+ return "KEY_EXCHANGE_FAILURE";
284
+ case TlsTelemetryHandshakeResult::kPrivateKeySigningFailed:
285
+ return "PRIVATE_KEY_SIGNING_FAILED";
286
+ case TlsTelemetryHandshakeResult::kUnexpectedMessage:
287
+ return "UNEXPECTED_MESSAGE";
288
+ case TlsTelemetryHandshakeResult::kPeerConnectionClosed:
289
+ return "PEER_CONNECTION_CLOSED";
290
+ case TlsTelemetryHandshakeResult::kInternalSystemError:
291
+ return "INTERNAL_SYSTEM_ERROR";
292
+ case TlsTelemetryHandshakeResult::kUnknownFailure:
293
+ return "UNKNOWN_FAILURE";
294
+ case TlsTelemetryHandshakeResult::kCancelled:
295
+ return "CANCELLED";
296
+ }
297
+ return "UNKNOWN_FAILURE";
298
+ }
342
299
 
343
300
  } // namespace grpc_core
@@ -21,6 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/tsi/transport_security_interface.h"
25
+ #include "absl/strings/string_view.h"
26
+
24
27
  namespace grpc_core {
25
28
 
26
29
  enum class TlsTelemetryHandshakeResult {
@@ -50,14 +53,15 @@ enum class TlsTelemetryHandshakeResult {
50
53
  kPrivateKeySigningFailed,
51
54
  // Other failures
52
55
  kUnexpectedMessage,
53
- kHandshakeTimeout,
54
56
  kPeerConnectionClosed,
57
+ kCancelled,
55
58
  kInternalSystemError
56
59
  };
57
60
 
58
61
  // Maps different kinds of handshake/SSL/TLS errors to a unified
59
62
  // TlsTelemetryHandshakeResult.
60
63
  //
64
+ // - status: the tsi_result status of the overall TSI implementation.
61
65
  // - ssl_error: the return code from SSL_get_error().
62
66
  // - err_code: the packed error code from the OpenSSL error queue
63
67
  // (ERR_get_error()).
@@ -67,7 +71,13 @@ enum class TlsTelemetryHandshakeResult {
67
71
  // - Returns the corresponding TlsTelemetryHandshakeResult mapping for the
68
72
  // failures.
69
73
  TlsTelemetryHandshakeResult MapSslErrorToTlsTelemetryHandshakeResult(
70
- int ssl_error, unsigned long err_code, long verify_result);
74
+ tsi_result status, int ssl_error, unsigned long err_code,
75
+ long verify_result);
76
+
77
+ // Converts the C-Core enum into a cross-language-consistent string
78
+ // representation for monitoring.
79
+ absl::string_view TlsTelemetryHandshakeResultToString(
80
+ TlsTelemetryHandshakeResult result);
71
81
 
72
82
  } // namespace grpc_core
73
83