grpc 1.45.0 → 1.46.2

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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +36 -29
  3. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  4. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  5. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  6. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  7. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  8. data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
  9. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
  11. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
  12. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  13. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
  15. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
  16. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
  17. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
  18. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
  22. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
  23. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  24. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
  26. data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
  27. data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
  28. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  29. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  30. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
  31. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  32. data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
  33. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  34. data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
  35. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
  37. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
  38. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  40. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  41. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
  43. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
  44. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  45. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
  46. data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
  47. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
  48. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
  49. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  50. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  51. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  52. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  53. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  54. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  55. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  56. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  57. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  58. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  59. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  60. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  61. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  62. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  63. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  64. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  65. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  66. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  67. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  68. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  70. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  71. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  72. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  73. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  74. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  75. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  76. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  85. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  86. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  119. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  135. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  136. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  137. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  138. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  139. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  140. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  141. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  142. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  143. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  144. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  145. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  146. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  149. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  150. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  151. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  152. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  155. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  156. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  157. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  158. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  159. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  160. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  161. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  163. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  169. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  171. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  172. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  178. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  189. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  191. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  192. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  194. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  195. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  196. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  197. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  198. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  220. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  221. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  222. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  223. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  224. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  232. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  233. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  234. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  235. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  237. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  238. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  239. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  240. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  241. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  242. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  243. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  244. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  245. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  246. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  247. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  248. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  249. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  250. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  251. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  252. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  253. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  254. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  255. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  256. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  257. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  259. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  260. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  261. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  262. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  263. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  264. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  267. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  268. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  269. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  270. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  271. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  272. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  273. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  274. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  280. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  282. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  284. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  285. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  286. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  287. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  288. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  289. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  290. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  291. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  292. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  293. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  294. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  295. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  296. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  297. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  298. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  300. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  301. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  302. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  303. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  304. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  305. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  306. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  307. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  308. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  309. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  310. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  311. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  312. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  313. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  314. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  315. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  316. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  317. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  318. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  319. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  320. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  321. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  322. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  323. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  331. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  332. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  337. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  338. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  339. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  340. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  341. data/src/core/ext/xds/xds_api.cc +20 -0
  342. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  343. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  344. data/src/core/ext/xds/xds_client.cc +83 -93
  345. data/src/core/ext/xds/xds_client.h +11 -4
  346. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  347. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  348. data/src/core/ext/xds/xds_common_types.cc +9 -9
  349. data/src/core/ext/xds/xds_common_types.h +3 -3
  350. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  351. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  352. data/src/core/ext/xds/xds_listener.cc +1 -1
  353. data/src/core/ext/xds/xds_route_config.cc +162 -25
  354. data/src/core/ext/xds/xds_route_config.h +13 -10
  355. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  356. data/src/core/lib/avl/avl.h +68 -5
  357. data/src/core/lib/channel/call_tracer.h +4 -1
  358. data/src/core/lib/channel/channel_args.cc +138 -59
  359. data/src/core/lib/channel/channel_args.h +210 -9
  360. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  361. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  362. data/src/core/lib/channel/channel_stack.h +2 -5
  363. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  364. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  365. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  366. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  367. data/src/core/lib/channel/connected_channel.h +1 -0
  368. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  369. data/src/core/lib/channel/promise_based_filter.h +55 -41
  370. data/src/core/lib/compression/compression_internal.cc +1 -7
  371. data/src/core/lib/debug/stats_data.cc +2 -6
  372. data/src/core/lib/debug/stats_data.h +18 -21
  373. data/src/core/lib/gpr/tls.h +1 -0
  374. data/src/core/lib/gprpp/bitset.h +12 -0
  375. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  376. data/src/core/lib/gprpp/match.h +73 -0
  377. data/src/core/lib/gprpp/overload.h +59 -0
  378. data/src/core/lib/gprpp/ref_counted.h +2 -0
  379. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  380. data/src/core/lib/gprpp/status_helper.cc +18 -2
  381. data/src/core/lib/gprpp/time.cc +12 -0
  382. data/src/core/lib/gprpp/time.h +1 -1
  383. data/src/core/lib/http/format_request.cc +1 -2
  384. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  385. data/src/core/lib/http/parser.cc +80 -9
  386. data/src/core/lib/http/parser.h +14 -1
  387. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  388. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  389. data/src/core/lib/iomgr/port.h +0 -2
  390. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  391. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  392. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  393. data/src/core/lib/json/json_util.h +3 -3
  394. data/src/core/lib/promise/call_push_pull.h +144 -0
  395. data/src/core/lib/promise/detail/status.h +2 -1
  396. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  397. data/src/core/lib/promise/latch.h +104 -0
  398. data/src/core/lib/resource_quota/api.cc +5 -30
  399. data/src/core/lib/resource_quota/api.h +1 -1
  400. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  401. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  402. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  403. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  404. data/src/core/lib/security/context/security_context.h +8 -1
  405. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  406. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  407. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  408. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  409. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  410. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  411. data/src/core/lib/security/credentials/credentials.h +16 -33
  412. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  413. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  414. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  415. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  416. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  417. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  418. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  419. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  420. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  421. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  422. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  423. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  424. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  425. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  426. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  427. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  428. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  429. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  430. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  431. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  433. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  434. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  435. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  436. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  437. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  438. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  439. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  440. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  441. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  442. data/src/core/lib/security/transport/auth_filters.h +7 -7
  443. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  444. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  445. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  446. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  447. data/src/core/lib/surface/call.cc +1023 -903
  448. data/src/core/lib/surface/call.h +0 -14
  449. data/src/core/lib/surface/channel.cc +4 -3
  450. data/src/core/lib/surface/channel_init.cc +2 -3
  451. data/src/core/lib/surface/channel_init.h +2 -6
  452. data/src/core/lib/surface/init.cc +1 -1
  453. data/src/core/lib/surface/server.cc +3 -14
  454. data/src/core/lib/surface/server.h +1 -2
  455. data/src/core/lib/surface/version.cc +2 -2
  456. data/src/core/lib/transport/byte_stream.cc +2 -0
  457. data/src/core/lib/transport/metadata_batch.h +12 -8
  458. data/src/core/lib/transport/transport.h +20 -5
  459. data/src/core/lib/transport/transport_impl.h +4 -3
  460. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  461. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  462. data/src/core/tsi/ssl_transport_security.cc +75 -38
  463. data/src/core/tsi/ssl_transport_security.h +8 -2
  464. data/src/core/tsi/transport_security_interface.h +2 -0
  465. data/src/ruby/ext/grpc/extconf.rb +1 -1
  466. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  467. data/src/ruby/lib/grpc/grpc.rb +1 -1
  468. data/src/ruby/lib/grpc/version.rb +1 -1
  469. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  470. data/src/ruby/pb/test/client.rb +769 -0
  471. data/src/ruby/pb/test/server.rb +252 -0
  472. data/src/ruby/pb/test/xds_client.rb +415 -0
  473. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  474. data/third_party/upb/upb/decode.c +32 -16
  475. data/third_party/upb/upb/def.c +118 -55
  476. data/third_party/upb/upb/def.h +12 -3
  477. data/third_party/upb/upb/encode.c +14 -8
  478. data/third_party/upb/upb/json_encode.c +776 -0
  479. data/third_party/upb/upb/json_encode.h +62 -0
  480. data/third_party/upb/upb/msg.c +5 -7
  481. data/third_party/upb/upb/msg.h +1 -2
  482. data/third_party/upb/upb/msg_internal.h +49 -36
  483. data/third_party/upb/upb/port_def.inc +8 -0
  484. data/third_party/upb/upb/port_undef.inc +1 -0
  485. data/third_party/upb/upb/table.c +10 -6
  486. data/third_party/upb/upb/table_internal.h +2 -0
  487. data/third_party/upb/upb/upb.h +41 -11
  488. data/third_party/zlib/crc32.c +966 -292
  489. data/third_party/zlib/crc32.h +9441 -436
  490. data/third_party/zlib/deflate.c +78 -30
  491. data/third_party/zlib/deflate.h +12 -15
  492. data/third_party/zlib/gzguts.h +3 -2
  493. data/third_party/zlib/gzlib.c +5 -3
  494. data/third_party/zlib/gzread.c +5 -7
  495. data/third_party/zlib/gzwrite.c +25 -13
  496. data/third_party/zlib/infback.c +2 -1
  497. data/third_party/zlib/inffast.c +14 -14
  498. data/third_party/zlib/inflate.c +39 -8
  499. data/third_party/zlib/inflate.h +3 -2
  500. data/third_party/zlib/inftrees.c +3 -3
  501. data/third_party/zlib/trees.c +27 -48
  502. data/third_party/zlib/zlib.h +123 -100
  503. data/third_party/zlib/zutil.c +2 -2
  504. data/third_party/zlib/zutil.h +12 -9
  505. metadata +66 -45
  506. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  507. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  508. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  509. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  510. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  513. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -30,6 +30,10 @@
