grpc 1.15.0 → 1.30.0

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

Potentially problematic release.


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

Files changed (1780) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8591 -13387
  3. data/etc/roots.pem +455 -130
  4. data/include/grpc/grpc.h +39 -9
  5. data/include/grpc/grpc_posix.h +0 -8
  6. data/include/grpc/grpc_security.h +409 -14
  7. data/include/grpc/grpc_security_constants.h +55 -22
  8. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  9. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  10. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  11. data/include/grpc/impl/codegen/compression_types.h +2 -1
  12. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  13. data/include/grpc/impl/codegen/grpc_types.h +111 -16
  14. data/include/grpc/impl/codegen/port_platform.h +171 -9
  15. data/include/grpc/impl/codegen/slice.h +2 -22
  16. data/include/grpc/impl/codegen/status.h +2 -1
  17. data/include/grpc/impl/codegen/sync.h +5 -3
  18. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  19. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  20. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  21. data/include/grpc/module.modulemap +25 -37
  22. data/include/grpc/slice.h +3 -3
  23. data/include/grpc/support/alloc.h +0 -16
  24. data/include/grpc/support/sync_abseil.h +26 -0
  25. data/src/core/ext/filters/client_channel/backend_metric.cc +81 -0
  26. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  27. data/src/core/ext/filters/client_channel/backup_poller.cc +26 -19
  28. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  29. data/src/core/ext/filters/client_channel/channel_connectivity.cc +21 -5
  30. data/src/core/ext/filters/client_channel/client_channel.cc +2888 -2206
  31. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  32. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +54 -72
  33. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -26
  34. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  35. data/src/core/ext/filters/client_channel/client_channel_factory.h +12 -39
  36. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +13 -14
  37. data/src/core/ext/filters/client_channel/connector.h +43 -37
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  39. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  40. data/src/core/ext/filters/client_channel/health/health_check_client.cc +606 -0
  41. data/src/core/ext/filters/client_channel/health/health_check_client.h +175 -0
  42. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +177 -158
  43. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  44. data/src/core/ext/filters/client_channel/http_proxy.cc +125 -121
  45. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +105 -26
  47. data/src/core/ext/filters/client_channel/lb_policy.h +352 -152
  48. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +64 -47
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1010 -1155
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +12 -3
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +53 -40
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +10 -5
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +19 -16
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +43 -59
  63. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +235 -384
  64. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  65. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +174 -409
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +157 -285
  67. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +417 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  70. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  71. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +32 -0
  72. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  73. data/src/core/ext/filters/client_channel/lb_policy_factory.h +7 -91
  74. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +93 -8
  75. data/src/core/ext/filters/client_channel/lb_policy_registry.h +13 -2
  76. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  77. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +57 -0
  78. data/src/core/ext/filters/client_channel/parse_address.cc +76 -30
  79. data/src/core/ext/filters/client_channel/parse_address.h +4 -1
  80. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  81. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  82. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  83. data/src/core/ext/filters/client_channel/resolver.cc +55 -5
  84. data/src/core/ext/filters/client_channel/resolver.h +61 -61
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +251 -226
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +200 -36
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -20
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +177 -0
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +491 -131
  91. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +434 -233
  92. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -12
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +15 -7
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +38 -0
  95. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +7 -2
  96. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  97. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
  98. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +92 -131
  99. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +220 -134
  100. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +27 -17
  101. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +73 -99
  102. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +184 -0
  103. data/src/core/ext/filters/client_channel/resolver_factory.h +13 -11
  104. data/src/core/ext/filters/client_channel/resolver_registry.cc +33 -14
  105. data/src/core/ext/filters/client_channel/resolver_registry.h +19 -13
  106. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +443 -0
  107. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +127 -0
  108. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +348 -0
  109. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +123 -0
  110. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  111. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  112. data/src/core/ext/filters/client_channel/server_address.cc +48 -0
  113. data/src/core/ext/filters/client_channel/server_address.h +90 -0
  114. data/src/core/ext/filters/client_channel/service_config.cc +221 -0
  115. data/src/core/ext/filters/client_channel/service_config.h +123 -0
  116. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  117. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  118. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  119. data/src/core/ext/filters/client_channel/subchannel.cc +903 -634
  120. data/src/core/ext/filters/client_channel/subchannel.h +364 -131
  121. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  122. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  123. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +91 -0
  124. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1906 -0
  125. data/src/core/ext/filters/client_channel/xds/xds_api.h +280 -0
  126. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +342 -0
  127. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +88 -0
  128. data/src/core/ext/filters/client_channel/xds/xds_channel.h +46 -0
  129. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  130. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +106 -0
  131. data/src/core/ext/filters/client_channel/xds/xds_client.cc +2367 -0
  132. data/src/core/ext/filters/client_channel/xds/xds_client.h +309 -0
  133. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +115 -0
  134. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +211 -0
  135. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  136. data/src/core/ext/filters/deadline/deadline_filter.cc +49 -52
  137. data/src/core/ext/filters/deadline/deadline_filter.h +11 -14
  138. data/src/core/ext/filters/http/client/http_client_filter.cc +122 -85
  139. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  140. data/src/core/ext/filters/http/client_authority_filter.cc +26 -24
  141. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  142. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +342 -295
  143. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  144. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  145. data/src/core/ext/filters/http/server/http_server_filter.cc +156 -54
  146. data/src/core/ext/filters/max_age/max_age_filter.cc +76 -63
  147. data/src/core/ext/filters/message_size/message_size_filter.cc +218 -119
  148. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  149. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  150. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  151. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +141 -164
  152. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +31 -1
  153. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +36 -34
  154. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  155. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +133 -138
  156. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +128 -30
  157. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  158. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +8 -11
  159. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  160. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  161. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +11 -12
  162. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  163. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  164. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +911 -716
  165. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -1
  166. data/src/core/ext/transport/chttp2/transport/context_list.cc +69 -0
  167. data/src/core/ext/transport/chttp2/transport/context_list.h +53 -0
  168. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -5
  169. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -30
  170. data/src/core/ext/transport/chttp2/transport/frame_data.cc +47 -54
  171. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -13
  172. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +9 -8
  173. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -5
  174. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -5
  175. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -4
  176. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -7
  177. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +11 -4
  178. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -7
  179. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -4
  180. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  181. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -4
  182. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +548 -351
  183. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  184. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -120
  185. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -6
  186. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +47 -169
  187. data/src/core/ext/transport/chttp2/transport/hpack_table.h +70 -17
  188. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  189. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  190. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +10 -17
  191. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +19 -10
  192. data/src/core/ext/transport/chttp2/transport/internal.h +226 -161
  193. data/src/core/ext/transport/chttp2/transport/parsing.cc +166 -110
  194. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  195. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  196. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  197. data/src/core/ext/transport/chttp2/transport/writing.cc +95 -35
  198. data/src/core/ext/transport/inproc/inproc_transport.cc +406 -388
  199. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  200. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  201. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  202. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  203. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +21 -0
  204. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +35 -0
  205. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  206. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  207. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  208. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  209. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  210. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  211. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +28 -0
  212. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +53 -0
  213. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  214. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  215. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +74 -0
  216. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +218 -0
  217. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +35 -0
  218. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
  219. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +55 -0
  220. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +305 -0
  221. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +112 -0
  222. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +328 -0
  223. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  224. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  225. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +313 -0
  226. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +897 -0
  227. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +96 -0
  228. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +322 -0
  229. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  230. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  231. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +197 -0
  232. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +642 -0
  233. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +172 -0
  234. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +673 -0
  235. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +36 -0
  236. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
  237. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +152 -0
  238. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +518 -0
  239. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  240. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  241. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
  243. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +31 -0
  244. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +53 -0
  245. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  246. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  247. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +18 -0
  248. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +33 -0
  249. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  250. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  251. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +112 -0
  252. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -0
  253. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  254. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  255. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  256. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  257. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  258. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  259. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  260. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  261. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  262. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  263. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  264. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  265. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  266. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  267. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  268. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  269. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  270. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  271. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  272. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  273. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  274. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  275. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  276. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  277. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  278. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  279. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  280. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  281. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  282. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +24 -0
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
  285. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +54 -0
  286. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +134 -0
  287. data/src/core/ext/upb-generated/envoy/type/http.upb.c +17 -0
  288. data/src/core/ext/upb-generated/envoy/type/http.upb.h +36 -0
  289. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  290. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  291. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  292. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  293. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  294. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  295. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +39 -0
  296. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
  297. data/src/core/ext/upb-generated/envoy/type/range.upb.c +50 -0
  298. data/src/core/ext/upb-generated/envoy/type/range.upb.h +112 -0
  299. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  300. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  301. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  302. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  303. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  304. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
  305. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  306. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
  307. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  308. data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
  309. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  310. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
  311. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  312. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1696 -0
  313. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  314. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
  315. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  316. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
  317. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  318. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
  319. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  320. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
  321. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  322. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
  323. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  324. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  328. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +693 -0
  329. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  330. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
  331. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  332. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
  333. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  334. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +393 -0
  335. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  337. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  338. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  341. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  342. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
  343. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  344. data/src/core/ext/upb-generated/validate/validate.upb.h +2073 -0
  345. data/src/core/lib/avl/avl.cc +1 -1
  346. data/src/core/lib/channel/channel_args.cc +54 -115
  347. data/src/core/lib/channel/channel_args.h +44 -40
  348. data/src/core/lib/channel/channel_stack.cc +6 -5
  349. data/src/core/lib/channel/channel_stack.h +52 -28
  350. data/src/core/lib/channel/channel_stack_builder.cc +14 -2
  351. data/src/core/lib/channel/channel_stack_builder.h +8 -0
  352. data/src/core/lib/channel/channel_trace.cc +75 -85
  353. data/src/core/lib/channel/channel_trace.h +37 -32
  354. data/src/core/lib/channel/channelz.cc +496 -106
  355. data/src/core/lib/channel/channelz.h +262 -61
  356. data/src/core/lib/channel/channelz_registry.cc +191 -69
  357. data/src/core/lib/channel/channelz_registry.h +30 -53
  358. data/src/core/lib/channel/connected_channel.cc +30 -27
  359. data/src/core/lib/channel/context.h +6 -6
  360. data/src/core/lib/channel/handshaker.cc +150 -218
  361. data/src/core/lib/channel/handshaker.h +111 -102
  362. data/src/core/lib/channel/handshaker_factory.h +9 -17
  363. data/src/core/lib/channel/handshaker_registry.cc +57 -49
  364. data/src/core/lib/channel/handshaker_registry.h +21 -15
  365. data/src/core/lib/channel/status_util.cc +2 -3
  366. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  367. data/src/core/lib/compression/compression.cc +17 -12
  368. data/src/core/lib/compression/compression_args.cc +134 -0
  369. data/src/core/lib/compression/compression_args.h +56 -0
  370. data/src/core/lib/compression/compression_internal.cc +17 -13
  371. data/src/core/lib/compression/compression_internal.h +9 -1
  372. data/src/core/lib/compression/message_compress.cc +8 -3
  373. data/src/core/lib/compression/stream_compression.cc +3 -2
  374. data/src/core/lib/compression/stream_compression.h +2 -2
  375. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  376. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  377. data/src/core/lib/debug/stats.cc +21 -27
  378. data/src/core/lib/debug/stats.h +3 -1
  379. data/src/core/lib/debug/trace.cc +16 -7
  380. data/src/core/lib/debug/trace.h +20 -4
  381. data/src/core/lib/gpr/alloc.cc +4 -29
  382. data/src/core/lib/gpr/arena.h +13 -7
  383. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  384. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  385. data/src/core/lib/gpr/env.h +3 -6
  386. data/src/core/lib/gpr/env_linux.cc +15 -21
  387. data/src/core/lib/gpr/env_posix.cc +5 -5
  388. data/src/core/lib/gpr/env_windows.cc +7 -5
  389. data/src/core/lib/gpr/log.cc +9 -13
  390. data/src/core/lib/gpr/log_linux.cc +2 -2
  391. data/src/core/lib/gpr/log_posix.cc +4 -3
  392. data/src/core/lib/gpr/spinlock.h +2 -3
  393. data/src/core/lib/gpr/string.cc +29 -35
  394. data/src/core/lib/gpr/string.h +11 -19
  395. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  396. data/src/core/lib/gpr/sync_posix.cc +78 -9
  397. data/src/core/lib/gpr/sync_windows.cc +4 -2
  398. data/src/core/lib/gpr/time.cc +12 -0
  399. data/src/core/lib/gpr/time_posix.cc +22 -3
  400. data/src/core/lib/gpr/time_precise.cc +123 -36
  401. data/src/core/lib/gpr/time_precise.h +37 -0
  402. data/src/core/lib/gprpp/arena.cc +103 -0
  403. data/src/core/lib/gprpp/arena.h +120 -0
  404. data/src/core/lib/gprpp/atomic.h +79 -5
  405. data/src/core/lib/gprpp/debug_location.h +3 -2
  406. data/src/core/lib/gprpp/fork.cc +30 -56
  407. data/src/core/lib/gprpp/fork.h +18 -3
  408. data/src/core/lib/gprpp/global_config.h +96 -0
  409. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  410. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  411. data/src/core/lib/gprpp/global_config_env.h +131 -0
  412. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  413. data/src/core/lib/gprpp/host_port.cc +112 -0
  414. data/src/core/lib/gprpp/host_port.h +56 -0
  415. data/src/core/lib/gprpp/map.h +53 -0
  416. data/src/core/lib/gprpp/memory.h +11 -83
  417. data/src/core/lib/gprpp/mpscq.cc +108 -0
  418. data/src/core/lib/gprpp/mpscq.h +98 -0
  419. data/src/core/lib/gprpp/orphanable.h +27 -95
  420. data/src/core/lib/gprpp/ref_counted.h +228 -83
  421. data/src/core/lib/gprpp/ref_counted_ptr.h +39 -16
  422. data/src/core/lib/gprpp/sync.h +135 -0
  423. data/src/core/lib/gprpp/thd.h +54 -12
  424. data/src/core/lib/gprpp/thd_posix.cc +57 -13
  425. data/src/core/lib/gprpp/thd_windows.cc +54 -33
  426. data/src/core/lib/http/format_request.cc +46 -65
  427. data/src/core/lib/http/httpcli.cc +11 -11
  428. data/src/core/lib/http/httpcli.h +2 -3
  429. data/src/core/lib/http/httpcli_security_connector.cc +121 -107
  430. data/src/core/lib/http/parser.cc +4 -3
  431. data/src/core/lib/http/parser.h +9 -9
  432. data/src/core/lib/iomgr/buffer_list.cc +308 -0
  433. data/src/core/lib/iomgr/buffer_list.h +165 -0
  434. data/src/core/lib/iomgr/call_combiner.cc +113 -69
  435. data/src/core/lib/iomgr/call_combiner.h +96 -74
  436. data/src/core/lib/iomgr/cfstream_handle.cc +209 -0
  437. data/src/core/lib/iomgr/cfstream_handle.h +90 -0
  438. data/src/core/lib/iomgr/closure.h +44 -141
  439. data/src/core/lib/iomgr/combiner.cc +50 -86
  440. data/src/core/lib/iomgr/combiner.h +31 -9
  441. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  442. data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
  443. data/src/core/lib/iomgr/endpoint.cc +8 -4
  444. data/src/core/lib/iomgr/endpoint.h +12 -4
  445. data/src/core/lib/iomgr/endpoint_cfstream.cc +376 -0
  446. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  447. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  448. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  449. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  450. data/src/core/lib/iomgr/error.cc +71 -64
  451. data/src/core/lib/iomgr/error.h +74 -10
  452. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  453. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  454. data/src/core/lib/iomgr/error_internal.h +1 -3
  455. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  456. data/src/core/lib/iomgr/ev_apple.h +43 -0
  457. data/src/core/lib/iomgr/ev_epoll1_linux.cc +99 -69
  458. data/src/core/lib/iomgr/ev_epollex_linux.cc +238 -259
  459. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -504
  460. data/src/core/lib/iomgr/ev_posix.cc +54 -31
  461. data/src/core/lib/iomgr/ev_posix.h +29 -3
  462. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  463. data/src/core/lib/iomgr/exec_ctx.cc +79 -8
  464. data/src/core/lib/iomgr/exec_ctx.h +163 -21
  465. data/src/core/lib/iomgr/executor.cc +137 -101
  466. data/src/core/lib/iomgr/executor.h +54 -48
  467. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  468. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  469. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  470. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  471. data/src/core/lib/iomgr/fork_posix.cc +15 -8
  472. data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
  473. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  474. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
  475. data/src/core/lib/iomgr/internal_errqueue.cc +67 -0
  476. data/src/core/lib/iomgr/internal_errqueue.h +191 -0
  477. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  478. data/src/core/lib/iomgr/iomgr.cc +27 -13
  479. data/src/core/lib/iomgr/iomgr.h +19 -0
  480. data/src/core/lib/iomgr/iomgr_custom.cc +18 -2
  481. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  482. data/src/core/lib/iomgr/iomgr_internal.cc +14 -0
  483. data/src/core/lib/iomgr/iomgr_internal.h +16 -0
  484. data/src/core/lib/iomgr/iomgr_posix.cc +23 -1
  485. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +171 -0
  486. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  487. data/src/core/lib/iomgr/iomgr_windows.cc +20 -1
  488. data/src/core/lib/iomgr/load_file.cc +1 -0
  489. data/src/core/lib/iomgr/lockfree_event.cc +16 -15
  490. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  491. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  492. data/src/core/lib/iomgr/polling_entity.h +4 -4
  493. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  494. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  495. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  496. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  497. data/src/core/lib/iomgr/port.h +49 -2
  498. data/src/core/lib/iomgr/python_util.h +46 -0
  499. data/src/core/lib/iomgr/resolve_address.h +5 -7
  500. data/src/core/lib/iomgr/resolve_address_custom.cc +36 -50
  501. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  502. data/src/core/lib/iomgr/resolve_address_posix.cc +22 -25
  503. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -26
  504. data/src/core/lib/iomgr/resource_quota.cc +175 -110
  505. data/src/core/lib/iomgr/resource_quota.h +30 -11
  506. data/src/core/lib/iomgr/sockaddr_utils.cc +26 -31
  507. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  508. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  509. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  510. data/src/core/lib/iomgr/socket_utils_common_posix.cc +145 -27
  511. data/src/core/lib/iomgr/socket_utils_posix.h +26 -0
  512. data/src/core/lib/iomgr/socket_windows.cc +21 -2
  513. data/src/core/lib/iomgr/socket_windows.h +9 -1
  514. data/src/core/lib/iomgr/tcp_client_cfstream.cc +215 -0
  515. data/src/core/lib/iomgr/tcp_client_custom.cc +19 -7
  516. data/src/core/lib/iomgr/tcp_client_posix.cc +40 -38
  517. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  518. data/src/core/lib/iomgr/tcp_client_windows.cc +11 -10
  519. data/src/core/lib/iomgr/tcp_custom.cc +37 -32
  520. data/src/core/lib/iomgr/tcp_custom.h +3 -0
  521. data/src/core/lib/iomgr/tcp_posix.cc +1196 -168
  522. data/src/core/lib/iomgr/tcp_posix.h +3 -0
  523. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  524. data/src/core/lib/iomgr/tcp_server.h +21 -0
  525. data/src/core/lib/iomgr/tcp_server_custom.cc +43 -30
  526. data/src/core/lib/iomgr/tcp_server_posix.cc +97 -21
  527. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  528. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -16
  529. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  530. data/src/core/lib/iomgr/tcp_server_windows.cc +19 -15
  531. data/src/core/lib/iomgr/tcp_uv.cc +8 -9
  532. data/src/core/lib/iomgr/tcp_windows.cc +110 -48
  533. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  534. data/src/core/lib/iomgr/timer.h +2 -1
  535. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  536. data/src/core/lib/iomgr/timer_generic.cc +42 -40
  537. data/src/core/lib/iomgr/timer_generic.h +39 -0
  538. data/src/core/lib/iomgr/timer_heap.cc +2 -2
  539. data/src/core/lib/iomgr/timer_heap.h +5 -6
  540. data/src/core/lib/iomgr/timer_manager.cc +34 -16
  541. data/src/core/lib/iomgr/timer_manager.h +4 -2
  542. data/src/core/lib/iomgr/udp_server.cc +31 -30
  543. data/src/core/lib/iomgr/udp_server.h +6 -12
  544. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -4
  545. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  546. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  547. data/src/core/lib/iomgr/work_serializer.h +65 -0
  548. data/src/core/lib/json/json.h +209 -68
  549. data/src/core/lib/json/json_reader.cc +511 -319
  550. data/src/core/lib/json/json_writer.cc +202 -110
  551. data/src/core/lib/profiling/basic_timers.cc +12 -6
  552. data/src/core/lib/security/context/security_context.cc +92 -119
  553. data/src/core/lib/security/context/security_context.h +79 -48
  554. data/src/core/lib/security/credentials/alts/alts_credentials.cc +39 -48
  555. data/src/core/lib/security/credentials/alts/alts_credentials.h +37 -10
  556. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  557. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  558. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  559. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +2 -1
  560. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +3 -2
  561. data/src/core/lib/security/credentials/composite/composite_credentials.cc +119 -159
  562. data/src/core/lib/security/credentials/composite/composite_credentials.h +71 -24
  563. data/src/core/lib/security/credentials/credentials.cc +18 -142
  564. data/src/core/lib/security/credentials/credentials.h +141 -105
  565. data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -72
  566. data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -5
  567. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +186 -99
  568. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +32 -6
  569. data/src/core/lib/security/credentials/iam/iam_credentials.cc +33 -39
  570. data/src/core/lib/security/credentials/iam/iam_credentials.h +22 -4
  571. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  572. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  573. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +70 -88
  574. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -10
  575. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +159 -170
  576. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -5
  577. data/src/core/lib/security/credentials/local/local_credentials.cc +21 -34
  578. data/src/core/lib/security/credentials/local/local_credentials.h +32 -11
  579. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +438 -203
  580. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +98 -33
  581. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +89 -91
  582. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +43 -17
  583. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +84 -83
  584. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +60 -15
  585. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +245 -0
  586. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +313 -0
  587. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  588. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  589. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +301 -0
  590. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
  591. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +324 -0
  592. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +45 -0
  593. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  594. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +15 -9
  595. data/src/core/lib/security/security_connector/local/local_security_connector.cc +281 -0
  596. data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
  597. data/src/core/lib/security/security_connector/security_connector.cc +40 -1158
  598. data/src/core/lib/security/security_connector/security_connector.h +100 -209
  599. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +439 -0
  600. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
  601. data/src/core/lib/security/security_connector/ssl_utils.cc +563 -0
  602. data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
  603. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  604. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  605. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  607. data/src/core/lib/security/transport/auth_filters.h +5 -2
  608. data/src/core/lib/security/transport/client_auth_filter.cc +164 -116
  609. data/src/core/lib/security/transport/secure_endpoint.cc +70 -53
  610. data/src/core/lib/security/transport/security_handshaker.cc +340 -297
  611. data/src/core/lib/security/transport/security_handshaker.h +14 -3
  612. data/src/core/lib/security/transport/server_auth_filter.cc +115 -55
  613. data/src/core/lib/security/transport/target_authority_table.h +1 -1
  614. data/src/core/lib/security/util/json_util.cc +34 -13
  615. data/src/core/lib/security/util/json_util.h +5 -3
  616. data/src/core/lib/slice/b64.cc +3 -4
  617. data/src/core/lib/slice/b64.h +3 -4
  618. data/src/core/lib/slice/percent_encoding.cc +3 -3
  619. data/src/core/lib/slice/percent_encoding.h +3 -3
  620. data/src/core/lib/slice/slice.cc +219 -153
  621. data/src/core/lib/slice/slice_buffer.cc +60 -26
  622. data/src/core/lib/slice/slice_hash_table.h +9 -15
  623. data/src/core/lib/slice/slice_intern.cc +186 -143
  624. data/src/core/lib/slice/slice_internal.h +318 -3
  625. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  626. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  627. data/src/core/lib/slice/slice_utils.h +200 -0
  628. data/src/core/lib/slice/slice_weak_hash_table.h +10 -17
  629. data/src/core/lib/surface/api_trace.h +1 -1
  630. data/src/core/lib/surface/byte_buffer_reader.cc +15 -43
  631. data/src/core/lib/surface/call.cc +419 -438
  632. data/src/core/lib/surface/call.h +14 -5
  633. data/src/core/lib/surface/call_details.cc +0 -1
  634. data/src/core/lib/surface/call_log_batch.cc +51 -60
  635. data/src/core/lib/surface/channel.cc +205 -144
  636. data/src/core/lib/surface/channel.h +85 -14
  637. data/src/core/lib/surface/channel_init.h +5 -0
  638. data/src/core/lib/surface/channel_ping.cc +3 -4
  639. data/src/core/lib/surface/completion_queue.cc +322 -281
  640. data/src/core/lib/surface/completion_queue.h +7 -21
  641. data/src/core/lib/surface/completion_queue_factory.cc +4 -4
  642. data/src/core/lib/surface/event_string.cc +18 -25
  643. data/src/core/lib/surface/event_string.h +3 -1
  644. data/src/core/lib/surface/init.cc +86 -31
  645. data/src/core/lib/surface/init.h +1 -0
  646. data/src/core/lib/surface/init_secure.cc +4 -4
  647. data/src/core/lib/surface/lame_client.cc +46 -35
  648. data/src/core/lib/surface/server.cc +815 -476
  649. data/src/core/lib/surface/server.h +50 -9
  650. data/src/core/lib/surface/validate_metadata.cc +18 -8
  651. data/src/core/lib/surface/validate_metadata.h +13 -2
  652. data/src/core/lib/surface/version.cc +2 -2
  653. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  654. data/src/core/lib/transport/bdp_estimator.h +2 -2
  655. data/src/core/lib/transport/byte_stream.cc +5 -7
  656. data/src/core/lib/transport/byte_stream.h +13 -12
  657. data/src/core/lib/transport/connectivity_state.cc +114 -129
  658. data/src/core/lib/transport/connectivity_state.h +102 -58
  659. data/src/core/lib/transport/error_utils.cc +25 -2
  660. data/src/core/lib/transport/metadata.cc +428 -288
  661. data/src/core/lib/transport/metadata.h +307 -26
  662. data/src/core/lib/transport/metadata_batch.cc +81 -18
  663. data/src/core/lib/transport/metadata_batch.h +47 -6
  664. data/src/core/lib/transport/static_metadata.cc +1150 -521
  665. data/src/core/lib/transport/static_metadata.h +311 -317
  666. data/src/core/lib/transport/status_conversion.cc +7 -15
  667. data/src/core/lib/transport/status_metadata.cc +11 -4
  668. data/src/core/lib/transport/status_metadata.h +18 -0
  669. data/src/core/lib/transport/timeout_encoding.cc +8 -1
  670. data/src/core/lib/transport/timeout_encoding.h +4 -3
  671. data/src/core/lib/transport/transport.cc +49 -80
  672. data/src/core/lib/transport/transport.h +132 -54
  673. data/src/core/lib/transport/transport_impl.h +1 -1
  674. data/src/core/lib/transport/transport_op_string.cc +67 -105
  675. data/src/core/lib/uri/uri_parser.cc +314 -0
  676. data/src/core/lib/uri/uri_parser.h +49 -0
  677. data/src/core/plugin_registry/grpc_plugin_registry.cc +32 -4
  678. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  679. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  680. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +715 -144
  681. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +49 -35
  682. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
  683. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
  684. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +373 -217
  685. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +45 -24
  686. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +43 -10
  687. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +13 -7
  688. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  689. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +75 -48
  690. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +35 -27
  691. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +2 -2
  692. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  693. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +13 -3
  694. data/src/core/tsi/fake_transport_security.cc +26 -25
  695. data/src/core/tsi/fake_transport_security.h +2 -0
  696. data/src/core/tsi/local_transport_security.cc +8 -6
  697. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  698. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  699. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +14 -11
  700. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  701. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  702. data/src/core/tsi/ssl_transport_security.cc +289 -125
  703. data/src/core/tsi/ssl_transport_security.h +52 -13
  704. data/src/core/tsi/ssl_types.h +0 -2
  705. data/src/core/tsi/transport_security.cc +31 -1
  706. data/src/core/tsi/transport_security.h +8 -10
  707. data/src/core/tsi/transport_security_grpc.cc +7 -0
  708. data/src/core/tsi/transport_security_grpc.h +8 -3
  709. data/src/core/tsi/transport_security_interface.h +15 -3
  710. data/src/ruby/bin/math_pb.rb +23 -21
  711. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  712. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  713. data/src/ruby/ext/grpc/extconf.rb +18 -4
  714. data/src/ruby/ext/grpc/rb_call.c +11 -2
  715. data/src/ruby/ext/grpc/rb_call_credentials.c +12 -6
  716. data/src/ruby/ext/grpc/rb_channel.c +18 -11
  717. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  718. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  719. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  720. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  721. data/src/ruby/ext/grpc/rb_grpc.c +48 -60
  722. data/src/ruby/ext/grpc/rb_grpc.h +5 -1
  723. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -6
  724. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +67 -13
  725. data/src/ruby/ext/grpc/rb_server.c +10 -4
  726. data/src/ruby/lib/grpc.rb +2 -0
  727. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  728. data/src/ruby/lib/grpc/errors.rb +122 -46
  729. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  730. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  731. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  732. data/src/ruby/lib/grpc/generic/rpc_desc.rb +3 -3
  733. data/src/ruby/lib/grpc/generic/rpc_server.rb +64 -4
  734. data/src/ruby/lib/grpc/generic/service.rb +6 -5
  735. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  736. data/src/ruby/lib/grpc/grpc.rb +1 -1
  737. data/src/ruby/lib/grpc/structs.rb +15 -0
  738. data/src/ruby/lib/grpc/version.rb +1 -1
  739. data/src/ruby/pb/README.md +1 -1
  740. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  741. data/src/ruby/pb/grpc/health/checker.rb +2 -3
  742. data/src/ruby/pb/grpc/health/v1/health_pb.rb +16 -13
  743. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  744. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +4 -2
  745. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +92 -69
  746. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  747. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  748. data/src/ruby/spec/channel_spec.rb +44 -0
  749. data/src/ruby/spec/client_auth_spec.rb +5 -5
  750. data/src/ruby/spec/debug_message_spec.rb +134 -0
  751. data/src/ruby/spec/errors_spec.rb +142 -0
  752. data/src/ruby/spec/generic/client_stub_spec.rb +13 -9
  753. data/src/ruby/spec/generic/rpc_server_spec.rb +25 -3
  754. data/src/ruby/spec/generic/service_spec.rb +2 -0
  755. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  756. data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
  757. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  758. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +39 -0
  759. data/src/ruby/spec/pb/codegen/package_option_spec.rb +78 -0
  760. data/src/ruby/spec/support/services.rb +29 -22
  761. data/src/ruby/spec/testdata/ca.pem +18 -13
  762. data/src/ruby/spec/testdata/client.key +26 -14
  763. data/src/ruby/spec/testdata/client.pem +18 -12
  764. data/src/ruby/spec/testdata/server1.key +26 -14
  765. data/src/ruby/spec/testdata/server1.pem +20 -14
  766. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  767. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  768. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  769. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  770. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  771. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  772. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  773. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  774. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  775. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  776. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  777. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  778. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  779. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  780. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  781. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  782. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  783. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  784. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  785. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  786. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  787. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  788. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  789. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  790. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  791. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  792. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  793. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  794. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  795. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  796. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  797. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  798. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  799. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  800. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  801. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  802. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  803. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  804. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  805. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  806. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  807. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  808. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  809. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  810. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  811. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  812. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  813. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  814. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  815. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  816. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  817. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  818. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  819. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  820. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  821. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  822. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  823. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  824. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  825. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  826. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  827. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  828. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  829. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  830. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  831. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  832. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  833. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  834. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  835. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  836. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  837. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  838. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  839. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  840. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  841. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  861. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  862. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  863. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  864. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  865. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  866. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  867. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  868. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  869. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  870. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  871. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  872. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  873. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  874. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  875. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  876. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  877. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  878. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  879. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  880. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  881. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  882. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  883. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  884. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  885. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  886. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  887. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  888. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  889. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  890. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  891. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  892. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  893. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  894. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  895. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  896. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  897. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  898. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  899. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  900. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  901. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  902. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  903. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  904. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  905. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  906. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  907. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  908. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  909. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  910. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  911. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  912. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  913. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  914. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  915. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  916. data/third_party/boringssl-with-bazel/err_data.c +1439 -0
  917. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bitstr.c +0 -0
  918. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  919. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  920. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  921. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  922. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  923. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  924. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  925. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  926. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  927. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  928. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  929. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  930. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  931. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_type.c +0 -0
  932. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  933. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  934. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  935. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  936. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  937. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn_pack.c +0 -0
  938. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_enum.c +0 -0
  939. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_int.c +0 -0
  940. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_string.c +0 -0
  941. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  942. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  943. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  944. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  945. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  946. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  947. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  948. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  949. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  950. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  954. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  955. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  956. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  957. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  960. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  961. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  962. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  963. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  966. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  967. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  969. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  970. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  975. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  980. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +491 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  984. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  985. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  986. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  987. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  989. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  993. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  994. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  997. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1001. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1002. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1003. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1005. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1011. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1012. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1013. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +388 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1019. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1020. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1021. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1022. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1025. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1027. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1029. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1030. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1032. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1033. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1036. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
  1039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1040. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1041. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1043. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1051. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
  1053. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1062. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1069. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1070. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1073. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1077. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1085. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1087. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1095. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1096. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1097. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1103. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1104. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +654 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1122. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1126. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1127. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1128. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1129. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1136. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1141. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1143. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1144. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1145. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +131 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1305 -0
  1152. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1156. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1159. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1160. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1162. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1163. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1164. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1166. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1170. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1172. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  1177. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1178. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1179. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1180. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/algorithm.c +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1185. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1186. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1187. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1192. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1193. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1194. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509.c +0 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1200. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1202. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
  1206. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1207. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +210 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1212. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1216. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1217. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_crl.c +0 -0
  1218. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1219. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1220. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pubkey.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_sig.c +0 -0
  1225. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1226. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +334 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +56 -0
  1231. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1232. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1234. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1239. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1241. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1242. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1245. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1247. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1248. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1251. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1252. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1253. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1254. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1255. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1258. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1260. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1261. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1263. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1264. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1265. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1266. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +195 -0
  1267. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
  1268. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1271. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1272. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1273. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1274. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1275. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1276. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1278. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1279. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1280. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1281. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1282. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1283. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1284. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1285. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1286. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1288. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1289. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1290. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1291. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1292. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1293. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1294. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1295. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1296. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1297. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1298. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1299. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
  1300. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1301. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1304. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1305. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1306. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1311. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1312. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1314. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1315. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1317. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1326. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1327. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1330. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
  1336. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  1337. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1340. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1341. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1342. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1343. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1344. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1345. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1346. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1347. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1348. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1349. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
  1350. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1351. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
  1352. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
  1353. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1354. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1355. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1356. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1357. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1358. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1359. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
  1360. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1361. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1362. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1363. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
  1364. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1365. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
  1366. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1367. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1368. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1369. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1370. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
  1371. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
  1372. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1373. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
  1374. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1375. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
  1376. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1377. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
  1378. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1379. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1380. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1381. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1382. data/third_party/cares/cares/ares.h +12 -0
  1383. data/third_party/cares/cares/ares_create_query.c +5 -1
  1384. data/third_party/cares/cares/ares_data.c +74 -73
  1385. data/third_party/cares/cares/ares_destroy.c +6 -1
  1386. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  1387. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  1388. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  1389. data/third_party/cares/cares/ares_init.c +274 -173
  1390. data/third_party/cares/cares/ares_library_init.c +21 -3
  1391. data/third_party/cares/cares/ares_options.c +6 -2
  1392. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  1393. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  1394. data/third_party/cares/cares/ares_platform.c +7 -0
  1395. data/third_party/cares/cares/ares_private.h +19 -11
  1396. data/third_party/cares/cares/ares_process.c +27 -2
  1397. data/third_party/cares/cares/ares_rules.h +1 -1
  1398. data/third_party/cares/cares/ares_search.c +7 -0
  1399. data/third_party/cares/cares/ares_send.c +6 -0
  1400. data/third_party/cares/cares/ares_strsplit.c +174 -0
  1401. data/third_party/cares/cares/ares_strsplit.h +43 -0
  1402. data/third_party/cares/cares/ares_version.h +4 -4
  1403. data/third_party/cares/cares/config-win32.h +1 -1
  1404. data/third_party/cares/cares/inet_ntop.c +2 -3
  1405. data/third_party/cares/config_darwin/ares_config.h +3 -0
  1406. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  1407. data/third_party/cares/config_linux/ares_config.h +3 -0
  1408. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  1409. data/third_party/upb/upb/decode.c +609 -0
  1410. data/third_party/upb/upb/decode.h +21 -0
  1411. data/third_party/upb/upb/encode.c +378 -0
  1412. data/third_party/upb/upb/encode.h +21 -0
  1413. data/third_party/upb/upb/generated_util.h +105 -0
  1414. data/third_party/upb/upb/msg.c +111 -0
  1415. data/third_party/upb/upb/msg.h +69 -0
  1416. data/third_party/upb/upb/port.c +26 -0
  1417. data/third_party/upb/upb/port_def.inc +150 -0
  1418. data/third_party/upb/upb/port_undef.inc +21 -0
  1419. data/third_party/upb/upb/table.c +913 -0
  1420. data/third_party/upb/upb/table.int.h +507 -0
  1421. data/third_party/upb/upb/upb.c +261 -0
  1422. data/third_party/upb/upb/upb.h +364 -0
  1423. metadata +968 -542
  1424. data/src/boringssl/err_data.c +0 -1362
  1425. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1426. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1427. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1428. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1429. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1430. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1431. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1432. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +0 -163
  1433. data/src/core/ext/filters/client_channel/method_params.cc +0 -178
  1434. data/src/core/ext/filters/client_channel/method_params.h +0 -78
  1435. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1436. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -254
  1437. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -79
  1438. data/src/core/ext/filters/client_channel/uri_parser.cc +0 -314
  1439. data/src/core/ext/filters/client_channel/uri_parser.h +0 -50
  1440. data/src/core/lib/channel/handshaker_factory.cc +0 -41
  1441. data/src/core/lib/gpr/arena.cc +0 -145
  1442. data/src/core/lib/gpr/host_port.cc +0 -98
  1443. data/src/core/lib/gpr/host_port.h +0 -43
  1444. data/src/core/lib/gpr/mpscq.cc +0 -117
  1445. data/src/core/lib/gpr/mpscq.h +0 -86
  1446. data/src/core/lib/gprpp/abstract.h +0 -37
  1447. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  1448. data/src/core/lib/gprpp/atomic_with_std.h +0 -35
  1449. data/src/core/lib/gprpp/inlined_vector.h +0 -186
  1450. data/src/core/lib/gprpp/mutex_lock.h +0 -42
  1451. data/src/core/lib/iomgr/ev_epollsig_linux.cc +0 -1743
  1452. data/src/core/lib/iomgr/ev_epollsig_linux.h +0 -35
  1453. data/src/core/lib/iomgr/network_status_tracker.cc +0 -36
  1454. data/src/core/lib/iomgr/network_status_tracker.h +0 -32
  1455. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  1456. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  1457. data/src/core/lib/json/json.cc +0 -97
  1458. data/src/core/lib/json/json_common.h +0 -34
  1459. data/src/core/lib/json/json_reader.h +0 -146
  1460. data/src/core/lib/json/json_string.cc +0 -367
  1461. data/src/core/lib/json/json_writer.h +0 -84
  1462. data/src/core/lib/security/security_connector/alts_security_connector.cc +0 -288
  1463. data/src/core/lib/security/security_connector/alts_security_connector.h +0 -69
  1464. data/src/core/lib/security/security_connector/local_security_connector.cc +0 -245
  1465. data/src/core/lib/security/security_connector/local_security_connector.h +0 -58
  1466. data/src/core/lib/transport/service_config.cc +0 -106
  1467. data/src/core/lib/transport/service_config.h +0 -249
  1468. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1469. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1470. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -143
  1471. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1472. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +0 -73
  1473. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +0 -93
  1474. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1475. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1476. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1477. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1478. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1479. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1480. data/src/core/tsi/alts_transport_security.cc +0 -63
  1481. data/src/core/tsi/alts_transport_security.h +0 -47
  1482. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1483. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1484. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1485. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1486. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1487. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1488. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1489. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1490. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1491. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1492. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1493. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1494. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1495. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1496. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1497. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1498. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1499. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1500. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1501. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1502. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1503. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1504. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1505. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1506. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1507. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1508. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1509. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1510. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1511. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1512. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1513. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1514. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1515. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1516. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1517. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1518. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1519. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1520. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1521. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1522. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1523. data/third_party/boringssl/crypto/crypto.c +0 -198
  1524. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1525. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1526. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1527. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1528. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1529. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1530. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1531. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1532. data/third_party/boringssl/crypto/err/err.c +0 -847
  1533. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1534. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1535. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1536. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1537. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1538. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1539. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1540. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1541. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1542. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1543. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1544. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1545. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1546. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1547. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1548. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1549. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1550. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1551. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1552. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1553. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1554. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1555. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1556. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1557. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1558. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1559. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1560. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1561. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1562. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1563. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1564. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1565. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1566. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1567. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1568. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1569. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1570. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1571. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1572. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1573. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1574. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1575. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1576. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1577. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1578. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1579. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1580. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1581. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1582. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1583. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1584. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1585. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1586. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1587. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1588. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1589. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1590. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1591. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1592. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1593. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1594. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1595. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1596. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1597. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1598. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1599. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1600. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1601. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1602. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1603. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1604. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1605. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1606. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1607. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1608. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1609. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1610. data/third_party/boringssl/crypto/internal.h +0 -739
  1611. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1612. data/third_party/boringssl/crypto/mem.c +0 -235
  1613. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1614. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1615. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1616. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1617. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1618. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1619. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1620. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1621. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1622. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1623. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1624. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1625. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1626. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1627. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1628. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1629. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1630. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1631. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1632. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1633. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1634. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1635. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1636. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1637. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1638. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1639. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1640. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1641. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1642. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1643. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1644. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1645. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1646. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1647. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1648. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1649. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1650. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1651. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1652. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1653. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1654. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1655. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1656. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1657. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1658. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1659. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1660. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1661. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1662. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1663. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1664. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1665. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1666. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1667. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1668. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1669. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1670. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1671. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1672. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1673. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1674. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1675. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1676. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1677. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1678. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1679. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1680. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1681. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1682. data/third_party/boringssl/include/openssl/base.h +0 -457
  1683. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1684. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1685. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1686. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1687. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1688. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1689. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1690. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1691. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1692. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1693. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1694. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1695. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1696. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1697. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1698. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1699. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1700. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1701. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1702. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1703. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1704. data/third_party/boringssl/include/openssl/err.h +0 -458
  1705. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1706. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1707. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1708. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1709. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1710. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1711. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1712. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1713. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1714. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1715. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1716. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1717. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1718. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1719. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1720. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1721. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1722. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1723. data/third_party/boringssl/include/openssl/span.h +0 -191
  1724. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1725. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1726. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1727. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1728. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1729. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1730. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1731. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1732. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1733. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1734. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1735. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1736. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1737. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1738. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1739. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1740. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1741. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1742. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1743. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1744. data/third_party/boringssl/ssl/internal.h +0 -3064
  1745. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1746. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1747. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1748. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1749. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1750. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1751. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1752. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1753. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1754. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1755. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1756. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1757. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1758. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1759. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1760. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1761. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1762. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1763. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1764. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1765. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1766. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1767. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1768. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1769. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1770. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1771. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1772. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1773. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1774. data/third_party/nanopb/pb.h +0 -579
  1775. data/third_party/nanopb/pb_common.c +0 -97
  1776. data/third_party/nanopb/pb_common.h +0 -42
  1777. data/third_party/nanopb/pb_decode.c +0 -1347
  1778. data/third_party/nanopb/pb_decode.h +0 -149
  1779. data/third_party/nanopb/pb_encode.c +0 -696
  1780. data/third_party/nanopb/pb_encode.h +0 -154
