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,94 @@
1
+ /*
2
+ *
3
+ * Copyright 2019 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_SUBCHANNEL_INTERFACE_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/gprpp/ref_counted.h"
25
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ // The interface for subchannels that is exposed to LB policy implementations.
30
+ class SubchannelInterface : public RefCounted<SubchannelInterface> {
31
+ public:
32
+ class ConnectivityStateWatcherInterface {
33
+ public:
34
+ virtual ~ConnectivityStateWatcherInterface() = default;
35
+
36
+ // Will be invoked whenever the subchannel's connectivity state
37
+ // changes. There will be only one invocation of this method on a
38
+ // given watcher instance at any given time.
39
+ virtual void OnConnectivityStateChange(
40
+ grpc_connectivity_state new_state) = 0;
41
+
42
+ // TODO(roth): Remove this as soon as we move to EventManager-based
43
+ // polling.
44
+ virtual grpc_pollset_set* interested_parties() = 0;
45
+ };
46
+
47
+ template <typename TraceFlagT = TraceFlag>
48
+ explicit SubchannelInterface(TraceFlagT* trace_flag = nullptr)
49
+ : RefCounted<SubchannelInterface>(trace_flag) {}
50
+
51
+ virtual ~SubchannelInterface() = default;
52
+
53
+ // Returns the current connectivity state of the subchannel.
54
+ virtual grpc_connectivity_state CheckConnectivityState() = 0;
55
+
56
+ // Starts watching the subchannel's connectivity state.
57
+ // The first callback to the watcher will be delivered when the
58
+ // subchannel's connectivity state becomes a value other than
59
+ // initial_state, which may happen immediately.
60
+ // Subsequent callbacks will be delivered as the subchannel's state
61
+ // changes.
62
+ // The watcher will be destroyed either when the subchannel is
63
+ // destroyed or when CancelConnectivityStateWatch() is called.
64
+ // There can be only one watcher of a given subchannel. It is not
65
+ // valid to call this method a second time without first cancelling
66
+ // the previous watcher using CancelConnectivityStateWatch().
67
+ virtual void WatchConnectivityState(
68
+ grpc_connectivity_state initial_state,
69
+ std::unique_ptr<ConnectivityStateWatcherInterface> watcher) = 0;
70
+
71
+ // Cancels a connectivity state watch.
72
+ // If the watcher has already been destroyed, this is a no-op.
73
+ virtual void CancelConnectivityStateWatch(
74
+ ConnectivityStateWatcherInterface* watcher) = 0;
75
+
76
+ // Attempt to connect to the backend. Has no effect if already connected.
77
+ // If the subchannel is currently in backoff delay due to a previously
78
+ // failed attempt, the new connection attempt will not start until the
79
+ // backoff delay has elapsed.
80
+ virtual void AttemptToConnect() = 0;
81
+
82
+ // Resets the subchannel's connection backoff state. If AttemptToConnect()
83
+ // has been called since the subchannel entered TRANSIENT_FAILURE state,
84
+ // starts a new connection attempt immediately; otherwise, a new connection
85
+ // attempt will be started as soon as AttemptToConnect() is called.
86
+ virtual void ResetBackoff() = 0;
87
+
88
+ // TODO(roth): Need a better non-grpc-specific abstraction here.
89
+ virtual const grpc_channel_args* channel_args() = 0;
90
+ };
91
+
92
+ } // namespace grpc_core
93
+
94
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INTERFACE_H */
@@ -0,0 +1,97 @@
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/subchannel_pool_interface.h"
22
+
23
+ #include "src/core/lib/gpr/useful.h"
24
+
25
+ // The subchannel pool to reuse subchannels.
26
+ #define GRPC_ARG_SUBCHANNEL_POOL "grpc.subchannel_pool"
27
+ // The subchannel key ID that is only used in test to make each key unique.
28
+ #define GRPC_ARG_SUBCHANNEL_KEY_TEST_ONLY_ID "grpc.subchannel_key_test_only_id"
29
+
30
+ namespace grpc_core {
31
+
32
+ TraceFlag grpc_subchannel_pool_trace(false, "subchannel_pool");
33
+
34
+ SubchannelKey::SubchannelKey(const grpc_channel_args* args) {
35
+ Init(args, grpc_channel_args_normalize);
36
+ }
37
+
38
+ SubchannelKey::~SubchannelKey() {
39
+ grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
40
+ }
41
+
42
+ SubchannelKey::SubchannelKey(const SubchannelKey& other) {
43
+ Init(other.args_, grpc_channel_args_copy);
44
+ }
45
+
46
+ SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
47
+ grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
48
+ Init(other.args_, grpc_channel_args_copy);
49
+ return *this;
50
+ }
51
+
52
+ int SubchannelKey::Cmp(const SubchannelKey& other) const {
53
+ return grpc_channel_args_compare(args_, other.args_);
54
+ }
55
+
56
+ void SubchannelKey::Init(
57
+ const grpc_channel_args* args,
58
+ grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args)) {
59
+ args_ = copy_channel_args(args);
60
+ }
61
+
62
+ namespace {
63
+
64
+ void* arg_copy(void* p) {
65
+ auto* subchannel_pool = static_cast<SubchannelPoolInterface*>(p);
66
+ subchannel_pool->Ref().release();
67
+ return p;
68
+ }
69
+
70
+ void arg_destroy(void* p) {
71
+ auto* subchannel_pool = static_cast<SubchannelPoolInterface*>(p);
72
+ subchannel_pool->Unref();
73
+ }
74
+
75
+ int arg_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
76
+
77
+ const grpc_arg_pointer_vtable subchannel_pool_arg_vtable = {
78
+ arg_copy, arg_destroy, arg_cmp};
79
+
80
+ } // namespace
81
+
82
+ grpc_arg SubchannelPoolInterface::CreateChannelArg(
83
+ SubchannelPoolInterface* subchannel_pool) {
84
+ return grpc_channel_arg_pointer_create(
85
+ const_cast<char*>(GRPC_ARG_SUBCHANNEL_POOL), subchannel_pool,
86
+ &subchannel_pool_arg_vtable);
87
+ }
88
+
89
+ SubchannelPoolInterface*
90
+ SubchannelPoolInterface::GetSubchannelPoolFromChannelArgs(
91
+ const grpc_channel_args* args) {
92
+ const grpc_arg* arg = grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_POOL);
93
+ if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return nullptr;
94
+ return static_cast<SubchannelPoolInterface*>(arg->value.pointer.p);
95
+ }
96
+
97
+ } // namespace grpc_core
@@ -0,0 +1,91 @@
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_SUBCHANNEL_POOL_INTERFACE_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/avl/avl.h"
25
+ #include "src/core/lib/channel/channel_args.h"
26
+ #include "src/core/lib/gprpp/ref_counted.h"
27
+
28
+ namespace grpc_core {
29
+
30
+ class Subchannel;
31
+
32
+ extern TraceFlag grpc_subchannel_pool_trace;
33
+
34
+ // A key that can uniquely identify a subchannel.
35
+ class SubchannelKey {
36
+ public:
37
+ explicit SubchannelKey(const grpc_channel_args* args);
38
+ ~SubchannelKey();
39
+
40
+ // Copyable.
41
+ SubchannelKey(const SubchannelKey& other);
42
+ SubchannelKey& operator=(const SubchannelKey& other);
43
+ // Not movable.
44
+ SubchannelKey(SubchannelKey&&) = delete;
45
+ SubchannelKey& operator=(SubchannelKey&&) = delete;
46
+
47
+ int Cmp(const SubchannelKey& other) const;
48
+
49
+ private:
50
+ // Initializes the subchannel key with the given \a args and the function to
51
+ // copy channel args.
52
+ void Init(
53
+ const grpc_channel_args* args,
54
+ grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args));
55
+
56
+ const grpc_channel_args* args_;
57
+ };
58
+
59
+ // Interface for subchannel pool.
60
+ // TODO(juanlishen): This refcounting mechanism may lead to memory leak.
61
+ // To solve that, we should force polling to flush any pending callbacks, then
62
+ // shut down safely. See https://github.com/grpc/grpc/issues/12560.
63
+ class SubchannelPoolInterface : public RefCounted<SubchannelPoolInterface> {
64
+ public:
65
+ SubchannelPoolInterface() : RefCounted(&grpc_subchannel_pool_trace) {}
66
+ virtual ~SubchannelPoolInterface() {}
67
+
68
+ // Registers a subchannel against a key. Returns the subchannel registered
69
+ // with \a key, which may be different from \a constructed because we reuse
70
+ // (instead of update) any existing subchannel already registered with \a key.
71
+ virtual Subchannel* RegisterSubchannel(SubchannelKey* key,
72
+ Subchannel* constructed) = 0;
73
+
74
+ // Removes the registered subchannel found by \a key.
75
+ virtual void UnregisterSubchannel(SubchannelKey* key) = 0;
76
+
77
+ // Finds the subchannel registered for the given subchannel key. Returns NULL
78
+ // if no such channel exists. Thread-safe.
79
+ virtual Subchannel* FindSubchannel(SubchannelKey* key) = 0;
80
+
81
+ // Creates a channel arg from \a subchannel pool.
82
+ static grpc_arg CreateChannelArg(SubchannelPoolInterface* subchannel_pool);
83
+
84
+ // Gets the subchannel pool from the channel args.
85
+ static SubchannelPoolInterface* GetSubchannelPoolFromChannelArgs(
86
+ const grpc_channel_args* args);
87
+ };
88
+
89
+ } // namespace grpc_core
90
+
91
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H */
@@ -0,0 +1,1906 @@
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 <algorithm>
22
+ #include <cctype>
23
+ #include <cstdlib>
24
+
25
+ #include "absl/strings/str_cat.h"
26
+ #include "absl/strings/str_join.h"
27
+ #include "absl/strings/str_split.h"
28
+
29
+ #include <grpc/impl/codegen/log.h>
30
+ #include <grpc/support/alloc.h>
31
+ #include <grpc/support/string_util.h>
32
+
33
+ #include "src/core/ext/filters/client_channel/xds/xds_api.h"
34
+ #include "src/core/lib/gpr/env.h"
35
+ #include "src/core/lib/gpr/string.h"
36
+ #include "src/core/lib/gpr/useful.h"
37
+ #include "src/core/lib/iomgr/error.h"
38
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
39
+
40
+ #include "envoy/api/v2/cds.upb.h"
41
+ #include "envoy/api/v2/core/address.upb.h"
42
+ #include "envoy/api/v2/core/base.upb.h"
43
+ #include "envoy/api/v2/core/config_source.upb.h"
44
+ #include "envoy/api/v2/core/health_check.upb.h"
45
+ #include "envoy/api/v2/discovery.upb.h"
46
+ #include "envoy/api/v2/eds.upb.h"
47
+ #include "envoy/api/v2/endpoint/endpoint.upb.h"
48
+ #include "envoy/api/v2/endpoint/load_report.upb.h"
49
+ #include "envoy/api/v2/lds.upb.h"
50
+ #include "envoy/api/v2/rds.upb.h"
51
+ #include "envoy/api/v2/route/route.upb.h"
52
+ #include "envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h"
53
+ #include "envoy/config/listener/v2/api_listener.upb.h"
54
+ #include "envoy/service/load_stats/v2/lrs.upb.h"
55
+ #include "envoy/type/percent.upb.h"
56
+ #include "google/protobuf/any.upb.h"
57
+ #include "google/protobuf/duration.upb.h"
58
+ #include "google/protobuf/struct.upb.h"
59
+ #include "google/protobuf/wrappers.upb.h"
60
+ #include "google/rpc/status.upb.h"
61
+ #include "upb/upb.h"
62
+
63
+ namespace grpc_core {
64
+
65
+ //
66
+ // XdsApi::PriorityListUpdate
67
+ //
68
+
69
+ bool XdsApi::PriorityListUpdate::operator==(
70
+ const XdsApi::PriorityListUpdate& other) const {
71
+ if (priorities_.size() != other.priorities_.size()) return false;
72
+ for (size_t i = 0; i < priorities_.size(); ++i) {
73
+ if (priorities_[i].localities != other.priorities_[i].localities) {
74
+ return false;
75
+ }
76
+ }
77
+ return true;
78
+ }
79
+
80
+ void XdsApi::PriorityListUpdate::Add(
81
+ XdsApi::PriorityListUpdate::LocalityMap::Locality locality) {
82
+ // Pad the missing priorities in case the localities are not ordered by
83
+ // priority.
84
+ if (!Contains(locality.priority)) priorities_.resize(locality.priority + 1);
85
+ LocalityMap& locality_map = priorities_[locality.priority];
86
+ locality_map.localities.emplace(locality.name, std::move(locality));
87
+ }
88
+
89
+ const XdsApi::PriorityListUpdate::LocalityMap* XdsApi::PriorityListUpdate::Find(
90
+ uint32_t priority) const {
91
+ if (!Contains(priority)) return nullptr;
92
+ return &priorities_[priority];
93
+ }
94
+
95
+ bool XdsApi::PriorityListUpdate::Contains(
96
+ const RefCountedPtr<XdsLocalityName>& name) {
97
+ for (size_t i = 0; i < priorities_.size(); ++i) {
98
+ const LocalityMap& locality_map = priorities_[i];
99
+ if (locality_map.Contains(name)) return true;
100
+ }
101
+ return false;
102
+ }
103
+
104
+ //
105
+ // XdsApi::DropConfig
106
+ //
107
+
108
+ bool XdsApi::DropConfig::ShouldDrop(const std::string** category_name) const {
109
+ for (size_t i = 0; i < drop_category_list_.size(); ++i) {
110
+ const auto& drop_category = drop_category_list_[i];
111
+ // Generate a random number in [0, 1000000).
112
+ const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
113
+ if (random < drop_category.parts_per_million) {
114
+ *category_name = &drop_category.name;
115
+ return true;
116
+ }
117
+ }
118
+ return false;
119
+ }
120
+
121
+ //
122
+ // XdsApi
123
+ //
124
+
125
+ const char* XdsApi::kLdsTypeUrl = "type.googleapis.com/envoy.api.v2.Listener";
126
+ const char* XdsApi::kRdsTypeUrl =
127
+ "type.googleapis.com/envoy.api.v2.RouteConfiguration";
128
+ const char* XdsApi::kCdsTypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
129
+ const char* XdsApi::kEdsTypeUrl =
130
+ "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
131
+
132
+ namespace {
133
+
134
+ bool XdsRoutingEnabled() {
135
+ char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_ROUTING");
136
+ bool parsed_value;
137
+ bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
138
+ gpr_free(value);
139
+ return parse_succeeded && parsed_value;
140
+ }
141
+
142
+ } // namespace
143
+
144
+ XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
145
+ const XdsBootstrap::Node* node)
146
+ : client_(client),
147
+ tracer_(tracer),
148
+ xds_routing_enabled_(XdsRoutingEnabled()),
149
+ node_(node),
150
+ build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
151
+ grpc_version_string())),
152
+ user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING)) {}
153
+
154
+ namespace {
155
+
156
+ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
157
+ const Json& value);
158
+
159
+ void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
160
+ const Json::Array& values) {
161
+ for (const auto& value : values) {
162
+ auto* value_pb = google_protobuf_ListValue_add_values(list_value, arena);
163
+ PopulateMetadataValue(arena, value_pb, value);
164
+ }
165
+ }
166
+
167
+ void PopulateMetadata(upb_arena* arena, google_protobuf_Struct* metadata_pb,
168
+ const Json::Object& metadata) {
169
+ for (const auto& p : metadata) {
170
+ google_protobuf_Struct_FieldsEntry* field =
171
+ google_protobuf_Struct_add_fields(metadata_pb, arena);
172
+ google_protobuf_Struct_FieldsEntry_set_key(
173
+ field, upb_strview_makez(p.first.c_str()));
174
+ google_protobuf_Value* value =
175
+ google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
176
+ PopulateMetadataValue(arena, value, p.second);
177
+ }
178
+ }
179
+
180
+ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
181
+ const Json& value) {
182
+ switch (value.type()) {
183
+ case Json::Type::JSON_NULL:
184
+ google_protobuf_Value_set_null_value(value_pb, 0);
185
+ break;
186
+ case Json::Type::NUMBER:
187
+ google_protobuf_Value_set_number_value(
188
+ value_pb, strtod(value.string_value().c_str(), nullptr));
189
+ break;
190
+ case Json::Type::STRING:
191
+ google_protobuf_Value_set_string_value(
192
+ value_pb, upb_strview_makez(value.string_value().c_str()));
193
+ break;
194
+ case Json::Type::JSON_TRUE:
195
+ google_protobuf_Value_set_bool_value(value_pb, true);
196
+ break;
197
+ case Json::Type::JSON_FALSE:
198
+ google_protobuf_Value_set_bool_value(value_pb, false);
199
+ break;
200
+ case Json::Type::OBJECT: {
201
+ google_protobuf_Struct* struct_value =
202
+ google_protobuf_Value_mutable_struct_value(value_pb, arena);
203
+ PopulateMetadata(arena, struct_value, value.object_value());
204
+ break;
205
+ }
206
+ case Json::Type::ARRAY: {
207
+ google_protobuf_ListValue* list_value =
208
+ google_protobuf_Value_mutable_list_value(value_pb, arena);
209
+ PopulateListValue(arena, list_value, value.array_value());
210
+ break;
211
+ }
212
+ }
213
+ }
214
+
215
+ void PopulateNode(upb_arena* arena, const XdsBootstrap::Node* node,
216
+ const std::string& build_version,
217
+ const std::string& user_agent_name,
218
+ const std::string& server_name,
219
+ envoy_api_v2_core_Node* node_msg) {
220
+ if (node != nullptr) {
221
+ if (!node->id.empty()) {
222
+ envoy_api_v2_core_Node_set_id(node_msg,
223
+ upb_strview_makez(node->id.c_str()));
224
+ }
225
+ if (!node->cluster.empty()) {
226
+ envoy_api_v2_core_Node_set_cluster(
227
+ node_msg, upb_strview_makez(node->cluster.c_str()));
228
+ }
229
+ if (!node->metadata.object_value().empty()) {
230
+ google_protobuf_Struct* metadata =
231
+ envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
232
+ PopulateMetadata(arena, metadata, node->metadata.object_value());
233
+ }
234
+ if (!server_name.empty()) {
235
+ google_protobuf_Struct* metadata =
236
+ envoy_api_v2_core_Node_mutable_metadata(node_msg, arena);
237
+ google_protobuf_Struct_FieldsEntry* field =
238
+ google_protobuf_Struct_add_fields(metadata, arena);
239
+ google_protobuf_Struct_FieldsEntry_set_key(
240
+ field, upb_strview_makez("PROXYLESS_CLIENT_HOSTNAME"));
241
+ google_protobuf_Value* value =
242
+ google_protobuf_Struct_FieldsEntry_mutable_value(field, arena);
243
+ google_protobuf_Value_set_string_value(
244
+ value, upb_strview_make(server_name.data(), server_name.size()));
245
+ }
246
+ if (!node->locality_region.empty() || !node->locality_zone.empty() ||
247
+ !node->locality_subzone.empty()) {
248
+ envoy_api_v2_core_Locality* locality =
249
+ envoy_api_v2_core_Node_mutable_locality(node_msg, arena);
250
+ if (!node->locality_region.empty()) {
251
+ envoy_api_v2_core_Locality_set_region(
252
+ locality, upb_strview_makez(node->locality_region.c_str()));
253
+ }
254
+ if (!node->locality_zone.empty()) {
255
+ envoy_api_v2_core_Locality_set_zone(
256
+ locality, upb_strview_makez(node->locality_zone.c_str()));
257
+ }
258
+ if (!node->locality_subzone.empty()) {
259
+ envoy_api_v2_core_Locality_set_sub_zone(
260
+ locality, upb_strview_makez(node->locality_subzone.c_str()));
261
+ }
262
+ }
263
+ }
264
+ envoy_api_v2_core_Node_set_build_version(
265
+ node_msg, upb_strview_make(build_version.data(), build_version.size()));
266
+ envoy_api_v2_core_Node_set_user_agent_name(
267
+ node_msg,
268
+ upb_strview_make(user_agent_name.data(), user_agent_name.size()));
269
+ envoy_api_v2_core_Node_set_user_agent_version(
270
+ node_msg, upb_strview_makez(grpc_version_string()));
271
+ envoy_api_v2_core_Node_add_client_features(
272
+ node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
273
+ arena);
274
+ }
275
+
276
+ inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
277
+ return absl::string_view(str.data, str.size);
278
+ }
279
+
280
+ inline std::string UpbStringToStdString(const upb_strview& str) {
281
+ return std::string(str.data, str.size);
282
+ }
283
+
284
+ inline void AddStringField(const char* name, const upb_strview& value,
285
+ std::vector<std::string>* fields,
286
+ bool add_if_empty = false) {
287
+ if (value.size > 0 || add_if_empty) {
288
+ fields->emplace_back(
289
+ absl::StrCat(name, ": \"", UpbStringToAbsl(value), "\""));
290
+ }
291
+ }
292
+
293
+ inline void AddUInt32ValueField(const char* name,
294
+ const google_protobuf_UInt32Value* value,
295
+ std::vector<std::string>* fields) {
296
+ if (value != nullptr) {
297
+ fields->emplace_back(absl::StrCat(
298
+ name, " { value: ", google_protobuf_UInt32Value_value(value), " }"));
299
+ }
300
+ }
301
+
302
+ inline void AddLocalityField(int indent_level,
303
+ const envoy_api_v2_core_Locality* locality,
304
+ std::vector<std::string>* fields) {
305
+ std::string indent =
306
+ absl::StrJoin(std::vector<std::string>(indent_level, " "), "");
307
+ // region
308
+ std::string field = absl::StrCat(indent, "region");
309
+ AddStringField(field.c_str(), envoy_api_v2_core_Locality_region(locality),
310
+ fields);
311
+ // zone
312
+ field = absl::StrCat(indent, "zone");
313
+ AddStringField(field.c_str(), envoy_api_v2_core_Locality_zone(locality),
314
+ fields);
315
+ // sub_zone
316
+ field = absl::StrCat(indent, "sub_zone");
317
+ AddStringField(field.c_str(), envoy_api_v2_core_Locality_sub_zone(locality),
318
+ fields);
319
+ }
320
+
321
+ void AddNodeLogFields(const envoy_api_v2_core_Node* node,
322
+ std::vector<std::string>* fields) {
323
+ fields->emplace_back("node {");
324
+ // id
325
+ AddStringField(" id", envoy_api_v2_core_Node_id(node), fields);
326
+ // metadata
327
+ const google_protobuf_Struct* metadata =
328
+ envoy_api_v2_core_Node_metadata(node);
329
+ if (metadata != nullptr) {
330
+ fields->emplace_back(" metadata {");
331
+ size_t num_entries;
332
+ const google_protobuf_Struct_FieldsEntry* const* entries =
333
+ google_protobuf_Struct_fields(metadata, &num_entries);
334
+ for (size_t i = 0; i < num_entries; ++i) {
335
+ fields->emplace_back(" field {");
336
+ // key
337
+ AddStringField(" key",
338
+ google_protobuf_Struct_FieldsEntry_key(entries[i]),
339
+ fields);
340
+ // value
341
+ const google_protobuf_Value* value =
342
+ google_protobuf_Struct_FieldsEntry_value(entries[i]);
343
+ if (value != nullptr) {
344
+ std::string value_str;
345
+ if (google_protobuf_Value_has_string_value(value)) {
346
+ value_str = absl::StrCat(
347
+ "string_value: \"",
348
+ UpbStringToAbsl(google_protobuf_Value_string_value(value)), "\"");
349
+ } else if (google_protobuf_Value_has_null_value(value)) {
350
+ value_str = "null_value: NULL_VALUE";
351
+ } else if (google_protobuf_Value_has_number_value(value)) {
352
+ value_str = absl::StrCat("double_value: ",
353
+ google_protobuf_Value_number_value(value));
354
+ } else if (google_protobuf_Value_has_bool_value(value)) {
355
+ value_str = absl::StrCat("bool_value: ",
356
+ google_protobuf_Value_bool_value(value));
357
+ } else if (google_protobuf_Value_has_struct_value(value)) {
358
+ value_str = "struct_value: <not printed>";
359
+ } else if (google_protobuf_Value_has_list_value(value)) {
360
+ value_str = "list_value: <not printed>";
361
+ } else {
362
+ value_str = "<unknown>";
363
+ }
364
+ fields->emplace_back(absl::StrCat(" value { ", value_str, " }"));
365
+ }
366
+ fields->emplace_back(" }");
367
+ }
368
+ fields->emplace_back(" }");
369
+ }
370
+ // locality
371
+ const envoy_api_v2_core_Locality* locality =
372
+ envoy_api_v2_core_Node_locality(node);
373
+ if (locality != nullptr) {
374
+ fields->emplace_back(" locality {");
375
+ AddLocalityField(2, locality, fields);
376
+ fields->emplace_back(" }");
377
+ }
378
+ // build_version
379
+ AddStringField(" build_version", envoy_api_v2_core_Node_build_version(node),
380
+ fields);
381
+ // user_agent_name
382
+ AddStringField(" user_agent_name",
383
+ envoy_api_v2_core_Node_user_agent_name(node), fields);
384
+ // user_agent_version
385
+ AddStringField(" user_agent_version",
386
+ envoy_api_v2_core_Node_user_agent_version(node), fields);
387
+ // client_features
388
+ size_t num_client_features;
389
+ const upb_strview* client_features =
390
+ envoy_api_v2_core_Node_client_features(node, &num_client_features);
391
+ for (size_t i = 0; i < num_client_features; ++i) {
392
+ AddStringField(" client_features", client_features[i], fields);
393
+ }
394
+ fields->emplace_back("}");
395
+ }
396
+
397
+ void MaybeLogDiscoveryRequest(XdsClient* client, TraceFlag* tracer,
398
+ const envoy_api_v2_DiscoveryRequest* request) {
399
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
400
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
401
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
402
+ // the raw proto instead of doing this manually.
403
+ std::vector<std::string> fields;
404
+ // version_info
405
+ AddStringField("version_info",
406
+ envoy_api_v2_DiscoveryRequest_version_info(request),
407
+ &fields);
408
+ // node
409
+ const envoy_api_v2_core_Node* node =
410
+ envoy_api_v2_DiscoveryRequest_node(request);
411
+ if (node != nullptr) AddNodeLogFields(node, &fields);
412
+ // resource_names
413
+ size_t num_resource_names;
414
+ const upb_strview* resource_names =
415
+ envoy_api_v2_DiscoveryRequest_resource_names(request,
416
+ &num_resource_names);
417
+ for (size_t i = 0; i < num_resource_names; ++i) {
418
+ AddStringField("resource_names", resource_names[i], &fields);
419
+ }
420
+ // type_url
421
+ AddStringField("type_url", envoy_api_v2_DiscoveryRequest_type_url(request),
422
+ &fields);
423
+ // response_nonce
424
+ AddStringField("response_nonce",
425
+ envoy_api_v2_DiscoveryRequest_response_nonce(request),
426
+ &fields);
427
+ // error_detail
428
+ const struct google_rpc_Status* error_detail =
429
+ envoy_api_v2_DiscoveryRequest_error_detail(request);
430
+ if (error_detail != nullptr) {
431
+ fields.emplace_back("error_detail {");
432
+ // code
433
+ int32_t code = google_rpc_Status_code(error_detail);
434
+ if (code != 0) fields.emplace_back(absl::StrCat(" code: ", code));
435
+ // message
436
+ AddStringField(" message", google_rpc_Status_message(error_detail),
437
+ &fields);
438
+ fields.emplace_back("}");
439
+ }
440
+ gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s", client,
441
+ absl::StrJoin(fields, "\n").c_str());
442
+ }
443
+ }
444
+
445
+ grpc_slice SerializeDiscoveryRequest(upb_arena* arena,
446
+ envoy_api_v2_DiscoveryRequest* request) {
447
+ size_t output_length;
448
+ char* output =
449
+ envoy_api_v2_DiscoveryRequest_serialize(request, arena, &output_length);
450
+ return grpc_slice_from_copied_buffer(output, output_length);
451
+ }
452
+
453
+ } // namespace
454
+
455
+ grpc_slice XdsApi::CreateAdsRequest(
456
+ const std::string& type_url,
457
+ const std::set<absl::string_view>& resource_names,
458
+ const std::string& version, const std::string& nonce, grpc_error* error,
459
+ bool populate_node) {
460
+ upb::Arena arena;
461
+ // Create a request.
462
+ envoy_api_v2_DiscoveryRequest* request =
463
+ envoy_api_v2_DiscoveryRequest_new(arena.ptr());
464
+ // Set type_url.
465
+ envoy_api_v2_DiscoveryRequest_set_type_url(
466
+ request, upb_strview_make(type_url.data(), type_url.size()));
467
+ // Set version_info.
468
+ if (!version.empty()) {
469
+ envoy_api_v2_DiscoveryRequest_set_version_info(
470
+ request, upb_strview_make(version.data(), version.size()));
471
+ }
472
+ // Set nonce.
473
+ if (!nonce.empty()) {
474
+ envoy_api_v2_DiscoveryRequest_set_response_nonce(
475
+ request, upb_strview_make(nonce.data(), nonce.size()));
476
+ }
477
+ // Set error_detail if it's a NACK.
478
+ if (error != GRPC_ERROR_NONE) {
479
+ grpc_slice error_description_slice;
480
+ GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION,
481
+ &error_description_slice));
482
+ upb_strview error_description_strview =
483
+ upb_strview_make(reinterpret_cast<const char*>(
484
+ GPR_SLICE_START_PTR(error_description_slice)),
485
+ GPR_SLICE_LENGTH(error_description_slice));
486
+ google_rpc_Status* error_detail =
487
+ envoy_api_v2_DiscoveryRequest_mutable_error_detail(request,
488
+ arena.ptr());
489
+ google_rpc_Status_set_message(error_detail, error_description_strview);
490
+ GRPC_ERROR_UNREF(error);
491
+ }
492
+ // Populate node.
493
+ if (populate_node) {
494
+ envoy_api_v2_core_Node* node_msg =
495
+ envoy_api_v2_DiscoveryRequest_mutable_node(request, arena.ptr());
496
+ PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_, "",
497
+ node_msg);
498
+ }
499
+ // Add resource_names.
500
+ for (const auto& resource_name : resource_names) {
501
+ envoy_api_v2_DiscoveryRequest_add_resource_names(
502
+ request, upb_strview_make(resource_name.data(), resource_name.size()),
503
+ arena.ptr());
504
+ }
505
+ MaybeLogDiscoveryRequest(client_, tracer_, request);
506
+ return SerializeDiscoveryRequest(arena.ptr(), request);
507
+ }
508
+
509
+ namespace {
510
+
511
+ void MaybeLogDiscoveryResponse(XdsClient* client, TraceFlag* tracer,
512
+ const envoy_api_v2_DiscoveryResponse* response) {
513
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
514
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
515
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
516
+ // the raw proto instead of doing this manually.
517
+ std::vector<std::string> fields;
518
+ // version_info
519
+ AddStringField("version_info",
520
+ envoy_api_v2_DiscoveryResponse_version_info(response),
521
+ &fields);
522
+ // resources
523
+ size_t num_resources;
524
+ envoy_api_v2_DiscoveryResponse_resources(response, &num_resources);
525
+ fields.emplace_back(
526
+ absl::StrCat("resources: <", num_resources, " element(s)>"));
527
+ // type_url
528
+ AddStringField("type_url",
529
+ envoy_api_v2_DiscoveryResponse_type_url(response), &fields);
530
+ // nonce
531
+ AddStringField("nonce", envoy_api_v2_DiscoveryResponse_nonce(response),
532
+ &fields);
533
+ gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", client,
534
+ absl::StrJoin(fields, "\n").c_str());
535
+ }
536
+ }
537
+
538
+ void MaybeLogRouteConfiguration(
539
+ XdsClient* client, TraceFlag* tracer,
540
+ const envoy_api_v2_RouteConfiguration* route_config) {
541
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
542
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
543
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
544
+ // the raw proto instead of doing this manually.
545
+ std::vector<std::string> fields;
546
+ // name
547
+ AddStringField("name", envoy_api_v2_RouteConfiguration_name(route_config),
548
+ &fields);
549
+ // virtual_hosts
550
+ size_t num_virtual_hosts;
551
+ const envoy_api_v2_route_VirtualHost* const* virtual_hosts =
552
+ envoy_api_v2_RouteConfiguration_virtual_hosts(route_config,
553
+ &num_virtual_hosts);
554
+ for (size_t i = 0; i < num_virtual_hosts; ++i) {
555
+ const auto* virtual_host = virtual_hosts[i];
556
+ fields.push_back("virtual_hosts {");
557
+ // name
558
+ AddStringField(
559
+ " name", envoy_api_v2_route_VirtualHost_name(virtual_host), &fields);
560
+ // domains
561
+ size_t num_domains;
562
+ const upb_strview* const domains =
563
+ envoy_api_v2_route_VirtualHost_domains(virtual_host, &num_domains);
564
+ for (size_t j = 0; j < num_domains; ++j) {
565
+ AddStringField(" domains", domains[j], &fields);
566
+ }
567
+ // routes
568
+ size_t num_routes;
569
+ const envoy_api_v2_route_Route* const* routes =
570
+ envoy_api_v2_route_VirtualHost_routes(virtual_host, &num_routes);
571
+ for (size_t j = 0; j < num_routes; ++j) {
572
+ const auto* route = routes[j];
573
+ fields.push_back(" route {");
574
+ // name
575
+ AddStringField(" name", envoy_api_v2_route_Route_name(route),
576
+ &fields);
577
+ // match
578
+ const envoy_api_v2_route_RouteMatch* match =
579
+ envoy_api_v2_route_Route_match(route);
580
+ if (match != nullptr) {
581
+ fields.emplace_back(" match {");
582
+ // path matching
583
+ if (envoy_api_v2_route_RouteMatch_has_prefix(match)) {
584
+ AddStringField(" prefix",
585
+ envoy_api_v2_route_RouteMatch_prefix(match), &fields,
586
+ /*add_if_empty=*/true);
587
+ } else if (envoy_api_v2_route_RouteMatch_has_path(match)) {
588
+ AddStringField(" path",
589
+ envoy_api_v2_route_RouteMatch_path(match), &fields,
590
+ /*add_if_empty=*/true);
591
+ } else if (envoy_api_v2_route_RouteMatch_has_regex(match)) {
592
+ AddStringField(" regex",
593
+ envoy_api_v2_route_RouteMatch_regex(match), &fields,
594
+ /*add_if_empty=*/true);
595
+ } else if (envoy_api_v2_route_RouteMatch_has_safe_regex(match)) {
596
+ fields.emplace_back(" safe_regex: <not printed>");
597
+ } else {
598
+ fields.emplace_back(" <unknown path matching type>");
599
+ }
600
+ // header matching
601
+ size_t num_headers;
602
+ envoy_api_v2_route_RouteMatch_headers(match, &num_headers);
603
+ if (num_headers > 0) {
604
+ fields.emplace_back(
605
+ absl::StrCat(" headers: <", num_headers, " element(s)>"));
606
+ }
607
+ fields.emplace_back(" }");
608
+ }
609
+ // action
610
+ if (envoy_api_v2_route_Route_has_route(route)) {
611
+ const envoy_api_v2_route_RouteAction* action =
612
+ envoy_api_v2_route_Route_route(route);
613
+ fields.emplace_back(" route {");
614
+ if (envoy_api_v2_route_RouteAction_has_cluster(action)) {
615
+ AddStringField(" cluster",
616
+ envoy_api_v2_route_RouteAction_cluster(action),
617
+ &fields);
618
+ } else if (envoy_api_v2_route_RouteAction_has_cluster_header(
619
+ action)) {
620
+ AddStringField(
621
+ " cluster_header",
622
+ envoy_api_v2_route_RouteAction_cluster_header(action), &fields);
623
+ } else if (envoy_api_v2_route_RouteAction_has_weighted_clusters(
624
+ action)) {
625
+ const envoy_api_v2_route_WeightedCluster* weighted_clusters =
626
+ envoy_api_v2_route_RouteAction_weighted_clusters(action);
627
+ fields.emplace_back(" weighted_clusters {");
628
+ size_t num_cluster_weights;
629
+ const envoy_api_v2_route_WeightedCluster_ClusterWeight* const*
630
+ cluster_weights = envoy_api_v2_route_WeightedCluster_clusters(
631
+ weighted_clusters, &num_cluster_weights);
632
+ for (size_t i = 0; i < num_cluster_weights; ++i) {
633
+ const envoy_api_v2_route_WeightedCluster_ClusterWeight*
634
+ cluster_weight = cluster_weights[i];
635
+ fields.emplace_back(" clusters {");
636
+ AddStringField(
637
+ " name",
638
+ envoy_api_v2_route_WeightedCluster_ClusterWeight_name(
639
+ cluster_weight),
640
+ &fields);
641
+ AddUInt32ValueField(
642
+ " weight",
643
+ envoy_api_v2_route_WeightedCluster_ClusterWeight_weight(
644
+ cluster_weight),
645
+ &fields);
646
+ fields.emplace_back(" }");
647
+ }
648
+ AddUInt32ValueField(" total_weight",
649
+ envoy_api_v2_route_WeightedCluster_total_weight(
650
+ weighted_clusters),
651
+ &fields);
652
+ fields.emplace_back(" }");
653
+ }
654
+ fields.emplace_back(" }");
655
+ } else if (envoy_api_v2_route_Route_has_redirect(route)) {
656
+ fields.emplace_back(" redirect: <not printed>");
657
+ } else if (envoy_api_v2_route_Route_has_direct_response(route)) {
658
+ fields.emplace_back(" direct_response: <not printed>");
659
+ } else if (envoy_api_v2_route_Route_has_filter_action(route)) {
660
+ fields.emplace_back(" filter_action: <not printed>");
661
+ }
662
+ fields.push_back(" }");
663
+ }
664
+ fields.push_back("}");
665
+ }
666
+ gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", client,
667
+ absl::StrJoin(fields, "\n").c_str());
668
+ }
669
+ }
670
+
671
+ void MaybeLogCluster(XdsClient* client, TraceFlag* tracer,
672
+ const envoy_api_v2_Cluster* cluster) {
673
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
674
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
675
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
676
+ // the raw proto instead of doing this manually.
677
+ std::vector<std::string> fields;
678
+ // name
679
+ AddStringField("name", envoy_api_v2_Cluster_name(cluster), &fields);
680
+ // type
681
+ if (envoy_api_v2_Cluster_has_type(cluster)) {
682
+ fields.emplace_back(
683
+ absl::StrCat("type: ", envoy_api_v2_Cluster_type(cluster)));
684
+ } else if (envoy_api_v2_Cluster_has_cluster_type(cluster)) {
685
+ fields.emplace_back("cluster_type: <not printed>");
686
+ } else {
687
+ fields.emplace_back("<unknown type>");
688
+ }
689
+ // eds_cluster_config
690
+ const envoy_api_v2_Cluster_EdsClusterConfig* eds_cluster_config =
691
+ envoy_api_v2_Cluster_eds_cluster_config(cluster);
692
+ if (eds_cluster_config != nullptr) {
693
+ fields.emplace_back("eds_cluster_config {");
694
+ // eds_config
695
+ const struct envoy_api_v2_core_ConfigSource* eds_config =
696
+ envoy_api_v2_Cluster_EdsClusterConfig_eds_config(eds_cluster_config);
697
+ if (eds_config != nullptr) {
698
+ if (envoy_api_v2_core_ConfigSource_has_ads(eds_config)) {
699
+ fields.emplace_back(" eds_config { ads {} }");
700
+ } else {
701
+ fields.emplace_back(" eds_config: <non-ADS type>");
702
+ }
703
+ }
704
+ // service_name
705
+ AddStringField(" service_name",
706
+ envoy_api_v2_Cluster_EdsClusterConfig_service_name(
707
+ eds_cluster_config),
708
+ &fields);
709
+ fields.emplace_back("}");
710
+ }
711
+ // lb_policy
712
+ fields.emplace_back(
713
+ absl::StrCat("lb_policy: ", envoy_api_v2_Cluster_lb_policy(cluster)));
714
+ // lrs_server
715
+ const envoy_api_v2_core_ConfigSource* lrs_server =
716
+ envoy_api_v2_Cluster_lrs_server(cluster);
717
+ if (lrs_server != nullptr) {
718
+ if (envoy_api_v2_core_ConfigSource_has_self(lrs_server)) {
719
+ fields.emplace_back("lrs_server { self {} }");
720
+ } else {
721
+ fields.emplace_back("lrs_server: <non-self type>");
722
+ }
723
+ }
724
+ gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", client,
725
+ absl::StrJoin(fields, "\n").c_str());
726
+ }
727
+ }
728
+
729
+ void MaybeLogClusterLoadAssignment(
730
+ XdsClient* client, TraceFlag* tracer,
731
+ const envoy_api_v2_ClusterLoadAssignment* cla) {
732
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
733
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
734
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
735
+ // the raw proto instead of doing this manually.
736
+ std::vector<std::string> fields;
737
+ // cluster_name
738
+ AddStringField("cluster_name",
739
+ envoy_api_v2_ClusterLoadAssignment_cluster_name(cla),
740
+ &fields);
741
+ // endpoints
742
+ size_t num_localities;
743
+ const struct envoy_api_v2_endpoint_LocalityLbEndpoints* const*
744
+ locality_endpoints =
745
+ envoy_api_v2_ClusterLoadAssignment_endpoints(cla, &num_localities);
746
+ for (size_t i = 0; i < num_localities; ++i) {
747
+ const auto* locality_endpoint = locality_endpoints[i];
748
+ fields.emplace_back("endpoints {");
749
+ // locality
750
+ const auto* locality =
751
+ envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_endpoint);
752
+ if (locality != nullptr) {
753
+ fields.emplace_back(" locality {");
754
+ AddLocalityField(2, locality, &fields);
755
+ fields.emplace_back(" }");
756
+ }
757
+ // lb_endpoints
758
+ size_t num_lb_endpoints;
759
+ const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
760
+ envoy_api_v2_endpoint_LocalityLbEndpoints_lb_endpoints(
761
+ locality_endpoint, &num_lb_endpoints);
762
+ for (size_t j = 0; j < num_lb_endpoints; ++j) {
763
+ const auto* lb_endpoint = lb_endpoints[j];
764
+ fields.emplace_back(" lb_endpoints {");
765
+ // health_status
766
+ uint32_t health_status =
767
+ envoy_api_v2_endpoint_LbEndpoint_health_status(lb_endpoint);
768
+ if (health_status > 0) {
769
+ fields.emplace_back(
770
+ absl::StrCat(" health_status: ", health_status));
771
+ }
772
+ // endpoint
773
+ const envoy_api_v2_endpoint_Endpoint* endpoint =
774
+ envoy_api_v2_endpoint_LbEndpoint_endpoint(lb_endpoint);
775
+ if (endpoint != nullptr) {
776
+ fields.emplace_back(" endpoint {");
777
+ // address
778
+ const auto* address =
779
+ envoy_api_v2_endpoint_Endpoint_address(endpoint);
780
+ if (address != nullptr) {
781
+ fields.emplace_back(" address {");
782
+ // socket_address
783
+ const auto* socket_address =
784
+ envoy_api_v2_core_Address_socket_address(address);
785
+ if (socket_address != nullptr) {
786
+ fields.emplace_back(" socket_address {");
787
+ // address
788
+ AddStringField(
789
+ " address",
790
+ envoy_api_v2_core_SocketAddress_address(socket_address),
791
+ &fields);
792
+ // port_value
793
+ if (envoy_api_v2_core_SocketAddress_has_port_value(
794
+ socket_address)) {
795
+ fields.emplace_back(
796
+ absl::StrCat(" port_value: ",
797
+ envoy_api_v2_core_SocketAddress_port_value(
798
+ socket_address)));
799
+ } else {
800
+ fields.emplace_back(" <non-numeric port>");
801
+ }
802
+ fields.emplace_back(" }");
803
+ } else {
804
+ fields.emplace_back(" <non-socket address>");
805
+ }
806
+ fields.emplace_back(" }");
807
+ }
808
+ fields.emplace_back(" }");
809
+ }
810
+ fields.emplace_back(" }");
811
+ }
812
+ // load_balancing_weight
813
+ AddUInt32ValueField(
814
+ " load_balancing_weight",
815
+ envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
816
+ locality_endpoint),
817
+ &fields);
818
+ // priority
819
+ uint32_t priority =
820
+ envoy_api_v2_endpoint_LocalityLbEndpoints_priority(locality_endpoint);
821
+ if (priority > 0) {
822
+ fields.emplace_back(absl::StrCat(" priority: ", priority));
823
+ }
824
+ fields.emplace_back("}");
825
+ }
826
+ // policy
827
+ const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
828
+ envoy_api_v2_ClusterLoadAssignment_policy(cla);
829
+ if (policy != nullptr) {
830
+ fields.emplace_back("policy {");
831
+ // drop_overloads
832
+ size_t num_drop_overloads;
833
+ const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
834
+ drop_overloads =
835
+ envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(
836
+ policy, &num_drop_overloads);
837
+ for (size_t i = 0; i < num_drop_overloads; ++i) {
838
+ auto* drop_overload = drop_overloads[i];
839
+ fields.emplace_back(" drop_overloads {");
840
+ // category
841
+ AddStringField(
842
+ " category",
843
+ envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_category(
844
+ drop_overload),
845
+ &fields);
846
+ // drop_percentage
847
+ const auto* drop_percentage =
848
+ envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
849
+ drop_overload);
850
+ if (drop_percentage != nullptr) {
851
+ fields.emplace_back(" drop_percentage {");
852
+ fields.emplace_back(absl::StrCat(
853
+ " numerator: ",
854
+ envoy_type_FractionalPercent_numerator(drop_percentage)));
855
+ fields.emplace_back(absl::StrCat(
856
+ " denominator: ",
857
+ envoy_type_FractionalPercent_denominator(drop_percentage)));
858
+ fields.emplace_back(" }");
859
+ }
860
+ fields.emplace_back(" }");
861
+ }
862
+ // overprovisioning_factor
863
+ fields.emplace_back("}");
864
+ }
865
+ gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s", client,
866
+ absl::StrJoin(fields, "\n").c_str());
867
+ }
868
+ }
869
+
870
+ // Better match type has smaller value.
871
+ enum MatchType {
872
+ EXACT_MATCH,
873
+ SUFFIX_MATCH,
874
+ PREFIX_MATCH,
875
+ UNIVERSE_MATCH,
876
+ INVALID_MATCH,
877
+ };
878
+
879
+ // Returns true if match succeeds.
880
+ bool DomainMatch(MatchType match_type, std::string domain_pattern,
881
+ std::string expected_host_name) {
882
+ // Normalize the args to lower-case. Domain matching is case-insensitive.
883
+ std::transform(domain_pattern.begin(), domain_pattern.end(),
884
+ domain_pattern.begin(),
885
+ [](unsigned char c) { return std::tolower(c); });
886
+ std::transform(expected_host_name.begin(), expected_host_name.end(),
887
+ expected_host_name.begin(),
888
+ [](unsigned char c) { return std::tolower(c); });
889
+ if (match_type == EXACT_MATCH) {
890
+ return domain_pattern == expected_host_name;
891
+ } else if (match_type == SUFFIX_MATCH) {
892
+ // Asterisk must match at least one char.
893
+ if (expected_host_name.size() < domain_pattern.size()) return false;
894
+ absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
895
+ absl::string_view host_suffix(expected_host_name.c_str() +
896
+ expected_host_name.size() -
897
+ pattern_suffix.size());
898
+ return pattern_suffix == host_suffix;
899
+ } else if (match_type == PREFIX_MATCH) {
900
+ // Asterisk must match at least one char.
901
+ if (expected_host_name.size() < domain_pattern.size()) return false;
902
+ absl::string_view pattern_prefix(domain_pattern.c_str(),
903
+ domain_pattern.size() - 1);
904
+ absl::string_view host_prefix(expected_host_name.c_str(),
905
+ pattern_prefix.size());
906
+ return pattern_prefix == host_prefix;
907
+ } else {
908
+ return match_type == UNIVERSE_MATCH;
909
+ }
910
+ }
911
+
912
+ MatchType DomainPatternMatchType(const std::string& domain_pattern) {
913
+ if (domain_pattern.empty()) return INVALID_MATCH;
914
+ if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
915
+ if (domain_pattern == "*") return UNIVERSE_MATCH;
916
+ if (domain_pattern[0] == '*') return SUFFIX_MATCH;
917
+ if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
918
+ return INVALID_MATCH;
919
+ }
920
+
921
+ grpc_error* RouteActionParse(const envoy_api_v2_route_Route* route,
922
+ XdsApi::RdsUpdate::RdsRoute* rds_route) {
923
+ if (!envoy_api_v2_route_Route_has_route(route)) {
924
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
925
+ "No RouteAction found in route.");
926
+ }
927
+ const envoy_api_v2_route_RouteAction* route_action =
928
+ envoy_api_v2_route_Route_route(route);
929
+ // Get the cluster or weighted_clusters in the RouteAction.
930
+ if (envoy_api_v2_route_RouteAction_has_cluster(route_action)) {
931
+ const upb_strview cluster_name =
932
+ envoy_api_v2_route_RouteAction_cluster(route_action);
933
+ if (cluster_name.size == 0) {
934
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
935
+ "RouteAction cluster contains empty cluster name.");
936
+ }
937
+ rds_route->cluster_name = UpbStringToStdString(cluster_name);
938
+ } else if (envoy_api_v2_route_RouteAction_has_weighted_clusters(
939
+ route_action)) {
940
+ const envoy_api_v2_route_WeightedCluster* weighted_cluster =
941
+ envoy_api_v2_route_RouteAction_weighted_clusters(route_action);
942
+ uint32_t total_weight = 100;
943
+ const google_protobuf_UInt32Value* weight =
944
+ envoy_api_v2_route_WeightedCluster_total_weight(weighted_cluster);
945
+ if (weight != nullptr) {
946
+ total_weight = google_protobuf_UInt32Value_value(weight);
947
+ }
948
+ size_t clusters_size;
949
+ const envoy_api_v2_route_WeightedCluster_ClusterWeight* const* clusters =
950
+ envoy_api_v2_route_WeightedCluster_clusters(weighted_cluster,
951
+ &clusters_size);
952
+ uint32_t sum_of_weights = 0;
953
+ for (size_t j = 0; j < clusters_size; ++j) {
954
+ const envoy_api_v2_route_WeightedCluster_ClusterWeight* cluster_weight =
955
+ clusters[j];
956
+ XdsApi::RdsUpdate::RdsRoute::ClusterWeight cluster;
957
+ cluster.name = UpbStringToStdString(
958
+ envoy_api_v2_route_WeightedCluster_ClusterWeight_name(
959
+ cluster_weight));
960
+ if (cluster.name.empty()) {
961
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
962
+ "RouteAction weighted_cluster cluster contains empty cluster "
963
+ "name.");
964
+ }
965
+ const google_protobuf_UInt32Value* weight =
966
+ envoy_api_v2_route_WeightedCluster_ClusterWeight_weight(
967
+ cluster_weight);
968
+ if (weight == nullptr) {
969
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
970
+ "RouteAction weighted_cluster cluster missing weight");
971
+ }
972
+ cluster.weight = google_protobuf_UInt32Value_value(weight);
973
+ sum_of_weights += cluster.weight;
974
+ rds_route->weighted_clusters.emplace_back(std::move(cluster));
975
+ }
976
+ if (total_weight != sum_of_weights) {
977
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
978
+ "RouteAction weighted_cluster has incorrect total weight");
979
+ }
980
+ if (rds_route->weighted_clusters.empty()) {
981
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
982
+ "RouteAction weighted_cluster has no valid clusters specified.");
983
+ }
984
+ } else {
985
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
986
+ "No cluster or weighted_clusters found in RouteAction.");
987
+ }
988
+ return GRPC_ERROR_NONE;
989
+ }
990
+
991
+ grpc_error* RouteConfigParse(
992
+ XdsClient* client, TraceFlag* tracer,
993
+ const envoy_api_v2_RouteConfiguration* route_config,
994
+ const std::string& expected_server_name, const bool xds_routing_enabled,
995
+ XdsApi::RdsUpdate* rds_update) {
996
+ MaybeLogRouteConfiguration(client, tracer, route_config);
997
+ // Get the virtual hosts.
998
+ size_t size;
999
+ const envoy_api_v2_route_VirtualHost* const* virtual_hosts =
1000
+ envoy_api_v2_RouteConfiguration_virtual_hosts(route_config, &size);
1001
+ // Find the best matched virtual host.
1002
+ // The search order for 4 groups of domain patterns:
1003
+ // 1. Exact match.
1004
+ // 2. Suffix match (e.g., "*ABC").
1005
+ // 3. Prefix match (e.g., "ABC*").
1006
+ // 4. Universe match (i.e., "*").
1007
+ // Within each group, longest match wins.
1008
+ // If the same best matched domain pattern appears in multiple virtual hosts,
1009
+ // the first matched virtual host wins.
1010
+ const envoy_api_v2_route_VirtualHost* target_virtual_host = nullptr;
1011
+ MatchType best_match_type = INVALID_MATCH;
1012
+ size_t longest_match = 0;
1013
+ // Check each domain pattern in each virtual host to determine the best
1014
+ // matched virtual host.
1015
+ for (size_t i = 0; i < size; ++i) {
1016
+ size_t domain_size;
1017
+ upb_strview const* domains =
1018
+ envoy_api_v2_route_VirtualHost_domains(virtual_hosts[i], &domain_size);
1019
+ for (size_t j = 0; j < domain_size; ++j) {
1020
+ const std::string domain_pattern(domains[j].data, domains[j].size);
1021
+ // Check the match type first. Skip the pattern if it's not better than
1022
+ // current match.
1023
+ const MatchType match_type = DomainPatternMatchType(domain_pattern);
1024
+ if (match_type == INVALID_MATCH) {
1025
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid domain pattern.");
1026
+ }
1027
+ if (match_type > best_match_type) continue;
1028
+ if (match_type == best_match_type &&
1029
+ domain_pattern.size() <= longest_match) {
1030
+ continue;
1031
+ }
1032
+ // Skip if match fails.
1033
+ if (!DomainMatch(match_type, domain_pattern, expected_server_name)) {
1034
+ continue;
1035
+ }
1036
+ // Choose this match.
1037
+ target_virtual_host = virtual_hosts[i];
1038
+ best_match_type = match_type;
1039
+ longest_match = domain_pattern.size();
1040
+ if (best_match_type == EXACT_MATCH) break;
1041
+ }
1042
+ if (best_match_type == EXACT_MATCH) break;
1043
+ }
1044
+ if (target_virtual_host == nullptr) {
1045
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1046
+ "No matched virtual host found in the route config.");
1047
+ }
1048
+ // Get the route list from the matched virtual host.
1049
+ const envoy_api_v2_route_Route* const* routes =
1050
+ envoy_api_v2_route_VirtualHost_routes(target_virtual_host, &size);
1051
+ if (size < 1) {
1052
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1053
+ "No route found in the virtual host.");
1054
+ }
1055
+ // If xds_routing is not configured, only look at the last one in the route
1056
+ // list (the default route)
1057
+ if (!xds_routing_enabled) {
1058
+ const envoy_api_v2_route_Route* route = routes[size - 1];
1059
+ const envoy_api_v2_route_RouteMatch* match =
1060
+ envoy_api_v2_route_Route_match(route);
1061
+ XdsApi::RdsUpdate::RdsRoute rds_route;
1062
+ // if xds routing is not enabled, we must be working on the default route;
1063
+ // in this case, we must have an empty or single slash prefix.
1064
+ if (!envoy_api_v2_route_RouteMatch_has_prefix(match)) {
1065
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1066
+ "No prefix field found in Default RouteMatch.");
1067
+ }
1068
+ const upb_strview prefix = envoy_api_v2_route_RouteMatch_prefix(match);
1069
+ if (!upb_strview_eql(prefix, upb_strview_makez("")) &&
1070
+ !upb_strview_eql(prefix, upb_strview_makez("/"))) {
1071
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1072
+ "Default route must have empty prefix.");
1073
+ }
1074
+ grpc_error* error = RouteActionParse(route, &rds_route);
1075
+ if (error != GRPC_ERROR_NONE) return error;
1076
+ rds_update->routes.emplace_back(std::move(rds_route));
1077
+ return GRPC_ERROR_NONE;
1078
+ }
1079
+ // Loop over the whole list of routes
1080
+ for (size_t i = 0; i < size; ++i) {
1081
+ const envoy_api_v2_route_Route* route = routes[i];
1082
+ const envoy_api_v2_route_RouteMatch* match =
1083
+ envoy_api_v2_route_Route_match(route);
1084
+ XdsApi::RdsUpdate::RdsRoute rds_route;
1085
+ if (envoy_api_v2_route_RouteMatch_has_prefix(match)) {
1086
+ upb_strview prefix = envoy_api_v2_route_RouteMatch_prefix(match);
1087
+ // Empty prefix "" is accepted.
1088
+ if (prefix.size > 0) {
1089
+ // Prefix "/" is accepted.
1090
+ if (prefix.data[0] != '/') {
1091
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1092
+ "Prefix does not start with a /");
1093
+ }
1094
+ if (prefix.size > 1) {
1095
+ std::vector<absl::string_view> prefix_elements = absl::StrSplit(
1096
+ absl::string_view(prefix.data, prefix.size).substr(1),
1097
+ absl::MaxSplits('/', 1));
1098
+ if (prefix_elements.size() != 2) {
1099
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1100
+ "Prefix not in the required format of /service/");
1101
+ } else if (!prefix_elements[1].empty()) {
1102
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1103
+ "Prefix does not end with a /");
1104
+ } else if (prefix_elements[0].empty()) {
1105
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1106
+ "Prefix contains empty service name");
1107
+ }
1108
+ rds_route.service = std::string(prefix_elements[0]);
1109
+ }
1110
+ }
1111
+ } else if (envoy_api_v2_route_RouteMatch_has_path(match)) {
1112
+ upb_strview path = envoy_api_v2_route_RouteMatch_path(match);
1113
+ if (path.size == 0) {
1114
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1115
+ "Path if set cannot be empty");
1116
+ }
1117
+ if (path.data[0] != '/') {
1118
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1119
+ "Path does not start with a /");
1120
+ }
1121
+ std::vector<absl::string_view> path_elements = absl::StrSplit(
1122
+ absl::string_view(path.data, path.size).substr(1), '/');
1123
+ if (path_elements.size() != 2) {
1124
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1125
+ "Path not in the required format of /service/method");
1126
+ } else if (path_elements[0].empty()) {
1127
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1128
+ "Path contains empty service name");
1129
+ } else if (path_elements[1].empty()) {
1130
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1131
+ "Path contains empty method name");
1132
+ }
1133
+ rds_route.service = std::string(path_elements[0]);
1134
+ rds_route.method = std::string(path_elements[1]);
1135
+ } else {
1136
+ // Path specifier types will be supported, ignore but not reject until
1137
+ // they are implemented.
1138
+ continue;
1139
+ }
1140
+ grpc_error* error = RouteActionParse(route, &rds_route);
1141
+ if (error != GRPC_ERROR_NONE) return error;
1142
+ rds_update->routes.emplace_back(std::move(rds_route));
1143
+ }
1144
+ if (rds_update->routes.empty()) {
1145
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
1146
+ }
1147
+ return GRPC_ERROR_NONE;
1148
+ }
1149
+
1150
+ grpc_error* LdsResponseParse(XdsClient* client, TraceFlag* tracer,
1151
+ const envoy_api_v2_DiscoveryResponse* response,
1152
+ const std::string& expected_server_name,
1153
+ const bool xds_routing_enabled,
1154
+ absl::optional<XdsApi::LdsUpdate>* lds_update,
1155
+ upb_arena* arena) {
1156
+ // Get the resources from the response.
1157
+ size_t size;
1158
+ const google_protobuf_Any* const* resources =
1159
+ envoy_api_v2_DiscoveryResponse_resources(response, &size);
1160
+ for (size_t i = 0; i < size; ++i) {
1161
+ // Check the type_url of the resource.
1162
+ const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
1163
+ if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kLdsTypeUrl))) {
1164
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not LDS.");
1165
+ }
1166
+ // Decode the listener.
1167
+ const upb_strview encoded_listener =
1168
+ google_protobuf_Any_value(resources[i]);
1169
+ const envoy_api_v2_Listener* listener = envoy_api_v2_Listener_parse(
1170
+ encoded_listener.data, encoded_listener.size, arena);
1171
+ if (listener == nullptr) {
1172
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode listener.");
1173
+ }
1174
+ // Check listener name. Ignore unexpected listeners.
1175
+ const upb_strview name = envoy_api_v2_Listener_name(listener);
1176
+ const upb_strview expected_name =
1177
+ upb_strview_makez(expected_server_name.c_str());
1178
+ if (!upb_strview_eql(name, expected_name)) continue;
1179
+ // Get api_listener and decode it to http_connection_manager.
1180
+ const envoy_config_listener_v2_ApiListener* api_listener =
1181
+ envoy_api_v2_Listener_api_listener(listener);
1182
+ if (api_listener == nullptr) {
1183
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1184
+ "Listener has no ApiListener.");
1185
+ }
1186
+ const upb_strview encoded_api_listener = google_protobuf_Any_value(
1187
+ envoy_config_listener_v2_ApiListener_api_listener(api_listener));
1188
+ const envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager*
1189
+ http_connection_manager =
1190
+ envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_parse(
1191
+ encoded_api_listener.data, encoded_api_listener.size, arena);
1192
+ // Found inlined route_config. Parse it to find the cluster_name.
1193
+ if (envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_has_route_config(
1194
+ http_connection_manager)) {
1195
+ const envoy_api_v2_RouteConfiguration* route_config =
1196
+ envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_route_config(
1197
+ http_connection_manager);
1198
+ XdsApi::RdsUpdate rds_update;
1199
+ grpc_error* error =
1200
+ RouteConfigParse(client, tracer, route_config, expected_server_name,
1201
+ xds_routing_enabled, &rds_update);
1202
+ if (error != GRPC_ERROR_NONE) return error;
1203
+ lds_update->emplace();
1204
+ (*lds_update)->rds_update.emplace(std::move(rds_update));
1205
+ return GRPC_ERROR_NONE;
1206
+ }
1207
+ // Validate that RDS must be used to get the route_config dynamically.
1208
+ if (!envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_has_rds(
1209
+ http_connection_manager)) {
1210
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1211
+ "HttpConnectionManager neither has inlined route_config nor RDS.");
1212
+ }
1213
+ const envoy_config_filter_network_http_connection_manager_v2_Rds* rds =
1214
+ envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_rds(
1215
+ http_connection_manager);
1216
+ // Check that the ConfigSource specifies ADS.
1217
+ const envoy_api_v2_core_ConfigSource* config_source =
1218
+ envoy_config_filter_network_http_connection_manager_v2_Rds_config_source(
1219
+ rds);
1220
+ if (config_source == nullptr) {
1221
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1222
+ "HttpConnectionManager missing config_source for RDS.");
1223
+ }
1224
+ if (!envoy_api_v2_core_ConfigSource_has_ads(config_source)) {
1225
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1226
+ "HttpConnectionManager ConfigSource for RDS does not specify ADS.");
1227
+ }
1228
+ // Get the route_config_name.
1229
+ lds_update->emplace();
1230
+ (*lds_update)->route_config_name = UpbStringToStdString(
1231
+ envoy_config_filter_network_http_connection_manager_v2_Rds_route_config_name(
1232
+ rds));
1233
+ return GRPC_ERROR_NONE;
1234
+ }
1235
+ return GRPC_ERROR_NONE;
1236
+ }
1237
+
1238
+ grpc_error* RdsResponseParse(
1239
+ XdsClient* client, TraceFlag* tracer,
1240
+ const envoy_api_v2_DiscoveryResponse* response,
1241
+ const std::string& expected_server_name,
1242
+ const std::set<absl::string_view>& expected_route_configuration_names,
1243
+ const bool xds_routing_enabled,
1244
+ absl::optional<XdsApi::RdsUpdate>* rds_update, upb_arena* arena) {
1245
+ // Get the resources from the response.
1246
+ size_t size;
1247
+ const google_protobuf_Any* const* resources =
1248
+ envoy_api_v2_DiscoveryResponse_resources(response, &size);
1249
+ for (size_t i = 0; i < size; ++i) {
1250
+ // Check the type_url of the resource.
1251
+ const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
1252
+ if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kRdsTypeUrl))) {
1253
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not RDS.");
1254
+ }
1255
+ // Decode the route_config.
1256
+ const upb_strview encoded_route_config =
1257
+ google_protobuf_Any_value(resources[i]);
1258
+ const envoy_api_v2_RouteConfiguration* route_config =
1259
+ envoy_api_v2_RouteConfiguration_parse(encoded_route_config.data,
1260
+ encoded_route_config.size, arena);
1261
+ if (route_config == nullptr) {
1262
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode route_config.");
1263
+ }
1264
+ // Check route_config_name. Ignore unexpected route_config.
1265
+ const upb_strview route_config_name =
1266
+ envoy_api_v2_RouteConfiguration_name(route_config);
1267
+ absl::string_view route_config_name_strview(route_config_name.data,
1268
+ route_config_name.size);
1269
+ if (expected_route_configuration_names.find(route_config_name_strview) ==
1270
+ expected_route_configuration_names.end()) {
1271
+ continue;
1272
+ }
1273
+ // Parse the route_config.
1274
+ XdsApi::RdsUpdate local_rds_update;
1275
+ grpc_error* error =
1276
+ RouteConfigParse(client, tracer, route_config, expected_server_name,
1277
+ xds_routing_enabled, &local_rds_update);
1278
+ if (error != GRPC_ERROR_NONE) return error;
1279
+ rds_update->emplace(std::move(local_rds_update));
1280
+ return GRPC_ERROR_NONE;
1281
+ }
1282
+ return GRPC_ERROR_NONE;
1283
+ }
1284
+
1285
+ grpc_error* CdsResponseParse(
1286
+ XdsClient* client, TraceFlag* tracer,
1287
+ const envoy_api_v2_DiscoveryResponse* response,
1288
+ const std::set<absl::string_view>& expected_cluster_names,
1289
+ XdsApi::CdsUpdateMap* cds_update_map, upb_arena* arena) {
1290
+ // Get the resources from the response.
1291
+ size_t size;
1292
+ const google_protobuf_Any* const* resources =
1293
+ envoy_api_v2_DiscoveryResponse_resources(response, &size);
1294
+ // Parse all the resources in the CDS response.
1295
+ for (size_t i = 0; i < size; ++i) {
1296
+ XdsApi::CdsUpdate cds_update;
1297
+ // Check the type_url of the resource.
1298
+ const upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
1299
+ if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kCdsTypeUrl))) {
1300
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not CDS.");
1301
+ }
1302
+ // Decode the cluster.
1303
+ const upb_strview encoded_cluster = google_protobuf_Any_value(resources[i]);
1304
+ const envoy_api_v2_Cluster* cluster = envoy_api_v2_Cluster_parse(
1305
+ encoded_cluster.data, encoded_cluster.size, arena);
1306
+ if (cluster == nullptr) {
1307
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode cluster.");
1308
+ }
1309
+ MaybeLogCluster(client, tracer, cluster);
1310
+ // Ignore unexpected cluster names.
1311
+ upb_strview cluster_name = envoy_api_v2_Cluster_name(cluster);
1312
+ absl::string_view cluster_name_strview(cluster_name.data,
1313
+ cluster_name.size);
1314
+ if (expected_cluster_names.find(cluster_name_strview) ==
1315
+ expected_cluster_names.end()) {
1316
+ continue;
1317
+ }
1318
+ // Check the cluster_discovery_type.
1319
+ if (!envoy_api_v2_Cluster_has_type(cluster)) {
1320
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType not found.");
1321
+ }
1322
+ if (envoy_api_v2_Cluster_type(cluster) != envoy_api_v2_Cluster_EDS) {
1323
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not EDS.");
1324
+ }
1325
+ // Check the EDS config source.
1326
+ const envoy_api_v2_Cluster_EdsClusterConfig* eds_cluster_config =
1327
+ envoy_api_v2_Cluster_eds_cluster_config(cluster);
1328
+ const envoy_api_v2_core_ConfigSource* eds_config =
1329
+ envoy_api_v2_Cluster_EdsClusterConfig_eds_config(eds_cluster_config);
1330
+ if (!envoy_api_v2_core_ConfigSource_has_ads(eds_config)) {
1331
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1332
+ "EDS ConfigSource is not ADS.");
1333
+ }
1334
+ // Record EDS service_name (if any).
1335
+ upb_strview service_name =
1336
+ envoy_api_v2_Cluster_EdsClusterConfig_service_name(eds_cluster_config);
1337
+ if (service_name.size != 0) {
1338
+ cds_update.eds_service_name = UpbStringToStdString(service_name);
1339
+ }
1340
+ // Check the LB policy.
1341
+ if (envoy_api_v2_Cluster_lb_policy(cluster) !=
1342
+ envoy_api_v2_Cluster_ROUND_ROBIN) {
1343
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1344
+ "LB policy is not ROUND_ROBIN.");
1345
+ }
1346
+ // Record LRS server name (if any).
1347
+ const envoy_api_v2_core_ConfigSource* lrs_server =
1348
+ envoy_api_v2_Cluster_lrs_server(cluster);
1349
+ if (lrs_server != nullptr) {
1350
+ if (!envoy_api_v2_core_ConfigSource_has_self(lrs_server)) {
1351
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1352
+ "LRS ConfigSource is not self.");
1353
+ }
1354
+ cds_update.lrs_load_reporting_server_name.emplace("");
1355
+ }
1356
+ cds_update_map->emplace(UpbStringToStdString(cluster_name),
1357
+ std::move(cds_update));
1358
+ }
1359
+ return GRPC_ERROR_NONE;
1360
+ }
1361
+
1362
+ grpc_error* ServerAddressParseAndAppend(
1363
+ const envoy_api_v2_endpoint_LbEndpoint* lb_endpoint,
1364
+ ServerAddressList* list) {
1365
+ // If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
1366
+ const int32_t health_status =
1367
+ envoy_api_v2_endpoint_LbEndpoint_health_status(lb_endpoint);
1368
+ if (health_status != envoy_api_v2_core_UNKNOWN &&
1369
+ health_status != envoy_api_v2_core_HEALTHY) {
1370
+ return GRPC_ERROR_NONE;
1371
+ }
1372
+ // Find the ip:port.
1373
+ const envoy_api_v2_endpoint_Endpoint* endpoint =
1374
+ envoy_api_v2_endpoint_LbEndpoint_endpoint(lb_endpoint);
1375
+ const envoy_api_v2_core_Address* address =
1376
+ envoy_api_v2_endpoint_Endpoint_address(endpoint);
1377
+ const envoy_api_v2_core_SocketAddress* socket_address =
1378
+ envoy_api_v2_core_Address_socket_address(address);
1379
+ upb_strview address_strview =
1380
+ envoy_api_v2_core_SocketAddress_address(socket_address);
1381
+ uint32_t port = envoy_api_v2_core_SocketAddress_port_value(socket_address);
1382
+ if (GPR_UNLIKELY(port >> 16) != 0) {
1383
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
1384
+ }
1385
+ // Populate grpc_resolved_address.
1386
+ grpc_resolved_address addr;
1387
+ char* address_str = static_cast<char*>(gpr_malloc(address_strview.size + 1));
1388
+ memcpy(address_str, address_strview.data, address_strview.size);
1389
+ address_str[address_strview.size] = '\0';
1390
+ grpc_string_to_sockaddr(&addr, address_str, port);
1391
+ gpr_free(address_str);
1392
+ // Append the address to the list.
1393
+ list->emplace_back(addr, nullptr);
1394
+ return GRPC_ERROR_NONE;
1395
+ }
1396
+
1397
+ grpc_error* LocalityParse(
1398
+ const envoy_api_v2_endpoint_LocalityLbEndpoints* locality_lb_endpoints,
1399
+ XdsApi::PriorityListUpdate::LocalityMap::Locality* output_locality) {
1400
+ // Parse LB weight.
1401
+ const google_protobuf_UInt32Value* lb_weight =
1402
+ envoy_api_v2_endpoint_LocalityLbEndpoints_load_balancing_weight(
1403
+ locality_lb_endpoints);
1404
+ // If LB weight is not specified, it means this locality is assigned no load.
1405
+ // TODO(juanlishen): When we support CDS to configure the inter-locality
1406
+ // policy, we should change the LB weight handling.
1407
+ output_locality->lb_weight =
1408
+ lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
1409
+ if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
1410
+ // Parse locality name.
1411
+ const envoy_api_v2_core_Locality* locality =
1412
+ envoy_api_v2_endpoint_LocalityLbEndpoints_locality(locality_lb_endpoints);
1413
+ upb_strview region = envoy_api_v2_core_Locality_region(locality);
1414
+ upb_strview zone = envoy_api_v2_core_Locality_region(locality);
1415
+ upb_strview sub_zone = envoy_api_v2_core_Locality_sub_zone(locality);
1416
+ output_locality->name = MakeRefCounted<XdsLocalityName>(
1417
+ UpbStringToStdString(region), UpbStringToStdString(zone),
1418
+ UpbStringToStdString(sub_zone));
1419
+ // Parse the addresses.
1420
+ size_t size;
1421
+ const envoy_api_v2_endpoint_LbEndpoint* const* lb_endpoints =
1422
+ envoy_api_v2_endpoint_LocalityLbEndpoints_lb_endpoints(
1423
+ locality_lb_endpoints, &size);
1424
+ for (size_t i = 0; i < size; ++i) {
1425
+ grpc_error* error = ServerAddressParseAndAppend(
1426
+ lb_endpoints[i], &output_locality->serverlist);
1427
+ if (error != GRPC_ERROR_NONE) return error;
1428
+ }
1429
+ // Parse the priority.
1430
+ output_locality->priority =
1431
+ envoy_api_v2_endpoint_LocalityLbEndpoints_priority(locality_lb_endpoints);
1432
+ return GRPC_ERROR_NONE;
1433
+ }
1434
+
1435
+ grpc_error* DropParseAndAppend(
1436
+ const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* drop_overload,
1437
+ XdsApi::DropConfig* drop_config) {
1438
+ // Get the category.
1439
+ upb_strview category =
1440
+ envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_category(
1441
+ drop_overload);
1442
+ if (category.size == 0) {
1443
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty drop category name");
1444
+ }
1445
+ // Get the drop rate (per million).
1446
+ const envoy_type_FractionalPercent* drop_percentage =
1447
+ envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
1448
+ drop_overload);
1449
+ uint32_t numerator = envoy_type_FractionalPercent_numerator(drop_percentage);
1450
+ const auto denominator =
1451
+ static_cast<envoy_type_FractionalPercent_DenominatorType>(
1452
+ envoy_type_FractionalPercent_denominator(drop_percentage));
1453
+ // Normalize to million.
1454
+ switch (denominator) {
1455
+ case envoy_type_FractionalPercent_HUNDRED:
1456
+ numerator *= 10000;
1457
+ break;
1458
+ case envoy_type_FractionalPercent_TEN_THOUSAND:
1459
+ numerator *= 100;
1460
+ break;
1461
+ case envoy_type_FractionalPercent_MILLION:
1462
+ break;
1463
+ default:
1464
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
1465
+ }
1466
+ // Cap numerator to 1000000.
1467
+ numerator = GPR_MIN(numerator, 1000000);
1468
+ drop_config->AddCategory(UpbStringToStdString(category), numerator);
1469
+ return GRPC_ERROR_NONE;
1470
+ }
1471
+
1472
+ grpc_error* EdsResponseParse(
1473
+ XdsClient* client, TraceFlag* tracer,
1474
+ const envoy_api_v2_DiscoveryResponse* response,
1475
+ const std::set<absl::string_view>& expected_eds_service_names,
1476
+ XdsApi::EdsUpdateMap* eds_update_map, upb_arena* arena) {
1477
+ // Get the resources from the response.
1478
+ size_t size;
1479
+ const google_protobuf_Any* const* resources =
1480
+ envoy_api_v2_DiscoveryResponse_resources(response, &size);
1481
+ for (size_t i = 0; i < size; ++i) {
1482
+ XdsApi::EdsUpdate eds_update;
1483
+ // Check the type_url of the resource.
1484
+ upb_strview type_url = google_protobuf_Any_type_url(resources[i]);
1485
+ if (!upb_strview_eql(type_url, upb_strview_makez(XdsApi::kEdsTypeUrl))) {
1486
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
1487
+ }
1488
+ // Get the cluster_load_assignment.
1489
+ upb_strview encoded_cluster_load_assignment =
1490
+ google_protobuf_Any_value(resources[i]);
1491
+ envoy_api_v2_ClusterLoadAssignment* cluster_load_assignment =
1492
+ envoy_api_v2_ClusterLoadAssignment_parse(
1493
+ encoded_cluster_load_assignment.data,
1494
+ encoded_cluster_load_assignment.size, arena);
1495
+ if (cluster_load_assignment == nullptr) {
1496
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1497
+ "Can't parse cluster_load_assignment.");
1498
+ }
1499
+ MaybeLogClusterLoadAssignment(client, tracer, cluster_load_assignment);
1500
+ // Check the cluster name (which actually means eds_service_name). Ignore
1501
+ // unexpected names.
1502
+ upb_strview cluster_name = envoy_api_v2_ClusterLoadAssignment_cluster_name(
1503
+ cluster_load_assignment);
1504
+ absl::string_view cluster_name_strview(cluster_name.data,
1505
+ cluster_name.size);
1506
+ if (expected_eds_service_names.find(cluster_name_strview) ==
1507
+ expected_eds_service_names.end()) {
1508
+ continue;
1509
+ }
1510
+ // Get the endpoints.
1511
+ size_t locality_size;
1512
+ const envoy_api_v2_endpoint_LocalityLbEndpoints* const* endpoints =
1513
+ envoy_api_v2_ClusterLoadAssignment_endpoints(cluster_load_assignment,
1514
+ &locality_size);
1515
+ for (size_t j = 0; j < locality_size; ++j) {
1516
+ XdsApi::PriorityListUpdate::LocalityMap::Locality locality;
1517
+ grpc_error* error = LocalityParse(endpoints[j], &locality);
1518
+ if (error != GRPC_ERROR_NONE) return error;
1519
+ // Filter out locality with weight 0.
1520
+ if (locality.lb_weight == 0) continue;
1521
+ eds_update.priority_list_update.Add(locality);
1522
+ }
1523
+ for (uint32_t priority = 0;
1524
+ priority < eds_update.priority_list_update.size(); ++priority) {
1525
+ auto* locality_map = eds_update.priority_list_update.Find(priority);
1526
+ if (locality_map == nullptr || locality_map->size() == 0) {
1527
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1528
+ "EDS update includes sparse priority list");
1529
+ }
1530
+ }
1531
+ // Get the drop config.
1532
+ eds_update.drop_config = MakeRefCounted<XdsApi::DropConfig>();
1533
+ const envoy_api_v2_ClusterLoadAssignment_Policy* policy =
1534
+ envoy_api_v2_ClusterLoadAssignment_policy(cluster_load_assignment);
1535
+ if (policy != nullptr) {
1536
+ size_t drop_size;
1537
+ const envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload* const*
1538
+ drop_overload =
1539
+ envoy_api_v2_ClusterLoadAssignment_Policy_drop_overloads(
1540
+ policy, &drop_size);
1541
+ for (size_t j = 0; j < drop_size; ++j) {
1542
+ grpc_error* error =
1543
+ DropParseAndAppend(drop_overload[j], eds_update.drop_config.get());
1544
+ if (error != GRPC_ERROR_NONE) return error;
1545
+ }
1546
+ }
1547
+ eds_update_map->emplace(UpbStringToStdString(cluster_name),
1548
+ std::move(eds_update));
1549
+ }
1550
+ return GRPC_ERROR_NONE;
1551
+ }
1552
+
1553
+ } // namespace
1554
+
1555
+ grpc_error* XdsApi::ParseAdsResponse(
1556
+ const grpc_slice& encoded_response, const std::string& expected_server_name,
1557
+ const std::set<absl::string_view>& expected_route_configuration_names,
1558
+ const std::set<absl::string_view>& expected_cluster_names,
1559
+ const std::set<absl::string_view>& expected_eds_service_names,
1560
+ absl::optional<LdsUpdate>* lds_update,
1561
+ absl::optional<RdsUpdate>* rds_update, CdsUpdateMap* cds_update_map,
1562
+ EdsUpdateMap* eds_update_map, std::string* version, std::string* nonce,
1563
+ std::string* type_url) {
1564
+ upb::Arena arena;
1565
+ // Decode the response.
1566
+ const envoy_api_v2_DiscoveryResponse* response =
1567
+ envoy_api_v2_DiscoveryResponse_parse(
1568
+ reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
1569
+ GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
1570
+ // If decoding fails, output an empty type_url and return.
1571
+ if (response == nullptr) {
1572
+ *type_url = "";
1573
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1574
+ "Can't decode the whole response.");
1575
+ }
1576
+ MaybeLogDiscoveryResponse(client_, tracer_, response);
1577
+ // Record the type_url, the version_info, and the nonce of the response.
1578
+ upb_strview type_url_strview =
1579
+ envoy_api_v2_DiscoveryResponse_type_url(response);
1580
+ *type_url = UpbStringToStdString(type_url_strview);
1581
+ upb_strview version_info =
1582
+ envoy_api_v2_DiscoveryResponse_version_info(response);
1583
+ *version = UpbStringToStdString(version_info);
1584
+ upb_strview nonce_strview = envoy_api_v2_DiscoveryResponse_nonce(response);
1585
+ *nonce = UpbStringToStdString(nonce_strview);
1586
+ // Parse the response according to the resource type.
1587
+ if (*type_url == kLdsTypeUrl) {
1588
+ return LdsResponseParse(client_, tracer_, response, expected_server_name,
1589
+ xds_routing_enabled_, lds_update, arena.ptr());
1590
+ } else if (*type_url == kRdsTypeUrl) {
1591
+ return RdsResponseParse(client_, tracer_, response, expected_server_name,
1592
+ expected_route_configuration_names,
1593
+ xds_routing_enabled_, rds_update, arena.ptr());
1594
+ } else if (*type_url == kCdsTypeUrl) {
1595
+ return CdsResponseParse(client_, tracer_, response, expected_cluster_names,
1596
+ cds_update_map, arena.ptr());
1597
+ } else if (*type_url == kEdsTypeUrl) {
1598
+ return EdsResponseParse(client_, tracer_, response,
1599
+ expected_eds_service_names, eds_update_map,
1600
+ arena.ptr());
1601
+ } else {
1602
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1603
+ "Unsupported ADS resource type.");
1604
+ }
1605
+ }
1606
+
1607
+ namespace {
1608
+
1609
+ void MaybeLogLrsRequest(
1610
+ XdsClient* client, TraceFlag* tracer,
1611
+ const envoy_service_load_stats_v2_LoadStatsRequest* request) {
1612
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
1613
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1614
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
1615
+ // the raw proto instead of doing this manually.
1616
+ std::vector<std::string> fields;
1617
+ // node
1618
+ const auto* node =
1619
+ envoy_service_load_stats_v2_LoadStatsRequest_node(request);
1620
+ if (node != nullptr) {
1621
+ AddNodeLogFields(node, &fields);
1622
+ }
1623
+ // cluster_stats
1624
+ size_t num_cluster_stats;
1625
+ const struct envoy_api_v2_endpoint_ClusterStats* const* cluster_stats =
1626
+ envoy_service_load_stats_v2_LoadStatsRequest_cluster_stats(
1627
+ request, &num_cluster_stats);
1628
+ for (size_t i = 0; i < num_cluster_stats; ++i) {
1629
+ const auto* cluster_stat = cluster_stats[i];
1630
+ fields.emplace_back("cluster_stats {");
1631
+ // cluster_name
1632
+ AddStringField(
1633
+ " cluster_name",
1634
+ envoy_api_v2_endpoint_ClusterStats_cluster_name(cluster_stat),
1635
+ &fields);
1636
+ // cluster_service_name
1637
+ AddStringField(
1638
+ " cluster_service_name",
1639
+ envoy_api_v2_endpoint_ClusterStats_cluster_service_name(cluster_stat),
1640
+ &fields);
1641
+ // upstream_locality_stats
1642
+ size_t num_stats;
1643
+ const envoy_api_v2_endpoint_UpstreamLocalityStats* const* stats =
1644
+ envoy_api_v2_endpoint_ClusterStats_upstream_locality_stats(
1645
+ cluster_stat, &num_stats);
1646
+ for (size_t j = 0; j < num_stats; ++j) {
1647
+ const auto* stat = stats[j];
1648
+ fields.emplace_back(" upstream_locality_stats {");
1649
+ // locality
1650
+ const auto* locality =
1651
+ envoy_api_v2_endpoint_UpstreamLocalityStats_locality(stat);
1652
+ if (locality != nullptr) {
1653
+ fields.emplace_back(" locality {");
1654
+ AddLocalityField(3, locality, &fields);
1655
+ fields.emplace_back(" }");
1656
+ }
1657
+ // total_successful_requests
1658
+ fields.emplace_back(absl::StrCat(
1659
+ " total_successful_requests: ",
1660
+ envoy_api_v2_endpoint_UpstreamLocalityStats_total_successful_requests(
1661
+ stat)));
1662
+ // total_requests_in_progress
1663
+ fields.emplace_back(absl::StrCat(
1664
+ " total_requests_in_progress: ",
1665
+ envoy_api_v2_endpoint_UpstreamLocalityStats_total_requests_in_progress(
1666
+ stat)));
1667
+ // total_error_requests
1668
+ fields.emplace_back(absl::StrCat(
1669
+ " total_error_requests: ",
1670
+ envoy_api_v2_endpoint_UpstreamLocalityStats_total_error_requests(
1671
+ stat)));
1672
+ // total_issued_requests
1673
+ fields.emplace_back(absl::StrCat(
1674
+ " total_issued_requests: ",
1675
+ envoy_api_v2_endpoint_UpstreamLocalityStats_total_issued_requests(
1676
+ stat)));
1677
+ fields.emplace_back(" }");
1678
+ }
1679
+ // total_dropped_requests
1680
+ fields.emplace_back(absl::StrCat(
1681
+ " total_dropped_requests: ",
1682
+ envoy_api_v2_endpoint_ClusterStats_total_dropped_requests(
1683
+ cluster_stat)));
1684
+ // dropped_requests
1685
+ size_t num_drops;
1686
+ const envoy_api_v2_endpoint_ClusterStats_DroppedRequests* const* drops =
1687
+ envoy_api_v2_endpoint_ClusterStats_dropped_requests(cluster_stat,
1688
+ &num_drops);
1689
+ for (size_t j = 0; j < num_drops; ++j) {
1690
+ const auto* drop = drops[j];
1691
+ fields.emplace_back(" dropped_requests {");
1692
+ // category
1693
+ AddStringField(
1694
+ " category",
1695
+ envoy_api_v2_endpoint_ClusterStats_DroppedRequests_category(drop),
1696
+ &fields);
1697
+ // dropped_count
1698
+ fields.emplace_back(absl::StrCat(
1699
+ " dropped_count: ",
1700
+ envoy_api_v2_endpoint_ClusterStats_DroppedRequests_dropped_count(
1701
+ drop)));
1702
+ fields.emplace_back(" }");
1703
+ }
1704
+ // load_report_interval
1705
+ const auto* load_report_interval =
1706
+ envoy_api_v2_endpoint_ClusterStats_load_report_interval(cluster_stat);
1707
+ if (load_report_interval != nullptr) {
1708
+ fields.emplace_back(" load_report_interval {");
1709
+ fields.emplace_back(absl::StrCat(
1710
+ " seconds: ",
1711
+ google_protobuf_Duration_seconds(load_report_interval)));
1712
+ fields.emplace_back(
1713
+ absl::StrCat(" nanos: ",
1714
+ google_protobuf_Duration_nanos(load_report_interval)));
1715
+ fields.emplace_back(" }");
1716
+ }
1717
+ fields.emplace_back("}");
1718
+ }
1719
+ gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s", client,
1720
+ absl::StrJoin(fields, "\n").c_str());
1721
+ }
1722
+ }
1723
+
1724
+ grpc_slice SerializeLrsRequest(
1725
+ const envoy_service_load_stats_v2_LoadStatsRequest* request,
1726
+ upb_arena* arena) {
1727
+ size_t output_length;
1728
+ char* output = envoy_service_load_stats_v2_LoadStatsRequest_serialize(
1729
+ request, arena, &output_length);
1730
+ return grpc_slice_from_copied_buffer(output, output_length);
1731
+ }
1732
+
1733
+ } // namespace
1734
+
1735
+ grpc_slice XdsApi::CreateLrsInitialRequest(const std::string& server_name) {
1736
+ upb::Arena arena;
1737
+ // Create a request.
1738
+ envoy_service_load_stats_v2_LoadStatsRequest* request =
1739
+ envoy_service_load_stats_v2_LoadStatsRequest_new(arena.ptr());
1740
+ // Populate node.
1741
+ envoy_api_v2_core_Node* node_msg =
1742
+ envoy_service_load_stats_v2_LoadStatsRequest_mutable_node(request,
1743
+ arena.ptr());
1744
+ PopulateNode(arena.ptr(), node_, build_version_, user_agent_name_,
1745
+ server_name, node_msg);
1746
+ envoy_api_v2_core_Node_add_client_features(
1747
+ node_msg, upb_strview_makez("envoy.lrs.supports_send_all_clusters"),
1748
+ arena.ptr());
1749
+ MaybeLogLrsRequest(client_, tracer_, request);
1750
+ return SerializeLrsRequest(request, arena.ptr());
1751
+ }
1752
+
1753
+ namespace {
1754
+
1755
+ void LocalityStatsPopulate(envoy_api_v2_endpoint_UpstreamLocalityStats* output,
1756
+ const XdsLocalityName& locality_name,
1757
+ const XdsClusterLocalityStats::Snapshot& snapshot,
1758
+ upb_arena* arena) {
1759
+ // Set locality.
1760
+ envoy_api_v2_core_Locality* locality =
1761
+ envoy_api_v2_endpoint_UpstreamLocalityStats_mutable_locality(output,
1762
+ arena);
1763
+ if (!locality_name.region().empty()) {
1764
+ envoy_api_v2_core_Locality_set_region(
1765
+ locality, upb_strview_makez(locality_name.region().c_str()));
1766
+ }
1767
+ if (!locality_name.zone().empty()) {
1768
+ envoy_api_v2_core_Locality_set_zone(
1769
+ locality, upb_strview_makez(locality_name.zone().c_str()));
1770
+ }
1771
+ if (!locality_name.sub_zone().empty()) {
1772
+ envoy_api_v2_core_Locality_set_sub_zone(
1773
+ locality, upb_strview_makez(locality_name.sub_zone().c_str()));
1774
+ }
1775
+ // Set total counts.
1776
+ envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_successful_requests(
1777
+ output, snapshot.total_successful_requests);
1778
+ envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_requests_in_progress(
1779
+ output, snapshot.total_requests_in_progress);
1780
+ envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_error_requests(
1781
+ output, snapshot.total_error_requests);
1782
+ envoy_api_v2_endpoint_UpstreamLocalityStats_set_total_issued_requests(
1783
+ output, snapshot.total_issued_requests);
1784
+ // Add backend metrics.
1785
+ for (const auto& p : snapshot.backend_metrics) {
1786
+ const std::string& metric_name = p.first;
1787
+ const XdsClusterLocalityStats::BackendMetric& metric_value = p.second;
1788
+ envoy_api_v2_endpoint_EndpointLoadMetricStats* load_metric =
1789
+ envoy_api_v2_endpoint_UpstreamLocalityStats_add_load_metric_stats(
1790
+ output, arena);
1791
+ envoy_api_v2_endpoint_EndpointLoadMetricStats_set_metric_name(
1792
+ load_metric, upb_strview_make(metric_name.data(), metric_name.size()));
1793
+ envoy_api_v2_endpoint_EndpointLoadMetricStats_set_num_requests_finished_with_metric(
1794
+ load_metric, metric_value.num_requests_finished_with_metric);
1795
+ envoy_api_v2_endpoint_EndpointLoadMetricStats_set_total_metric_value(
1796
+ load_metric, metric_value.total_metric_value);
1797
+ }
1798
+ }
1799
+
1800
+ } // namespace
1801
+
1802
+ grpc_slice XdsApi::CreateLrsRequest(
1803
+ ClusterLoadReportMap cluster_load_report_map) {
1804
+ upb::Arena arena;
1805
+ // Create a request.
1806
+ envoy_service_load_stats_v2_LoadStatsRequest* request =
1807
+ envoy_service_load_stats_v2_LoadStatsRequest_new(arena.ptr());
1808
+ for (auto& p : cluster_load_report_map) {
1809
+ const std::string& cluster_name = p.first.first;
1810
+ const std::string& eds_service_name = p.first.second;
1811
+ const ClusterLoadReport& load_report = p.second;
1812
+ // Add cluster stats.
1813
+ envoy_api_v2_endpoint_ClusterStats* cluster_stats =
1814
+ envoy_service_load_stats_v2_LoadStatsRequest_add_cluster_stats(
1815
+ request, arena.ptr());
1816
+ // Set the cluster name.
1817
+ envoy_api_v2_endpoint_ClusterStats_set_cluster_name(
1818
+ cluster_stats,
1819
+ upb_strview_make(cluster_name.data(), cluster_name.size()));
1820
+ // Set EDS service name, if non-empty.
1821
+ if (!eds_service_name.empty()) {
1822
+ envoy_api_v2_endpoint_ClusterStats_set_cluster_service_name(
1823
+ cluster_stats,
1824
+ upb_strview_make(eds_service_name.data(), eds_service_name.size()));
1825
+ }
1826
+ // Add locality stats.
1827
+ for (const auto& p : load_report.locality_stats) {
1828
+ const XdsLocalityName& locality_name = *p.first;
1829
+ const auto& snapshot = p.second;
1830
+ envoy_api_v2_endpoint_UpstreamLocalityStats* locality_stats =
1831
+ envoy_api_v2_endpoint_ClusterStats_add_upstream_locality_stats(
1832
+ cluster_stats, arena.ptr());
1833
+ LocalityStatsPopulate(locality_stats, locality_name, snapshot,
1834
+ arena.ptr());
1835
+ }
1836
+ // Add dropped requests.
1837
+ uint64_t total_dropped_requests = 0;
1838
+ for (const auto& p : load_report.dropped_requests) {
1839
+ const char* category = p.first.c_str();
1840
+ const uint64_t count = p.second;
1841
+ envoy_api_v2_endpoint_ClusterStats_DroppedRequests* dropped_requests =
1842
+ envoy_api_v2_endpoint_ClusterStats_add_dropped_requests(cluster_stats,
1843
+ arena.ptr());
1844
+ envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_category(
1845
+ dropped_requests, upb_strview_makez(category));
1846
+ envoy_api_v2_endpoint_ClusterStats_DroppedRequests_set_dropped_count(
1847
+ dropped_requests, count);
1848
+ total_dropped_requests += count;
1849
+ }
1850
+ // Set total dropped requests.
1851
+ envoy_api_v2_endpoint_ClusterStats_set_total_dropped_requests(
1852
+ cluster_stats, total_dropped_requests);
1853
+ // Set real load report interval.
1854
+ gpr_timespec timespec =
1855
+ grpc_millis_to_timespec(load_report.load_report_interval, GPR_TIMESPAN);
1856
+ google_protobuf_Duration* load_report_interval =
1857
+ envoy_api_v2_endpoint_ClusterStats_mutable_load_report_interval(
1858
+ cluster_stats, arena.ptr());
1859
+ google_protobuf_Duration_set_seconds(load_report_interval, timespec.tv_sec);
1860
+ google_protobuf_Duration_set_nanos(load_report_interval, timespec.tv_nsec);
1861
+ }
1862
+ MaybeLogLrsRequest(client_, tracer_, request);
1863
+ return SerializeLrsRequest(request, arena.ptr());
1864
+ }
1865
+
1866
+ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
1867
+ bool* send_all_clusters,
1868
+ std::set<std::string>* cluster_names,
1869
+ grpc_millis* load_reporting_interval) {
1870
+ upb::Arena arena;
1871
+ // Decode the response.
1872
+ const envoy_service_load_stats_v2_LoadStatsResponse* decoded_response =
1873
+ envoy_service_load_stats_v2_LoadStatsResponse_parse(
1874
+ reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
1875
+ GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
1876
+ // Parse the response.
1877
+ if (decoded_response == nullptr) {
1878
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode response.");
1879
+ }
1880
+ // Check send_all_clusters.
1881
+ if (envoy_service_load_stats_v2_LoadStatsResponse_send_all_clusters(
1882
+ decoded_response)) {
1883
+ *send_all_clusters = true;
1884
+ } else {
1885
+ // Store the cluster names.
1886
+ size_t size;
1887
+ const upb_strview* clusters =
1888
+ envoy_service_load_stats_v2_LoadStatsResponse_clusters(decoded_response,
1889
+ &size);
1890
+ for (size_t i = 0; i < size; ++i) {
1891
+ cluster_names->emplace(clusters[i].data, clusters[i].size);
1892
+ }
1893
+ }
1894
+ // Get the load report interval.
1895
+ const google_protobuf_Duration* load_reporting_interval_duration =
1896
+ envoy_service_load_stats_v2_LoadStatsResponse_load_reporting_interval(
1897
+ decoded_response);
1898
+ gpr_timespec timespec{
1899
+ google_protobuf_Duration_seconds(load_reporting_interval_duration),
1900
+ google_protobuf_Duration_nanos(load_reporting_interval_duration),
1901
+ GPR_TIMESPAN};
1902
+ *load_reporting_interval = gpr_time_to_millis(timespec);
1903
+ return GRPC_ERROR_NONE;
1904
+ }
1905
+
1906
+ } // namespace grpc_core