30
30
 
31
31
  namespace grpc_core {
32
32
 
33
+ //
34
+ // ExternalCertificateVerifier
35
+ //
36
+
33
37
  bool ExternalCertificateVerifier::Verify(
34
38
  grpc_tls_custom_verification_check_request* request,
35
39
  std::function<void(absl::Status)> callback, absl::Status* sync_status) {
@@ -80,6 +84,10 @@ void ExternalCertificateVerifier::OnVerifyDone(
80
84
  }
81
85
  }
82
86
 
87
+ //
88
+ // HostNameCertificateVerifier
89
+ //
90
+
83
91
  bool HostNameCertificateVerifier::Verify(
84
92
  grpc_tls_custom_verification_check_request* request,
85
93
  std::function<void(absl::Status)>, absl::Status* sync_status) {
@@ -25,6 +25,7 @@
25
25
 
26
26
  #include <grpc/grpc_security.h>
27
27
 
28
+ #include "src/core/lib/gpr/useful.h"
28
29
  #include "src/core/lib/gprpp/ref_counted.h"
29
30
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
31
  #include "src/core/lib/gprpp/thd.h"
@@ -37,8 +38,6 @@
37
38
  struct grpc_tls_certificate_verifier
38
39
  : public grpc_core::RefCounted<grpc_tls_certificate_verifier> {
39
40
  public:
40
- grpc_tls_certificate_verifier() = default;
41
-
42
41
  ~grpc_tls_certificate_verifier() override = default;
43
42
  // Verifies the specific request. It can be processed in sync or async mode.
44
43
  // If the caller want it to be processed asynchronously, return false
@@ -52,6 +51,28 @@ struct grpc_tls_certificate_verifier
52
51
  // Operations that will be performed when a request is cancelled.
53
52
  // This is only needed when in async mode.
54
53
  virtual void Cancel(grpc_tls_custom_verification_check_request* request) = 0;
54
+
55
+ // Compares this grpc_tls_certificate_verifier object with \a other.
56
+ // If this method returns 0, it means that gRPC can treat the two certificate
57
+ // verifiers as effectively the same.
58
+ int Compare(const grpc_tls_certificate_verifier* other) const {
59
+ GPR_ASSERT(other != nullptr);
60
+ int r = grpc_core::QsortCompare(type(), other->type());
61
+ if (r != 0) return r;
62
+ return CompareImpl(other);
63
+ }
64
+
65
+ // The pointer value \a type is used to uniquely identify a verifier
66
+ // implementation for down-casting purposes. Every verifier implementation
67
+ // should use a unique string instance, which should be returned by all
68
+ // instances of that verifier implementation.
69
+ virtual const char* type() const = 0;
70
+
71
+ private:
72
+ // Implementation for `Compare` method intended to be overridden by
73
+ // subclasses. Only invoked if `type()` and `other->type()` point to the same
74
+ // string.
75
+ virtual int CompareImpl(const grpc_tls_certificate_verifier* other) const = 0;
55
76
  };
56
77
 
57
78
  namespace grpc_core {
@@ -78,12 +99,20 @@ class ExternalCertificateVerifier : public grpc_tls_certificate_verifier {
78
99
  external_verifier_->cancel(external_verifier_->user_data, request);
79
100
  }
80
101
 
102
+ const char* type() const override { return "External"; }
103
+
81
104
  private:
82
- grpc_tls_certificate_verifier_external* external_verifier_;
105
+ int CompareImpl(const grpc_tls_certificate_verifier* other) const override {
106
+ const auto* o = static_cast<const ExternalCertificateVerifier*>(other);
107
+ return QsortCompare(external_verifier_, o->external_verifier_);
108
+ }
83
109
 
84
110
  static void OnVerifyDone(grpc_tls_custom_verification_check_request* request,
85
111
  void* callback_arg, grpc_status_code status,
86
112
  const char* error_details);
113
+
114
+ grpc_tls_certificate_verifier_external* external_verifier_;
115
+
87
116
  // Guards members below.
88
117
  Mutex mu_;
89
118
  // stores each check request and its corresponding callback function.
@@ -99,6 +128,16 @@ class HostNameCertificateVerifier : public grpc_tls_certificate_verifier {
99
128
  std::function<void(absl::Status)> callback,
100
129
  absl::Status* sync_status) override;
101
130
  void Cancel(grpc_tls_custom_verification_check_request*) override {}
131
+
132
+ const char* type() const override { return "Hostname"; }
133
+
134
+ private:
135
+ int CompareImpl(
136
+ const grpc_tls_certificate_verifier* /* other */) const override {
137
+ // No differentiating factor between different HostNameCertificateVerifier
138
+ // objects.
139
+ return 0;
140
+ }
102
141
  };
103
142
 
104
143
  } // namespace grpc_core
@@ -1,20 +1,22 @@
1
- /*
2
- *
3
- * Copyright 2018 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ //
3
+ // Copyright 2018 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ // Generated by tools/codegen/core/gen_grpc_tls_credentials_options.py
18
20
 
19
21
  #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_GRPC_TLS_CREDENTIALS_OPTIONS_H
20
22
  #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_GRPC_TLS_CREDENTIALS_OPTIONS_H
@@ -38,103 +40,72 @@ struct grpc_tls_credentials_options
38
40
  : public grpc_core::RefCounted<grpc_tls_credentials_options> {
39
41
  public:
40
42
  ~grpc_tls_credentials_options() override = default;
43
+
41
44
  // Getters for member fields.
42
- grpc_ssl_client_certificate_request_type cert_request_type() const {
43
- return cert_request_type_;
44
- }
45
+ grpc_ssl_client_certificate_request_type cert_request_type() const { return cert_request_type_; }
45
46
  bool verify_server_cert() const { return verify_server_cert_; }
46
47
  grpc_tls_version min_tls_version() const { return min_tls_version_; }
47
48
  grpc_tls_version max_tls_version() const { return max_tls_version_; }
48
- // Returns the verifier set in the options.
49
49
  grpc_tls_certificate_verifier* certificate_verifier() {
50
- return verifier_.get();
50
+ return certificate_verifier_.get();
51
51
  }
52
52
  bool check_call_host() const { return check_call_host_; }
53
- // Returns the distributor from provider_ if it is set, nullptr otherwise.
53
+ // Returns the distributor from certificate_provider_ if it is set, nullptr otherwise.
54
54
  grpc_tls_certificate_distributor* certificate_distributor() {
55
- if (provider_ != nullptr) return provider_->distributor().get();
55
+ if (certificate_provider_ != nullptr) { return certificate_provider_->distributor().get(); }
56
56
  return nullptr;
57
57
  }
58
- bool watch_root_cert() { return watch_root_cert_; }
59
- const std::string& root_cert_name() { return root_cert_name_; }
60
- bool watch_identity_pair() { return watch_identity_pair_; }
61
- const std::string& identity_cert_name() { return identity_cert_name_; }
62
- // Returns the previously set tls session key log file path.
63
- const std::string& tls_session_key_log_file_path() {
64
- return tls_session_key_log_file_path_;
65
- }
66
- const std::string& crl_directory() { return crl_directory_; }
58
+ bool watch_root_cert() const { return watch_root_cert_; }
59
+ const std::string& root_cert_name() const { return root_cert_name_; }
60
+ bool watch_identity_pair() const { return watch_identity_pair_; }
61
+ const std::string& identity_cert_name() const { return identity_cert_name_; }
62
+ const std::string& tls_session_key_log_file_path() const { return tls_session_key_log_file_path_; }
63
+ const std::string& crl_directory() const { return crl_directory_; }
67
64
 
68
65
  // Setters for member fields.
69
- void set_cert_request_type(
70
- const grpc_ssl_client_certificate_request_type type) {
71
- cert_request_type_ = type;
72
- }
73
- void set_verify_server_cert(bool verify_server_cert) {
74
- verify_server_cert_ = verify_server_cert;
75
- }
76
- void set_min_tls_version(grpc_tls_version min_tls_version) {
77
- min_tls_version_ = min_tls_version;
78
- }
79
- void set_max_tls_version(grpc_tls_version max_tls_version) {
80
- max_tls_version_ = max_tls_version;
81
- }
82
- // Sets the verifier in the options.
83
- void set_certificate_verifier(
84
- grpc_core::RefCountedPtr<grpc_tls_certificate_verifier> verifier) {
85
- verifier_ = std::move(verifier);
86
- }
87
- // Sets the verifier in the options.
88
- void set_check_call_host(bool check_call_host) {
89
- check_call_host_ = check_call_host;
90
- }
91
- // Sets the provider in the options.
92
- void set_certificate_provider(
93
- grpc_core::RefCountedPtr<grpc_tls_certificate_provider> provider) {
94
- provider_ = std::move(provider);
95
- }
96
- // If need to watch the updates of root certificates with name
97
- // |root_cert_name|. The default value is false. If used in tls_credentials,
98
- // it should always be set to true unless the root certificates are not
99
- // needed.
100
- void set_watch_root_cert(bool watch) { watch_root_cert_ = watch; }
101
- // Sets the name of root certificates being watched, if |set_watch_root_cert|
102
- // is called. If not set, an empty string will be used as the name.
103
- void set_root_cert_name(std::string root_cert_name) {
104
- root_cert_name_ = std::move(root_cert_name);
105
- }
106
- // If need to watch the updates of identity certificates with name
107
- // |identity_cert_name|.
108
- // The default value is false.
109
- // If used in tls_credentials, it should always be set to true
110
- // unless the identity key-cert pairs are not needed.
111
- void set_watch_identity_pair(bool watch) { watch_identity_pair_ = watch; }
112
- // Sets the name of identity key-cert pairs being watched, if
113
- // |set_watch_identity_pair| is called. If not set, an empty string will
114
- // be used as the name.
115
- void set_identity_cert_name(std::string identity_cert_name) {
116
- identity_cert_name_ = std::move(identity_cert_name);
117
- }
118
- // Sets the tls session key log file path.
119
- void set_tls_session_key_log_file_path(
120
- std::string tls_session_key_log_file_path) {
121
- tls_session_key_log_file_path_ = std::move(tls_session_key_log_file_path);
122
- }
66
+ void set_cert_request_type(grpc_ssl_client_certificate_request_type cert_request_type) { cert_request_type_ = cert_request_type; }
67
+ void set_verify_server_cert(bool verify_server_cert) { verify_server_cert_ = verify_server_cert; }
68
+ void set_min_tls_version(grpc_tls_version min_tls_version) { min_tls_version_ = min_tls_version; }
69
+ void set_max_tls_version(grpc_tls_version max_tls_version) { max_tls_version_ = max_tls_version; }
70
+ void set_certificate_verifier(grpc_core::RefCountedPtr<grpc_tls_certificate_verifier> certificate_verifier) { certificate_verifier_ = std::move(certificate_verifier); }
71
+ void set_check_call_host(bool check_call_host) { check_call_host_ = check_call_host; }
72
+ void set_certificate_provider(grpc_core::RefCountedPtr<grpc_tls_certificate_provider> certificate_provider) { certificate_provider_ = std::move(certificate_provider); }
73
+ // If need to watch the updates of root certificates with name |root_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the root certificates are not needed.
74
+ void set_watch_root_cert(bool watch_root_cert) { watch_root_cert_ = watch_root_cert; }
75
+ // Sets the name of root certificates being watched, if |set_watch_root_cert| is called. If not set, an empty string will be used as the name.
76
+ void set_root_cert_name(std::string root_cert_name) { root_cert_name_ = std::move(root_cert_name); }
77
+ // If need to watch the updates of identity certificates with name |identity_cert_name|. The default value is false. If used in tls_credentials, it should always be set to true unless the identity key-cert pairs are not needed.
78
+ void set_watch_identity_pair(bool watch_identity_pair) { watch_identity_pair_ = watch_identity_pair; }
79
+ // Sets the name of identity key-cert pairs being watched, if |set_watch_identity_pair| is called. If not set, an empty string will be used as the name.
80
+ void set_identity_cert_name(std::string identity_cert_name) { identity_cert_name_ = std::move(identity_cert_name); }
81
+ void set_tls_session_key_log_file_path(std::string tls_session_key_log_file_path) { tls_session_key_log_file_path_ = std::move(tls_session_key_log_file_path); }
82
+ // gRPC will enforce CRLs on all handshakes from all hashed CRL files inside of the crl_directory. If not set, an empty string will be used, which will not enable CRL checking. Only supported for OpenSSL version > 1.1.
83
+ void set_crl_directory(std::string crl_directory) { crl_directory_ = std::move(crl_directory); }
123
84
 
124
- // gRPC will enforce CRLs on all handshakes from all hashed CRL files inside
125
- // of the crl_directory. If not set, an empty string will be used, which will
126
- // not enable CRL checking. Only supported for OpenSSL version > 1.1.
127
- void set_crl_directory(std::string path) { crl_directory_ = std::move(path); }
85
+ bool operator==(const grpc_tls_credentials_options& other) const {
86
+ return cert_request_type_ == other.cert_request_type_ &&
87
+ verify_server_cert_ == other.verify_server_cert_ &&
88
+ min_tls_version_ == other.min_tls_version_ &&
89
+ max_tls_version_ == other.max_tls_version_ &&
90
+ (certificate_verifier_ == other.certificate_verifier_ || (certificate_verifier_ != nullptr && other.certificate_verifier_ != nullptr && certificate_verifier_->Compare(other.certificate_verifier_.get()) == 0)) &&
91
+ check_call_host_ == other.check_call_host_ &&
92
+ (certificate_provider_ == other.certificate_provider_ || (certificate_provider_ != nullptr && other.certificate_provider_ != nullptr && certificate_provider_->Compare(other.certificate_provider_.get()) == 0)) &&
93
+ watch_root_cert_ == other.watch_root_cert_ &&
94
+ root_cert_name_ == other.root_cert_name_ &&
95
+ watch_identity_pair_ == other.watch_identity_pair_ &&
96
+ identity_cert_name_ == other.identity_cert_name_ &&
97
+ tls_session_key_log_file_path_ == other.tls_session_key_log_file_path_ &&
98
+ crl_directory_ == other.crl_directory_;
99
+ }
128
100
 
129
101
  private:
130
- grpc_ssl_client_certificate_request_type cert_request_type_ =
131
- GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE;
102
+ grpc_ssl_client_certificate_request_type cert_request_type_ = GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE;
132
103
  bool verify_server_cert_ = true;
133
104
  grpc_tls_version min_tls_version_ = grpc_tls_version::TLS1_2;
134
105
  grpc_tls_version max_tls_version_ = grpc_tls_version::TLS1_3;
135
- grpc_core::RefCountedPtr<grpc_tls_certificate_verifier> verifier_;
106
+ grpc_core::RefCountedPtr<grpc_tls_certificate_verifier> certificate_verifier_;
136
107
  bool check_call_host_ = true;
137
- grpc_core::RefCountedPtr<grpc_tls_certificate_provider> provider_;
108
+ grpc_core::RefCountedPtr<grpc_tls_certificate_provider> certificate_provider_;
138
109
  bool watch_root_cert_ = false;
139
110
  std::string root_cert_name_;
140
111
  bool watch_identity_pair_ = false;
@@ -31,8 +31,6 @@
31
31
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h"
32
32
  #include "src/core/lib/security/security_connector/tls/tls_security_connector.h"
33
33
 
34
- #define GRPC_CREDENTIALS_TYPE_TLS "Tls"
35
-
36
34
  namespace {
37
35
 
38
36
  bool CredentialOptionSanityCheck(grpc_tls_credentials_options* options,
@@ -70,8 +68,7 @@ bool CredentialOptionSanityCheck(grpc_tls_credentials_options* options,
70
68
 
71
69
  TlsCredentials::TlsCredentials(
72
70
  grpc_core::RefCountedPtr<grpc_tls_credentials_options> options)
73
- : grpc_channel_credentials(GRPC_CREDENTIALS_TYPE_TLS),
74
- options_(std::move(options)) {}
71
+ : options_(std::move(options)) {}
75
72
 
76
73
  TlsCredentials::~TlsCredentials() {}
77
74
 
@@ -109,10 +106,16 @@ TlsCredentials::create_security_connector(
109
106
  return sc;
110
107
  }
111
108
 
109
+ int TlsCredentials::cmp_impl(const grpc_channel_credentials* other) const {
110
+ const TlsCredentials* o = static_cast<const TlsCredentials*>(other);
111
+ if (*options_ == *o->options_) return 0;
112
+ return grpc_core::QsortCompare(
113
+ static_cast<const grpc_channel_credentials*>(this), other);
114
+ }
115
+
112
116
  TlsServerCredentials::TlsServerCredentials(
113
117
  grpc_core::RefCountedPtr<grpc_tls_credentials_options> options)
114
- : grpc_server_credentials(GRPC_CREDENTIALS_TYPE_TLS),
115
- options_(std::move(options)) {}
118
+ : options_(std::move(options)) {}
116
119
 
117
120
  TlsServerCredentials::~TlsServerCredentials() {}
118
121
 
@@ -38,14 +38,12 @@ class TlsCredentials final : public grpc_channel_credentials {
38
38
  const char* target_name, const grpc_channel_args* args,
39
39
  grpc_channel_args** new_args) override;
40
40
 
41
+ const char* type() const override { return "Tls"; }
42
+
41
43
  grpc_tls_credentials_options* options() const { return options_.get(); }
42
44
 
43
45
  private:
44
- int cmp_impl(const grpc_channel_credentials* other) const override {
45
- // TODO(yashykt): Check if we can do something better here
46
- return grpc_core::QsortCompare(
47
- static_cast<const grpc_channel_credentials*>(this), other);
48
- }
46
+ int cmp_impl(const grpc_channel_credentials* other) const override;
49
47
 
50
48
  grpc_core::RefCountedPtr<grpc_tls_credentials_options> options_;
51
49
  };
@@ -59,6 +57,8 @@ class TlsServerCredentials final : public grpc_server_credentials {
59
57
  grpc_core::RefCountedPtr<grpc_server_security_connector>
60
58
  create_security_connector(const grpc_channel_args* /* args */) override;