@@ -0,0 +1,88 @@
1
+ //
2
+ // Copyright 2019 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <memory>
23
+ #include <string>
24
+ #include <vector>
25
+
26
+ #include "absl/container/inlined_vector.h"
27
+
28
+ #include <grpc/impl/codegen/slice.h>
29
+
30
+ #include "src/core/lib/gprpp/map.h"
31
+ #include "src/core/lib/gprpp/memory.h"
32
+ #include "src/core/lib/iomgr/error.h"
33
+ #include "src/core/lib/json/json.h"
34
+
35
+ namespace grpc_core {
36
+
37
+ class XdsClient;
38
+
39
+ class XdsBootstrap {
40
+ public:
41
+ struct Node {
42
+ std::string id;
43
+ std::string cluster;
44
+ std::string locality_region;
45
+ std::string locality_zone;
46
+ std::string locality_subzone;
47
+ Json metadata;
48
+ };
49
+
50
+ struct ChannelCreds {
51
+ std::string type;
52
+ Json config;
53
+ };
54
+
55
+ struct XdsServer {
56
+ std::string server_uri;
57
+ absl::InlinedVector<ChannelCreds, 1> channel_creds;
58
+ };
59
+
60
+ // If *error is not GRPC_ERROR_NONE after returning, then there was an
61
+ // error reading the file.
62
+ static std::unique_ptr<XdsBootstrap> ReadFromFile(XdsClient* client,
63
+ TraceFlag* tracer,
64
+ grpc_error** error);
65
+
66
+ // Do not instantiate directly -- use ReadFromFile() above instead.
67
+ XdsBootstrap(Json json, grpc_error** error);
68
+
69
+ // TODO(roth): We currently support only one server. Fix this when we
70
+ // add support for fallback for the xds channel.
71
+ const XdsServer& server() const { return servers_[0]; }
72
+ const Node* node() const { return node_.get(); }
73
+
74
+ private:
75
+ grpc_error* ParseXdsServerList(Json* json);
76
+ grpc_error* ParseXdsServer(Json* json, size_t idx);
77
+ grpc_error* ParseChannelCredsArray(Json* json, XdsServer* server);
78
+ grpc_error* ParseChannelCreds(Json* json, size_t idx, XdsServer* server);
79
+ grpc_error* ParseNode(Json* json);
80
+ grpc_error* ParseLocality(Json* json);
81
+
82
+ absl::InlinedVector<XdsServer, 1> servers_;
83
+ std::unique_ptr<Node> node_;
84
+ };
85
+
86
+ } // namespace grpc_core
87
+
88
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H */
@@ -0,0 +1,46 @@
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
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <grpc/impl/codegen/grpc_types.h>
25
+
26
+ #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
27
+ #include "src/core/lib/iomgr/error.h"
28
+
29
+ namespace grpc_core {
30
+
31
+ /// Makes any necessary modifications to \a args for use in the xds
32
+ /// balancer channel.
33
+ ///
34
+ /// Takes ownership of \a args.
35
+ ///
36
+ /// Caller takes ownership of the returned args.
37
+ grpc_channel_args* ModifyXdsChannelArgs(grpc_channel_args* args);
38
+
39
+ grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
40
+ const grpc_channel_args& args,
41
+ grpc_error** error);
42
+
43
+ } // namespace grpc_core
44
+
45
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H \
46
+ */
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2019 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H
19
+
20
+ // Boolean channel arg indicating whether the target is an xds server.
21
+ #define GRPC_ARG_ADDRESS_IS_XDS_SERVER "grpc.address_is_xds_server"
22
+
23
+ // Pointer channel arg containing a ref to the XdsClient object.
24
+ #define GRPC_ARG_XDS_CLIENT "grpc.xds_client"
25
+
26
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H */
@@ -0,0 +1,106 @@
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
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/ext/filters/client_channel/xds/xds_channel.h"
22
+
23
+ #include <string.h>
24
+
25
+ #include "absl/container/inlined_vector.h"
26
+
27
+ #include <grpc/grpc_security.h>
28
+ #include <grpc/support/alloc.h>
29
+ #include <grpc/support/string_util.h>
30
+
31
+ #include "src/core/ext/filters/client_channel/client_channel.h"
32
+ #include "src/core/ext/filters/client_channel/server_address.h"
33
+ #include "src/core/lib/channel/channel_args.h"
34
+ #include "src/core/lib/gpr/string.h"
35
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
36
+ #include "src/core/lib/security/credentials/credentials.h"
37
+ #include "src/core/lib/security/credentials/fake/fake_credentials.h"
38
+ #include "src/core/lib/security/transport/target_authority_table.h"
39
+ #include "src/core/lib/slice/slice_internal.h"
40
+
41
+ namespace grpc_core {
42
+
43
+ grpc_channel_args* ModifyXdsChannelArgs(grpc_channel_args* args) {
44
+ absl::InlinedVector<const char*, 1> args_to_remove;
45
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
46
+ // Substitute the channel credentials with a version without call
47
+ // credentials: the load balancer is not necessarily trusted to handle
48
+ // bearer token credentials.
49
+ grpc_channel_credentials* channel_credentials =
50
+ grpc_channel_credentials_find_in_args(args);
51
+ RefCountedPtr<grpc_channel_credentials> creds_sans_call_creds;
52
+ if (channel_credentials != nullptr) {
53
+ creds_sans_call_creds =
54
+ channel_credentials->duplicate_without_call_credentials();
55
+ GPR_ASSERT(creds_sans_call_creds != nullptr);
56
+ args_to_remove.emplace_back(GRPC_ARG_CHANNEL_CREDENTIALS);
57
+ args_to_add.emplace_back(
58
+ grpc_channel_credentials_to_arg(creds_sans_call_creds.get()));
59
+ }
60
+ grpc_channel_args* result = grpc_channel_args_copy_and_add_and_remove(
61
+ args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
62
+ args_to_add.size());
63
+ // Clean up.
64
+ grpc_channel_args_destroy(args);
65
+ return result;
66
+ }
67
+
68
+ grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
69
+ const grpc_channel_args& args,
70
+ grpc_error** error) {
71
+ grpc_channel_credentials* creds = nullptr;
72
+ RefCountedPtr<grpc_channel_credentials> creds_to_unref;
73
+ if (!bootstrap.server().channel_creds.empty()) {
74
+ for (size_t i = 0; i < bootstrap.server().channel_creds.size(); ++i) {
75
+ if (bootstrap.server().channel_creds[i].type == "google_default") {
76
+ creds = grpc_google_default_credentials_create();
77
+ break;
78
+ } else if (bootstrap.server().channel_creds[i].type == "fake") {
79
+ creds = grpc_fake_transport_security_credentials_create();
80
+ break;
81
+ }
82
+ }
83
+ if (creds == nullptr) {
84
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
85
+ "no supported credential types found");
86
+ return nullptr;
87
+ }
88
+ creds_to_unref.reset(creds);
89
+ } else {
90
+ creds = grpc_channel_credentials_find_in_args(&args);
91
+ if (creds == nullptr) {
92
+ // Built with security but parent channel is insecure.
93
+ return grpc_insecure_channel_create(bootstrap.server().server_uri.c_str(),
94
+ &args, nullptr);
95
+ }
96
+ }
97
+ const char* arg_to_remove = GRPC_ARG_CHANNEL_CREDENTIALS;
98
+ grpc_channel_args* new_args =
99
+ grpc_channel_args_copy_and_remove(&args, &arg_to_remove, 1);
100
+ grpc_channel* channel = grpc_secure_channel_create(
101
+ creds, bootstrap.server().server_uri.c_str(), new_args, nullptr);
102
+ grpc_channel_args_destroy(new_args);
103
+ return channel;
104
+ }
105
+
106
+ } // namespace grpc_core
@@ -0,0 +1,2367 @@
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
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include <inttypes.h>
22
+ #include <limits.h>
23
+ #include <string.h>
24
+
25
+ #include "absl/container/inlined_vector.h"
26
+ #include "absl/strings/str_format.h"
27
+ #include "absl/strings/str_join.h"
28
+ #include "absl/strings/string_view.h"
29
+
30
+ #include <grpc/byte_buffer_reader.h>
31
+ #include <grpc/grpc.h>
32
+ #include <grpc/support/alloc.h>
33
+ #include <grpc/support/string_util.h>
34
+ #include <grpc/support/time.h>
35
+
36
+ #include "src/core/ext/filters/client_channel/client_channel.h"
37
+ #include "src/core/ext/filters/client_channel/parse_address.h"
38
+ #include "src/core/ext/filters/client_channel/server_address.h"
39
+ #include "src/core/ext/filters/client_channel/service_config.h"
40
+ #include "src/core/ext/filters/client_channel/xds/xds_api.h"
41
+ #include "src/core/ext/filters/client_channel/xds/xds_channel.h"
42
+ #include "src/core/ext/filters/client_channel/xds/xds_channel_args.h"
43
+ #include "src/core/ext/filters/client_channel/xds/xds_client.h"
44
+ #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
45
+ #include "src/core/lib/backoff/backoff.h"
46
+ #include "src/core/lib/channel/channel_args.h"
47
+ #include "src/core/lib/channel/channel_stack.h"
48
+ #include "src/core/lib/gpr/string.h"
49
+ #include "src/core/lib/gprpp/map.h"
50
+ #include "src/core/lib/gprpp/memory.h"
51
+ #include "src/core/lib/gprpp/orphanable.h"
52
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
53
+ #include "src/core/lib/gprpp/sync.h"
54
+ #include "src/core/lib/iomgr/sockaddr.h"
55
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
56
+ #include "src/core/lib/iomgr/timer.h"
57
+ #include "src/core/lib/iomgr/work_serializer.h"
58
+ #include "src/core/lib/slice/slice_hash_table.h"
59
+ #include "src/core/lib/slice/slice_internal.h"
60
+ #include "src/core/lib/slice/slice_string_helpers.h"
61
+ #include "src/core/lib/surface/call.h"
62
+ #include "src/core/lib/surface/channel.h"
63
+ #include "src/core/lib/surface/channel_init.h"
64
+ #include "src/core/lib/transport/static_metadata.h"
65
+
66
+ #define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
67
+ #define GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER 1.6
68
+ #define GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS 120
69
+ #define GRPC_XDS_RECONNECT_JITTER 0.2
70
+ #define GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS 1000
71
+
72
+ namespace grpc_core {
73
+
74
+ TraceFlag grpc_xds_client_trace(false, "xds_client");
75
+
76
+ //
77
+ // Internal class declarations
78
+ //
79
+
80
+ // An xds call wrapper that can restart a call upon failure. Holds a ref to
81
+ // the xds channel. The template parameter is the kind of wrapped xds call.
82
+ template <typename T>
83
+ class XdsClient::ChannelState::RetryableCall
84
+ : public InternallyRefCounted<RetryableCall<T>> {
85
+ public:
86
+ explicit RetryableCall(RefCountedPtr<ChannelState> chand);
87
+
88
+ void Orphan() override;
89
+
90
+ void OnCallFinishedLocked();
91
+
92
+ T* calld() const { return calld_.get(); }
93
+ ChannelState* chand() const { return chand_.get(); }
94
+
95
+ bool IsCurrentCallOnChannel() const;
96
+
97
+ private:
98
+ void StartNewCallLocked();
99
+ void StartRetryTimerLocked();
100
+ static void OnRetryTimer(void* arg, grpc_error* error);
101
+ void OnRetryTimerLocked(grpc_error* error);
102
+
103
+ // The wrapped xds call that talks to the xds server. It's instantiated
104
+ // every time we start a new call. It's null during call retry backoff.
105
+ OrphanablePtr<T> calld_;
106
+ // The owning xds channel.
107
+ RefCountedPtr<ChannelState> chand_;
108
+
109
+ // Retry state.
110
+ BackOff backoff_;
111
+ grpc_timer retry_timer_;
112
+ grpc_closure on_retry_timer_;
113
+ bool retry_timer_callback_pending_ = false;
114
+
115
+ bool shutting_down_ = false;
116
+ };
117
+
118
+ // Contains an ADS call to the xds server.
119
+ class XdsClient::ChannelState::AdsCallState
120
+ : public InternallyRefCounted<AdsCallState> {
121
+ public:
122
+ // The ctor and dtor should not be used directly.
123
+ explicit AdsCallState(RefCountedPtr<RetryableCall<AdsCallState>> parent);
124
+ ~AdsCallState() override;
125
+
126
+ void Orphan() override;
127
+
128
+ RetryableCall<AdsCallState>* parent() const { return parent_.get(); }
129
+ ChannelState* chand() const { return parent_->chand(); }
130
+ XdsClient* xds_client() const { return chand()->xds_client(); }
131
+ bool seen_response() const { return seen_response_; }
132
+
133
+ void Subscribe(const std::string& type_url, const std::string& name);
134
+ void Unsubscribe(const std::string& type_url, const std::string& name,
135
+ bool delay_unsubscription);
136
+
137
+ bool HasSubscribedResources() const;
138
+
139
+ private:
140
+ class ResourceState : public InternallyRefCounted<ResourceState> {
141
+ public:
142
+ ResourceState(const std::string& type_url, const std::string& name)
143
+ : type_url_(type_url), name_(name) {
144
+ GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
145
+ grpc_schedule_on_exec_ctx);
146
+ }
147
+
148
+ void Orphan() override {
149
+ Finish();
150
+ Unref();
151
+ }
152
+
153
+ void Start(RefCountedPtr<AdsCallState> ads_calld) {
154
+ if (sent_) return;
155
+ sent_ = true;
156
+ ads_calld_ = std::move(ads_calld);
157
+ Ref().release();
158
+ timer_pending_ = true;
159
+ grpc_timer_init(
160
+ &timer_,
161
+ ExecCtx::Get()->Now() + ads_calld_->xds_client()->request_timeout_,
162
+ &timer_callback_);
163
+ }
164
+
165
+ void Finish() {
166
+ if (timer_pending_) {
167
+ grpc_timer_cancel(&timer_);
168
+ timer_pending_ = false;
169
+ }
170
+ }
171
+
172
+ private:
173
+ static void OnTimer(void* arg, grpc_error* error) {
174
+ ResourceState* self = static_cast<ResourceState*>(arg);
175
+ GRPC_ERROR_REF(error); // ref owned by lambda
176
+ self->ads_calld_->xds_client()->work_serializer_->Run(
177
+ [self, error]() { self->OnTimerLocked(error); }, DEBUG_LOCATION);
178
+ }
179
+
180
+ void OnTimerLocked(grpc_error* error) {
181
+ if (error == GRPC_ERROR_NONE && timer_pending_) {
182
+ timer_pending_ = false;
183
+ char* msg;
184
+ gpr_asprintf(
185
+ &msg,
186
+ "timeout obtaining resource {type=%s name=%s} from xds server",
187
+ type_url_.c_str(), name_.c_str());
188
+ grpc_error* watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
189
+ gpr_free(msg);
190
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
191
+ gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
192
+ grpc_error_string(watcher_error));
193
+ }
194
+ if (type_url_ == XdsApi::kLdsTypeUrl ||
195
+ type_url_ == XdsApi::kRdsTypeUrl) {
196
+ ads_calld_->xds_client()->service_config_watcher_->OnError(
197
+ watcher_error);
198
+ } else if (type_url_ == XdsApi::kCdsTypeUrl) {
199
+ ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
200
+ for (const auto& p : state.watchers) {
201
+ p.first->OnError(GRPC_ERROR_REF(watcher_error));
202
+ }
203
+ GRPC_ERROR_UNREF(watcher_error);
204
+ } else if (type_url_ == XdsApi::kEdsTypeUrl) {
205
+ EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
206
+ for (const auto& p : state.watchers) {
207
+ p.first->OnError(GRPC_ERROR_REF(watcher_error));
208
+ }
209
+ GRPC_ERROR_UNREF(watcher_error);
210
+ } else {
211
+ GPR_UNREACHABLE_CODE(return );
212
+ }
213
+ }
214
+ ads_calld_.reset();
215
+ Unref();
216
+ GRPC_ERROR_UNREF(error);
217
+ }
218
+
219
+ const std::string type_url_;
220
+ const std::string name_;
221
+
222
+ RefCountedPtr<AdsCallState> ads_calld_;
223
+ bool sent_ = false;
224
+ bool timer_pending_ = false;
225
+ grpc_timer timer_;
226
+ grpc_closure timer_callback_;
227
+ };
228
+
229
+ struct ResourceTypeState {
230
+ ~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
231
+
232
+ // Version, nonce, and error for this resource type.
233
+ std::string version;
234
+ std::string nonce;
235
+ grpc_error* error = GRPC_ERROR_NONE;
236
+
237
+ // Subscribed resources of this type.
238
+ std::map<std::string /* name */, OrphanablePtr<ResourceState>>
239
+ subscribed_resources;
240
+ };
241
+
242
+ void SendMessageLocked(const std::string& type_url);
243
+
244
+ void AcceptLdsUpdate(absl::optional<XdsApi::LdsUpdate> lds_update);
245
+ void AcceptRdsUpdate(absl::optional<XdsApi::RdsUpdate> rds_update);
246
+ void AcceptCdsUpdate(XdsApi::CdsUpdateMap cds_update_map);
247
+ void AcceptEdsUpdate(XdsApi::EdsUpdateMap eds_update_map);
248
+
249
+ static void OnRequestSent(void* arg, grpc_error* error);
250
+ void OnRequestSentLocked(grpc_error* error);
251
+ static void OnResponseReceived(void* arg, grpc_error* error);
252
+ void OnResponseReceivedLocked();
253
+ static void OnStatusReceived(void* arg, grpc_error* error);
254
+ void OnStatusReceivedLocked(grpc_error* error);
255
+
256
+ bool IsCurrentCallOnChannel() const;
257
+
258
+ std::set<absl::string_view> ResourceNamesForRequest(
259
+ const std::string& type_url);
260
+
261
+ // The owning RetryableCall<>.
262
+ RefCountedPtr<RetryableCall<AdsCallState>> parent_;
263
+
264
+ bool sent_initial_message_ = false;
265
+ bool seen_response_ = false;
266
+
267
+ // Always non-NULL.
268
+ grpc_call* call_;
269
+
270
+ // recv_initial_metadata
271
+ grpc_metadata_array initial_metadata_recv_;
272
+
273
+ // send_message
274
+ grpc_byte_buffer* send_message_payload_ = nullptr;
275
+ grpc_closure on_request_sent_;
276
+
277
+ // recv_message
278
+ grpc_byte_buffer* recv_message_payload_ = nullptr;
279
+ grpc_closure on_response_received_;
280
+
281
+ // recv_trailing_metadata
282
+ grpc_metadata_array trailing_metadata_recv_;
283
+ grpc_status_code status_code_;
284
+ grpc_slice status_details_;
285
+ grpc_closure on_status_received_;
286
+
287
+ // Resource types for which requests need to be sent.
288
+ std::set<std::string /*type_url*/> buffered_requests_;
289
+
290
+ // State for each resource type.
291
+ std::map<std::string /*type_url*/, ResourceTypeState> state_map_;
292
+ };
293
+
294
+ // Contains an LRS call to the xds server.
295
+ class XdsClient::ChannelState::LrsCallState
296
+ : public InternallyRefCounted<LrsCallState> {
297
+ public:
298
+ // The ctor and dtor should not be used directly.
299
+ explicit LrsCallState(RefCountedPtr<RetryableCall<LrsCallState>> parent);
300
+ ~LrsCallState() override;
301
+
302
+ void Orphan() override;
303
+
304
+ void MaybeStartReportingLocked();
305
+
306
+ RetryableCall<LrsCallState>* parent() { return parent_.get(); }
307
+ ChannelState* chand() const { return parent_->chand(); }
308
+ XdsClient* xds_client() const { return chand()->xds_client(); }
309
+ bool seen_response() const { return seen_response_; }
310
+
311
+ private:
312
+ // Reports client-side load stats according to a fixed interval.
313
+ class Reporter : public InternallyRefCounted<Reporter> {
314
+ public:
315
+ Reporter(RefCountedPtr<LrsCallState> parent, grpc_millis report_interval)
316
+ : parent_(std::move(parent)), report_interval_(report_interval) {
317
+ GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
318
+ grpc_schedule_on_exec_ctx);
319
+ GRPC_CLOSURE_INIT(&on_report_done_, OnReportDone, this,
320
+ grpc_schedule_on_exec_ctx);
321
+ ScheduleNextReportLocked();
322
+ }
323
+
324
+ void Orphan() override;
325
+
326
+ private:
327
+ void ScheduleNextReportLocked();
328
+ static void OnNextReportTimer(void* arg, grpc_error* error);
329
+ void OnNextReportTimerLocked(grpc_error* error);
330
+ void SendReportLocked();
331
+ static void OnReportDone(void* arg, grpc_error* error);
332
+ void OnReportDoneLocked(grpc_error* error);
333
+
334
+ bool IsCurrentReporterOnCall() const {
335
+ return this == parent_->reporter_.get();
336
+ }
337
+ XdsClient* xds_client() const { return parent_->xds_client(); }
338
+
339
+ // The owning LRS call.
340
+ RefCountedPtr<LrsCallState> parent_;
341
+
342
+ // The load reporting state.
343
+ const grpc_millis report_interval_;
344
+ bool last_report_counters_were_zero_ = false;
345
+ bool next_report_timer_callback_pending_ = false;
346
+ grpc_timer next_report_timer_;
347
+ grpc_closure on_next_report_timer_;
348
+ grpc_closure on_report_done_;
349
+ };
350
+
351
+ static void OnInitialRequestSent(void* arg, grpc_error* error);
352
+ void OnInitialRequestSentLocked();
353
+ static void OnResponseReceived(void* arg, grpc_error* error);
354
+ void OnResponseReceivedLocked();
355
+ static void OnStatusReceived(void* arg, grpc_error* error);
356
+ void OnStatusReceivedLocked(grpc_error* error);
357
+
358
+ bool IsCurrentCallOnChannel() const;
359
+
360
+ // The owning RetryableCall<>.
361
+ RefCountedPtr<RetryableCall<LrsCallState>> parent_;
362
+ bool seen_response_ = false;
363
+
364
+ // Always non-NULL.
365
+ grpc_call* call_;
366
+
367
+ // recv_initial_metadata
368
+ grpc_metadata_array initial_metadata_recv_;
369
+
370
+ // send_message
371
+ grpc_byte_buffer* send_message_payload_ = nullptr;
372
+ grpc_closure on_initial_request_sent_;
373
+
374
+ // recv_message
375
+ grpc_byte_buffer* recv_message_payload_ = nullptr;
376
+ grpc_closure on_response_received_;
377
+
378
+ // recv_trailing_metadata
379
+ grpc_metadata_array trailing_metadata_recv_;
380
+ grpc_status_code status_code_;
381
+ grpc_slice status_details_;
382
+ grpc_closure on_status_received_;
383
+
384
+ // Load reporting state.
385
+ bool send_all_clusters_ = false;
386
+ std::set<std::string> cluster_names_; // Asked for by the LRS server.
387
+ grpc_millis load_reporting_interval_ = 0;
388
+ OrphanablePtr<Reporter> reporter_;
389
+ };
390
+
391
+ //
392
+ // XdsClient::ChannelState::StateWatcher
393
+ //
394
+
395
+ class XdsClient::ChannelState::StateWatcher
396
+ : public AsyncConnectivityStateWatcherInterface {
397
+ public:
398
+ explicit StateWatcher(RefCountedPtr<ChannelState> parent)
399
+ : AsyncConnectivityStateWatcherInterface(
400
+ parent->xds_client()->work_serializer_),
401
+ parent_(std::move(parent)) {}
402
+
403
+ private:
404
+ void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
405
+ if (!parent_->shutting_down_ &&
406
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
407
+ // In TRANSIENT_FAILURE. Notify all watchers of error.
408
+ gpr_log(GPR_INFO,
409
+ "[xds_client %p] xds channel in state TRANSIENT_FAILURE",
410
+ parent_->xds_client());
411
+ parent_->xds_client()->NotifyOnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
412
+ "xds channel in TRANSIENT_FAILURE"));
413
+ }
414
+ }
415
+
416
+ RefCountedPtr<ChannelState> parent_;
417
+ };
418
+
419
+ //
420
+ // XdsClient::ChannelState
421
+ //
422
+
423
+ namespace {
424
+
425
+ // Returns the channel args for the xds channel.
426
+ grpc_channel_args* BuildXdsChannelArgs(const grpc_channel_args& args) {
427
+ static const char* args_to_remove[] = {
428
+ // LB policy name, since we want to use the default (pick_first) in
429
+ // the LB channel.
430
+ GRPC_ARG_LB_POLICY_NAME,
431
+ // The service config that contains the LB config. We don't want to
432
+ // recursively use xds in the LB channel.
433
+ GRPC_ARG_SERVICE_CONFIG,
434
+ // The channel arg for the server URI, since that will be different for
435
+ // the xds channel than for the parent channel. The client channel
436
+ // factory will re-add this arg with the right value.
437
+ GRPC_ARG_SERVER_URI,
438
+ // The xds channel should use the authority indicated by the target
439
+ // authority table (see \a ModifyXdsChannelArgs),
440
+ // as opposed to the authority from the parent channel.
441
+ GRPC_ARG_DEFAULT_AUTHORITY,
442
+ // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the xds channel should be
443
+ // treated as a stand-alone channel and not inherit this argument from the
444
+ // args of the parent channel.
445
+ GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
446
+ // Don't want to pass down channelz node from parent; the balancer
447
+ // channel will get its own.
448
+ GRPC_ARG_CHANNELZ_CHANNEL_NODE,
449
+ // Keepalive interval. We are explicitly setting our own value below.
450
+ GRPC_ARG_KEEPALIVE_TIME_MS,
451
+ };
452
+ // Channel args to add.
453
+ absl::InlinedVector<grpc_arg, 3> args_to_add;
454
+ // Keepalive interval.
455
+ args_to_add.emplace_back(grpc_channel_arg_integer_create(
456
+ const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS), 5000));
457
+ // A channel arg indicating that the target is an xds server.
458
+ // TODO(roth): Once we figure out our fallback and credentials story, decide
459
+ // whether this is actually needed. Note that it's currently used by the
460
+ // fake security connector as well.
461
+ args_to_add.emplace_back(grpc_channel_arg_integer_create(
462
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_XDS_SERVER), 1));
463
+ // The parent channel's channelz uuid.
464
+ channelz::ChannelNode* channelz_node = nullptr;
465
+ const grpc_arg* arg =
466
+ grpc_channel_args_find(&args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
467
+ if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
468
+ arg->value.pointer.p != nullptr) {
469
+ channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
470
+ args_to_add.emplace_back(
471
+ channelz::MakeParentUuidArg(channelz_node->uuid()));
472
+ }
473
+ // Construct channel args.
474
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
475
+ &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
476
+ args_to_add.size());
477
+ // Make any necessary modifications for security.
478
+ return ModifyXdsChannelArgs(new_args);
479
+ }
480
+
481
+ } // namespace
482
+
483
+ XdsClient::ChannelState::ChannelState(RefCountedPtr<XdsClient> xds_client,
484
+ grpc_channel* channel)
485
+ : InternallyRefCounted<ChannelState>(&grpc_xds_client_trace),
486
+ xds_client_(std::move(xds_client)),
487
+ channel_(channel) {
488
+ GPR_ASSERT(channel_ != nullptr);
489
+ StartConnectivityWatchLocked();
490
+ }
491
+
492
+ XdsClient::ChannelState::~ChannelState() {
493
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
494
+ gpr_log(GPR_INFO, "[xds_client %p] Destroying xds channel %p", xds_client(),
495
+ this);
496
+ }
497
+ grpc_channel_destroy(channel_);
498
+ }
499
+
500
+ void XdsClient::ChannelState::Orphan() {
501
+ shutting_down_ = true;
502
+ CancelConnectivityWatchLocked();
503
+ ads_calld_.reset();
504
+ lrs_calld_.reset();
505
+ Unref(DEBUG_LOCATION, "ChannelState+orphaned");
506
+ }
507
+
508
+ XdsClient::ChannelState::AdsCallState* XdsClient::ChannelState::ads_calld()
509
+ const {
510
+ return ads_calld_->calld();
511
+ }
512
+
513
+ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
514
+ const {
515
+ return lrs_calld_->calld();
516
+ }
517
+
518
+ bool XdsClient::ChannelState::HasActiveAdsCall() const {
519
+ return ads_calld_->calld() != nullptr;
520
+ }
521
+
522
+ void XdsClient::ChannelState::MaybeStartLrsCall() {
523
+ if (lrs_calld_ != nullptr) return;
524
+ lrs_calld_.reset(
525
+ new RetryableCall<LrsCallState>(Ref(DEBUG_LOCATION, "ChannelState+lrs")));
526
+ }
527
+
528
+ void XdsClient::ChannelState::StopLrsCall() { lrs_calld_.reset(); }
529
+
530
+ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
531
+ grpc_channel_element* client_channel_elem =
532
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel_));
533
+ GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
534
+ watcher_ = new StateWatcher(Ref());
535
+ grpc_client_channel_start_connectivity_watch(
536
+ client_channel_elem, GRPC_CHANNEL_IDLE,
537
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
538
+ }
539
+
540
+ void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
541
+ grpc_channel_element* client_channel_elem =
542
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel_));
543
+ GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
544
+ grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
545
+ }
546
+
547
+ void XdsClient::ChannelState::Subscribe(const std::string& type_url,
548
+ const std::string& name) {
549
+ if (ads_calld_ == nullptr) {
550
+ // Start the ADS call if this is the first request.
551
+ ads_calld_.reset(new RetryableCall<AdsCallState>(
552
+ Ref(DEBUG_LOCATION, "ChannelState+ads")));
553
+ // Note: AdsCallState's ctor will automatically subscribe to all
554
+ // resources that the XdsClient already has watchers for, so we can
555
+ // return here.
556
+ return;
557
+ }
558
+ // If the ADS call is in backoff state, we don't need to do anything now
559
+ // because when the call is restarted it will resend all necessary requests.
560
+ if (ads_calld() == nullptr) return;
561
+ // Subscribe to this resource if the ADS call is active.
562
+ ads_calld()->Subscribe(type_url, name);
563
+ }
564
+
565
+ void XdsClient::ChannelState::Unsubscribe(const std::string& type_url,
566
+ const std::string& name,
567
+ bool delay_unsubscription) {
568
+ if (ads_calld_ != nullptr) {
569
+ ads_calld_->calld()->Unsubscribe(type_url, name, delay_unsubscription);
570
+ if (!ads_calld_->calld()->HasSubscribedResources()) ads_calld_.reset();
571
+ }
572
+ }
573
+
574
+ //
575
+ // XdsClient::ChannelState::RetryableCall<>
576
+ //
577
+
578
+ template <typename T>
579
+ XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
580
+ RefCountedPtr<ChannelState> chand)
581
+ : chand_(std::move(chand)),
582
+ backoff_(
583
+ BackOff::Options()
584
+ .set_initial_backoff(GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS *
585
+ 1000)
586
+ .set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
587
+ .set_jitter(GRPC_XDS_RECONNECT_JITTER)
588
+ .set_max_backoff(GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
589
+ // Closure Initialization
590
+ GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
591
+ grpc_schedule_on_exec_ctx);
592
+ StartNewCallLocked();
593
+ }
594
+
595
+ template <typename T>
596
+ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
597
+ shutting_down_ = true;
598
+ calld_.reset();
599
+ if (retry_timer_callback_pending_) grpc_timer_cancel(&retry_timer_);
600
+ this->Unref(DEBUG_LOCATION, "RetryableCall+orphaned");
601
+ }
602
+
603
+ template <typename T>
604
+ void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
605
+ const bool seen_response = calld_->seen_response();
606
+ calld_.reset();
607
+ if (seen_response) {
608
+ // If we lost connection to the xds server, reset backoff and restart the
609
+ // call immediately.
610
+ backoff_.Reset();
611
+ StartNewCallLocked();
612
+ } else {
613
+ // If we failed to connect to the xds server, retry later.
614
+ StartRetryTimerLocked();
615
+ }
616
+ }
617
+
618
+ template <typename T>
619
+ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
620
+ if (shutting_down_) return;
621
+ GPR_ASSERT(chand_->channel_ != nullptr);
622
+ GPR_ASSERT(calld_ == nullptr);
623
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
624
+ gpr_log(GPR_INFO,
625
+ "[xds_client %p] Start new call from retryable call (chand: %p, "
626
+ "retryable call: %p)",
627
+ chand()->xds_client(), chand(), this);
628
+ }
629
+ calld_ = MakeOrphanable<T>(
630
+ this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
631
+ }
632
+
633
+ template <typename T>
634
+ void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
635
+ if (shutting_down_) return;
636
+ const grpc_millis next_attempt_time = backoff_.NextAttemptTime();
637
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
638
+ grpc_millis timeout = GPR_MAX(next_attempt_time - ExecCtx::Get()->Now(), 0);
639
+ gpr_log(GPR_INFO,
640
+ "[xds_client %p] Failed to connect to xds server (chand: %p) "
641
+ "retry timer will fire in %" PRId64 "ms.",
642
+ chand()->xds_client(), chand(), timeout);
643
+ }
644
+ this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
645
+ grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
646
+ retry_timer_callback_pending_ = true;
647
+ }
648
+
649
+ template <typename T>
650
+ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
651
+ void* arg, grpc_error* error) {
652
+ RetryableCall* calld = static_cast<RetryableCall*>(arg);
653
+ GRPC_ERROR_REF(error); // ref owned by lambda
654
+ calld->chand_->xds_client()->work_serializer_->Run(
655
+ [calld, error]() { calld->OnRetryTimerLocked(error); }, DEBUG_LOCATION);
656
+ }
657
+
658
+ template <typename T>
659
+ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
660
+ grpc_error* error) {
661
+ retry_timer_callback_pending_ = false;
662
+ if (!shutting_down_ && error == GRPC_ERROR_NONE) {
663
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
664
+ gpr_log(
665
+ GPR_INFO,
666
+ "[xds_client %p] Retry timer fires (chand: %p, retryable call: %p)",
667
+ chand()->xds_client(), chand(), this);
668
+ }
669
+ StartNewCallLocked();
670
+ }
671
+ this->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
672
+ GRPC_ERROR_UNREF(error);
673
+ }
674
+
675
+ //
676
+ // XdsClient::ChannelState::AdsCallState
677
+ //
678
+
679
+ XdsClient::ChannelState::AdsCallState::AdsCallState(
680
+ RefCountedPtr<RetryableCall<AdsCallState>> parent)
681
+ : InternallyRefCounted<AdsCallState>(&grpc_xds_client_trace),
682
+ parent_(std::move(parent)) {
683
+ // Init the ADS call. Note that the call will progress every time there's
684
+ // activity in xds_client()->interested_parties_, which is comprised of
685
+ // the polling entities from client_channel.
686
+ GPR_ASSERT(xds_client() != nullptr);
687
+ GPR_ASSERT(!xds_client()->server_name_.empty());
688
+ // Create a call with the specified method name.
689
+ call_ = grpc_channel_create_pollset_set_call(
690
+ chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
691
+ xds_client()->interested_parties_,
692
+ GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES,
693
+ nullptr, GRPC_MILLIS_INF_FUTURE, nullptr);
694
+ GPR_ASSERT(call_ != nullptr);
695
+ // Init data associated with the call.
696
+ grpc_metadata_array_init(&initial_metadata_recv_);
697
+ grpc_metadata_array_init(&trailing_metadata_recv_);
698
+ // Start the call.
699
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
700
+ gpr_log(GPR_INFO,
701
+ "[xds_client %p] Starting ADS call (chand: %p, calld: %p, "
702
+ "call: %p)",
703
+ xds_client(), chand(), this, call_);
704
+ }
705
+ // Create the ops.
706
+ grpc_call_error call_error;
707
+ grpc_op ops[3];
708
+ memset(ops, 0, sizeof(ops));
709
+ // Op: send initial metadata.
710
+ grpc_op* op = ops;
711
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
712
+ op->data.send_initial_metadata.count = 0;
713
+ op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
714
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
715
+ op->reserved = nullptr;
716
+ op++;
717
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
718
+ nullptr);
719
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
720
+ // Op: send request message.
721
+ GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
722
+ grpc_schedule_on_exec_ctx);
723
+ if (xds_client()->service_config_watcher_ != nullptr) {
724
+ Subscribe(XdsApi::kLdsTypeUrl, xds_client()->server_name_);
725
+ if (xds_client()->lds_result_.has_value() &&
726
+ !xds_client()->lds_result_->route_config_name.empty()) {
727
+ Subscribe(XdsApi::kRdsTypeUrl,
728
+ xds_client()->lds_result_->route_config_name);
729
+ }
730
+ }
731
+ for (const auto& p : xds_client()->cluster_map_) {
732
+ Subscribe(XdsApi::kCdsTypeUrl, std::string(p.first));
733
+ }
734
+ for (const auto& p : xds_client()->endpoint_map_) {
735
+ Subscribe(XdsApi::kEdsTypeUrl, std::string(p.first));
736
+ }
737
+ // Op: recv initial metadata.
738
+ op = ops;
739
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
740
+ op->data.recv_initial_metadata.recv_initial_metadata =
741
+ &initial_metadata_recv_;
742
+ op->flags = 0;
743
+ op->reserved = nullptr;
744
+ op++;
745
+ // Op: recv response.
746
+ op->op = GRPC_OP_RECV_MESSAGE;
747
+ op->data.recv_message.recv_message = &recv_message_payload_;
748
+ op->flags = 0;
749
+ op->reserved = nullptr;
750
+ op++;
751
+ Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
752
+ GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
753
+ grpc_schedule_on_exec_ctx);
754
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
755
+ &on_response_received_);
756
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
757
+ // Op: recv server status.
758
+ op = ops;
759
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
760
+ op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
761
+ op->data.recv_status_on_client.status = &status_code_;
762
+ op->data.recv_status_on_client.status_details = &status_details_;
763
+ op->flags = 0;
764
+ op->reserved = nullptr;
765
+ op++;
766
+ // This callback signals the end of the call, so it relies on the initial
767
+ // ref instead of a new ref. When it's invoked, it's the initial ref that is
768
+ // unreffed.
769
+ GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
770
+ grpc_schedule_on_exec_ctx);
771
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
772
+ &on_status_received_);
773
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
774
+ }
775
+
776
+ XdsClient::ChannelState::AdsCallState::~AdsCallState() {
777
+ grpc_metadata_array_destroy(&initial_metadata_recv_);
778
+ grpc_metadata_array_destroy(&trailing_metadata_recv_);
779
+ grpc_byte_buffer_destroy(send_message_payload_);
780
+ grpc_byte_buffer_destroy(recv_message_payload_);
781
+ grpc_slice_unref_internal(status_details_);
782
+ GPR_ASSERT(call_ != nullptr);
783
+ grpc_call_unref(call_);
784
+ }
785
+
786
+ void XdsClient::ChannelState::AdsCallState::Orphan() {
787
+ GPR_ASSERT(call_ != nullptr);
788
+ // If we are here because xds_client wants to cancel the call,
789
+ // on_status_received_ will complete the cancellation and clean up. Otherwise,
790
+ // we are here because xds_client has to orphan a failed call, then the
791
+ // following cancellation will be a no-op.
792
+ grpc_call_cancel(call_, nullptr);
793
+ state_map_.clear();
794
+ // Note that the initial ref is hold by on_status_received_. So the
795
+ // corresponding unref happens in on_status_received_ instead of here.
796
+ }
797
+
798
+ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
799
+ const std::string& type_url) {
800
+ // Buffer message sending if an existing message is in flight.
801
+ if (send_message_payload_ != nullptr) {
802
+ buffered_requests_.insert(type_url);
803
+ return;
804
+ }
805
+ auto& state = state_map_[type_url];
806
+ grpc_slice request_payload_slice;
807
+ std::set<absl::string_view> resource_names =
808
+ ResourceNamesForRequest(type_url);
809
+ request_payload_slice = xds_client()->api_.CreateAdsRequest(
810
+ type_url, resource_names, state.version, state.nonce,
811
+ GRPC_ERROR_REF(state.error), !sent_initial_message_);
812
+ if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
813
+ type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
814
+ state_map_.erase(type_url);
815
+ }
816
+ sent_initial_message_ = true;
817
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
818
+ gpr_log(GPR_INFO,
819
+ "[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
820
+ "error=%s resources=%s",
821
+ xds_client(), type_url.c_str(), state.version.c_str(),
822
+ state.nonce.c_str(), grpc_error_string(state.error),
823
+ absl::StrJoin(resource_names, " ").c_str());
824
+ }
825
+ GRPC_ERROR_UNREF(state.error);
826
+ state.error = GRPC_ERROR_NONE;
827
+ // Create message payload.
828
+ send_message_payload_ =
829
+ grpc_raw_byte_buffer_create(&request_payload_slice, 1);
830
+ grpc_slice_unref_internal(request_payload_slice);
831
+ // Send the message.
832
+ grpc_op op;
833
+ memset(&op, 0, sizeof(op));
834
+ op.op = GRPC_OP_SEND_MESSAGE;
835
+ op.data.send_message.send_message = send_message_payload_;
836
+ Ref(DEBUG_LOCATION, "ADS+OnRequestSentLocked").release();
837
+ GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
838
+ grpc_schedule_on_exec_ctx);
839
+ grpc_call_error call_error =
840
+ grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
841
+ if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
842
+ gpr_log(GPR_ERROR,
843
+ "[xds_client %p] calld=%p call_error=%d sending ADS message",
844
+ xds_client(), this, call_error);
845
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
846
+ }
847
+ }
848
+
849
+ void XdsClient::ChannelState::AdsCallState::Subscribe(
850
+ const std::string& type_url, const std::string& name) {
851
+ auto& state = state_map_[type_url].subscribed_resources[name];
852
+ if (state == nullptr) {
853
+ state = MakeOrphanable<ResourceState>(type_url, name);
854
+ SendMessageLocked(type_url);
855
+ }
856
+ }
857
+
858
+ void XdsClient::ChannelState::AdsCallState::Unsubscribe(
859
+ const std::string& type_url, const std::string& name,
860
+ bool delay_unsubscription) {
861
+ state_map_[type_url].subscribed_resources.erase(name);
862
+ if (!delay_unsubscription) SendMessageLocked(type_url);
863
+ }
864
+
865
+ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
866
+ for (const auto& p : state_map_) {
867
+ if (!p.second.subscribed_resources.empty()) return true;
868
+ }
869
+ return false;
870
+ }
871
+
872
+ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
873
+ absl::optional<XdsApi::LdsUpdate> lds_update) {
874
+ if (!lds_update.has_value()) {
875
+ gpr_log(GPR_INFO,
876
+ "[xds_client %p] LDS update does not include requested resource",
877
+ xds_client());
878
+ if (xds_client()->lds_result_.has_value() &&
879
+ !xds_client()->lds_result_->route_config_name.empty()) {
880
+ Unsubscribe(XdsApi::kRdsTypeUrl,
881
+ xds_client()->lds_result_->route_config_name,
882
+ /*delay_unsubscription=*/false);
883
+ xds_client()->rds_result_.reset();
884
+ }
885
+ xds_client()->lds_result_.reset();
886
+ xds_client()->service_config_watcher_->OnResourceDoesNotExist();
887
+ return;
888
+ }
889
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
890
+ gpr_log(GPR_INFO,
891
+ "[xds_client %p] LDS update received: route_config_name=%s",
892
+ xds_client(),
893
+ (!lds_update->route_config_name.empty()
894
+ ? lds_update->route_config_name.c_str()
895
+ : "<inlined>"));
896
+ if (lds_update->rds_update.has_value()) {
897
+ gpr_log(GPR_INFO, " RouteConfiguration contains %" PRIuPTR " routes",
898
+ lds_update->rds_update.value().routes.size());
899
+ for (const auto& route : lds_update->rds_update.value().routes) {
900
+ gpr_log(GPR_INFO,
901
+ " route: { service=\"%s\", "
902
+ "method=\"%s\" }, cluster=\"%s\" }",
903
+ route.service.c_str(), route.method.c_str(),
904
+ route.cluster_name.c_str());
905
+ }
906
+ }
907
+ }
908
+ auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
909
+ auto& state = lds_state.subscribed_resources[xds_client()->server_name_];
910
+ if (state != nullptr) state->Finish();
911
+ // Ignore identical update.
912
+ if (xds_client()->lds_result_ == lds_update) {
913
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
914
+ gpr_log(GPR_INFO,
915
+ "[xds_client %p] LDS update identical to current, ignoring.",
916
+ xds_client());
917
+ }
918
+ return;
919
+ }
920
+ if (xds_client()->lds_result_.has_value() &&
921
+ !xds_client()->lds_result_->route_config_name.empty()) {
922
+ Unsubscribe(
923
+ XdsApi::kRdsTypeUrl, xds_client()->lds_result_->route_config_name,
924
+ /*delay_unsubscription=*/!lds_update->route_config_name.empty());
925
+ xds_client()->rds_result_.reset();
926
+ }
927
+ xds_client()->lds_result_ = std::move(lds_update);
928
+ if (xds_client()->lds_result_->rds_update.has_value()) {
929
+ // If the RouteConfiguration was found inlined in LDS response, notify
930
+ // the watcher immediately.
931
+ RefCountedPtr<ServiceConfig> service_config;
932
+ grpc_error* error = xds_client()->CreateServiceConfig(
933
+ xds_client()->lds_result_->rds_update.value(), &service_config);
934
+ if (error == GRPC_ERROR_NONE) {
935
+ xds_client()->service_config_watcher_->OnServiceConfigChanged(
936
+ std::move(service_config));
937
+ } else {
938
+ xds_client()->service_config_watcher_->OnError(error);
939
+ }
940
+ } else {
941
+ // Send RDS request for dynamic resolution.
942
+ Subscribe(XdsApi::kRdsTypeUrl,
943
+ xds_client()->lds_result_->route_config_name);
944
+ }
945
+ }
946
+
947
+ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
948
+ absl::optional<XdsApi::RdsUpdate> rds_update) {
949
+ if (!rds_update.has_value()) {
950
+ gpr_log(GPR_INFO,
951
+ "[xds_client %p] RDS update does not include requested resource",
952
+ xds_client());
953
+ xds_client()->rds_result_.reset();
954
+ xds_client()->service_config_watcher_->OnResourceDoesNotExist();
955
+ return;
956
+ }
957
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
958
+ gpr_log(GPR_INFO,
959
+ "[xds_client %p] RDS update received; RouteConfiguration contains "
960
+ "%" PRIuPTR " routes",
961
+ this, rds_update.value().routes.size());
962
+ for (const auto& route : rds_update.value().routes) {
963
+ gpr_log(GPR_INFO,
964
+ " route: { service=\"%s\", "
965
+ "method=\"%s\" }, cluster=\"%s\" }",
966
+ route.service.c_str(), route.method.c_str(),
967
+ route.cluster_name.c_str());
968
+ }
969
+ }
970
+ auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
971
+ auto& state =
972
+ rds_state
973
+ .subscribed_resources[xds_client()->lds_result_->route_config_name];
974
+ if (state != nullptr) state->Finish();
975
+ // Ignore identical update.
976
+ if (xds_client()->rds_result_ == rds_update) {
977
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
978
+ gpr_log(GPR_INFO,
979
+ "[xds_client %p] RDS update identical to current, ignoring.",
980
+ xds_client());
981
+ }
982
+ return;
983
+ }
984
+ xds_client()->rds_result_ = std::move(rds_update);
985
+ // Notify the watcher.
986
+ RefCountedPtr<ServiceConfig> service_config;
987
+ grpc_error* error = xds_client()->CreateServiceConfig(
988
+ xds_client()->rds_result_.value(), &service_config);
989
+ if (error == GRPC_ERROR_NONE) {
990
+ xds_client()->service_config_watcher_->OnServiceConfigChanged(
991
+ std::move(service_config));
992
+ } else {
993
+ xds_client()->service_config_watcher_->OnError(error);
994
+ }
995
+ }
996
+
997
+ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
998
+ XdsApi::CdsUpdateMap cds_update_map) {
999
+ auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
1000
+ std::set<std::string> eds_resource_names_seen;
1001
+ for (auto& p : cds_update_map) {
1002
+ const char* cluster_name = p.first.c_str();
1003
+ XdsApi::CdsUpdate& cds_update = p.second;
1004
+ auto& state = cds_state.subscribed_resources[cluster_name];
1005
+ if (state != nullptr) state->Finish();
1006
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1007
+ gpr_log(GPR_INFO,
1008
+ "[xds_client %p] CDS update (cluster=%s) received: "
1009
+ "eds_service_name=%s, lrs_load_reporting_server_name=%s",
1010
+ xds_client(), cluster_name, cds_update.eds_service_name.c_str(),
1011
+ cds_update.lrs_load_reporting_server_name.has_value()
1012
+ ? cds_update.lrs_load_reporting_server_name.value().c_str()
1013
+ : "(N/A)");
1014
+ }
1015
+ // Record the EDS resource names seen.
1016
+ eds_resource_names_seen.insert(cds_update.eds_service_name.empty()
1017
+ ? cluster_name
1018
+ : cds_update.eds_service_name);
1019
+ // Ignore identical update.
1020
+ ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1021
+ if (cluster_state.update.has_value() &&
1022
+ cds_update.eds_service_name == cluster_state.update->eds_service_name &&
1023
+ cds_update.lrs_load_reporting_server_name ==
1024
+ cluster_state.update->lrs_load_reporting_server_name) {
1025
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1026
+ gpr_log(GPR_INFO,
1027
+ "[xds_client %p] CDS update identical to current, ignoring.",
1028
+ xds_client());
1029
+ }
1030
+ continue;
1031
+ }
1032
+ // Update the cluster state.
1033
+ cluster_state.update = std::move(cds_update);
1034
+ // Notify all watchers.
1035
+ for (const auto& p : cluster_state.watchers) {
1036
+ p.first->OnClusterChanged(cluster_state.update.value());
1037
+ }
1038
+ }
1039
+ // For any subscribed resource that is not present in the update,
1040
+ // remove it from the cache and notify watchers that it does not exist.
1041
+ for (const auto& p : cds_state.subscribed_resources) {
1042
+ const std::string& cluster_name = p.first;
1043
+ if (cds_update_map.find(cluster_name) == cds_update_map.end()) {
1044
+ ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1045
+ cluster_state.update.reset();
1046
+ for (const auto& p : cluster_state.watchers) {
1047
+ p.first->OnResourceDoesNotExist();
1048
+ }
1049
+ }
1050
+ }
1051
+ // For any EDS resource that is no longer referred to by any CDS
1052
+ // resources, remove it from the cache and notify watchers that it
1053
+ // does not exist.
1054
+ auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1055
+ for (const auto& p : eds_state.subscribed_resources) {
1056
+ const std::string& eds_resource_name = p.first;
1057
+ if (eds_resource_names_seen.find(eds_resource_name) ==
1058
+ eds_resource_names_seen.end()) {
1059
+ EndpointState& endpoint_state =
1060
+ xds_client()->endpoint_map_[eds_resource_name];
1061
+ endpoint_state.update.reset();
1062
+ for (const auto& p : endpoint_state.watchers) {
1063
+ p.first->OnResourceDoesNotExist();
1064
+ }
1065
+ }
1066
+ }
1067
+ }
1068
+
1069
+ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1070
+ XdsApi::EdsUpdateMap eds_update_map) {
1071
+ auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1072
+ for (auto& p : eds_update_map) {
1073
+ const char* eds_service_name = p.first.c_str();
1074
+ XdsApi::EdsUpdate& eds_update = p.second;
1075
+ auto& state = eds_state.subscribed_resources[eds_service_name];
1076
+ if (state != nullptr) state->Finish();
1077
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1078
+ gpr_log(GPR_INFO,
1079
+ "[xds_client %p] EDS response with %" PRIuPTR
1080
+ " priorities and %" PRIuPTR
1081
+ " drop categories received (drop_all=%d)",
1082
+ xds_client(), eds_update.priority_list_update.size(),
1083
+ eds_update.drop_config->drop_category_list().size(),
1084
+ eds_update.drop_config->drop_all());
1085
+ for (size_t priority = 0;
1086
+ priority < eds_update.priority_list_update.size(); ++priority) {
1087
+ const auto* locality_map_update = eds_update.priority_list_update.Find(
1088
+ static_cast<uint32_t>(priority));
1089
+ gpr_log(GPR_INFO,
1090
+ "[xds_client %p] Priority %" PRIuPTR " contains %" PRIuPTR
1091
+ " localities",
1092
+ xds_client(), priority, locality_map_update->size());
1093
+ size_t locality_count = 0;
1094
+ for (const auto& p : locality_map_update->localities) {
1095
+ const auto& locality = p.second;
1096
+ gpr_log(GPR_INFO,
1097
+ "[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
1098
+ " %s has weight %d, contains %" PRIuPTR " server addresses",
1099
+ xds_client(), priority, locality_count,
1100
+ locality.name->AsHumanReadableString(), locality.lb_weight,
1101
+ locality.serverlist.size());
1102
+ for (size_t i = 0; i < locality.serverlist.size(); ++i) {
1103
+ std::string ipport = grpc_sockaddr_to_string(
1104
+ &locality.serverlist[i].address(), false);
1105
+ gpr_log(GPR_INFO,
1106
+ "[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
1107
+ " %s, server address %" PRIuPTR ": %s",
1108
+ xds_client(), priority, locality_count,
1109
+ locality.name->AsHumanReadableString(), i, ipport.c_str());
1110
+ }
1111
+ ++locality_count;
1112
+ }
1113
+ }
1114
+ for (size_t i = 0;
1115
+ i < eds_update.drop_config->drop_category_list().size(); ++i) {
1116
+ const XdsApi::DropConfig::DropCategory& drop_category =
1117
+ eds_update.drop_config->drop_category_list()[i];
1118
+ gpr_log(GPR_INFO,
1119
+ "[xds_client %p] Drop category %s has drop rate %d per million",
1120
+ xds_client(), drop_category.name.c_str(),
1121
+ drop_category.parts_per_million);
1122
+ }
1123
+ }
1124
+ EndpointState& endpoint_state =
1125
+ xds_client()->endpoint_map_[eds_service_name];
1126
+ // Ignore identical update.
1127
+ if (endpoint_state.update.has_value()) {
1128
+ const XdsApi::EdsUpdate& prev_update = endpoint_state.update.value();
1129
+ const bool priority_list_changed =
1130
+ prev_update.priority_list_update != eds_update.priority_list_update;
1131
+ const bool drop_config_changed =
1132
+ prev_update.drop_config == nullptr ||
1133
+ *prev_update.drop_config != *eds_update.drop_config;
1134
+ if (!priority_list_changed && !drop_config_changed) {
1135
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1136
+ gpr_log(GPR_INFO,
1137
+ "[xds_client %p] EDS update identical to current, ignoring.",
1138
+ xds_client());
1139
+ }
1140
+ continue;
1141
+ }
1142
+ }
1143
+ // Update the cluster state.
1144
+ endpoint_state.update = std::move(eds_update);
1145
+ // Notify all watchers.
1146
+ for (const auto& p : endpoint_state.watchers) {
1147
+ p.first->OnEndpointChanged(endpoint_state.update.value());
1148
+ }
1149
+ }
1150
+ }
1151
+
1152
+ void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
1153
+ grpc_error* error) {
1154
+ AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1155
+ GRPC_ERROR_REF(error); // ref owned by lambda
1156
+ ads_calld->xds_client()->work_serializer_->Run(
1157
+ [ads_calld, error]() { ads_calld->OnRequestSentLocked(error); },
1158
+ DEBUG_LOCATION);
1159
+ }
1160
+
1161
+ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
1162
+ grpc_error* error) {
1163
+ if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
1164
+ // Clean up the sent message.
1165
+ grpc_byte_buffer_destroy(send_message_payload_);
1166
+ send_message_payload_ = nullptr;
1167
+ // Continue to send another pending message if any.
1168
+ // TODO(roth): The current code to handle buffered messages has the
1169
+ // advantage of sending only the most recent list of resource names for
1170
+ // each resource type (no matter how many times that resource type has
1171
+ // been requested to send while the current message sending is still
1172
+ // pending). But its disadvantage is that we send the requests in fixed
1173
+ // order of resource types. We need to fix this if we are seeing some
1174
+ // resource type(s) starved due to frequent requests of other resource
1175
+ // type(s).
1176
+ auto it = buffered_requests_.begin();
1177
+ if (it != buffered_requests_.end()) {
1178
+ SendMessageLocked(*it);
1179
+ buffered_requests_.erase(it);
1180
+ }
1181
+ }
1182
+ Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
1183
+ GRPC_ERROR_UNREF(error);
1184
+ }
1185
+
1186
+ void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
1187
+ void* arg, grpc_error* /* error */) {
1188
+ AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1189
+ ads_calld->xds_client()->work_serializer_->Run(
1190
+ [ads_calld]() { ads_calld->OnResponseReceivedLocked(); }, DEBUG_LOCATION);
1191
+ }
1192
+
1193
+ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1194
+ // Empty payload means the call was cancelled.
1195
+ if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
1196
+ Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
1197
+ return;
1198
+ }
1199
+ // Read the response.
1200
+ grpc_byte_buffer_reader bbr;
1201
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1202
+ grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1203
+ grpc_byte_buffer_reader_destroy(&bbr);
1204
+ grpc_byte_buffer_destroy(recv_message_payload_);
1205
+ recv_message_payload_ = nullptr;
1206
+ // TODO(juanlishen): When we convert this to use the xds protocol, the
1207
+ // balancer will send us a fallback timeout such that we should go into
1208
+ // fallback mode if we have lost contact with the balancer after a certain
1209
+ // period of time. We will need to save the timeout value here, and then
1210
+ // when the balancer call ends, we will need to start a timer for the
1211
+ // specified period of time, and if the timer fires, we go into fallback
1212
+ // mode. We will also need to cancel the timer when we receive a serverlist
1213
+ // from the balancer.
1214
+ // Parse the response.
1215
+ absl::optional<XdsApi::LdsUpdate> lds_update;
1216
+ absl::optional<XdsApi::RdsUpdate> rds_update;
1217
+ XdsApi::CdsUpdateMap cds_update_map;
1218
+ XdsApi::EdsUpdateMap eds_update_map;
1219
+ std::string version;
1220
+ std::string nonce;
1221
+ std::string type_url;
1222
+ // Note that ParseAdsResponse() also validates the response.
1223
+ grpc_error* parse_error = xds_client()->api_.ParseAdsResponse(
1224
+ response_slice, xds_client()->server_name_,
1225
+ ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
1226
+ ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
1227
+ ResourceNamesForRequest(XdsApi::kEdsTypeUrl), &lds_update, &rds_update,
1228
+ &cds_update_map, &eds_update_map, &version, &nonce, &type_url);
1229
+ grpc_slice_unref_internal(response_slice);
1230
+ if (type_url.empty()) {
1231
+ // Ignore unparsable response.
1232
+ gpr_log(GPR_ERROR,
1233
+ "[xds_client %p] Error parsing ADS response (%s) -- ignoring",
1234
+ xds_client(), grpc_error_string(parse_error));
1235
+ GRPC_ERROR_UNREF(parse_error);
1236
+ } else {
1237
+ // Update nonce.
1238
+ auto& state = state_map_[type_url];
1239
+ state.nonce = std::move(nonce);
1240
+ // NACK or ACK the response.
1241
+ if (parse_error != GRPC_ERROR_NONE) {
1242
+ GRPC_ERROR_UNREF(state.error);
1243
+ state.error = parse_error;
1244
+ // NACK unacceptable update.
1245
+ gpr_log(GPR_ERROR,
1246
+ "[xds_client %p] ADS response invalid for resource type %s "
1247
+ "version %s, will NACK: nonce=%s error=%s",
1248
+ xds_client(), type_url.c_str(), version.c_str(),
1249
+ state.nonce.c_str(), grpc_error_string(parse_error));
1250
+ SendMessageLocked(type_url);
1251
+ } else {
1252
+ seen_response_ = true;
1253
+ // Accept the ADS response according to the type_url.
1254
+ if (type_url == XdsApi::kLdsTypeUrl) {
1255
+ AcceptLdsUpdate(std::move(lds_update));
1256
+ } else if (type_url == XdsApi::kRdsTypeUrl) {
1257
+ AcceptRdsUpdate(std::move(rds_update));
1258
+ } else if (type_url == XdsApi::kCdsTypeUrl) {
1259
+ AcceptCdsUpdate(std::move(cds_update_map));
1260
+ } else if (type_url == XdsApi::kEdsTypeUrl) {
1261
+ AcceptEdsUpdate(std::move(eds_update_map));
1262
+ }
1263
+ state.version = std::move(version);
1264
+ // ACK the update.
1265
+ SendMessageLocked(type_url);
1266
+ // Start load reporting if needed.
1267
+ auto& lrs_call = chand()->lrs_calld_;
1268
+ if (lrs_call != nullptr) {
1269
+ LrsCallState* lrs_calld = lrs_call->calld();
1270
+ if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
1271
+ }
1272
+ }
1273
+ }
1274
+ if (xds_client()->shutting_down_) {
1275
+ Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked+xds_shutdown");
1276
+ return;
1277
+ }
1278
+ // Keep listening for updates.
1279
+ grpc_op op;
1280
+ memset(&op, 0, sizeof(op));
1281
+ op.op = GRPC_OP_RECV_MESSAGE;
1282
+ op.data.recv_message.recv_message = &recv_message_payload_;
1283
+ op.flags = 0;
1284
+ op.reserved = nullptr;
1285
+ GPR_ASSERT(call_ != nullptr);
1286
+ // Reuse the "ADS+OnResponseReceivedLocked" ref taken in ctor.
1287
+ const grpc_call_error call_error =
1288
+ grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
1289
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1290
+ }
1291
+
1292
+ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
1293
+ void* arg, grpc_error* error) {
1294
+ AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1295
+ GRPC_ERROR_REF(error); // ref owned by lambda
1296
+ ads_calld->xds_client()->work_serializer_->Run(
1297
+ [ads_calld, error]() { ads_calld->OnStatusReceivedLocked(error); },
1298
+ DEBUG_LOCATION);
1299
+ }
1300
+
1301
+ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
1302
+ grpc_error* error) {
1303
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1304
+ char* status_details = grpc_slice_to_c_string(status_details_);
1305
+ gpr_log(GPR_INFO,
1306
+ "[xds_client %p] ADS call status received. Status = %d, details "
1307
+ "= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
1308
+ xds_client(), status_code_, status_details, chand(), this, call_,
1309
+ grpc_error_string(error));
1310
+ gpr_free(status_details);
1311
+ }
1312
+ // Ignore status from a stale call.
1313
+ if (IsCurrentCallOnChannel()) {
1314
+ // Try to restart the call.
1315
+ parent_->OnCallFinishedLocked();
1316
+ // Send error to all watchers.
1317
+ xds_client()->NotifyOnError(
1318
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds call failed"));
1319
+ }
1320
+ Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
1321
+ GRPC_ERROR_UNREF(error);
1322
+ }
1323
+
1324
+ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
1325
+ // If the retryable ADS call is null (which only happens when the xds channel
1326
+ // is shutting down), all the ADS calls are stale.
1327
+ if (chand()->ads_calld_ == nullptr) return false;
1328
+ return this == chand()->ads_calld_->calld();
1329
+ }
1330
+
1331
+ std::set<absl::string_view>
1332
+ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
1333
+ const std::string& type_url) {
1334
+ std::set<absl::string_view> resource_names;
1335
+ auto it = state_map_.find(type_url);
1336
+ if (it != state_map_.end()) {
1337
+ for (auto& p : it->second.subscribed_resources) {
1338
+ resource_names.insert(p.first);
1339
+ OrphanablePtr<ResourceState>& state = p.second;
1340
+ state->Start(Ref());
1341
+ }
1342
+ }
1343
+ return resource_names;
1344
+ }
1345
+
1346
+ //
1347
+ // XdsClient::ChannelState::LrsCallState::Reporter
1348
+ //
1349
+
1350
+ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
1351
+ if (next_report_timer_callback_pending_) {
1352
+ grpc_timer_cancel(&next_report_timer_);
1353
+ }
1354
+ }
1355
+
1356
+ void XdsClient::ChannelState::LrsCallState::Reporter::
1357
+ ScheduleNextReportLocked() {
1358
+ const grpc_millis next_report_time = ExecCtx::Get()->Now() + report_interval_;
1359
+ grpc_timer_init(&next_report_timer_, next_report_time,
1360
+ &on_next_report_timer_);
1361
+ next_report_timer_callback_pending_ = true;
1362
+ }
1363
+
1364
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
1365
+ void* arg, grpc_error* error) {
1366
+ Reporter* self = static_cast<Reporter*>(arg);
1367
+ GRPC_ERROR_REF(error); // ref owned by lambda
1368
+ self->xds_client()->work_serializer_->Run(
1369
+ [self, error]() { self->OnNextReportTimerLocked(error); },
1370
+ DEBUG_LOCATION);
1371
+ }
1372
+
1373
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
1374
+ grpc_error* error) {
1375
+ next_report_timer_callback_pending_ = false;
1376
+ if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
1377
+ Unref(DEBUG_LOCATION, "Reporter+timer");
1378
+ } else {
1379
+ SendReportLocked();
1380
+ }
1381
+ GRPC_ERROR_UNREF(error);
1382
+ }
1383
+
1384
+ namespace {
1385
+
1386
+ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
1387
+ for (const auto& p : snapshot) {
1388
+ const XdsApi::ClusterLoadReport& cluster_snapshot = p.second;
1389
+ for (const auto& q : cluster_snapshot.dropped_requests) {
1390
+ if (q.second > 0) return false;
1391
+ }
1392
+ for (const auto& q : cluster_snapshot.locality_stats) {
1393
+ const XdsClusterLocalityStats::Snapshot& locality_snapshot = q.second;
1394
+ if (!locality_snapshot.IsZero()) return false;
1395
+ }
1396
+ }
1397
+ return true;
1398
+ }
1399
+
1400
+ } // namespace
1401
+
1402
+ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1403
+ // Construct snapshot from all reported stats.
1404
+ XdsApi::ClusterLoadReportMap snapshot = xds_client()->BuildLoadReportSnapshot(
1405
+ parent_->send_all_clusters_, parent_->cluster_names_);
1406
+ // Skip client load report if the counters were all zero in the last
1407
+ // report and they are still zero in this one.
1408
+ const bool old_val = last_report_counters_were_zero_;
1409
+ last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
1410
+ if (old_val && last_report_counters_were_zero_) {
1411
+ ScheduleNextReportLocked();
1412
+ return;
1413
+ }
1414
+ // Create a request that contains the snapshot.
1415
+ grpc_slice request_payload_slice =
1416
+ xds_client()->api_.CreateLrsRequest(std::move(snapshot));
1417
+ parent_->send_message_payload_ =
1418
+ grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1419
+ grpc_slice_unref_internal(request_payload_slice);
1420
+ // Send the report.
1421
+ grpc_op op;
1422
+ memset(&op, 0, sizeof(op));
1423
+ op.op = GRPC_OP_SEND_MESSAGE;
1424
+ op.data.send_message.send_message = parent_->send_message_payload_;
1425
+ grpc_call_error call_error = grpc_call_start_batch_and_execute(
1426
+ parent_->call_, &op, 1, &on_report_done_);
1427
+ if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1428
+ gpr_log(GPR_ERROR,
1429
+ "[xds_client %p] calld=%p call_error=%d sending client load report",
1430
+ xds_client(), this, call_error);
1431
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1432
+ }
1433
+ }
1434
+
1435
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
1436
+ void* arg, grpc_error* error) {
1437
+ Reporter* self = static_cast<Reporter*>(arg);
1438
+ GRPC_ERROR_REF(error); // ref owned by lambda
1439
+ self->xds_client()->work_serializer_->Run(
1440
+ [self, error]() { self->OnReportDoneLocked(error); }, DEBUG_LOCATION);
1441
+ }
1442
+
1443
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1444
+ grpc_error* error) {
1445
+ grpc_byte_buffer_destroy(parent_->send_message_payload_);
1446
+ parent_->send_message_payload_ = nullptr;
1447
+ // If there are no more registered stats to report, cancel the call.
1448
+ if (xds_client()->load_report_map_.empty()) {
1449
+ parent_->chand()->StopLrsCall();
1450
+ Unref(DEBUG_LOCATION, "Reporter+report_done+no_more_reporters");
1451
+ return;
1452
+ }
1453
+ if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
1454
+ // If this reporter is no longer the current one on the call, the reason
1455
+ // might be that it was orphaned for a new one due to config update.
1456
+ if (!IsCurrentReporterOnCall()) {
1457
+ parent_->MaybeStartReportingLocked();
1458
+ }
1459
+ Unref(DEBUG_LOCATION, "Reporter+report_done");
1460
+ } else {
1461
+ ScheduleNextReportLocked();
1462
+ }
1463
+ GRPC_ERROR_UNREF(error);
1464
+ }
1465
+
1466
+ //
1467
+ // XdsClient::ChannelState::LrsCallState
1468
+ //
1469
+
1470
+ XdsClient::ChannelState::LrsCallState::LrsCallState(
1471
+ RefCountedPtr<RetryableCall<LrsCallState>> parent)
1472
+ : InternallyRefCounted<LrsCallState>(&grpc_xds_client_trace),
1473
+ parent_(std::move(parent)) {
1474
+ // Init the LRS call. Note that the call will progress every time there's
1475
+ // activity in xds_client()->interested_parties_, which is comprised of
1476
+ // the polling entities from client_channel.
1477
+ GPR_ASSERT(xds_client() != nullptr);
1478
+ GPR_ASSERT(!xds_client()->server_name_.empty());
1479
+ call_ = grpc_channel_create_pollset_set_call(
1480
+ chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
1481
+ xds_client()->interested_parties_,
1482
+ GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS,
1483
+ nullptr, GRPC_MILLIS_INF_FUTURE, nullptr);
1484
+ GPR_ASSERT(call_ != nullptr);
1485
+ // Init the request payload.
1486
+ grpc_slice request_payload_slice =
1487
+ xds_client()->api_.CreateLrsInitialRequest(xds_client()->server_name_);
1488
+ send_message_payload_ =
1489
+ grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1490
+ grpc_slice_unref_internal(request_payload_slice);
1491
+ // Init other data associated with the LRS call.
1492
+ grpc_metadata_array_init(&initial_metadata_recv_);
1493
+ grpc_metadata_array_init(&trailing_metadata_recv_);
1494
+ // Start the call.
1495
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1496
+ gpr_log(GPR_INFO,
1497
+ "[xds_client %p] Starting LRS call (chand: %p, calld: %p, "
1498
+ "call: %p)",
1499
+ xds_client(), chand(), this, call_);
1500
+ }
1501
+ // Create the ops.
1502
+ grpc_call_error call_error;
1503
+ grpc_op ops[3];
1504
+ memset(ops, 0, sizeof(ops));
1505
+ // Op: send initial metadata.
1506
+ grpc_op* op = ops;
1507
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
1508
+ op->data.send_initial_metadata.count = 0;
1509
+ op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
1510
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
1511
+ op->reserved = nullptr;
1512
+ op++;
1513
+ // Op: send request message.
1514
+ GPR_ASSERT(send_message_payload_ != nullptr);
1515
+ op->op = GRPC_OP_SEND_MESSAGE;
1516
+ op->data.send_message.send_message = send_message_payload_;
1517
+ op->flags = 0;
1518
+ op->reserved = nullptr;
1519
+ op++;
1520
+ Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
1521
+ GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
1522
+ grpc_schedule_on_exec_ctx);
1523
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1524
+ &on_initial_request_sent_);
1525
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1526
+ // Op: recv initial metadata.
1527
+ op = ops;
1528
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
1529
+ op->data.recv_initial_metadata.recv_initial_metadata =
1530
+ &initial_metadata_recv_;
1531
+ op->flags = 0;
1532
+ op->reserved = nullptr;
1533
+ op++;
1534
+ // Op: recv response.
1535
+ op->op = GRPC_OP_RECV_MESSAGE;
1536
+ op->data.recv_message.recv_message = &recv_message_payload_;
1537
+ op->flags = 0;
1538
+ op->reserved = nullptr;
1539
+ op++;
1540
+ Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
1541
+ GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
1542
+ grpc_schedule_on_exec_ctx);
1543
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1544
+ &on_response_received_);
1545
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1546
+ // Op: recv server status.
1547
+ op = ops;
1548
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
1549
+ op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
1550
+ op->data.recv_status_on_client.status = &status_code_;
1551
+ op->data.recv_status_on_client.status_details = &status_details_;
1552
+ op->flags = 0;
1553
+ op->reserved = nullptr;
1554
+ op++;
1555
+ // This callback signals the end of the call, so it relies on the initial
1556
+ // ref instead of a new ref. When it's invoked, it's the initial ref that is
1557
+ // unreffed.
1558
+ GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
1559
+ grpc_schedule_on_exec_ctx);
1560
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1561
+ &on_status_received_);
1562
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1563
+ }
1564
+
1565
+ XdsClient::ChannelState::LrsCallState::~LrsCallState() {
1566
+ grpc_metadata_array_destroy(&initial_metadata_recv_);
1567
+ grpc_metadata_array_destroy(&trailing_metadata_recv_);
1568
+ grpc_byte_buffer_destroy(send_message_payload_);
1569
+ grpc_byte_buffer_destroy(recv_message_payload_);
1570
+ grpc_slice_unref_internal(status_details_);
1571
+ GPR_ASSERT(call_ != nullptr);
1572
+ grpc_call_unref(call_);
1573
+ }
1574
+
1575
+ void XdsClient::ChannelState::LrsCallState::Orphan() {
1576
+ reporter_.reset();
1577
+ GPR_ASSERT(call_ != nullptr);
1578
+ // If we are here because xds_client wants to cancel the call,
1579
+ // on_status_received_ will complete the cancellation and clean up. Otherwise,
1580
+ // we are here because xds_client has to orphan a failed call, then the
1581
+ // following cancellation will be a no-op.
1582
+ grpc_call_cancel(call_, nullptr);
1583
+ // Note that the initial ref is hold by on_status_received_. So the
1584
+ // corresponding unref happens in on_status_received_ instead of here.
1585
+ }
1586
+
1587
+ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
1588
+ // Don't start again if already started.
1589
+ if (reporter_ != nullptr) return;
1590
+ // Don't start if the previous send_message op (of the initial request or the
1591
+ // last report of the previous reporter) hasn't completed.
1592
+ if (send_message_payload_ != nullptr) return;
1593
+ // Don't start if no LRS response has arrived.
1594
+ if (!seen_response()) return;
1595
+ // Don't start if the ADS call hasn't received any valid response. Note that
1596
+ // this must be the first channel because it is the current channel but its
1597
+ // ADS call hasn't seen any response.
1598
+ if (chand()->ads_calld_ == nullptr ||
1599
+ chand()->ads_calld_->calld() == nullptr ||
1600
+ !chand()->ads_calld_->calld()->seen_response()) {
1601
+ return;
1602
+ }
1603
+ // Start reporting.
1604
+ reporter_ = MakeOrphanable<Reporter>(
1605
+ Ref(DEBUG_LOCATION, "LRS+load_report+start"), load_reporting_interval_);
1606
+ }
1607
+
1608
+ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
1609
+ void* arg, grpc_error* /*error*/) {
1610
+ LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1611
+ lrs_calld->xds_client()->work_serializer_->Run(
1612
+ [lrs_calld]() { lrs_calld->OnInitialRequestSentLocked(); },
1613
+ DEBUG_LOCATION);
1614
+ }
1615
+
1616
+ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
1617
+ // Clear the send_message_payload_.
1618
+ grpc_byte_buffer_destroy(send_message_payload_);
1619
+ send_message_payload_ = nullptr;
1620
+ MaybeStartReportingLocked();
1621
+ Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
1622
+ }
1623
+
1624
+ void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
1625
+ void* arg, grpc_error* /*error*/) {
1626
+ LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1627
+ lrs_calld->xds_client()->work_serializer_->Run(
1628
+ [lrs_calld]() { lrs_calld->OnResponseReceivedLocked(); }, DEBUG_LOCATION);
1629
+ }
1630
+
1631
+ void XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1632
+ // Empty payload means the call was cancelled.
1633
+ if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
1634
+ Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked");
1635
+ return;
1636
+ }
1637
+ // Read the response.
1638
+ grpc_byte_buffer_reader bbr;
1639
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1640
+ grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1641
+ grpc_byte_buffer_reader_destroy(&bbr);
1642
+ grpc_byte_buffer_destroy(recv_message_payload_);
1643
+ recv_message_payload_ = nullptr;
1644
+ // This anonymous lambda is a hack to avoid the usage of goto.
1645
+ [&]() {
1646
+ // Parse the response.
1647
+ bool send_all_clusters = false;
1648
+ std::set<std::string> new_cluster_names;
1649
+ grpc_millis new_load_reporting_interval;
1650
+ grpc_error* parse_error = xds_client()->api_.ParseLrsResponse(
1651
+ response_slice, &send_all_clusters, &new_cluster_names,
1652
+ &new_load_reporting_interval);
1653
+ if (parse_error != GRPC_ERROR_NONE) {
1654
+ gpr_log(GPR_ERROR,
1655
+ "[xds_client %p] LRS response parsing failed. error=%s",
1656
+ xds_client(), grpc_error_string(parse_error));
1657
+ GRPC_ERROR_UNREF(parse_error);
1658
+ return;
1659
+ }
1660
+ seen_response_ = true;
1661
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1662
+ gpr_log(
1663
+ GPR_INFO,
1664
+ "[xds_client %p] LRS response received, %" PRIuPTR
1665
+ " cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
1666
+ "ms",
1667
+ xds_client(), new_cluster_names.size(), send_all_clusters,
1668
+ new_load_reporting_interval);
1669
+ size_t i = 0;
1670
+ for (const auto& name : new_cluster_names) {
1671
+ gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
1672
+ xds_client(), i++, name.c_str());
1673
+ }
1674
+ }
1675
+ if (new_load_reporting_interval <
1676
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS) {
1677
+ new_load_reporting_interval =
1678
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS;
1679
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1680
+ gpr_log(GPR_INFO,
1681
+ "[xds_client %p] Increased load_report_interval to minimum "
1682
+ "value %dms",
1683
+ xds_client(), GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1684
+ }
1685
+ }
1686
+ // Ignore identical update.
1687
+ if (send_all_clusters == send_all_clusters_ &&
1688
+ cluster_names_ == new_cluster_names &&
1689
+ load_reporting_interval_ == new_load_reporting_interval) {
1690
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1691
+ gpr_log(GPR_INFO,
1692
+ "[xds_client %p] Incoming LRS response identical to current, "
1693
+ "ignoring.",
1694
+ xds_client());
1695
+ }
1696
+ return;
1697
+ }
1698
+ // Stop current load reporting (if any) to adopt the new config.
1699
+ reporter_.reset();
1700
+ // Record the new config.
1701
+ send_all_clusters_ = send_all_clusters;
1702
+ cluster_names_ = std::move(new_cluster_names);
1703
+ load_reporting_interval_ = new_load_reporting_interval;
1704
+ // Try starting sending load report.
1705
+ MaybeStartReportingLocked();
1706
+ }();
1707
+ grpc_slice_unref_internal(response_slice);
1708
+ if (xds_client()->shutting_down_) {
1709
+ Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked+xds_shutdown");
1710
+ return;
1711
+ }
1712
+ // Keep listening for LRS config updates.
1713
+ grpc_op op;
1714
+ memset(&op, 0, sizeof(op));
1715
+ op.op = GRPC_OP_RECV_MESSAGE;
1716
+ op.data.recv_message.recv_message = &recv_message_payload_;
1717
+ op.flags = 0;
1718
+ op.reserved = nullptr;
1719
+ GPR_ASSERT(call_ != nullptr);
1720
+ // Reuse the "OnResponseReceivedLocked" ref taken in ctor.
1721
+ const grpc_call_error call_error =
1722
+ grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
1723
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1724
+ }
1725
+
1726
+ void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
1727
+ void* arg, grpc_error* error) {
1728
+ LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1729
+ GRPC_ERROR_REF(error); // ref owned by lambda
1730
+ lrs_calld->xds_client()->work_serializer_->Run(
1731
+ [lrs_calld, error]() { lrs_calld->OnStatusReceivedLocked(error); },
1732
+ DEBUG_LOCATION);
1733
+ }
1734
+
1735
+ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
1736
+ grpc_error* error) {
1737
+ GPR_ASSERT(call_ != nullptr);
1738
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1739
+ char* status_details = grpc_slice_to_c_string(status_details_);
1740
+ gpr_log(GPR_INFO,
1741
+ "[xds_client %p] LRS call status received. Status = %d, details "
1742
+ "= '%s', (chand: %p, calld: %p, call: %p), error '%s'",
1743
+ xds_client(), status_code_, status_details, chand(), this, call_,
1744
+ grpc_error_string(error));
1745
+ gpr_free(status_details);
1746
+ }
1747
+ // Ignore status from a stale call.
1748
+ if (IsCurrentCallOnChannel()) {
1749
+ GPR_ASSERT(!xds_client()->shutting_down_);
1750
+ // Try to restart the call.
1751
+ parent_->OnCallFinishedLocked();
1752
+ }
1753
+ Unref(DEBUG_LOCATION, "LRS+OnStatusReceivedLocked");
1754
+ GRPC_ERROR_UNREF(error);
1755
+ }
1756
+
1757
+ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
1758
+ // If the retryable LRS call is null (which only happens when the xds channel
1759
+ // is shutting down), all the LRS calls are stale.
1760
+ if (chand()->lrs_calld_ == nullptr) return false;
1761
+ return this == chand()->lrs_calld_->calld();
1762
+ }
1763
+
1764
+ //
1765
+ // XdsClient
1766
+ //
1767
+
1768
+ namespace {
1769
+
1770
+ grpc_millis GetRequestTimeout(const grpc_channel_args& args) {
1771
+ return grpc_channel_args_find_integer(
1772
+ &args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
1773
+ {15000, 0, INT_MAX});
1774
+ }
1775
+
1776
+ } // namespace
1777
+
1778
+ XdsClient::XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
1779
+ grpc_pollset_set* interested_parties,
1780
+ absl::string_view server_name,
1781
+ std::unique_ptr<ServiceConfigWatcherInterface> watcher,
1782
+ const grpc_channel_args& channel_args, grpc_error** error)
1783
+ : InternallyRefCounted<XdsClient>(&grpc_xds_client_trace),
1784
+ request_timeout_(GetRequestTimeout(channel_args)),
1785
+ work_serializer_(std::move(work_serializer)),
1786
+ interested_parties_(interested_parties),
1787
+ bootstrap_(
1788
+ XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
1789
+ api_(this, &grpc_xds_client_trace,
1790
+ bootstrap_ == nullptr ? nullptr : bootstrap_->node()),
1791
+ server_name_(server_name),
1792
+ service_config_watcher_(std::move(watcher)) {
1793
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1794
+ gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1795
+ }
1796
+ if (*error != GRPC_ERROR_NONE) {
1797
+ gpr_log(GPR_ERROR, "[xds_client %p] failed to read bootstrap file: %s",
1798
+ this, grpc_error_string(*error));
1799
+ return;
1800
+ }
1801
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1802
+ gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s", this,
1803
+ bootstrap_->server().server_uri.c_str());
1804
+ }
1805
+ grpc_channel_args* new_args = BuildXdsChannelArgs(channel_args);
1806
+ grpc_channel* channel = CreateXdsChannel(*bootstrap_, *new_args, error);
1807
+ grpc_channel_args_destroy(new_args);
1808
+ if (*error != GRPC_ERROR_NONE) {
1809
+ gpr_log(GPR_ERROR, "[xds_client %p] failed to create xds channel: %s", this,
1810
+ grpc_error_string(*error));
1811
+ return;
1812
+ }
1813
+ chand_ = MakeOrphanable<ChannelState>(
1814
+ Ref(DEBUG_LOCATION, "XdsClient+ChannelState"), channel);
1815
+ if (service_config_watcher_ != nullptr) {
1816
+ chand_->Subscribe(XdsApi::kLdsTypeUrl, std::string(server_name));
1817
+ }
1818
+ }
1819
+
1820
+ XdsClient::~XdsClient() {
1821
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1822
+ gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
1823
+ }
1824
+ }
1825
+
1826
+ void XdsClient::Orphan() {
1827
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1828
+ gpr_log(GPR_INFO, "[xds_client %p] shutting down xds client", this);
1829
+ }
1830
+ shutting_down_ = true;
1831
+ chand_.reset();
1832
+ // We do not clear cluster_map_ and endpoint_map_ if the xds client was
1833
+ // created by the XdsResolver because the maps contain refs for watchers which
1834
+ // in turn hold refs to the loadbalancing policies. At this point, it is
1835
+ // possible for ADS calls to be in progress. Unreffing the loadbalancing
1836
+ // policies before those calls are done would lead to issues such as
1837
+ // https://github.com/grpc/grpc/issues/20928.
1838
+ if (service_config_watcher_ != nullptr) {
1839
+ cluster_map_.clear();
1840
+ endpoint_map_.clear();
1841
+ }
1842
+ Unref(DEBUG_LOCATION, "XdsClient::Orphan()");
1843
+ }
1844
+
1845
+ void XdsClient::WatchClusterData(
1846
+ absl::string_view cluster_name,
1847
+ std::unique_ptr<ClusterWatcherInterface> watcher) {
1848
+ std::string cluster_name_str = std::string(cluster_name);
1849
+ ClusterState& cluster_state = cluster_map_[cluster_name_str];
1850
+ ClusterWatcherInterface* w = watcher.get();
1851
+ cluster_state.watchers[w] = std::move(watcher);
1852
+ // If we've already received an CDS update, notify the new watcher
1853
+ // immediately.
1854
+ if (cluster_state.update.has_value()) {
1855
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1856
+ gpr_log(GPR_INFO, "[xds_client %p] returning cached cluster data for %s",
1857
+ this, cluster_name_str.c_str());
1858
+ }
1859
+ w->OnClusterChanged(cluster_state.update.value());
1860
+ }
1861
+ chand_->Subscribe(XdsApi::kCdsTypeUrl, cluster_name_str);
1862
+ }
1863
+
1864
+ void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
1865
+ ClusterWatcherInterface* watcher,
1866
+ bool delay_unsubscription) {
1867
+ if (shutting_down_) return;
1868
+ std::string cluster_name_str = std::string(cluster_name);
1869
+ ClusterState& cluster_state = cluster_map_[cluster_name_str];
1870
+ auto it = cluster_state.watchers.find(watcher);
1871
+ if (it != cluster_state.watchers.end()) {
1872
+ cluster_state.watchers.erase(it);
1873
+ if (cluster_state.watchers.empty()) {
1874
+ cluster_map_.erase(cluster_name_str);
1875
+ chand_->Unsubscribe(XdsApi::kCdsTypeUrl, cluster_name_str,
1876
+ delay_unsubscription);
1877
+ }
1878
+ }
1879
+ }
1880
+
1881
+ void XdsClient::WatchEndpointData(
1882
+ absl::string_view eds_service_name,
1883
+ std::unique_ptr<EndpointWatcherInterface> watcher) {
1884
+ std::string eds_service_name_str = std::string(eds_service_name);
1885
+ EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
1886
+ EndpointWatcherInterface* w = watcher.get();
1887
+ endpoint_state.watchers[w] = std::move(watcher);
1888
+ // If we've already received an EDS update, notify the new watcher
1889
+ // immediately.
1890
+ if (endpoint_state.update.has_value()) {
1891
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1892
+ gpr_log(GPR_INFO, "[xds_client %p] returning cached endpoint data for %s",
1893
+ this, eds_service_name_str.c_str());
1894
+ }
1895
+ w->OnEndpointChanged(endpoint_state.update.value());
1896
+ }
1897
+ chand_->Subscribe(XdsApi::kEdsTypeUrl, eds_service_name_str);
1898
+ }
1899
+
1900
+ void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
1901
+ EndpointWatcherInterface* watcher,
1902
+ bool delay_unsubscription) {
1903
+ if (shutting_down_) return;
1904
+ std::string eds_service_name_str = std::string(eds_service_name);
1905
+ EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
1906
+ auto it = endpoint_state.watchers.find(watcher);
1907
+ if (it != endpoint_state.watchers.end()) {
1908
+ endpoint_state.watchers.erase(it);
1909
+ if (endpoint_state.watchers.empty()) {
1910
+ endpoint_map_.erase(eds_service_name_str);
1911
+ chand_->Unsubscribe(XdsApi::kEdsTypeUrl, eds_service_name_str,
1912
+ delay_unsubscription);
1913
+ }
1914
+ }
1915
+ }
1916
+
1917
+ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
1918
+ absl::string_view lrs_server, absl::string_view cluster_name,
1919
+ absl::string_view eds_service_name) {
1920
+ // TODO(roth): When we add support for direct federation, use the
1921
+ // server name specified in lrs_server.
1922
+ auto key =
1923
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name));
1924
+ // We jump through some hoops here to make sure that the absl::string_views
1925
+ // stored in the XdsClusterDropStats object point to the strings
1926
+ // in the load_report_map_ key, so that they have the same lifetime.
1927
+ auto it = load_report_map_
1928
+ .emplace(std::make_pair(std::move(key), LoadReportState()))
1929
+ .first;
1930
+ auto cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
1931
+ Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
1932
+ it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/);
1933
+ it->second.drop_stats.insert(cluster_drop_stats.get());
1934
+ chand_->MaybeStartLrsCall();
1935
+ return cluster_drop_stats;
1936
+ }
1937
+
1938
+ void XdsClient::RemoveClusterDropStats(
1939
+ absl::string_view /*lrs_server*/, absl::string_view cluster_name,
1940
+ absl::string_view eds_service_name,
1941
+ XdsClusterDropStats* cluster_drop_stats) {
1942
+ auto load_report_it = load_report_map_.find(
1943
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
1944
+ if (load_report_it == load_report_map_.end()) return;
1945
+ LoadReportState& load_report_state = load_report_it->second;
1946
+ // TODO(roth): When we add support for direct federation, use the
1947
+ // server name specified in lrs_server.
1948
+ auto it = load_report_state.drop_stats.find(cluster_drop_stats);
1949
+ if (it != load_report_state.drop_stats.end()) {
1950
+ // Record final drop stats in deleted_drop_stats, which will be
1951
+ // added to the next load report.
1952
+ for (const auto& p : cluster_drop_stats->GetSnapshotAndReset()) {
1953
+ load_report_state.deleted_drop_stats[p.first] += p.second;
1954
+ }
1955
+ load_report_state.drop_stats.erase(it);
1956
+ }
1957
+ }
1958
+
1959
+ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
1960
+ absl::string_view lrs_server, absl::string_view cluster_name,
1961
+ absl::string_view eds_service_name,
1962
+ RefCountedPtr<XdsLocalityName> locality) {
1963
+ // TODO(roth): When we add support for direct federation, use the
1964
+ // server name specified in lrs_server.
1965
+ auto key =
1966
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name));
1967
+ // We jump through some hoops here to make sure that the absl::string_views
1968
+ // stored in the XdsClusterLocalityStats object point to the strings
1969
+ // in the load_report_map_ key, so that they have the same lifetime.
1970
+ auto it = load_report_map_
1971
+ .emplace(std::make_pair(std::move(key), LoadReportState()))
1972
+ .first;
1973
+ auto cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
1974
+ Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
1975
+ it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
1976
+ locality);
1977
+ it->second.locality_stats[std::move(locality)].locality_stats.insert(
1978
+ cluster_locality_stats.get());
1979
+ chand_->MaybeStartLrsCall();
1980
+ return cluster_locality_stats;
1981
+ }
1982
+
1983
+ void XdsClient::RemoveClusterLocalityStats(
1984
+ absl::string_view /*lrs_server*/, absl::string_view cluster_name,
1985
+ absl::string_view eds_service_name,
1986
+ const RefCountedPtr<XdsLocalityName>& locality,
1987
+ XdsClusterLocalityStats* cluster_locality_stats) {
1988
+ auto load_report_it = load_report_map_.find(
1989
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
1990
+ if (load_report_it == load_report_map_.end()) return;
1991
+ LoadReportState& load_report_state = load_report_it->second;
1992
+ // TODO(roth): When we add support for direct federation, use the
1993
+ // server name specified in lrs_server.
1994
+ auto locality_it = load_report_state.locality_stats.find(locality);
1995
+ if (locality_it == load_report_state.locality_stats.end()) return;
1996
+ auto& locality_set = locality_it->second.locality_stats;
1997
+ auto it = locality_set.find(cluster_locality_stats);
1998
+ if (it != locality_set.end()) {
1999
+ // Record final snapshot in deleted_locality_stats, which will be
2000
+ // added to the next load report.
2001
+ locality_it->second.deleted_locality_stats.emplace_back(
2002
+ cluster_locality_stats->GetSnapshotAndReset());
2003
+ locality_set.erase(it);
2004
+ }
2005
+ }
2006
+
2007
+ void XdsClient::ResetBackoff() {
2008
+ if (chand_ != nullptr) {
2009
+ grpc_channel_reset_connect_backoff(chand_->channel());
2010
+ }
2011
+ }
2012
+
2013
+ namespace {
2014
+ std::string CreateServiceConfigActionCluster(const std::string& cluster_name) {
2015
+ return absl::StrFormat(
2016
+ " \"cds:%s\":{\n"
2017
+ " \"childPolicy\":[ {\n"
2018
+ " \"cds_experimental\":{\n"
2019
+ " \"cluster\": \"%s\"\n"
2020
+ " }\n"
2021
+ " } ]\n"
2022
+ " }",
2023
+ cluster_name, cluster_name);
2024
+ }
2025
+
2026
+ std::string CreateServiceConfigRoute(const std::string& action_name,
2027
+ const std::string& service,
2028
+ const std::string& method) {
2029
+ return absl::StrFormat(
2030
+ " { \n"
2031
+ " \"methodName\": {\n"
2032
+ " \"service\": \"%s\",\n"
2033
+ " \"method\": \"%s\"\n"
2034
+ " },\n"
2035
+ " \"action\": \"%s\"\n"
2036
+ " }",
2037
+ service, method, action_name);
2038
+ }
2039
+
2040
+ // Create the service config for one weighted cluster.
2041
+ std::string CreateServiceConfigActionWeightedCluster(
2042
+ const std::string& name,
2043
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>& clusters) {
2044
+ std::vector<std::string> config_parts;
2045
+ config_parts.push_back(
2046
+ absl::StrFormat(" \"weighted:%s\":{\n"
2047
+ " \"childPolicy\":[ {\n"
2048
+ " \"weighted_target_experimental\":{\n"
2049
+ " \"targets\":{\n",
2050
+ name));
2051
+ std::vector<std::string> weighted_targets;
2052
+ weighted_targets.reserve(clusters.size());
2053
+ for (const auto& cluster_weight : clusters) {
2054
+ weighted_targets.push_back(absl::StrFormat(
2055
+ " \"%s\":{\n"
2056
+ " \"weight\":%d,\n"
2057
+ " \"childPolicy\":[ {\n"
2058
+ " \"cds_experimental\":{\n"
2059
+ " \"cluster\": \"%s\"\n"
2060
+ " }\n"
2061
+ " } ]\n"
2062
+ " }",
2063
+ cluster_weight.name, cluster_weight.weight, cluster_weight.name));
2064
+ }
2065
+ config_parts.push_back(absl::StrJoin(weighted_targets, ",\n"));
2066
+ config_parts.push_back(
2067
+ " }\n"
2068
+ " }\n"
2069
+ " } ]\n"
2070
+ " }");
2071
+ return absl::StrJoin(config_parts, "");
2072
+ }
2073
+
2074
+ struct WeightedClustersKeys {
2075
+ std::string cluster_names_key;
2076
+ std::string cluster_weights_key;
2077
+ };
2078
+
2079
+ // Returns the cluster names and weights key or the cluster names only key.
2080
+ WeightedClustersKeys GetWeightedClustersKey(
2081
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
2082
+ weighted_clusters) {
2083
+ std::set<std::string> cluster_names;
2084
+ std::set<std::string> cluster_weights;
2085
+ for (const auto& cluster_weight : weighted_clusters) {
2086
+ cluster_names.emplace(absl::StrFormat("%s", cluster_weight.name));
2087
+ cluster_weights.emplace(
2088
+ absl::StrFormat("%s_%d", cluster_weight.name, cluster_weight.weight));
2089
+ }
2090
+ return {absl::StrJoin(cluster_names, "_"),
2091
+ absl::StrJoin(cluster_weights, "_")};
2092
+ }
2093
+
2094
+ } // namespace
2095
+
2096
+ std::string XdsClient::WeightedClustersActionName(
2097
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
2098
+ weighted_clusters) {
2099
+ WeightedClustersKeys keys = GetWeightedClustersKey(weighted_clusters);
2100
+ auto cluster_names_map_it =
2101
+ weighted_cluster_index_map_.find(keys.cluster_names_key);
2102
+ GPR_ASSERT(cluster_names_map_it != weighted_cluster_index_map_.end());
2103
+ const auto& cluster_weights_map =
2104
+ cluster_names_map_it->second.cluster_weights_map;
2105
+ auto cluster_weights_map_it =
2106
+ cluster_weights_map.find(keys.cluster_weights_key);
2107
+ GPR_ASSERT(cluster_weights_map_it != cluster_weights_map.end());
2108
+ return absl::StrFormat("%s_%d", keys.cluster_names_key,
2109
+ cluster_weights_map_it->second);
2110
+ }
2111
+
2112
+ void XdsClient::UpdateWeightedClusterIndexMap(
2113
+ const XdsApi::RdsUpdate& rds_update) {
2114
+ // Construct a list of unique WeightedCluster
2115
+ // actions which we need to process: to find action names
2116
+ std::map<std::string /* cluster_weights_key */,
2117
+ std::string /* cluster_names_key */>
2118
+ actions_to_process;
2119
+ for (const auto& route : rds_update.routes) {
2120
+ if (!route.weighted_clusters.empty()) {
2121
+ WeightedClustersKeys keys =
2122
+ GetWeightedClustersKey(route.weighted_clusters);
2123
+ auto action_it = actions_to_process.find(keys.cluster_weights_key);
2124
+ if (action_it == actions_to_process.end()) {
2125
+ actions_to_process[std::move(keys.cluster_weights_key)] =
2126
+ std::move(keys.cluster_names_key);
2127
+ }
2128
+ }
2129
+ }
2130
+ // First pass of all unique WeightedCluster actions: if the exact same
2131
+ // weighted target policy (same clusters and weights) appears in the old map,
2132
+ // then that old action name is taken again and should be moved to the new
2133
+ // map; any other action names from the old set of actions are candidates for
2134
+ // reuse.
2135
+ XdsClient::WeightedClusterIndexMap new_weighted_cluster_index_map;
2136
+ for (auto action_it = actions_to_process.begin();
2137
+ action_it != actions_to_process.end();) {
2138
+ const std::string& cluster_names_key = action_it->second;
2139
+ const std::string& cluster_weights_key = action_it->first;
2140
+ auto old_cluster_names_map_it =
2141
+ weighted_cluster_index_map_.find(cluster_names_key);
2142
+ if (old_cluster_names_map_it != weighted_cluster_index_map_.end()) {
2143
+ // Add cluster_names_key to the new map and copy next_index.
2144
+ auto& new_cluster_names_info =
2145
+ new_weighted_cluster_index_map[cluster_names_key];
2146
+ new_cluster_names_info.next_index =
2147
+ old_cluster_names_map_it->second.next_index;
2148
+ // Lookup cluster_weights_key in old map.
2149
+ auto& old_cluster_weights_map =
2150
+ old_cluster_names_map_it->second.cluster_weights_map;
2151
+ auto old_cluster_weights_map_it =
2152
+ old_cluster_weights_map.find(cluster_weights_key);
2153
+ if (old_cluster_weights_map_it != old_cluster_weights_map.end()) {
2154
+ // same policy found, move from old map to new map.
2155
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2156
+ old_cluster_weights_map_it->second;
2157
+ old_cluster_weights_map.erase(old_cluster_weights_map_it);
2158
+ // This action has been added to new map, so no need to process it
2159
+ // again.
2160
+ action_it = actions_to_process.erase(action_it);
2161
+ continue;
2162
+ }
2163
+ }
2164
+ ++action_it;
2165
+ }
2166
+ // Second pass of all remaining unique WeightedCluster actions: if clusters
2167
+ // for a new action are the same as an old unused action, reuse the name. If
2168
+ // clusters differ, use a brand new name.
2169
+ for (const auto& action : actions_to_process) {
2170
+ const std::string& cluster_names_key = action.second;
2171
+ const std::string& cluster_weights_key = action.first;
2172
+ auto& new_cluster_names_info =
2173
+ new_weighted_cluster_index_map[cluster_names_key];
2174
+ auto& old_cluster_weights_map =
2175
+ weighted_cluster_index_map_[cluster_names_key].cluster_weights_map;
2176
+ auto old_cluster_weights_it = old_cluster_weights_map.begin();
2177
+ if (old_cluster_weights_it != old_cluster_weights_map.end()) {
2178
+ // There is something to reuse: this action uses the same set
2179
+ // of clusters as a previous action and that action name is not
2180
+ // already taken.
2181
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2182
+ old_cluster_weights_it->second;
2183
+ // Remove the name from being able to reuse again.
2184
+ old_cluster_weights_map.erase(old_cluster_weights_it);
2185
+ } else {
2186
+ // There is nothing to reuse, take the next index to use and
2187
+ // increment.
2188
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2189
+ new_cluster_names_info.next_index++;
2190
+ }
2191
+ }
2192
+ weighted_cluster_index_map_ = std::move(new_weighted_cluster_index_map);
2193
+ }
2194
+
2195
+ grpc_error* XdsClient::CreateServiceConfig(
2196
+ const XdsApi::RdsUpdate& rds_update,
2197
+ RefCountedPtr<ServiceConfig>* service_config) {
2198
+ UpdateWeightedClusterIndexMap(rds_update);
2199
+ std::vector<std::string> actions_vector;
2200
+ std::vector<std::string> route_table;
2201
+ std::set<std::string> actions_set;
2202
+ for (const auto& route : rds_update.routes) {
2203
+ const std::string action_name =
2204
+ route.weighted_clusters.empty()
2205
+ ? route.cluster_name
2206
+ : WeightedClustersActionName(route.weighted_clusters);
2207
+ if (actions_set.find(action_name) == actions_set.end()) {
2208
+ actions_set.emplace(action_name);
2209
+ actions_vector.push_back(
2210
+ route.weighted_clusters.empty()
2211
+ ? CreateServiceConfigActionCluster(action_name)
2212
+ : CreateServiceConfigActionWeightedCluster(
2213
+ action_name, route.weighted_clusters));
2214
+ }
2215
+ route_table.push_back(CreateServiceConfigRoute(
2216
+ absl::StrFormat("%s:%s",
2217
+ route.weighted_clusters.empty() ? "cds" : "weighted",
2218
+ action_name),
2219
+ route.service, route.method));
2220
+ }
2221
+ std::vector<std::string> config_parts;
2222
+ config_parts.push_back(
2223
+ "{\n"
2224
+ " \"loadBalancingConfig\":[\n"
2225
+ " { \"xds_routing_experimental\":{\n"
2226
+ " \"actions\":{\n");
2227
+ config_parts.push_back(absl::StrJoin(actions_vector, ",\n"));
2228
+ config_parts.push_back(
2229
+ " },\n"
2230
+ " \"routes\":[\n");
2231
+ config_parts.push_back(absl::StrJoin(route_table, ",\n"));
2232
+ config_parts.push_back(
2233
+ " ]\n"
2234
+ " } }\n"
2235
+ " ]\n"
2236
+ "}");
2237
+ std::string json = absl::StrJoin(config_parts, "");
2238
+ grpc_error* error = GRPC_ERROR_NONE;
2239
+ *service_config = ServiceConfig::Create(json.c_str(), &error);
2240
+ return error;
2241
+ }
2242
+
2243
+ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
2244
+ bool send_all_clusters, const std::set<std::string>& clusters) {
2245
+ XdsApi::ClusterLoadReportMap snapshot_map;
2246
+ for (auto load_report_it = load_report_map_.begin();
2247
+ load_report_it != load_report_map_.end();) {
2248
+ // Cluster key is cluster and EDS service name.
2249
+ const auto& cluster_key = load_report_it->first;
2250
+ LoadReportState& load_report = load_report_it->second;
2251
+ // If the CDS response for a cluster indicates to use LRS but the
2252
+ // LRS server does not say that it wants reports for this cluster,
2253
+ // then we'll have stats objects here whose data we're not going to
2254
+ // include in the load report. However, we still need to clear out
2255
+ // the data from the stats objects, so that if the LRS server starts
2256
+ // asking for the data in the future, we don't incorrectly include
2257
+ // data from previous reporting intervals in that future report.
2258
+ const bool record_stats =
2259
+ send_all_clusters || clusters.find(cluster_key.first) != clusters.end();
2260
+ XdsApi::ClusterLoadReport snapshot;
2261
+ // Aggregate drop stats.
2262
+ snapshot.dropped_requests = std::move(load_report.deleted_drop_stats);
2263
+ for (auto& drop_stats : load_report.drop_stats) {
2264
+ for (const auto& p : drop_stats->GetSnapshotAndReset()) {
2265
+ snapshot.dropped_requests[p.first] += p.second;
2266
+ }
2267
+ }
2268
+ // Aggregate locality stats.
2269
+ for (auto it = load_report.locality_stats.begin();
2270
+ it != load_report.locality_stats.end();) {
2271
+ const RefCountedPtr<XdsLocalityName>& locality_name = it->first;
2272
+ auto& locality_state = it->second;
2273
+ XdsClusterLocalityStats::Snapshot& locality_snapshot =
2274
+ snapshot.locality_stats[locality_name];
2275
+ for (auto& locality_stats : locality_state.locality_stats) {
2276
+ locality_snapshot += locality_stats->GetSnapshotAndReset();
2277
+ }
2278
+ // Add final snapshots from recently deleted locality stats objects.
2279
+ for (auto& deleted_locality_stats :
2280
+ locality_state.deleted_locality_stats) {
2281
+ locality_snapshot += deleted_locality_stats;
2282
+ }
2283
+ locality_state.deleted_locality_stats.clear();
2284
+ // If the only thing left in this entry was final snapshots from
2285
+ // deleted locality stats objects, remove the entry.
2286
+ if (locality_state.locality_stats.empty()) {
2287
+ it = load_report.locality_stats.erase(it);
2288
+ } else {
2289
+ ++it;
2290
+ }
2291
+ }
2292
+ if (record_stats) {
2293
+ // Compute load report interval.
2294
+ const grpc_millis now = ExecCtx::Get()->Now();
2295
+ snapshot.load_report_interval = now - load_report.last_report_time;
2296
+ load_report.last_report_time = now;
2297
+ // Record snapshot.
2298
+ snapshot_map[cluster_key] = std::move(snapshot);
2299
+ }
2300
+ // If the only thing left in this entry was final snapshots from
2301
+ // deleted stats objects, remove the entry.
2302
+ if (load_report.locality_stats.empty() && load_report.drop_stats.empty()) {
2303
+ load_report_it = load_report_map_.erase(load_report_it);
2304
+ } else {
2305
+ ++load_report_it;
2306
+ }
2307
+ }
2308
+ return snapshot_map;
2309
+ }
2310
+
2311
+ void XdsClient::NotifyOnError(grpc_error* error) {
2312
+ if (service_config_watcher_ != nullptr) {
2313
+ service_config_watcher_->OnError(GRPC_ERROR_REF(error));
2314
+ }
2315
+ for (const auto& p : cluster_map_) {
2316
+ const ClusterState& cluster_state = p.second;
2317
+ for (const auto& p : cluster_state.watchers) {
2318
+ p.first->OnError(GRPC_ERROR_REF(error));
2319
+ }
2320
+ }
2321
+ for (const auto& p : endpoint_map_) {
2322
+ const EndpointState& endpoint_state = p.second;
2323
+ for (const auto& p : endpoint_state.watchers) {
2324
+ p.first->OnError(GRPC_ERROR_REF(error));
2325
+ }
2326
+ }
2327
+ GRPC_ERROR_UNREF(error);
2328
+ }
2329
+
2330
+ void* XdsClient::ChannelArgCopy(void* p) {
2331
+ XdsClient* xds_client = static_cast<XdsClient*>(p);
2332
+ xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
2333
+ return p;
2334
+ }
2335
+
2336
+ void XdsClient::ChannelArgDestroy(void* p) {
2337
+ XdsClient* xds_client = static_cast<XdsClient*>(p);
2338
+ xds_client->Unref(DEBUG_LOCATION, "channel arg");
2339
+ }
2340
+
2341
+ int XdsClient::ChannelArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
2342
+
2343
+ const grpc_arg_pointer_vtable XdsClient::kXdsClientVtable = {
2344
+ XdsClient::ChannelArgCopy, XdsClient::ChannelArgDestroy,
2345
+ XdsClient::ChannelArgCmp};
2346
+
2347
+ grpc_arg XdsClient::MakeChannelArg() const {
2348
+ return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
2349
+ const_cast<XdsClient*>(this),
2350
+ &XdsClient::kXdsClientVtable);
2351
+ }
2352
+
2353
+ RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
2354
+ const grpc_channel_args& args) {
2355
+ XdsClient* xds_client =
2356
+ grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
2357
+ if (xds_client != nullptr) return xds_client->Ref();
2358
+ return nullptr;
2359
+ }
2360
+
2361
+ grpc_channel_args* XdsClient::RemoveFromChannelArgs(
2362
+ const grpc_channel_args& args) {
2363
+ const char* arg_name = GRPC_ARG_XDS_CLIENT;
2364
+ return grpc_channel_args_copy_and_remove(&args, &arg_name, 1);
2365
+ }
2366
+
2367
+ } // namespace grpc_core