61
59
 
60
+ const char* type() const override { return "Tls"; }
61
+
62
62
  grpc_tls_credentials_options* options() const { return options_.get(); }
63
63
 
64
64
  private:
@@ -29,8 +29,6 @@
29
29
 
30
30
  namespace grpc_core {
31
31
 
32
- const char kCredentialsTypeXds[] = "Xds";
33
-
34
32
  namespace {
35
33
 
36
34
  bool XdsVerifySubjectAlternativeNames(
@@ -61,44 +59,53 @@ bool XdsVerifySubjectAlternativeNames(
61
59
  return false;
62
60
  }
63
61
 
64
- class XdsCertificateVerifier : public grpc_tls_certificate_verifier {
65
- public:
66
- XdsCertificateVerifier(
67
- RefCountedPtr<XdsCertificateProvider> xds_certificate_provider,
68
- std::string cluster_name)
69
- : xds_certificate_provider_(std::move(xds_certificate_provider)),
70
- cluster_name_(std::move(cluster_name)) {}
71
-
72
- bool Verify(grpc_tls_custom_verification_check_request* request,
73
- std::function<void(absl::Status)>,
74
- absl::Status* sync_status) override {
75
- GPR_ASSERT(request != nullptr);
76
- if (!XdsVerifySubjectAlternativeNames(
77
- request->peer_info.san_names.uri_names,
78
- request->peer_info.san_names.uri_names_size,
79
- xds_certificate_provider_->GetSanMatchers(cluster_name_)) &&
80
- !XdsVerifySubjectAlternativeNames(
81
- request->peer_info.san_names.ip_names,
82
- request->peer_info.san_names.ip_names_size,
83
- xds_certificate_provider_->GetSanMatchers(cluster_name_)) &&
84
- !XdsVerifySubjectAlternativeNames(
85
- request->peer_info.san_names.dns_names,
86
- request->peer_info.san_names.dns_names_size,
87
- xds_certificate_provider_->GetSanMatchers(cluster_name_))) {
88
- *sync_status = absl::Status(
89
- absl::StatusCode::kUnauthenticated,
90
- "SANs from certificate did not match SANs from xDS control plane");
91
- }
92
- return true; /* synchronous check */
62
+ } // namespace
63
+
64
+ //
65
+ // XdsCertificateVerifier
66
+ //
67
+
68
+ XdsCertificateVerifier::XdsCertificateVerifier(
69
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider,
70
+ std::string cluster_name)
71
+ : xds_certificate_provider_(std::move(xds_certificate_provider)),
72
+ cluster_name_(std::move(cluster_name)) {}
73
+
74
+ bool XdsCertificateVerifier::Verify(
75
+ grpc_tls_custom_verification_check_request* request,
76
+ std::function<void(absl::Status)>, absl::Status* sync_status) {
77
+ GPR_ASSERT(request != nullptr);
78
+ if (!XdsVerifySubjectAlternativeNames(
79
+ request->peer_info.san_names.uri_names,
80
+ request->peer_info.san_names.uri_names_size,
81
+ xds_certificate_provider_->GetSanMatchers(cluster_name_)) &&
82
+ !XdsVerifySubjectAlternativeNames(
83
+ request->peer_info.san_names.ip_names,
84
+ request->peer_info.san_names.ip_names_size,
85
+ xds_certificate_provider_->GetSanMatchers(cluster_name_)) &&
86
+ !XdsVerifySubjectAlternativeNames(
87
+ request->peer_info.san_names.dns_names,
88
+ request->peer_info.san_names.dns_names_size,
89
+ xds_certificate_provider_->GetSanMatchers(cluster_name_))) {
90
+ *sync_status = absl::Status(
91
+ absl::StatusCode::kUnauthenticated,
92
+ "SANs from certificate did not match SANs from xDS control plane");
93
93
  }
94
- void Cancel(grpc_tls_custom_verification_check_request*) override {}
94
+ return true; /* synchronous check */
95
+ }
95
96
 
96
- private:
97
- RefCountedPtr<XdsCertificateProvider> xds_certificate_provider_;
98
- std::string cluster_name_;
99
- };
97
+ void XdsCertificateVerifier::Cancel(
98
+ grpc_tls_custom_verification_check_request*) {}
100
99
 
101
- } // namespace
100
+ int XdsCertificateVerifier::CompareImpl(
101
+ const grpc_tls_certificate_verifier* other) const {
102
+ auto* o = static_cast<const XdsCertificateVerifier*>(other);
103
+ int r = QsortCompare(xds_certificate_provider_, o->xds_certificate_provider_);
104
+ if (r != 0) return r;
105
+ return cluster_name_.compare(o->cluster_name_);
106
+ }
107
+
108
+ const char* XdsCertificateVerifier::type() const { return "Xds"; }
102
109
 
103
110
  bool TestOnlyXdsVerifySubjectAlternativeNames(
104
111
  const char* const* subject_alternative_names,
@@ -164,19 +171,6 @@ XdsCredentials::create_security_connector(
164
171
  MakeRefCounted<XdsCertificateVerifier>(xds_certificate_provider,
165
172
  std::move(cluster_name)));
166
173
  tls_credentials_options->set_check_call_host(false);
167
- // TODO(yashkt): Creating a new TlsCreds object each time we create a
168
- // security connector means that the security connector's cmp() method
169
- // returns unequal for each instance, which means that every time an LB
170
- // policy updates, all the subchannels will be recreated. This is
171
- // going to lead to a lot of connection churn. Instead, we should
172
- // either (a) change the TLS security connector's cmp() method to be
173
- // smarter somehow, so that it compares unequal only when the
174
- // tls_credentials_options have changed, or (b) cache the TlsCreds
175
- // objects in the XdsCredentials object so that we can reuse the
176
- // same one when creating new security connectors, swapping out the
177
- // TlsCreds object only when the tls_credentials_options change.
178
- // Option (a) would probably be better, although it may require some
179
- // structural changes to the security connector API.
180
174
  auto tls_credentials =
181
175
  MakeRefCounted<TlsCredentials>(std::move(tls_credentials_options));
182
176
  return tls_credentials->create_security_connector(
@@ -188,6 +182,8 @@ XdsCredentials::create_security_connector(
188
182
  std::move(call_creds), target_name, temp_args.args, new_args);
189
183
  }
190
184
 
185
+ const char* XdsCredentials::Type() { return "Xds"; }
186
+
191
187
  //
192
188
  // XdsServerCredentials
193
189
  //
@@ -224,6 +220,8 @@ XdsServerCredentials::create_security_connector(const grpc_channel_args* args) {
224
220
  return fallback_credentials_->create_security_connector(args);
225
221
  }
226
222
 
223
+ const char* XdsServerCredentials::Type() { return "Xds"; }
224
+
227
225
  } // namespace grpc_core
228
226
 
229
227
  grpc_channel_credentials* grpc_xds_credentials_create(
@@ -23,24 +23,47 @@
23
23
 
24
24
  #include <grpc/grpc_security.h>
25
25
 
26
+ #include "src/core/ext/xds/xds_certificate_provider.h"
26
27
  #include "src/core/lib/matchers/matchers.h"
27
28
  #include "src/core/lib/security/credentials/credentials.h"
29
+ #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h"
28
30
 
29
31
  namespace grpc_core {
30
32
 
31
- extern const char kCredentialsTypeXds[];
33
+ class XdsCertificateVerifier : public grpc_tls_certificate_verifier {
34
+ public:
35
+ XdsCertificateVerifier(
36
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider,
37
+ std::string cluster_name);
38
+
39
+ bool Verify(grpc_tls_custom_verification_check_request* request,
40
+ std::function<void(absl::Status)>,
41
+ absl::Status* sync_status) override;
42
+ void Cancel(grpc_tls_custom_verification_check_request*) override;
43
+
44
+ const char* type() const override;
45
+
46
+ private:
47
+ int CompareImpl(const grpc_tls_certificate_verifier* other) const override;
48
+
49
+ RefCountedPtr<XdsCertificateProvider> xds_certificate_provider_;
50
+ std::string cluster_name_;
51
+ };
32
52
 
33
53
  class XdsCredentials final : public grpc_channel_credentials {
34
54
  public:
35
55
  explicit XdsCredentials(
36
56
  RefCountedPtr<grpc_channel_credentials> fallback_credentials)
37
- : grpc_channel_credentials(kCredentialsTypeXds),
38
- fallback_credentials_(std::move(fallback_credentials)) {}
57
+ : fallback_credentials_(std::move(fallback_credentials)) {}
39
58
 
40
59
  RefCountedPtr<grpc_channel_security_connector> create_security_connector(
41
60
  RefCountedPtr<grpc_call_credentials> call_creds, const char* target_name,
42
61
  const grpc_channel_args* args, grpc_channel_args** new_args) override;
43
62
 
63
+ static const char* Type();
64
+
65
+ const char* type() const override { return Type(); }
66
+
44
67
  private:
45
68
  int cmp_impl(const grpc_channel_credentials* other) const override {
46
69
  auto* o = static_cast<const XdsCredentials*>(other);
@@ -54,12 +77,15 @@ class XdsServerCredentials final : public grpc_server_credentials {
54
77
  public:
55
78
  explicit XdsServerCredentials(
56
79
  RefCountedPtr<grpc_server_credentials> fallback_credentials)
57
- : grpc_server_credentials(kCredentialsTypeXds),
58
- fallback_credentials_(std::move(fallback_credentials)) {}
80
+ : fallback_credentials_(std::move(fallback_credentials)) {}
59
81
 
60
82
  RefCountedPtr<grpc_server_security_connector> create_security_connector(
61
83
  const grpc_channel_args* /* args */) override;
62
84
 
85
+ static const char* Type();
86
+
87
+ const char* type() const override { return Type(); }
88
+
63
89
  private:
64
90
  RefCountedPtr<grpc_server_credentials> fallback_credentials_;
65
91
  };
@@ -152,7 +152,7 @@ class grpc_local_channel_security_connector final
152
152
  grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
153
153
  grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
154
154
  const char* target_name)
155
- : grpc_channel_security_connector(nullptr, std::move(channel_creds),
155
+ : grpc_channel_security_connector({}, std::move(channel_creds),
156
156
  std::move(request_metadata_creds)),
157
157
  target_name_(gpr_strdup(target_name)) {}
158
158
 
@@ -210,7 +210,7 @@ class grpc_local_server_security_connector final
210
210
  public:
211
211
  explicit grpc_local_server_security_connector(
212
212
  grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
213
- : grpc_server_security_connector(nullptr, std::move(server_creds)) {}
213
+ : grpc_server_security_connector({}, std::move(server_creds)) {}
214
214
  ~grpc_local_server_security_connector() override = default;
215
215
 
216
216
  void add_handshakers(
@@ -60,6 +60,10 @@ class grpc_security_connector
60
60
  url_scheme_(url_scheme) {}
61
61
  ~grpc_security_connector() override = default;
62
62
 
63
+ static absl::string_view ChannelArgName() {
64
+ return GRPC_ARG_SECURITY_CONNECTOR;
65
+ }
66
+
63
67
  // Checks the peer. Callee takes ownership of the peer object.
64
68
  // When done, sets *auth_context and invokes on_peer_checked.
65
69
  virtual void check_peer(
@@ -75,6 +79,11 @@ class grpc_security_connector
75
79
  /* Compares two security connectors. */
76
80
  virtual int cmp(const grpc_security_connector* other) const = 0;
77
81
 
82
+ static int ChannelArgsCompare(const grpc_security_connector* a,
83
+ const grpc_security_connector* b) {
84
+ return a->cmp(b);
85
+ }
86
+
78
87
  absl::string_view url_scheme() const { return url_scheme_; }
79
88
 
80
89
  private:
@@ -129,7 +129,8 @@ class grpc_ssl_channel_security_connector final
129
129
  client_handshaker_factory_,
130
130
  overridden_target_name_.empty() ? target_name_.c_str()
131
131
  : overridden_target_name_.c_str(),
132
- &tsi_hs);
132
+ /*network_bio_buf_size=*/0,
133
+ /*ssl_bio_buf_size=*/0, &tsi_hs);
133
134
  if (result != TSI_OK) {
134
135
  gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
135
136
  tsi_result_to_string(result));
@@ -272,7 +273,8 @@ class grpc_ssl_server_security_connector
272
273
  try_fetch_ssl_server_credentials();
273
274
  tsi_handshaker* tsi_hs = nullptr;
274
275
  tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
275
- server_handshaker_factory_, &tsi_hs);
276
+ server_handshaker_factory_, /*network_bio_buf_size=*/0,
277
+ /*ssl_bio_buf_size=*/0, &tsi_hs);
276
278
  if (result != TSI_OK) {
277
279
  gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
278
280
  tsi_result_to_string(result));
@@ -332,7 +332,8 @@ void TlsChannelSecurityConnector::add_handshakers(
332
332
  client_handshaker_factory_,
333
333
  overridden_target_name_.empty() ? target_name_.c_str()
334
334
  : overridden_target_name_.c_str(),
335
- &tsi_hs);
335
+ /*network_bio_buf_size=*/0,
336
+ /*ssl_bio_buf_size=*/0, &tsi_hs);
336
337
  if (result != TSI_OK) {
337
338
  gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
338
339
  tsi_result_to_string(result));
@@ -618,7 +619,8 @@ void TlsServerSecurityConnector::add_handshakers(
618
619
  if (server_handshaker_factory_ != nullptr) {
619
620
  // Instantiate TSI handshaker.
620
621
  tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
621
- server_handshaker_factory_, &tsi_hs);
622
+ server_handshaker_factory_, /*network_bio_buf_size=*/0,
623
+ /*ssl_bio_buf_size=*/0, &tsi_hs);
622
624
  if (result != TSI_OK) {
623
625
  gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
624
626
  tsi_result_to_string(result));