grpc 1.21.0 → 1.32.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 (1843) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2516 -19950
  3. data/etc/roots.pem +44 -100
  4. data/include/grpc/grpc.h +3 -1
  5. data/include/grpc/grpc_security.h +238 -55
  6. data/include/grpc/grpc_security_constants.h +32 -1
  7. data/include/grpc/impl/codegen/README.md +22 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +61 -13
  10. data/include/grpc/impl/codegen/port_platform.h +74 -30
  11. data/include/grpc/impl/codegen/sync.h +5 -3
  12. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  13. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  14. data/include/grpc/module.modulemap +25 -37
  15. data/include/grpc/slice.h +2 -2
  16. data/include/grpc/support/alloc.h +0 -16
  17. data/include/grpc/support/sync_abseil.h +26 -0
  18. data/src/core/ext/filters/client_channel/backend_metric.cc +84 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +10 -8
  21. data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
  22. data/src/core/ext/filters/client_channel/channel_connectivity.cc +18 -4
  23. data/src/core/ext/filters/client_channel/client_channel.cc +1516 -742
  24. data/src/core/ext/filters/client_channel/client_channel.h +25 -9
  25. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +50 -139
  26. data/src/core/ext/filters/client_channel/client_channel_channelz.h +15 -39
  27. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  28. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -9
  29. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -13
  30. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  31. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  32. data/src/core/ext/filters/client_channel/connector.h +42 -39
  33. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +34 -12
  34. data/src/core/ext/filters/client_channel/health/health_check_client.cc +75 -115
  35. data/src/core/ext/filters/client_channel/health/health_check_client.h +8 -16
  36. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +75 -46
  37. data/src/core/ext/filters/client_channel/http_proxy.cc +126 -120
  38. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  39. data/src/core/ext/filters/client_channel/lb_policy.cc +35 -35
  40. data/src/core/ext/filters/client_channel/lb_policy.h +225 -152
  41. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  42. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +299 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -25
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +635 -734
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +33 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +7 -6
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +42 -58
  56. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +113 -166
  57. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +890 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +61 -101
  59. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +116 -260
  60. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +423 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +946 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +537 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +3 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1141 -0
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +6 -9
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +53 -77
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +3 -3
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +8 -8
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  74. data/src/core/ext/filters/client_channel/resolver.cc +6 -9
  75. data/src/core/ext/filters/client_channel/resolver.h +19 -37
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +156 -130
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +74 -39
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +15 -21
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +33 -33
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +16 -13
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +476 -129
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +231 -193
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -4
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -6
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -2
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -2
  87. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -48
  88. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +165 -116
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +45 -29
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +536 -0
  92. data/src/core/ext/filters/client_channel/resolver_factory.h +11 -11
  93. data/src/core/ext/filters/client_channel/resolver_registry.cc +39 -24
  94. data/src/core/ext/filters/client_channel/resolver_registry.h +17 -12
  95. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +251 -313
  96. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +28 -26
  97. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +100 -325
  98. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +48 -53
  99. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  100. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  101. data/src/core/ext/filters/client_channel/server_address.cc +40 -14
  102. data/src/core/ext/filters/client_channel/server_address.h +45 -15
  103. data/src/core/ext/filters/client_channel/service_config.cc +143 -253
  104. data/src/core/ext/filters/client_channel/service_config.h +47 -131
  105. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  106. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  107. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  108. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  109. data/src/core/ext/filters/client_channel/subchannel.cc +436 -288
  110. data/src/core/ext/filters/client_channel/subchannel.h +181 -53
  111. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  112. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  113. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  114. data/src/core/ext/filters/deadline/deadline_filter.cc +30 -28
  115. data/src/core/ext/filters/http/client/http_client_filter.cc +66 -70
  116. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  117. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  118. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +335 -301
  119. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  120. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  121. data/src/core/ext/filters/http/server/http_server_filter.cc +66 -39
  122. data/src/core/ext/filters/max_age/max_age_filter.cc +72 -60
  123. data/src/core/ext/filters/message_size/message_size_filter.cc +116 -144
  124. data/src/core/ext/filters/message_size/message_size_filter.h +12 -6
  125. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +193 -171
  127. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +48 -1
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +29 -25
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +44 -64
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +384 -305
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  135. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  136. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +640 -560
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/context_list.cc +5 -3
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -31
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +28 -38
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +45 -54
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -9
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -7
  145. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  146. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +13 -12
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  151. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  152. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +531 -348
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +213 -143
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +11 -4
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +41 -196
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +62 -18
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  159. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  160. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -1
  161. data/src/core/ext/transport/chttp2/transport/internal.h +64 -47
  162. data/src/core/ext/transport/chttp2/transport/parsing.cc +148 -162
  163. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  164. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  165. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -30
  166. data/src/core/ext/transport/inproc/inproc_transport.cc +164 -114
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  168. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +29 -0
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  170. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  172. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  173. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +55 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  203. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  204. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  217. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  218. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  222. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  223. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  224. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  229. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  233. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  237. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  238. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  239. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  240. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  241. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  243. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +30 -0
  244. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  245. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +30 -0
  246. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  249. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +29 -0
  250. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  251. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  252. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  254. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  265. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  266. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  267. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  268. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  269. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +17 -0
  270. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +35 -0
  271. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  272. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  273. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  274. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  275. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  276. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  277. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  278. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +29 -0
  279. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  280. data/src/core/ext/upb-generated/google/api/annotations.upb.h +29 -0
  281. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  282. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  283. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  284. data/src/core/ext/upb-generated/google/api/http.upb.h +191 -0
  285. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  286. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +57 -0
  287. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  288. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1722 -0
  289. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  290. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +57 -0
  291. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  292. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +49 -0
  293. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  294. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +194 -0
  295. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  296. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +57 -0
  297. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  298. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +237 -0
  299. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  300. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  301. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  302. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +113 -0
  303. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  304. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +672 -0
  305. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  306. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +110 -0
  307. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  308. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +83 -0
  309. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  310. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +396 -0
  311. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  312. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +103 -0
  313. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  314. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +29 -0
  315. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  316. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  317. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  318. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  319. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  320. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +117 -0
  321. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  322. data/src/core/ext/upb-generated/validate/validate.upb.h +2074 -0
  323. data/src/core/ext/xds/xds_api.cc +2388 -0
  324. data/src/core/ext/xds/xds_api.h +360 -0
  325. data/src/core/ext/xds/xds_bootstrap.cc +373 -0
  326. data/src/core/ext/xds/xds_bootstrap.h +93 -0
  327. data/src/core/ext/xds/xds_channel.h +46 -0
  328. data/src/core/ext/xds/xds_channel_args.h +26 -0
  329. data/src/core/ext/xds/xds_channel_secure.cc +103 -0
  330. data/src/core/ext/xds/xds_client.cc +2114 -0
  331. data/src/core/ext/xds/xds_client.h +276 -0
  332. data/src/core/ext/xds/xds_client_stats.cc +115 -0
  333. data/src/core/ext/xds/xds_client_stats.h +211 -0
  334. data/src/core/lib/avl/avl.cc +1 -1
  335. data/src/core/lib/channel/channel_args.cc +52 -14
  336. data/src/core/lib/channel/channel_args.h +41 -3
  337. data/src/core/lib/channel/channel_stack.cc +1 -1
  338. data/src/core/lib/channel/channel_stack.h +38 -18
  339. data/src/core/lib/channel/channel_trace.cc +32 -45
  340. data/src/core/lib/channel/channel_trace.h +3 -3
  341. data/src/core/lib/channel/channelz.cc +377 -318
  342. data/src/core/lib/channel/channelz.h +128 -90
  343. data/src/core/lib/channel/channelz_registry.cc +123 -178
  344. data/src/core/lib/channel/channelz_registry.h +14 -32
  345. data/src/core/lib/channel/connected_channel.cc +28 -25
  346. data/src/core/lib/channel/context.h +2 -2
  347. data/src/core/lib/channel/handshaker.cc +18 -14
  348. data/src/core/lib/channel/handshaker.h +7 -6
  349. data/src/core/lib/channel/handshaker_factory.h +1 -3
  350. data/src/core/lib/channel/handshaker_registry.cc +9 -21
  351. data/src/core/lib/channel/handshaker_registry.h +3 -3
  352. data/src/core/lib/channel/status_util.cc +2 -3
  353. data/src/core/lib/compression/compression.cc +16 -11
  354. data/src/core/lib/compression/compression_args.cc +13 -6
  355. data/src/core/lib/compression/compression_args.h +3 -2
  356. data/src/core/lib/compression/compression_internal.cc +15 -11
  357. data/src/core/lib/compression/compression_internal.h +9 -1
  358. data/src/core/lib/compression/message_compress.cc +8 -3
  359. data/src/core/lib/compression/stream_compression.cc +3 -2
  360. data/src/core/lib/compression/stream_compression.h +2 -2
  361. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  362. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  363. data/src/core/lib/debug/stats.cc +21 -27
  364. data/src/core/lib/debug/stats.h +3 -1
  365. data/src/core/lib/debug/trace.h +3 -2
  366. data/src/core/lib/gpr/alloc.cc +4 -29
  367. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  368. data/src/core/lib/gpr/env.h +1 -1
  369. data/src/core/lib/gpr/env_linux.cc +10 -21
  370. data/src/core/lib/gpr/env_posix.cc +0 -5
  371. data/src/core/lib/gpr/log_linux.cc +8 -10
  372. data/src/core/lib/gpr/log_posix.cc +7 -9
  373. data/src/core/lib/gpr/spinlock.h +2 -3
  374. data/src/core/lib/gpr/string.cc +25 -36
  375. data/src/core/lib/gpr/string.h +11 -19
  376. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  377. data/src/core/lib/gpr/sync_posix.cc +10 -142
  378. data/src/core/lib/gpr/sync_windows.cc +4 -2
  379. data/src/core/lib/gpr/time.cc +4 -0
  380. data/src/core/lib/gpr/time_posix.cc +1 -1
  381. data/src/core/lib/gpr/time_precise.cc +123 -36
  382. data/src/core/lib/gpr/time_precise.h +37 -0
  383. data/src/core/lib/gprpp/arena.cc +3 -3
  384. data/src/core/lib/gprpp/arena.h +2 -3
  385. data/src/core/lib/gprpp/atomic.h +10 -6
  386. data/src/core/lib/gprpp/debug_location.h +3 -2
  387. data/src/core/lib/gprpp/fork.cc +19 -26
  388. data/src/core/lib/gprpp/fork.h +18 -3
  389. data/src/core/lib/gprpp/global_config.h +9 -0
  390. data/src/core/lib/gprpp/global_config_custom.h +1 -1
  391. data/src/core/lib/gprpp/global_config_env.cc +15 -13
  392. data/src/core/lib/gprpp/global_config_env.h +2 -2
  393. data/src/core/lib/gprpp/host_port.cc +112 -0
  394. data/src/core/lib/gprpp/host_port.h +56 -0
  395. data/src/core/lib/gprpp/map.h +16 -382
  396. data/src/core/lib/gprpp/memory.h +12 -75
  397. data/src/core/lib/gprpp/mpscq.cc +108 -0
  398. data/src/core/lib/gprpp/mpscq.h +98 -0
  399. data/src/core/lib/gprpp/orphanable.h +9 -14
  400. data/src/core/lib/gprpp/ref_counted.h +97 -44
  401. data/src/core/lib/gprpp/ref_counted_ptr.h +8 -1
  402. data/src/core/lib/gprpp/sync.h +9 -0
  403. data/src/core/lib/gprpp/thd.h +13 -6
  404. data/src/core/lib/gprpp/thd_posix.cc +29 -3
  405. data/src/core/lib/gprpp/thd_windows.cc +12 -4
  406. data/src/core/lib/http/format_request.cc +46 -65
  407. data/src/core/lib/http/httpcli.cc +18 -16
  408. data/src/core/lib/http/httpcli.h +2 -3
  409. data/src/core/lib/http/httpcli_security_connector.cc +27 -21
  410. data/src/core/lib/http/parser.cc +1 -1
  411. data/src/core/lib/http/parser.h +2 -3
  412. data/src/core/lib/iomgr/buffer_list.cc +45 -40
  413. data/src/core/lib/iomgr/buffer_list.h +27 -27
  414. data/src/core/lib/iomgr/call_combiner.cc +12 -12
  415. data/src/core/lib/iomgr/call_combiner.h +10 -8
  416. data/src/core/lib/iomgr/cfstream_handle.cc +11 -3
  417. data/src/core/lib/iomgr/cfstream_handle.h +11 -3
  418. data/src/core/lib/iomgr/closure.h +43 -141
  419. data/src/core/lib/iomgr/combiner.cc +46 -90
  420. data/src/core/lib/iomgr/combiner.h +30 -8
  421. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  422. data/src/core/lib/iomgr/endpoint.cc +5 -1
  423. data/src/core/lib/iomgr/endpoint.h +7 -3
  424. data/src/core/lib/iomgr/endpoint_cfstream.cc +41 -19
  425. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  426. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  427. data/src/core/lib/iomgr/error.cc +26 -19
  428. data/src/core/lib/iomgr/error.h +15 -8
  429. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  430. data/src/core/lib/iomgr/error_internal.h +1 -1
  431. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  432. data/src/core/lib/iomgr/ev_apple.h +43 -0
  433. data/src/core/lib/iomgr/ev_epoll1_linux.cc +48 -47
  434. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -94
  435. data/src/core/lib/iomgr/ev_poll_posix.cc +42 -26
  436. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  437. data/src/core/lib/iomgr/ev_posix.h +3 -2
  438. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  439. data/src/core/lib/iomgr/exec_ctx.cc +78 -21
  440. data/src/core/lib/iomgr/exec_ctx.h +27 -7
  441. data/src/core/lib/iomgr/executor.cc +25 -41
  442. data/src/core/lib/iomgr/executor.h +7 -7
  443. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  444. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  445. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  446. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  447. data/src/core/lib/iomgr/fork_posix.cc +8 -2
  448. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  449. data/src/core/lib/iomgr/iomgr.cc +4 -4
  450. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  451. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +87 -9
  452. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  453. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  454. data/src/core/lib/iomgr/load_file.cc +1 -0
  455. data/src/core/lib/iomgr/lockfree_event.cc +13 -12
  456. data/src/core/lib/iomgr/parse_address.cc +238 -0
  457. data/src/core/lib/iomgr/parse_address.h +53 -0
  458. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  460. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  461. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  462. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  463. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  464. data/src/core/lib/iomgr/port.h +10 -22
  465. data/src/core/lib/iomgr/python_util.h +46 -0
  466. data/src/core/lib/iomgr/resolve_address.h +4 -6
  467. data/src/core/lib/iomgr/resolve_address_custom.cc +49 -68
  468. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  469. data/src/core/lib/iomgr/resolve_address_posix.cc +20 -24
  470. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -35
  471. data/src/core/lib/iomgr/resource_quota.cc +120 -110
  472. data/src/core/lib/iomgr/resource_quota.h +13 -9
  473. data/src/core/lib/iomgr/sockaddr_utils.cc +33 -36
  474. data/src/core/lib/iomgr/sockaddr_utils.h +12 -16
  475. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  476. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  477. data/src/core/lib/iomgr/socket_utils_common_posix.cc +140 -82
  478. data/src/core/lib/iomgr/socket_utils_posix.h +19 -0
  479. data/src/core/lib/iomgr/socket_windows.cc +6 -7
  480. data/src/core/lib/iomgr/socket_windows.h +1 -1
  481. data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -21
  482. data/src/core/lib/iomgr/tcp_client_custom.cc +9 -11
  483. data/src/core/lib/iomgr/tcp_client_posix.cc +47 -59
  484. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  485. data/src/core/lib/iomgr/tcp_client_windows.cc +12 -13
  486. data/src/core/lib/iomgr/tcp_custom.cc +58 -36
  487. data/src/core/lib/iomgr/tcp_custom.h +4 -1
  488. data/src/core/lib/iomgr/tcp_posix.cc +697 -124
  489. data/src/core/lib/iomgr/tcp_server.cc +8 -4
  490. data/src/core/lib/iomgr/tcp_server.h +28 -5
  491. data/src/core/lib/iomgr/tcp_server_custom.cc +46 -41
  492. data/src/core/lib/iomgr/tcp_server_posix.cc +102 -46
  493. data/src/core/lib/iomgr/tcp_server_utils_posix.h +6 -4
  494. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -19
  495. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  496. data/src/core/lib/iomgr/tcp_server_windows.cc +33 -29
  497. data/src/core/lib/iomgr/tcp_uv.cc +8 -8
  498. data/src/core/lib/iomgr/tcp_windows.cc +49 -30
  499. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  500. data/src/core/lib/iomgr/timer.h +2 -1
  501. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  502. data/src/core/lib/iomgr/timer_generic.cc +26 -24
  503. data/src/core/lib/iomgr/timer_generic.h +39 -0
  504. data/src/core/lib/iomgr/timer_heap.h +2 -3
  505. data/src/core/lib/iomgr/timer_manager.cc +8 -30
  506. data/src/core/lib/iomgr/timer_manager.h +2 -0
  507. data/src/core/lib/iomgr/udp_server.cc +53 -53
  508. data/src/core/lib/iomgr/udp_server.h +11 -14
  509. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  510. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  511. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  512. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  513. data/src/core/lib/iomgr/work_serializer.h +65 -0
  514. data/src/core/lib/json/json.h +209 -68
  515. data/src/core/lib/json/json_reader.cc +508 -317
  516. data/src/core/lib/json/json_writer.cc +202 -110
  517. data/src/core/lib/profiling/basic_timers.cc +2 -2
  518. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  519. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  520. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  521. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  522. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  523. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  524. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  525. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  526. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  527. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  528. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  529. data/src/core/lib/security/credentials/alts/alts_credentials.cc +10 -7
  530. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  531. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  532. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  533. data/src/core/lib/security/credentials/composite/composite_credentials.cc +26 -6
  534. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
  535. data/src/core/lib/security/credentials/credentials.h +31 -25
  536. data/src/core/lib/security/credentials/fake/fake_credentials.cc +9 -9
  537. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
  538. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  539. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +74 -56
  540. data/src/core/lib/security/credentials/iam/iam_credentials.cc +12 -10
  541. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  542. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  543. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  544. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +19 -26
  545. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  546. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +153 -170
  547. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  548. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -3
  549. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +332 -87
  550. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +27 -7
  551. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -15
  552. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
  553. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +43 -5
  554. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  555. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +70 -17
  556. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +118 -5
  557. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  558. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  559. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +67 -32
  560. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +5 -0
  561. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +64 -47
  562. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  563. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +9 -5
  564. data/src/core/lib/security/security_connector/local/local_security_connector.cc +42 -16
  565. data/src/core/lib/security/security_connector/security_connector.cc +4 -1
  566. data/src/core/lib/security/security_connector/security_connector.h +22 -20
  567. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -62
  568. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  569. data/src/core/lib/security/security_connector/ssl_utils.cc +150 -53
  570. data/src/core/lib/security/security_connector/ssl_utils.h +41 -17
  571. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  572. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  573. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +606 -0
  574. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  575. data/src/core/lib/security/transport/auth_filters.h +0 -2
  576. data/src/core/lib/security/transport/client_auth_filter.cc +74 -28
  577. data/src/core/lib/security/transport/secure_endpoint.cc +16 -9
  578. data/src/core/lib/security/transport/security_handshaker.cc +103 -43
  579. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  580. data/src/core/lib/security/transport/server_auth_filter.cc +18 -17
  581. data/src/core/lib/security/util/json_util.cc +35 -15
  582. data/src/core/lib/security/util/json_util.h +5 -3
  583. data/src/core/lib/slice/b64.cc +3 -4
  584. data/src/core/lib/slice/b64.h +3 -4
  585. data/src/core/lib/slice/slice.cc +188 -73
  586. data/src/core/lib/slice/slice_buffer.cc +55 -26
  587. data/src/core/lib/slice/slice_intern.cc +164 -64
  588. data/src/core/lib/slice/slice_internal.h +110 -8
  589. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  590. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  591. data/src/core/lib/slice/slice_utils.h +200 -0
  592. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  593. data/src/core/lib/surface/call.cc +166 -117
  594. data/src/core/lib/surface/call.h +8 -8
  595. data/src/core/lib/surface/call_log_batch.cc +51 -60
  596. data/src/core/lib/surface/channel.cc +188 -137
  597. data/src/core/lib/surface/channel.h +91 -11
  598. data/src/core/lib/surface/channel_ping.cc +3 -4
  599. data/src/core/lib/surface/completion_queue.cc +144 -111
  600. data/src/core/lib/surface/completion_queue.h +6 -3
  601. data/src/core/lib/surface/completion_queue_factory.cc +1 -1
  602. data/src/core/lib/surface/event_string.cc +18 -25
  603. data/src/core/lib/surface/event_string.h +3 -1
  604. data/src/core/lib/surface/init.cc +6 -2
  605. data/src/core/lib/surface/init_secure.cc +2 -2
  606. data/src/core/lib/surface/lame_client.cc +43 -30
  607. data/src/core/lib/surface/server.cc +1275 -1316
  608. data/src/core/lib/surface/server.h +373 -52
  609. data/src/core/lib/surface/validate_metadata.cc +18 -8
  610. data/src/core/lib/surface/validate_metadata.h +13 -2
  611. data/src/core/lib/surface/version.cc +2 -2
  612. data/src/core/lib/transport/authority_override.cc +38 -0
  613. data/src/core/lib/transport/authority_override.h +32 -0
  614. data/src/core/lib/transport/byte_stream.cc +5 -7
  615. data/src/core/lib/transport/byte_stream.h +13 -12
  616. data/src/core/lib/transport/connectivity_state.cc +118 -98
  617. data/src/core/lib/transport/connectivity_state.h +114 -50
  618. data/src/core/lib/transport/error_utils.cc +23 -1
  619. data/src/core/lib/transport/error_utils.h +6 -0
  620. data/src/core/lib/transport/metadata.cc +252 -57
  621. data/src/core/lib/transport/metadata.h +168 -80
  622. data/src/core/lib/transport/metadata_batch.cc +78 -16
  623. data/src/core/lib/transport/metadata_batch.h +40 -3
  624. data/src/core/lib/transport/static_metadata.cc +1169 -495
  625. data/src/core/lib/transport/static_metadata.h +279 -282
  626. data/src/core/lib/transport/status_conversion.cc +7 -15
  627. data/src/core/lib/transport/status_metadata.cc +8 -1
  628. data/src/core/lib/transport/status_metadata.h +18 -0
  629. data/src/core/lib/transport/timeout_encoding.cc +7 -0
  630. data/src/core/lib/transport/timeout_encoding.h +3 -2
  631. data/src/core/lib/transport/transport.cc +14 -13
  632. data/src/core/lib/transport/transport.h +48 -8
  633. data/src/core/lib/transport/transport_op_string.cc +67 -105
  634. data/src/core/lib/uri/uri_parser.cc +30 -35
  635. data/src/core/lib/uri/uri_parser.h +5 -4
  636. data/src/core/plugin_registry/grpc_plugin_registry.cc +36 -4
  637. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  638. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  639. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +414 -120
  640. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  641. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  642. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  643. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +293 -61
  644. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +15 -5
  645. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +5 -0
  646. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
  647. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  648. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +76 -48
  649. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  652. data/src/core/tsi/fake_transport_security.cc +22 -21
  653. data/src/core/tsi/fake_transport_security.h +2 -0
  654. data/src/core/tsi/local_transport_security.cc +8 -6
  655. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  656. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  657. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -9
  658. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  659. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  660. data/src/core/tsi/ssl_transport_security.cc +345 -103
  661. data/src/core/tsi/ssl_transport_security.h +42 -11
  662. data/src/core/tsi/ssl_types.h +0 -2
  663. data/src/core/tsi/transport_security.cc +13 -0
  664. data/src/core/tsi/transport_security.h +6 -9
  665. data/src/core/tsi/transport_security_grpc.cc +7 -0
  666. data/src/core/tsi/transport_security_grpc.h +8 -3
  667. data/src/core/tsi/transport_security_interface.h +20 -3
  668. data/src/ruby/bin/math_pb.rb +5 -5
  669. data/src/ruby/bin/math_services_pb.rb +4 -4
  670. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  671. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  672. data/src/ruby/ext/grpc/extconf.rb +11 -2
  673. data/src/ruby/ext/grpc/rb_call.c +13 -4
  674. data/src/ruby/ext/grpc/rb_call.h +4 -0
  675. data/src/ruby/ext/grpc/rb_call_credentials.c +61 -13
  676. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  677. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  678. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  679. data/src/ruby/ext/grpc/rb_grpc.c +1 -42
  680. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
  681. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +28 -13
  682. data/src/ruby/lib/grpc.rb +2 -0
  683. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  684. data/src/ruby/lib/grpc/errors.rb +107 -49
  685. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  686. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  687. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  688. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  689. data/src/ruby/lib/grpc/generic/rpc_server.rb +11 -12
  690. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  691. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  692. data/src/ruby/lib/grpc/grpc.rb +1 -1
  693. data/src/ruby/lib/grpc/structs.rb +15 -0
  694. data/src/ruby/lib/grpc/version.rb +1 -1
  695. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  696. data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
  697. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  698. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
  699. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -13
  700. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +43 -11
  701. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  702. data/src/ruby/spec/debug_message_spec.rb +134 -0
  703. data/src/ruby/spec/errors_spec.rb +1 -0
  704. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  705. data/src/ruby/spec/generic/service_spec.rb +2 -0
  706. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  707. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  708. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  709. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  710. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  711. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  712. data/src/ruby/spec/pb/codegen/package_option_spec.rb +79 -29
  713. data/src/ruby/spec/support/services.rb +10 -4
  714. data/src/ruby/spec/testdata/ca.pem +18 -13
  715. data/src/ruby/spec/testdata/client.key +26 -14
  716. data/src/ruby/spec/testdata/client.pem +18 -12
  717. data/src/ruby/spec/testdata/server1.key +26 -14
  718. data/src/ruby/spec/testdata/server1.pem +20 -14
  719. data/src/ruby/spec/user_agent_spec.rb +74 -0
  720. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  721. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  722. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  723. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  724. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  725. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  726. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  727. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  728. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  729. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  730. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  732. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  733. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  734. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  735. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  736. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  737. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  738. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  739. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  740. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  741. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  742. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  743. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  744. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  745. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  746. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  747. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  748. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  749. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  750. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  751. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  752. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  753. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  754. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  755. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  756. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  757. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  758. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  759. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  760. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  761. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  762. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  763. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  764. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  765. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  766. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  767. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  768. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  769. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  770. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  771. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  772. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  773. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  774. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  775. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  776. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  777. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  778. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  779. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  780. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  781. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  782. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  783. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  784. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  785. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  786. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  787. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  788. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  789. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  790. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  791. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  792. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  793. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  794. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  795. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  796. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  797. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  798. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  799. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  800. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  801. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  802. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  803. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  804. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  805. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  806. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  807. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  808. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  809. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  810. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  811. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  812. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  813. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  814. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  815. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  816. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  817. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  818. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  819. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  820. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  821. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  822. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  823. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  824. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  825. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  826. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  827. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  828. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  829. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  830. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  831. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  832. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  833. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  834. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  835. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  836. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  837. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  838. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  839. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  840. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  841. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  861. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  862. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  863. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  864. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  865. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  866. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  867. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  868. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  869. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  870. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  871. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  872. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  873. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  874. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  875. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  876. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  877. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  878. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  879. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  880. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  881. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  882. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  883. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  884. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  885. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  886. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  887. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  888. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  889. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  890. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  891. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  892. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  893. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  894. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  895. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  896. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  897. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  899. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  900. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  901. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  902. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  903. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  904. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  905. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  906. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  907. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  908. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  909. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  910. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  911. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  912. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  913. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  916. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  917. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  918. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  919. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  920. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  921. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  922. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  923. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  924. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  925. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  926. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  927. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  928. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  929. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  930. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  931. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  932. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  933. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  934. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  935. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  936. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  937. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  938. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  939. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  940. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  941. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  942. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  943. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  944. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  945. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  946. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  947. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  948. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  949. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  950. data/third_party/boringssl-with-bazel/err_data.c +1451 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  954. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  955. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  956. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  957. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  961. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  962. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  963. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  966. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  967. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  969. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  970. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  975. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  980. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  984. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  985. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  986. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  987. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  989. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  993. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  994. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  997. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1001. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1002. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1003. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1005. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1011. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  1012. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  1013. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +492 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1019. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  1020. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  1021. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  1022. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1025. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1027. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1029. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1030. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1035. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1036. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1037. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1039. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1040. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1041. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1043. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1049. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1051. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1062. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1064. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1066. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1067. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
  1073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1074. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1075. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1077. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1085. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +704 -0
  1087. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1095. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1096. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1097. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1103. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1104. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +776 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1122. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1126. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1127. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1128. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1129. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1141. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1143. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1144. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1145. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1152. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +716 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1156. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1159. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1160. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1162. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1163. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  1164. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/mem.c +373 -0
  1170. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1172. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1179. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1180. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +138 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1336 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1200. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1202. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1206. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +161 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1229. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
  1231. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +483 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +351 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +226 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +329 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1243. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2506 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +235 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1248. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1250. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1252. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +563 -0
  1254. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1255. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +214 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +89 -0
  1261. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1262. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +356 -0
  1264. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +61 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1268. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1271. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1275. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1278. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1281. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1283. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1285. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1289. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1292. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1293. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1294. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1295. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1296. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +882 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1299. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +173 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1305. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1306. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1316. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1326. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1327. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1330. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1119 -0
  1336. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1337. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1340. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1341. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1342. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1343. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1344. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1345. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1346. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1347. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1348. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1349. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1350. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1351. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1353. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1359. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1362. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1366. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5247 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +631 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1292 -0
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1377. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1378. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1379. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1380. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1381. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1382. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1383. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1384. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1385. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +710 -0
  1386. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1387. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1814 -0
  1388. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3579 -0
  1389. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1390. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1391. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1392. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1393. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1394. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1395. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1016 -0
  1396. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1397. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1398. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1399. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3053 -0
  1400. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1401. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1313 -0
  1402. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1403. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1404. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1406. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +386 -0
  1407. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3895 -0
  1408. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1409. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1027 -0
  1410. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1411. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1104 -0
  1412. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1413. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
  1414. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1415. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1416. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1417. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1418. data/third_party/re2/re2/bitmap256.h +117 -0
  1419. data/third_party/re2/re2/bitstate.cc +385 -0
  1420. data/third_party/re2/re2/compile.cc +1279 -0
  1421. data/third_party/re2/re2/dfa.cc +2130 -0
  1422. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1423. data/third_party/re2/re2/filtered_re2.h +109 -0
  1424. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1425. data/third_party/re2/re2/nfa.cc +713 -0
  1426. data/third_party/re2/re2/onepass.cc +623 -0
  1427. data/third_party/re2/re2/parse.cc +2464 -0
  1428. data/third_party/re2/re2/perl_groups.cc +119 -0
  1429. data/third_party/re2/re2/pod_array.h +55 -0
  1430. data/third_party/re2/re2/prefilter.cc +710 -0
  1431. data/third_party/re2/re2/prefilter.h +108 -0
  1432. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1433. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1434. data/third_party/re2/re2/prog.cc +988 -0
  1435. data/third_party/re2/re2/prog.h +436 -0
  1436. data/third_party/re2/re2/re2.cc +1362 -0
  1437. data/third_party/re2/re2/re2.h +1002 -0
  1438. data/third_party/re2/re2/regexp.cc +980 -0
  1439. data/third_party/re2/re2/regexp.h +659 -0
  1440. data/third_party/re2/re2/set.cc +154 -0
  1441. data/third_party/re2/re2/set.h +80 -0
  1442. data/third_party/re2/re2/simplify.cc +657 -0
  1443. data/third_party/re2/re2/sparse_array.h +392 -0
  1444. data/third_party/re2/re2/sparse_set.h +264 -0
  1445. data/third_party/re2/re2/stringpiece.cc +65 -0
  1446. data/third_party/re2/re2/stringpiece.h +210 -0
  1447. data/third_party/re2/re2/tostring.cc +351 -0
  1448. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1449. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1450. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1451. data/third_party/re2/re2/unicode_groups.h +67 -0
  1452. data/third_party/re2/re2/walker-inl.h +246 -0
  1453. data/third_party/re2/util/benchmark.h +156 -0
  1454. data/third_party/re2/util/flags.h +26 -0
  1455. data/third_party/re2/util/logging.h +109 -0
  1456. data/third_party/re2/util/malloc_counter.h +19 -0
  1457. data/third_party/re2/util/mix.h +41 -0
  1458. data/third_party/re2/util/mutex.h +148 -0
  1459. data/third_party/re2/util/pcre.cc +1025 -0
  1460. data/third_party/re2/util/pcre.h +681 -0
  1461. data/third_party/re2/util/rune.cc +260 -0
  1462. data/third_party/re2/util/strutil.cc +149 -0
  1463. data/third_party/re2/util/strutil.h +21 -0
  1464. data/third_party/re2/util/test.h +50 -0
  1465. data/third_party/re2/util/utf.h +44 -0
  1466. data/third_party/re2/util/util.h +42 -0
  1467. data/third_party/upb/upb/decode.c +621 -0
  1468. data/third_party/upb/upb/decode.h +21 -0
  1469. data/third_party/upb/upb/encode.c +420 -0
  1470. data/third_party/upb/upb/encode.h +21 -0
  1471. data/third_party/upb/upb/msg.c +177 -0
  1472. data/third_party/upb/upb/msg.h +473 -0
  1473. data/third_party/upb/upb/port.c +26 -0
  1474. data/third_party/upb/upb/port_def.inc +179 -0
  1475. data/third_party/upb/upb/port_undef.inc +28 -0
  1476. data/third_party/upb/upb/table.c +880 -0
  1477. data/third_party/upb/upb/table.int.h +466 -0
  1478. data/third_party/upb/upb/upb.c +287 -0
  1479. data/third_party/upb/upb/upb.h +308 -0
  1480. data/third_party/upb/upb/upb.hpp +88 -0
  1481. metadata +1054 -526
  1482. data/src/boringssl/err_data.c +0 -1362
  1483. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1484. data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
  1485. data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
  1486. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1487. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1488. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1489. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1490. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1491. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1492. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -2249
  1493. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +0 -36
  1494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -61
  1495. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +0 -85
  1496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +0 -72
  1497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +0 -307
  1498. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -89
  1499. data/src/core/ext/filters/client_channel/parse_address.cc +0 -234
  1500. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1501. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1502. data/src/core/lib/gpr/host_port.cc +0 -98
  1503. data/src/core/lib/gpr/host_port.h +0 -43
  1504. data/src/core/lib/gpr/mpscq.cc +0 -117
  1505. data/src/core/lib/gpr/mpscq.h +0 -88
  1506. data/src/core/lib/gprpp/abstract.h +0 -37
  1507. data/src/core/lib/gprpp/inlined_vector.h +0 -200
  1508. data/src/core/lib/gprpp/optional.h +0 -48
  1509. data/src/core/lib/gprpp/pair.h +0 -38
  1510. data/src/core/lib/json/json.cc +0 -94
  1511. data/src/core/lib/json/json_common.h +0 -34
  1512. data/src/core/lib/json/json_reader.h +0 -146
  1513. data/src/core/lib/json/json_string.cc +0 -367
  1514. data/src/core/lib/json/json_writer.h +0 -84
  1515. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
  1516. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
  1517. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -426
  1518. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -122
  1519. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1520. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1521. data/src/core/lib/slice/slice_hash_table.h +0 -205
  1522. data/src/core/lib/slice/slice_weak_hash_table.h +0 -109
  1523. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1524. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1525. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
  1526. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1527. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1528. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1529. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1530. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1531. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1532. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1533. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1534. data/third_party/boringssl/crypto/asn1/a_bitstr.c +0 -271
  1535. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1536. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1537. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1538. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1539. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1540. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1541. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1542. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1543. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1544. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1545. data/third_party/boringssl/crypto/asn1/a_type.c +0 -151
  1546. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1547. data/third_party/boringssl/crypto/asn1/asn_pack.c +0 -105
  1548. data/third_party/boringssl/crypto/asn1/f_enum.c +0 -93
  1549. data/third_party/boringssl/crypto/asn1/f_int.c +0 -97
  1550. data/third_party/boringssl/crypto/asn1/f_string.c +0 -91
  1551. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1552. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1553. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1554. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1555. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1556. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1557. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1558. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1559. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1560. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1561. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1562. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1563. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1564. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1565. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1566. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1567. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1568. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1569. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1570. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1571. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1572. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1573. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1574. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1575. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1576. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1577. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1578. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1579. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1580. data/third_party/boringssl/crypto/crypto.c +0 -198
  1581. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1582. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1583. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1584. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1585. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1586. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1587. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1588. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1589. data/third_party/boringssl/crypto/err/err.c +0 -847
  1590. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1591. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1592. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1593. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1594. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1595. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1596. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1597. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1598. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1599. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1600. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1601. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1602. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1603. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1604. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1605. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1606. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1607. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1608. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1609. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1610. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1611. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1612. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1613. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1614. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1615. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1616. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1617. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1618. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1619. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1620. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1621. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1622. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1623. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1624. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1625. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1626. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1627. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1628. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1629. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1630. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1631. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1632. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1633. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1634. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1635. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1636. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1637. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1638. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1639. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1640. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1641. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1642. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1643. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1644. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1645. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1646. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1647. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1648. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1649. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1650. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1651. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1652. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1653. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1654. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1655. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1656. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1657. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1658. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1659. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1660. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1661. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1662. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1663. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1664. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1665. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1666. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1667. data/third_party/boringssl/crypto/internal.h +0 -739
  1668. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1669. data/third_party/boringssl/crypto/mem.c +0 -235
  1670. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1671. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1672. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1673. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1674. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1675. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1676. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1677. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1678. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1679. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1680. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1681. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1682. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1683. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1684. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1685. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1686. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1687. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1688. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1689. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1690. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1691. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1692. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1693. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1694. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1695. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1696. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1697. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1698. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1699. data/third_party/boringssl/crypto/x509/algorithm.c +0 -153
  1700. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1701. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1702. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1703. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1704. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1705. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1706. data/third_party/boringssl/crypto/x509/x509.c +0 -157
  1707. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1708. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1709. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1710. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1711. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1712. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1713. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1714. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1715. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1716. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1717. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1718. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1719. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1720. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1721. data/third_party/boringssl/crypto/x509/x_crl.c +0 -541
  1722. data/third_party/boringssl/crypto/x509/x_pubkey.c +0 -368
  1723. data/third_party/boringssl/crypto/x509/x_sig.c +0 -69
  1724. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1725. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1726. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1727. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1728. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1729. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1730. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1731. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1732. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1733. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1734. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1735. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1736. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1737. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1738. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1739. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1740. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1741. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1742. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1743. data/third_party/boringssl/include/openssl/arm_arch.h +0 -121
  1744. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1745. data/third_party/boringssl/include/openssl/base.h +0 -457
  1746. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1747. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1748. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1749. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1750. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1751. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1752. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1753. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1754. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1755. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1756. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1757. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1758. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1759. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1760. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1761. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1762. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1763. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1764. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1765. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1766. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1767. data/third_party/boringssl/include/openssl/err.h +0 -458
  1768. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1769. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1770. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1771. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1772. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1773. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1774. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1775. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1776. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1777. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1778. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1779. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1780. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1781. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1782. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1783. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1784. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1785. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1786. data/third_party/boringssl/include/openssl/span.h +0 -191
  1787. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1788. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1789. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1790. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1791. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1792. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1793. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1794. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1795. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1796. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1797. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1798. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1799. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1800. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1801. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1802. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1803. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1804. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1805. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1806. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1807. data/third_party/boringssl/ssl/internal.h +0 -3064
  1808. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1809. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1810. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1811. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1812. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1813. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1814. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1815. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1816. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1817. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1818. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1819. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1820. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1821. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1822. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1823. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1824. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1825. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1826. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1827. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1828. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1829. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1830. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1831. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1832. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1833. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1834. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1835. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1836. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1837. data/third_party/nanopb/pb.h +0 -579
  1838. data/third_party/nanopb/pb_common.c +0 -97
  1839. data/third_party/nanopb/pb_common.h +0 -42
  1840. data/third_party/nanopb/pb_decode.c +0 -1347
  1841. data/third_party/nanopb/pb_decode.h +0 -149
  1842. data/third_party/nanopb/pb_encode.c +0 -696
  1843. data/third_party/nanopb/pb_encode.h +0 -154
@@ -0,0 +1,2388 @@
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 <cstdint>
24
+ #include <cstdlib>
25
+ #include <string>
26
+
27
+ #include "absl/strings/str_cat.h"
28
+ #include "absl/strings/str_format.h"
29
+ #include "absl/strings/str_join.h"
30
+ #include "absl/strings/str_split.h"
31
+
32
+ #include "upb/upb.hpp"
33
+
34
+ #include <grpc/impl/codegen/log.h>
35
+ #include <grpc/support/alloc.h>
36
+ #include <grpc/support/string_util.h>
37
+
38
+ #include "src/core/ext/xds/xds_api.h"
39
+ #include "src/core/lib/gpr/env.h"
40
+ #include "src/core/lib/gpr/string.h"
41
+ #include "src/core/lib/gpr/useful.h"
42
+ #include "src/core/lib/iomgr/error.h"
43
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
44
+
45
+ #include "envoy/config/cluster/v3/cluster.upb.h"
46
+ #include "envoy/config/core/v3/address.upb.h"
47
+ #include "envoy/config/core/v3/base.upb.h"
48
+ #include "envoy/config/core/v3/config_source.upb.h"
49
+ #include "envoy/config/core/v3/health_check.upb.h"
50
+ #include "envoy/config/endpoint/v3/endpoint.upb.h"
51
+ #include "envoy/config/endpoint/v3/endpoint_components.upb.h"
52
+ #include "envoy/config/endpoint/v3/load_report.upb.h"
53
+ #include "envoy/config/listener/v3/api_listener.upb.h"
54
+ #include "envoy/config/listener/v3/listener.upb.h"
55
+ #include "envoy/config/route/v3/route.upb.h"
56
+ #include "envoy/config/route/v3/route_components.upb.h"
57
+ #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
58
+ #include "envoy/service/cluster/v3/cds.upb.h"
59
+ #include "envoy/service/discovery/v3/discovery.upb.h"
60
+ #include "envoy/service/endpoint/v3/eds.upb.h"
61
+ #include "envoy/service/listener/v3/lds.upb.h"
62
+ #include "envoy/service/load_stats/v3/lrs.upb.h"
63
+ #include "envoy/service/route/v3/rds.upb.h"
64
+ #include "envoy/type/matcher/v3/regex.upb.h"
65
+ #include "envoy/type/v3/percent.upb.h"
66
+ #include "envoy/type/v3/range.upb.h"
67
+ #include "google/protobuf/any.upb.h"
68
+ #include "google/protobuf/duration.upb.h"
69
+ #include "google/protobuf/struct.upb.h"
70
+ #include "google/protobuf/wrappers.upb.h"
71
+ #include "google/rpc/status.upb.h"
72
+ #include "upb/upb.h"
73
+
74
+ namespace grpc_core {
75
+
76
+ //
77
+ // XdsApi::Route::Matchers::PathMatcher
78
+ //
79
+
80
+ XdsApi::Route::Matchers::PathMatcher::PathMatcher(const PathMatcher& other)
81
+ : type(other.type) {
82
+ if (type == PathMatcherType::REGEX) {
83
+ regex_matcher = absl::make_unique<RE2>(other.regex_matcher->pattern());
84
+ } else {
85
+ string_matcher = other.string_matcher;
86
+ }
87
+ }
88
+
89
+ XdsApi::Route::Matchers::PathMatcher& XdsApi::Route::Matchers::PathMatcher::
90
+ operator=(const PathMatcher& other) {
91
+ type = other.type;
92
+ if (type == PathMatcherType::REGEX) {
93
+ regex_matcher = absl::make_unique<RE2>(other.regex_matcher->pattern());
94
+ } else {
95
+ string_matcher = other.string_matcher;
96
+ }
97
+ return *this;
98
+ }
99
+
100
+ bool XdsApi::Route::Matchers::PathMatcher::operator==(
101
+ const PathMatcher& other) const {
102
+ if (type != other.type) return false;
103
+ if (type == PathMatcherType::REGEX) {
104
+ // Should never be null.
105
+ if (regex_matcher == nullptr || other.regex_matcher == nullptr) {
106
+ return false;
107
+ }
108
+ return regex_matcher->pattern() == other.regex_matcher->pattern();
109
+ }
110
+ return string_matcher == other.string_matcher;
111
+ }
112
+
113
+ std::string XdsApi::Route::Matchers::PathMatcher::ToString() const {
114
+ std::string path_type_string;
115
+ switch (type) {
116
+ case PathMatcherType::PATH:
117
+ path_type_string = "path match";
118
+ break;
119
+ case PathMatcherType::PREFIX:
120
+ path_type_string = "prefix match";
121
+ break;
122
+ case PathMatcherType::REGEX:
123
+ path_type_string = "regex match";
124
+ break;
125
+ default:
126
+ break;
127
+ }
128
+ return absl::StrFormat("Path %s:%s", path_type_string,
129
+ type == PathMatcherType::REGEX
130
+ ? regex_matcher->pattern()
131
+ : string_matcher);
132
+ }
133
+
134
+ //
135
+ // XdsApi::Route::Matchers::HeaderMatcher
136
+ //
137
+
138
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcher(
139
+ const HeaderMatcher& other)
140
+ : name(other.name), type(other.type), invert_match(other.invert_match) {
141
+ switch (type) {
142
+ case HeaderMatcherType::REGEX:
143
+ regex_match = absl::make_unique<RE2>(other.regex_match->pattern());
144
+ break;
145
+ case HeaderMatcherType::RANGE:
146
+ range_start = other.range_start;
147
+ range_end = other.range_end;
148
+ break;
149
+ case HeaderMatcherType::PRESENT:
150
+ present_match = other.present_match;
151
+ break;
152
+ default:
153
+ string_matcher = other.string_matcher;
154
+ }
155
+ }
156
+
157
+ XdsApi::Route::Matchers::HeaderMatcher& XdsApi::Route::Matchers::HeaderMatcher::
158
+ operator=(const HeaderMatcher& other) {
159
+ name = other.name;
160
+ type = other.type;
161
+ invert_match = other.invert_match;
162
+ switch (type) {
163
+ case HeaderMatcherType::REGEX:
164
+ regex_match = absl::make_unique<RE2>(other.regex_match->pattern());
165
+ break;
166
+ case HeaderMatcherType::RANGE:
167
+ range_start = other.range_start;
168
+ range_end = other.range_end;
169
+ break;
170
+ case HeaderMatcherType::PRESENT:
171
+ present_match = other.present_match;
172
+ break;
173
+ default:
174
+ string_matcher = other.string_matcher;
175
+ }
176
+ return *this;
177
+ }
178
+
179
+ bool XdsApi::Route::Matchers::HeaderMatcher::operator==(
180
+ const HeaderMatcher& other) const {
181
+ if (name != other.name) return false;
182
+ if (type != other.type) return false;
183
+ if (invert_match != other.invert_match) return false;
184
+ switch (type) {
185
+ case HeaderMatcherType::REGEX:
186
+ return regex_match->pattern() != other.regex_match->pattern();
187
+ case HeaderMatcherType::RANGE:
188
+ return range_start != other.range_start && range_end != other.range_end;
189
+ case HeaderMatcherType::PRESENT:
190
+ return present_match != other.present_match;
191
+ default:
192
+ return string_matcher != other.string_matcher;
193
+ }
194
+ }
195
+
196
+ std::string XdsApi::Route::Matchers::HeaderMatcher::ToString() const {
197
+ switch (type) {
198
+ case HeaderMatcherType::EXACT:
199
+ return absl::StrFormat("Header exact match:%s %s:%s",
200
+ invert_match ? " not" : "", name, string_matcher);
201
+ case HeaderMatcherType::REGEX:
202
+ return absl::StrFormat("Header regex match:%s %s:%s",
203
+ invert_match ? " not" : "", name,
204
+ regex_match->pattern());
205
+ case HeaderMatcherType::RANGE:
206
+ return absl::StrFormat("Header range match:%s %s:[%d, %d)",
207
+ invert_match ? " not" : "", name, range_start,
208
+ range_end);
209
+ case HeaderMatcherType::PRESENT:
210
+ return absl::StrFormat("Header present match:%s %s:%s",
211
+ invert_match ? " not" : "", name,
212
+ present_match ? "true" : "false");
213
+ case HeaderMatcherType::PREFIX:
214
+ return absl::StrFormat("Header prefix match:%s %s:%s",
215
+ invert_match ? " not" : "", name, string_matcher);
216
+ case HeaderMatcherType::SUFFIX:
217
+ return absl::StrFormat("Header suffix match:%s %s:%s",
218
+ invert_match ? " not" : "", name, string_matcher);
219
+ default:
220
+ return "";
221
+ }
222
+ }
223
+
224
+ //
225
+ // XdsApi::Route
226
+ //
227
+
228
+ std::string XdsApi::Route::Matchers::ToString() const {
229
+ std::vector<std::string> contents;
230
+ contents.push_back(path_matcher.ToString());
231
+ for (const auto& header_it : header_matchers) {
232
+ contents.push_back(header_it.ToString());
233
+ }
234
+ if (fraction_per_million.has_value()) {
235
+ contents.push_back(absl::StrFormat("Fraction Per Million %d",
236
+ fraction_per_million.value()));
237
+ }
238
+ return absl::StrJoin(contents, "\n");
239
+ }
240
+
241
+ std::string XdsApi::Route::ClusterWeight::ToString() const {
242
+ return absl::StrFormat("{cluster=%s, weight=%d}", name, weight);
243
+ }
244
+
245
+ std::string XdsApi::Route::ToString() const {
246
+ std::vector<std::string> contents;
247
+ contents.push_back(matchers.ToString());
248
+ if (!cluster_name.empty()) {
249
+ contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
250
+ }
251
+ for (const auto& weighted_it : weighted_clusters) {
252
+ contents.push_back(weighted_it.ToString());
253
+ }
254
+ return absl::StrJoin(contents, "\n");
255
+ }
256
+
257
+ //
258
+ // XdsApi::RdsUpdate
259
+ //
260
+
261
+ std::string XdsApi::RdsUpdate::ToString() const {
262
+ std::vector<std::string> vhosts;
263
+ for (const VirtualHost& vhost : virtual_hosts) {
264
+ vhosts.push_back(
265
+ absl::StrCat("vhost={\n"
266
+ " domains=[",
267
+ absl::StrJoin(vhost.domains, ", "),
268
+ "]\n"
269
+ " routes=[\n"));
270
+ for (const XdsApi::Route& route : vhost.routes) {
271
+ vhosts.push_back(" {\n");
272
+ vhosts.push_back(route.ToString());
273
+ vhosts.push_back("\n }\n");
274
+ }
275
+ vhosts.push_back(" ]\n");
276
+ vhosts.push_back("]\n");
277
+ }
278
+ return absl::StrJoin(vhosts, "");
279
+ }
280
+
281
+ namespace {
282
+
283
+ // Better match type has smaller value.
284
+ enum MatchType {
285
+ EXACT_MATCH,
286
+ SUFFIX_MATCH,
287
+ PREFIX_MATCH,
288
+ UNIVERSE_MATCH,
289
+ INVALID_MATCH,
290
+ };
291
+
292
+ // Returns true if match succeeds.
293
+ bool DomainMatch(MatchType match_type, std::string domain_pattern,
294
+ std::string expected_host_name) {
295
+ // Normalize the args to lower-case. Domain matching is case-insensitive.
296
+ std::transform(domain_pattern.begin(), domain_pattern.end(),
297
+ domain_pattern.begin(),
298
+ [](unsigned char c) { return std::tolower(c); });
299
+ std::transform(expected_host_name.begin(), expected_host_name.end(),
300
+ expected_host_name.begin(),
301
+ [](unsigned char c) { return std::tolower(c); });
302
+ if (match_type == EXACT_MATCH) {
303
+ return domain_pattern == expected_host_name;
304
+ } else if (match_type == SUFFIX_MATCH) {
305
+ // Asterisk must match at least one char.
306
+ if (expected_host_name.size() < domain_pattern.size()) return false;
307
+ absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
308
+ absl::string_view host_suffix(expected_host_name.c_str() +
309
+ expected_host_name.size() -
310
+ pattern_suffix.size());
311
+ return pattern_suffix == host_suffix;
312
+ } else if (match_type == PREFIX_MATCH) {
313
+ // Asterisk must match at least one char.
314
+ if (expected_host_name.size() < domain_pattern.size()) return false;
315
+ absl::string_view pattern_prefix(domain_pattern.c_str(),
316
+ domain_pattern.size() - 1);
317
+ absl::string_view host_prefix(expected_host_name.c_str(),
318
+ pattern_prefix.size());
319
+ return pattern_prefix == host_prefix;
320
+ } else {
321
+ return match_type == UNIVERSE_MATCH;
322
+ }
323
+ }
324
+
325
+ MatchType DomainPatternMatchType(const std::string& domain_pattern) {
326
+ if (domain_pattern.empty()) return INVALID_MATCH;
327
+ if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
328
+ if (domain_pattern == "*") return UNIVERSE_MATCH;
329
+ if (domain_pattern[0] == '*') return SUFFIX_MATCH;
330
+ if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
331
+ return INVALID_MATCH;
332
+ }
333
+
334
+ } // namespace
335
+
336
+ const XdsApi::RdsUpdate::VirtualHost*
337
+ XdsApi::RdsUpdate::FindVirtualHostForDomain(const std::string& domain) const {
338
+ // Find the best matched virtual host.
339
+ // The search order for 4 groups of domain patterns:
340
+ // 1. Exact match.
341
+ // 2. Suffix match (e.g., "*ABC").
342
+ // 3. Prefix match (e.g., "ABC*").
343
+ // 4. Universe match (i.e., "*").
344
+ // Within each group, longest match wins.
345
+ // If the same best matched domain pattern appears in multiple virtual hosts,
346
+ // the first matched virtual host wins.
347
+ const VirtualHost* target_vhost = nullptr;
348
+ MatchType best_match_type = INVALID_MATCH;
349
+ size_t longest_match = 0;
350
+ // Check each domain pattern in each virtual host to determine the best
351
+ // matched virtual host.
352
+ for (const VirtualHost& vhost : virtual_hosts) {
353
+ for (const std::string& domain_pattern : vhost.domains) {
354
+ // Check the match type first. Skip the pattern if it's not better than
355
+ // current match.
356
+ const MatchType match_type = DomainPatternMatchType(domain_pattern);
357
+ // This should be caught by RouteConfigParse().
358
+ GPR_ASSERT(match_type != INVALID_MATCH);
359
+ if (match_type > best_match_type) continue;
360
+ if (match_type == best_match_type &&
361
+ domain_pattern.size() <= longest_match) {
362
+ continue;
363
+ }
364
+ // Skip if match fails.
365
+ if (!DomainMatch(match_type, domain_pattern, domain)) continue;
366
+ // Choose this match.
367
+ target_vhost = &vhost;
368
+ best_match_type = match_type;
369
+ longest_match = domain_pattern.size();
370
+ if (best_match_type == EXACT_MATCH) break;
371
+ }
372
+ if (best_match_type == EXACT_MATCH) break;
373
+ }
374
+ return target_vhost;
375
+ }
376
+
377
+ //
378
+ // XdsApi::PriorityListUpdate
379
+ //
380
+
381
+ bool XdsApi::PriorityListUpdate::operator==(
382
+ const XdsApi::PriorityListUpdate& other) const {
383
+ if (priorities_.size() != other.priorities_.size()) return false;
384
+ for (size_t i = 0; i < priorities_.size(); ++i) {
385
+ if (priorities_[i].localities != other.priorities_[i].localities) {
386
+ return false;
387
+ }
388
+ }
389
+ return true;
390
+ }
391
+
392
+ void XdsApi::PriorityListUpdate::Add(
393
+ XdsApi::PriorityListUpdate::LocalityMap::Locality locality) {
394
+ // Pad the missing priorities in case the localities are not ordered by
395
+ // priority.
396
+ if (!Contains(locality.priority)) priorities_.resize(locality.priority + 1);
397
+ LocalityMap& locality_map = priorities_[locality.priority];
398
+ locality_map.localities.emplace(locality.name, std::move(locality));
399
+ }
400
+
401
+ const XdsApi::PriorityListUpdate::LocalityMap* XdsApi::PriorityListUpdate::Find(
402
+ uint32_t priority) const {
403
+ if (!Contains(priority)) return nullptr;
404
+ return &priorities_[priority];
405
+ }
406
+
407
+ bool XdsApi::PriorityListUpdate::Contains(
408
+ const RefCountedPtr<XdsLocalityName>& name) {
409
+ for (size_t i = 0; i < priorities_.size(); ++i) {
410
+ const LocalityMap& locality_map = priorities_[i];
411
+ if (locality_map.Contains(name)) return true;
412
+ }
413
+ return false;
414
+ }
415
+
416
+ //
417
+ // XdsApi::DropConfig
418
+ //
419
+
420
+ bool XdsApi::DropConfig::ShouldDrop(const std::string** category_name) const {
421
+ for (size_t i = 0; i < drop_category_list_.size(); ++i) {
422
+ const auto& drop_category = drop_category_list_[i];
423
+ // Generate a random number in [0, 1000000).
424
+ const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
425
+ if (random < drop_category.parts_per_million) {
426
+ *category_name = &drop_category.name;
427
+ return true;
428
+ }
429
+ }
430
+ return false;
431
+ }
432
+
433
+ //
434
+ // XdsApi
435
+ //
436
+
437
+ const char* XdsApi::kLdsTypeUrl =
438
+ "type.googleapis.com/envoy.config.listener.v3.Listener";
439
+ const char* XdsApi::kRdsTypeUrl =
440
+ "type.googleapis.com/envoy.config.route.v3.RouteConfiguration";
441
+ const char* XdsApi::kCdsTypeUrl =
442
+ "type.googleapis.com/envoy.config.cluster.v3.Cluster";
443
+ const char* XdsApi::kEdsTypeUrl =
444
+ "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment";
445
+
446
+ namespace {
447
+
448
+ const char* kLdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Listener";
449
+ const char* kRdsV2TypeUrl =
450
+ "type.googleapis.com/envoy.api.v2.RouteConfiguration";
451
+ const char* kCdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
452
+ const char* kEdsV2TypeUrl =
453
+ "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
454
+
455
+ bool IsLds(absl::string_view type_url) {
456
+ return type_url == XdsApi::kLdsTypeUrl || type_url == kLdsV2TypeUrl;
457
+ }
458
+
459
+ bool IsRds(absl::string_view type_url) {
460
+ return type_url == XdsApi::kRdsTypeUrl || type_url == kRdsV2TypeUrl;
461
+ }
462
+
463
+ bool IsCds(absl::string_view type_url) {
464
+ return type_url == XdsApi::kCdsTypeUrl || type_url == kCdsV2TypeUrl;
465
+ }
466
+
467
+ bool IsEds(absl::string_view type_url) {
468
+ return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
469
+ }
470
+
471
+ } // namespace
472
+
473
+ XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
474
+ const XdsBootstrap* bootstrap)
475
+ : client_(client),
476
+ tracer_(tracer),
477
+ use_v3_(bootstrap != nullptr && bootstrap->server().ShouldUseV3()),
478
+ bootstrap_(bootstrap),
479
+ build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
480
+ grpc_version_string())),
481
+ user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING)) {}
482
+
483
+ namespace {
484
+
485
+ // Works for both std::string and absl::string_view.
486
+ template <typename T>
487
+ inline upb_strview StdStringToUpbString(const T& str) {
488
+ return upb_strview_make(str.data(), str.size());
489
+ }
490
+
491
+ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
492
+ const Json& value);
493
+
494
+ void PopulateListValue(upb_arena* arena, google_protobuf_ListValue* list_value,
495
+ const Json::Array& values) {
496
+ for (const auto& value : values) {
497
+ auto* value_pb = google_protobuf_ListValue_add_values(list_value, arena);
498
+ PopulateMetadataValue(arena, value_pb, value);
499
+ }
500
+ }
501
+
502
+ void PopulateMetadata(upb_arena* arena, google_protobuf_Struct* metadata_pb,
503
+ const Json::Object& metadata) {
504
+ for (const auto& p : metadata) {
505
+ google_protobuf_Value* value = google_protobuf_Value_new(arena);
506
+ PopulateMetadataValue(arena, value, p.second);
507
+ google_protobuf_Struct_fields_set(
508
+ metadata_pb, StdStringToUpbString(p.first), value, arena);
509
+ }
510
+ }
511
+
512
+ void PopulateMetadataValue(upb_arena* arena, google_protobuf_Value* value_pb,
513
+ const Json& value) {
514
+ switch (value.type()) {
515
+ case Json::Type::JSON_NULL:
516
+ google_protobuf_Value_set_null_value(value_pb, 0);
517
+ break;
518
+ case Json::Type::NUMBER:
519
+ google_protobuf_Value_set_number_value(
520
+ value_pb, strtod(value.string_value().c_str(), nullptr));
521
+ break;
522
+ case Json::Type::STRING:
523
+ google_protobuf_Value_set_string_value(
524
+ value_pb, StdStringToUpbString(value.string_value()));
525
+ break;
526
+ case Json::Type::JSON_TRUE:
527
+ google_protobuf_Value_set_bool_value(value_pb, true);
528
+ break;
529
+ case Json::Type::JSON_FALSE:
530
+ google_protobuf_Value_set_bool_value(value_pb, false);
531
+ break;
532
+ case Json::Type::OBJECT: {
533
+ google_protobuf_Struct* struct_value =
534
+ google_protobuf_Value_mutable_struct_value(value_pb, arena);
535
+ PopulateMetadata(arena, struct_value, value.object_value());
536
+ break;
537
+ }
538
+ case Json::Type::ARRAY: {
539
+ google_protobuf_ListValue* list_value =
540
+ google_protobuf_Value_mutable_list_value(value_pb, arena);
541
+ PopulateListValue(arena, list_value, value.array_value());
542
+ break;
543
+ }
544
+ }
545
+ }
546
+
547
+ // Helper functions to manually do protobuf string encoding, so that we
548
+ // can populate the node build_version field that was removed in v3.
549
+ std::string EncodeVarint(uint64_t val) {
550
+ std::string data;
551
+ do {
552
+ uint8_t byte = val & 0x7fU;
553
+ val >>= 7;
554
+ if (val) byte |= 0x80U;
555
+ data += byte;
556
+ } while (val);
557
+ return data;
558
+ }
559
+ std::string EncodeTag(uint32_t field_number, uint8_t wire_type) {
560
+ return EncodeVarint((field_number << 3) | wire_type);
561
+ }
562
+ std::string EncodeStringField(uint32_t field_number, const std::string& str) {
563
+ static const uint8_t kDelimitedWireType = 2;
564
+ return EncodeTag(field_number, kDelimitedWireType) +
565
+ EncodeVarint(str.size()) + str;
566
+ }
567
+
568
+ void PopulateBuildVersion(upb_arena* arena, envoy_config_core_v3_Node* node_msg,
569
+ const std::string& build_version) {
570
+ std::string encoded_build_version = EncodeStringField(5, build_version);
571
+ // TODO(roth): This should use upb_msg_addunknown(), but that API is
572
+ // broken in the current version of upb, so we're using the internal
573
+ // API for now. Change this once we upgrade to a version of upb that
574
+ // fixes this bug.
575
+ _upb_msg_addunknown(node_msg, encoded_build_version.data(),
576
+ encoded_build_version.size(), arena);
577
+ }
578
+
579
+ void PopulateNode(upb_arena* arena, const XdsBootstrap* bootstrap,
580
+ const std::string& build_version,
581
+ const std::string& user_agent_name,
582
+ const std::string& server_name,
583
+ envoy_config_core_v3_Node* node_msg) {
584
+ const XdsBootstrap::Node* node = bootstrap->node();
585
+ if (node != nullptr) {
586
+ if (!node->id.empty()) {
587
+ envoy_config_core_v3_Node_set_id(node_msg,
588
+ StdStringToUpbString(node->id));
589
+ }
590
+ if (!node->cluster.empty()) {
591
+ envoy_config_core_v3_Node_set_cluster(
592
+ node_msg, StdStringToUpbString(node->cluster));
593
+ }
594
+ if (!node->metadata.object_value().empty()) {
595
+ google_protobuf_Struct* metadata =
596
+ envoy_config_core_v3_Node_mutable_metadata(node_msg, arena);
597
+ PopulateMetadata(arena, metadata, node->metadata.object_value());
598
+ }
599
+ if (!server_name.empty()) {
600
+ google_protobuf_Struct* metadata =
601
+ envoy_config_core_v3_Node_mutable_metadata(node_msg, arena);
602
+ google_protobuf_Value* value = google_protobuf_Value_new(arena);
603
+ google_protobuf_Value_set_string_value(value,
604
+ StdStringToUpbString(server_name));
605
+ google_protobuf_Struct_fields_set(
606
+ metadata, upb_strview_makez("PROXYLESS_CLIENT_HOSTNAME"), value,
607
+ arena);
608
+ }
609
+ if (!node->locality_region.empty() || !node->locality_zone.empty() ||
610
+ !node->locality_subzone.empty()) {
611
+ envoy_config_core_v3_Locality* locality =
612
+ envoy_config_core_v3_Node_mutable_locality(node_msg, arena);
613
+ if (!node->locality_region.empty()) {
614
+ envoy_config_core_v3_Locality_set_region(
615
+ locality, StdStringToUpbString(node->locality_region));
616
+ }
617
+ if (!node->locality_zone.empty()) {
618
+ envoy_config_core_v3_Locality_set_zone(
619
+ locality, StdStringToUpbString(node->locality_zone));
620
+ }
621
+ if (!node->locality_subzone.empty()) {
622
+ envoy_config_core_v3_Locality_set_sub_zone(
623
+ locality, StdStringToUpbString(node->locality_subzone));
624
+ }
625
+ }
626
+ }
627
+ if (!bootstrap->server().ShouldUseV3()) {
628
+ PopulateBuildVersion(arena, node_msg, build_version);
629
+ }
630
+ envoy_config_core_v3_Node_set_user_agent_name(
631
+ node_msg, StdStringToUpbString(user_agent_name));
632
+ envoy_config_core_v3_Node_set_user_agent_version(
633
+ node_msg, upb_strview_makez(grpc_version_string()));
634
+ envoy_config_core_v3_Node_add_client_features(
635
+ node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
636
+ arena);
637
+ }
638
+
639
+ inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
640
+ return absl::string_view(str.data, str.size);
641
+ }
642
+
643
+ inline std::string UpbStringToStdString(const upb_strview& str) {
644
+ return std::string(str.data, str.size);
645
+ }
646
+
647
+ inline void AddStringField(const char* name, const upb_strview& value,
648
+ std::vector<std::string>* fields,
649
+ bool add_if_empty = false) {
650
+ if (value.size > 0 || add_if_empty) {
651
+ fields->emplace_back(
652
+ absl::StrCat(name, ": \"", UpbStringToAbsl(value), "\""));
653
+ }
654
+ }
655
+
656
+ inline void AddUInt32ValueField(const char* name,
657
+ const google_protobuf_UInt32Value* value,
658
+ std::vector<std::string>* fields) {
659
+ if (value != nullptr) {
660
+ fields->emplace_back(absl::StrCat(
661
+ name, " { value: ", google_protobuf_UInt32Value_value(value), " }"));
662
+ }
663
+ }
664
+
665
+ inline void AddLocalityField(int indent_level,
666
+ const envoy_config_core_v3_Locality* locality,
667
+ std::vector<std::string>* fields) {
668
+ std::string indent =
669
+ absl::StrJoin(std::vector<std::string>(indent_level, " "), "");
670
+ // region
671
+ std::string field = absl::StrCat(indent, "region");
672
+ AddStringField(field.c_str(), envoy_config_core_v3_Locality_region(locality),
673
+ fields);
674
+ // zone
675
+ field = absl::StrCat(indent, "zone");
676
+ AddStringField(field.c_str(), envoy_config_core_v3_Locality_zone(locality),
677
+ fields);
678
+ // sub_zone
679
+ field = absl::StrCat(indent, "sub_zone");
680
+ AddStringField(field.c_str(),
681
+ envoy_config_core_v3_Locality_sub_zone(locality), fields);
682
+ }
683
+
684
+ void AddNodeLogFields(const envoy_config_core_v3_Node* node,
685
+ const std::string& build_version,
686
+ std::vector<std::string>* fields) {
687
+ fields->emplace_back("node {");
688
+ // id
689
+ AddStringField(" id", envoy_config_core_v3_Node_id(node), fields);
690
+ // metadata
691
+ const google_protobuf_Struct* metadata =
692
+ envoy_config_core_v3_Node_metadata(node);
693
+ if (metadata != nullptr) {
694
+ fields->emplace_back(" metadata {");
695
+ size_t entry_idx = UPB_MAP_BEGIN;
696
+ while (true) {
697
+ const google_protobuf_Struct_FieldsEntry* entry =
698
+ google_protobuf_Struct_fields_next(metadata, &entry_idx);
699
+ if (entry == nullptr) break;
700
+ fields->emplace_back(" field {");
701
+ // key
702
+ AddStringField(" key", google_protobuf_Struct_FieldsEntry_key(entry),
703
+ fields);
704
+ // value
705
+ const google_protobuf_Value* value =
706
+ google_protobuf_Struct_FieldsEntry_value(entry);
707
+ if (value != nullptr) {
708
+ std::string value_str;
709
+ if (google_protobuf_Value_has_string_value(value)) {
710
+ value_str = absl::StrCat(
711
+ "string_value: \"",
712
+ UpbStringToAbsl(google_protobuf_Value_string_value(value)), "\"");
713
+ } else if (google_protobuf_Value_has_null_value(value)) {
714
+ value_str = "null_value: NULL_VALUE";
715
+ } else if (google_protobuf_Value_has_number_value(value)) {
716
+ value_str = absl::StrCat("double_value: ",
717
+ google_protobuf_Value_number_value(value));
718
+ } else if (google_protobuf_Value_has_bool_value(value)) {
719
+ value_str = absl::StrCat("bool_value: ",
720
+ google_protobuf_Value_bool_value(value));
721
+ } else if (google_protobuf_Value_has_struct_value(value)) {
722
+ value_str = "struct_value: <not printed>";
723
+ } else if (google_protobuf_Value_has_list_value(value)) {
724
+ value_str = "list_value: <not printed>";
725
+ } else {
726
+ value_str = "<unknown>";
727
+ }
728
+ fields->emplace_back(absl::StrCat(" value { ", value_str, " }"));
729
+ }
730
+ fields->emplace_back(" }");
731
+ }
732
+ fields->emplace_back(" }");
733
+ }
734
+ // locality
735
+ const envoy_config_core_v3_Locality* locality =
736
+ envoy_config_core_v3_Node_locality(node);
737
+ if (locality != nullptr) {
738
+ fields->emplace_back(" locality {");
739
+ AddLocalityField(2, locality, fields);
740
+ fields->emplace_back(" }");
741
+ }
742
+ // build_version (doesn't exist in v3 proto; this is a horrible hack)
743
+ if (!build_version.empty()) {
744
+ fields->emplace_back(
745
+ absl::StrCat(" build_version: \"", build_version, "\""));
746
+ }
747
+ // user_agent_name
748
+ AddStringField(" user_agent_name",
749
+ envoy_config_core_v3_Node_user_agent_name(node), fields);
750
+ // user_agent_version
751
+ AddStringField(" user_agent_version",
752
+ envoy_config_core_v3_Node_user_agent_version(node), fields);
753
+ // client_features
754
+ size_t num_client_features;
755
+ const upb_strview* client_features =
756
+ envoy_config_core_v3_Node_client_features(node, &num_client_features);
757
+ for (size_t i = 0; i < num_client_features; ++i) {
758
+ AddStringField(" client_features", client_features[i], fields);
759
+ }
760
+ fields->emplace_back("}");
761
+ }
762
+
763
+ void MaybeLogDiscoveryRequest(
764
+ XdsClient* client, TraceFlag* tracer,
765
+ const envoy_service_discovery_v3_DiscoveryRequest* request,
766
+ const std::string& build_version) {
767
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
768
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
769
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
770
+ // the raw proto instead of doing this manually.
771
+ std::vector<std::string> fields;
772
+ // version_info
773
+ AddStringField(
774
+ "version_info",
775
+ envoy_service_discovery_v3_DiscoveryRequest_version_info(request),
776
+ &fields);
777
+ // node
778
+ const envoy_config_core_v3_Node* node =
779
+ envoy_service_discovery_v3_DiscoveryRequest_node(request);
780
+ if (node != nullptr) AddNodeLogFields(node, build_version, &fields);
781
+ // resource_names
782
+ size_t num_resource_names;
783
+ const upb_strview* resource_names =
784
+ envoy_service_discovery_v3_DiscoveryRequest_resource_names(
785
+ request, &num_resource_names);
786
+ for (size_t i = 0; i < num_resource_names; ++i) {
787
+ AddStringField("resource_names", resource_names[i], &fields);
788
+ }
789
+ // type_url
790
+ AddStringField(
791
+ "type_url",
792
+ envoy_service_discovery_v3_DiscoveryRequest_type_url(request), &fields);
793
+ // response_nonce
794
+ AddStringField(
795
+ "response_nonce",
796
+ envoy_service_discovery_v3_DiscoveryRequest_response_nonce(request),
797
+ &fields);
798
+ // error_detail
799
+ const struct google_rpc_Status* error_detail =
800
+ envoy_service_discovery_v3_DiscoveryRequest_error_detail(request);
801
+ if (error_detail != nullptr) {
802
+ fields.emplace_back("error_detail {");
803
+ // code
804
+ int32_t code = google_rpc_Status_code(error_detail);
805
+ if (code != 0) fields.emplace_back(absl::StrCat(" code: ", code));
806
+ // message
807
+ AddStringField(" message", google_rpc_Status_message(error_detail),
808
+ &fields);
809
+ fields.emplace_back("}");
810
+ }
811
+ gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s", client,
812
+ absl::StrJoin(fields, "\n").c_str());
813
+ }
814
+ }
815
+
816
+ grpc_slice SerializeDiscoveryRequest(
817
+ upb_arena* arena, envoy_service_discovery_v3_DiscoveryRequest* request) {
818
+ size_t output_length;
819
+ char* output = envoy_service_discovery_v3_DiscoveryRequest_serialize(
820
+ request, arena, &output_length);
821
+ return grpc_slice_from_copied_buffer(output, output_length);
822
+ }
823
+
824
+ absl::string_view TypeUrlExternalToInternal(bool use_v3,
825
+ const std::string& type_url) {
826
+ if (!use_v3) {
827
+ if (type_url == XdsApi::kLdsTypeUrl) {
828
+ return kLdsV2TypeUrl;
829
+ }
830
+ if (type_url == XdsApi::kRdsTypeUrl) {
831
+ return kRdsV2TypeUrl;
832
+ }
833
+ if (type_url == XdsApi::kCdsTypeUrl) {
834
+ return kCdsV2TypeUrl;
835
+ }
836
+ if (type_url == XdsApi::kEdsTypeUrl) {
837
+ return kEdsV2TypeUrl;
838
+ }
839
+ }
840
+ return type_url;
841
+ }
842
+
843
+ } // namespace
844
+
845
+ grpc_slice XdsApi::CreateAdsRequest(
846
+ const std::string& type_url,
847
+ const std::set<absl::string_view>& resource_names,
848
+ const std::string& version, const std::string& nonce, grpc_error* error,
849
+ bool populate_node) {
850
+ upb::Arena arena;
851
+ // Create a request.
852
+ envoy_service_discovery_v3_DiscoveryRequest* request =
853
+ envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr());
854
+ // Set type_url.
855
+ absl::string_view real_type_url =
856
+ TypeUrlExternalToInternal(use_v3_, type_url);
857
+ envoy_service_discovery_v3_DiscoveryRequest_set_type_url(
858
+ request, StdStringToUpbString(real_type_url));
859
+ // Set version_info.
860
+ if (!version.empty()) {
861
+ envoy_service_discovery_v3_DiscoveryRequest_set_version_info(
862
+ request, StdStringToUpbString(version));
863
+ }
864
+ // Set nonce.
865
+ if (!nonce.empty()) {
866
+ envoy_service_discovery_v3_DiscoveryRequest_set_response_nonce(
867
+ request, StdStringToUpbString(nonce));
868
+ }
869
+ // Set error_detail if it's a NACK.
870
+ if (error != GRPC_ERROR_NONE) {
871
+ grpc_slice error_description_slice;
872
+ GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION,
873
+ &error_description_slice));
874
+ upb_strview error_description_strview =
875
+ upb_strview_make(reinterpret_cast<const char*>(
876
+ GPR_SLICE_START_PTR(error_description_slice)),
877
+ GPR_SLICE_LENGTH(error_description_slice));
878
+ google_rpc_Status* error_detail =
879
+ envoy_service_discovery_v3_DiscoveryRequest_mutable_error_detail(
880
+ request, arena.ptr());
881
+ google_rpc_Status_set_message(error_detail, error_description_strview);
882
+ GRPC_ERROR_UNREF(error);
883
+ }
884
+ // Populate node.
885
+ if (populate_node) {
886
+ envoy_config_core_v3_Node* node_msg =
887
+ envoy_service_discovery_v3_DiscoveryRequest_mutable_node(request,
888
+ arena.ptr());
889
+ PopulateNode(arena.ptr(), bootstrap_, build_version_, user_agent_name_, "",
890
+ node_msg);
891
+ }
892
+ // Add resource_names.
893
+ for (const auto& resource_name : resource_names) {
894
+ envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
895
+ request, StdStringToUpbString(resource_name), arena.ptr());
896
+ }
897
+ MaybeLogDiscoveryRequest(client_, tracer_, request, build_version_);
898
+ return SerializeDiscoveryRequest(arena.ptr(), request);
899
+ }
900
+
901
+ namespace {
902
+
903
+ void MaybeLogDiscoveryResponse(
904
+ XdsClient* client, TraceFlag* tracer,
905
+ const envoy_service_discovery_v3_DiscoveryResponse* response) {
906
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
907
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
908
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
909
+ // the raw proto instead of doing this manually.
910
+ std::vector<std::string> fields;
911
+ // version_info
912
+ AddStringField(
913
+ "version_info",
914
+ envoy_service_discovery_v3_DiscoveryResponse_version_info(response),
915
+ &fields);
916
+ // resources
917
+ size_t num_resources;
918
+ envoy_service_discovery_v3_DiscoveryResponse_resources(response,
919
+ &num_resources);
920
+ fields.emplace_back(
921
+ absl::StrCat("resources: <", num_resources, " element(s)>"));
922
+ // type_url
923
+ AddStringField(
924
+ "type_url",
925
+ envoy_service_discovery_v3_DiscoveryResponse_type_url(response),
926
+ &fields);
927
+ // nonce
928
+ AddStringField("nonce",
929
+ envoy_service_discovery_v3_DiscoveryResponse_nonce(response),
930
+ &fields);
931
+ gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", client,
932
+ absl::StrJoin(fields, "\n").c_str());
933
+ }
934
+ }
935
+
936
+ void MaybeLogRouteConfiguration(
937
+ XdsClient* client, TraceFlag* tracer,
938
+ const envoy_config_route_v3_RouteConfiguration* route_config) {
939
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
940
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
941
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
942
+ // the raw proto instead of doing this manually.
943
+ std::vector<std::string> fields;
944
+ // name
945
+ AddStringField("name",
946
+ envoy_config_route_v3_RouteConfiguration_name(route_config),
947
+ &fields);
948
+ // virtual_hosts
949
+ size_t num_virtual_hosts;
950
+ const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
951
+ envoy_config_route_v3_RouteConfiguration_virtual_hosts(
952
+ route_config, &num_virtual_hosts);
953
+ for (size_t i = 0; i < num_virtual_hosts; ++i) {
954
+ const auto* virtual_host = virtual_hosts[i];
955
+ fields.push_back("virtual_hosts {");
956
+ // name
957
+ AddStringField(" name",
958
+ envoy_config_route_v3_VirtualHost_name(virtual_host),
959
+ &fields);
960
+ // domains
961
+ size_t num_domains;
962
+ const upb_strview* const domains =
963
+ envoy_config_route_v3_VirtualHost_domains(virtual_host, &num_domains);
964
+ for (size_t j = 0; j < num_domains; ++j) {
965
+ AddStringField(" domains", domains[j], &fields);
966
+ }
967
+ // routes
968
+ size_t num_routes;
969
+ const envoy_config_route_v3_Route* const* routes =
970
+ envoy_config_route_v3_VirtualHost_routes(virtual_host, &num_routes);
971
+ for (size_t j = 0; j < num_routes; ++j) {
972
+ const auto* route = routes[j];
973
+ fields.push_back(" route {");
974
+ // name
975
+ AddStringField(" name", envoy_config_route_v3_Route_name(route),
976
+ &fields);
977
+ // match
978
+ const envoy_config_route_v3_RouteMatch* match =
979
+ envoy_config_route_v3_Route_match(route);
980
+ if (match != nullptr) {
981
+ fields.emplace_back(" match {");
982
+ // path matching
983
+ if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
984
+ AddStringField(" prefix",
985
+ envoy_config_route_v3_RouteMatch_prefix(match),
986
+ &fields,
987
+ /*add_if_empty=*/true);
988
+ } else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
989
+ AddStringField(" path",
990
+ envoy_config_route_v3_RouteMatch_path(match),
991
+ &fields,
992
+ /*add_if_empty=*/true);
993
+ } else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
994
+ fields.emplace_back(" safe_regex: <not printed>");
995
+ } else {
996
+ fields.emplace_back(" <unknown path matching type>");
997
+ }
998
+ // header matching
999
+ size_t num_headers;
1000
+ envoy_config_route_v3_RouteMatch_headers(match, &num_headers);
1001
+ if (num_headers > 0) {
1002
+ fields.emplace_back(
1003
+ absl::StrCat(" headers: <", num_headers, " element(s)>"));
1004
+ }
1005
+ fields.emplace_back(" }");
1006
+ }
1007
+ // action
1008
+ if (envoy_config_route_v3_Route_has_route(route)) {
1009
+ const envoy_config_route_v3_RouteAction* action =
1010
+ envoy_config_route_v3_Route_route(route);
1011
+ fields.emplace_back(" route {");
1012
+ if (envoy_config_route_v3_RouteAction_has_cluster(action)) {
1013
+ AddStringField(" cluster",
1014
+ envoy_config_route_v3_RouteAction_cluster(action),
1015
+ &fields);
1016
+ } else if (envoy_config_route_v3_RouteAction_has_cluster_header(
1017
+ action)) {
1018
+ AddStringField(
1019
+ " cluster_header",
1020
+ envoy_config_route_v3_RouteAction_cluster_header(action),
1021
+ &fields);
1022
+ } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
1023
+ action)) {
1024
+ const envoy_config_route_v3_WeightedCluster* weighted_clusters =
1025
+ envoy_config_route_v3_RouteAction_weighted_clusters(action);
1026
+ fields.emplace_back(" weighted_clusters {");
1027
+ size_t num_cluster_weights;
1028
+ const envoy_config_route_v3_WeightedCluster_ClusterWeight* const*
1029
+ cluster_weights =
1030
+ envoy_config_route_v3_WeightedCluster_clusters(
1031
+ weighted_clusters, &num_cluster_weights);
1032
+ for (size_t i = 0; i < num_cluster_weights; ++i) {
1033
+ const envoy_config_route_v3_WeightedCluster_ClusterWeight*
1034
+ cluster_weight = cluster_weights[i];
1035
+ fields.emplace_back(" clusters {");
1036
+ AddStringField(
1037
+ " name",
1038
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
1039
+ cluster_weight),
1040
+ &fields);
1041
+ AddUInt32ValueField(
1042
+ " weight",
1043
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
1044
+ cluster_weight),
1045
+ &fields);
1046
+ fields.emplace_back(" }");
1047
+ }
1048
+ AddUInt32ValueField(
1049
+ " total_weight",
1050
+ envoy_config_route_v3_WeightedCluster_total_weight(
1051
+ weighted_clusters),
1052
+ &fields);
1053
+ fields.emplace_back(" }");
1054
+ }
1055
+ fields.emplace_back(" }");
1056
+ } else if (envoy_config_route_v3_Route_has_redirect(route)) {
1057
+ fields.emplace_back(" redirect: <not printed>");
1058
+ } else if (envoy_config_route_v3_Route_has_direct_response(route)) {
1059
+ fields.emplace_back(" direct_response: <not printed>");
1060
+ } else if (envoy_config_route_v3_Route_has_filter_action(route)) {
1061
+ fields.emplace_back(" filter_action: <not printed>");
1062
+ }
1063
+ fields.push_back(" }");
1064
+ }
1065
+ fields.push_back("}");
1066
+ }
1067
+ gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", client,
1068
+ absl::StrJoin(fields, "\n").c_str());
1069
+ }
1070
+ }
1071
+
1072
+ void MaybeLogCluster(XdsClient* client, TraceFlag* tracer,
1073
+ const envoy_config_cluster_v3_Cluster* cluster) {
1074
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
1075
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1076
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
1077
+ // the raw proto instead of doing this manually.
1078
+ std::vector<std::string> fields;
1079
+ // name
1080
+ AddStringField("name", envoy_config_cluster_v3_Cluster_name(cluster),
1081
+ &fields);
1082
+ // type
1083
+ if (envoy_config_cluster_v3_Cluster_has_type(cluster)) {
1084
+ fields.emplace_back(absl::StrCat(
1085
+ "type: ", envoy_config_cluster_v3_Cluster_type(cluster)));
1086
+ } else if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
1087
+ fields.emplace_back("cluster_type: <not printed>");
1088
+ } else {
1089
+ fields.emplace_back("<unknown type>");
1090
+ }
1091
+ // eds_cluster_config
1092
+ const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
1093
+ envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
1094
+ if (eds_cluster_config != nullptr) {
1095
+ fields.emplace_back("eds_cluster_config {");
1096
+ // eds_config
1097
+ const struct envoy_config_core_v3_ConfigSource* eds_config =
1098
+ envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
1099
+ eds_cluster_config);
1100
+ if (eds_config != nullptr) {
1101
+ if (envoy_config_core_v3_ConfigSource_has_ads(eds_config)) {
1102
+ fields.emplace_back(" eds_config { ads {} }");
1103
+ } else {
1104
+ fields.emplace_back(" eds_config: <non-ADS type>");
1105
+ }
1106
+ }
1107
+ // service_name
1108
+ AddStringField(
1109
+ " service_name",
1110
+ envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
1111
+ eds_cluster_config),
1112
+ &fields);
1113
+ fields.emplace_back("}");
1114
+ }
1115
+ // lb_policy
1116
+ fields.emplace_back(absl::StrCat(
1117
+ "lb_policy: ", envoy_config_cluster_v3_Cluster_lb_policy(cluster)));
1118
+ // lrs_server
1119
+ const envoy_config_core_v3_ConfigSource* lrs_server =
1120
+ envoy_config_cluster_v3_Cluster_lrs_server(cluster);
1121
+ if (lrs_server != nullptr) {
1122
+ if (envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
1123
+ fields.emplace_back("lrs_server { self {} }");
1124
+ } else {
1125
+ fields.emplace_back("lrs_server: <non-self type>");
1126
+ }
1127
+ }
1128
+ gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", client,
1129
+ absl::StrJoin(fields, "\n").c_str());
1130
+ }
1131
+ }
1132
+
1133
+ void MaybeLogClusterLoadAssignment(
1134
+ XdsClient* client, TraceFlag* tracer,
1135
+ const envoy_config_endpoint_v3_ClusterLoadAssignment* cla) {
1136
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
1137
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1138
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
1139
+ // the raw proto instead of doing this manually.
1140
+ std::vector<std::string> fields;
1141
+ // cluster_name
1142
+ AddStringField(
1143
+ "cluster_name",
1144
+ envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(cla),
1145
+ &fields);
1146
+ // endpoints
1147
+ size_t num_localities;
1148
+ const struct envoy_config_endpoint_v3_LocalityLbEndpoints* const*
1149
+ locality_endpoints =
1150
+ envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
1151
+ cla, &num_localities);
1152
+ for (size_t i = 0; i < num_localities; ++i) {
1153
+ const auto* locality_endpoint = locality_endpoints[i];
1154
+ fields.emplace_back("endpoints {");
1155
+ // locality
1156
+ const auto* locality =
1157
+ envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
1158
+ locality_endpoint);
1159
+ if (locality != nullptr) {
1160
+ fields.emplace_back(" locality {");
1161
+ AddLocalityField(2, locality, &fields);
1162
+ fields.emplace_back(" }");
1163
+ }
1164
+ // lb_endpoints
1165
+ size_t num_lb_endpoints;
1166
+ const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
1167
+ envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
1168
+ locality_endpoint, &num_lb_endpoints);
1169
+ for (size_t j = 0; j < num_lb_endpoints; ++j) {
1170
+ const auto* lb_endpoint = lb_endpoints[j];
1171
+ fields.emplace_back(" lb_endpoints {");
1172
+ // health_status
1173
+ uint32_t health_status =
1174
+ envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
1175
+ if (health_status > 0) {
1176
+ fields.emplace_back(
1177
+ absl::StrCat(" health_status: ", health_status));
1178
+ }
1179
+ // endpoint
1180
+ const envoy_config_endpoint_v3_Endpoint* endpoint =
1181
+ envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
1182
+ if (endpoint != nullptr) {
1183
+ fields.emplace_back(" endpoint {");
1184
+ // address
1185
+ const auto* address =
1186
+ envoy_config_endpoint_v3_Endpoint_address(endpoint);
1187
+ if (address != nullptr) {
1188
+ fields.emplace_back(" address {");
1189
+ // socket_address
1190
+ const auto* socket_address =
1191
+ envoy_config_core_v3_Address_socket_address(address);
1192
+ if (socket_address != nullptr) {
1193
+ fields.emplace_back(" socket_address {");
1194
+ // address
1195
+ AddStringField(
1196
+ " address",
1197
+ envoy_config_core_v3_SocketAddress_address(socket_address),
1198
+ &fields);
1199
+ // port_value
1200
+ if (envoy_config_core_v3_SocketAddress_has_port_value(
1201
+ socket_address)) {
1202
+ fields.emplace_back(
1203
+ absl::StrCat(" port_value: ",
1204
+ envoy_config_core_v3_SocketAddress_port_value(
1205
+ socket_address)));
1206
+ } else {
1207
+ fields.emplace_back(" <non-numeric port>");
1208
+ }
1209
+ fields.emplace_back(" }");
1210
+ } else {
1211
+ fields.emplace_back(" <non-socket address>");
1212
+ }
1213
+ fields.emplace_back(" }");
1214
+ }
1215
+ fields.emplace_back(" }");
1216
+ }
1217
+ fields.emplace_back(" }");
1218
+ }
1219
+ // load_balancing_weight
1220
+ AddUInt32ValueField(
1221
+ " load_balancing_weight",
1222
+ envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
1223
+ locality_endpoint),
1224
+ &fields);
1225
+ // priority
1226
+ uint32_t priority = envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
1227
+ locality_endpoint);
1228
+ if (priority > 0) {
1229
+ fields.emplace_back(absl::StrCat(" priority: ", priority));
1230
+ }
1231
+ fields.emplace_back("}");
1232
+ }
1233
+ // policy
1234
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
1235
+ envoy_config_endpoint_v3_ClusterLoadAssignment_policy(cla);
1236
+ if (policy != nullptr) {
1237
+ fields.emplace_back("policy {");
1238
+ // drop_overloads
1239
+ size_t num_drop_overloads;
1240
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
1241
+ drop_overloads =
1242
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
1243
+ policy, &num_drop_overloads);
1244
+ for (size_t i = 0; i < num_drop_overloads; ++i) {
1245
+ auto* drop_overload = drop_overloads[i];
1246
+ fields.emplace_back(" drop_overloads {");
1247
+ // category
1248
+ AddStringField(
1249
+ " category",
1250
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
1251
+ drop_overload),
1252
+ &fields);
1253
+ // drop_percentage
1254
+ const auto* drop_percentage =
1255
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
1256
+ drop_overload);
1257
+ if (drop_percentage != nullptr) {
1258
+ fields.emplace_back(" drop_percentage {");
1259
+ fields.emplace_back(absl::StrCat(
1260
+ " numerator: ",
1261
+ envoy_type_v3_FractionalPercent_numerator(drop_percentage)));
1262
+ fields.emplace_back(absl::StrCat(
1263
+ " denominator: ",
1264
+ envoy_type_v3_FractionalPercent_denominator(drop_percentage)));
1265
+ fields.emplace_back(" }");
1266
+ }
1267
+ fields.emplace_back(" }");
1268
+ }
1269
+ // overprovisioning_factor
1270
+ fields.emplace_back("}");
1271
+ }
1272
+ gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s", client,
1273
+ absl::StrJoin(fields, "\n").c_str());
1274
+ }
1275
+ }
1276
+
1277
+ grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
1278
+ XdsApi::Route* route, bool* ignore_route) {
1279
+ if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
1280
+ absl::string_view prefix =
1281
+ UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
1282
+ // Empty prefix "" is accepted.
1283
+ if (prefix.size() > 0) {
1284
+ // Prefix "/" is accepted.
1285
+ if (prefix[0] != '/') {
1286
+ // Prefix which does not start with a / will never match anything, so
1287
+ // ignore this route.
1288
+ *ignore_route = true;
1289
+ return GRPC_ERROR_NONE;
1290
+ }
1291
+ std::vector<absl::string_view> prefix_elements =
1292
+ absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
1293
+ if (prefix_elements.size() > 2) {
1294
+ // Prefix cannot have more than 2 slashes.
1295
+ *ignore_route = true;
1296
+ return GRPC_ERROR_NONE;
1297
+ } else if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
1298
+ // Prefix contains empty string between the 2 slashes
1299
+ *ignore_route = true;
1300
+ return GRPC_ERROR_NONE;
1301
+ }
1302
+ }
1303
+ route->matchers.path_matcher.type =
1304
+ XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PREFIX;
1305
+ route->matchers.path_matcher.string_matcher = std::string(prefix);
1306
+ } else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
1307
+ absl::string_view path =
1308
+ UpbStringToAbsl(envoy_config_route_v3_RouteMatch_path(match));
1309
+ if (path.size() == 0) {
1310
+ // Path that is empty will never match anything, so ignore this route.
1311
+ *ignore_route = true;
1312
+ return GRPC_ERROR_NONE;
1313
+ }
1314
+ if (path[0] != '/') {
1315
+ // Path which does not start with a / will never match anything, so
1316
+ // ignore this route.
1317
+ *ignore_route = true;
1318
+ return GRPC_ERROR_NONE;
1319
+ }
1320
+ std::vector<absl::string_view> path_elements =
1321
+ absl::StrSplit(path.substr(1), absl::MaxSplits('/', 2));
1322
+ if (path_elements.size() != 2) {
1323
+ // Path not in the required format of /service/method will never match
1324
+ // anything, so ignore this route.
1325
+ *ignore_route = true;
1326
+ return GRPC_ERROR_NONE;
1327
+ } else if (path_elements[0].empty()) {
1328
+ // Path contains empty service name will never match anything, so ignore
1329
+ // this route.
1330
+ *ignore_route = true;
1331
+ return GRPC_ERROR_NONE;
1332
+ } else if (path_elements[1].empty()) {
1333
+ // Path contains empty method name will never match anything, so ignore
1334
+ // this route.
1335
+ *ignore_route = true;
1336
+ return GRPC_ERROR_NONE;
1337
+ }
1338
+ route->matchers.path_matcher.type =
1339
+ XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PATH;
1340
+ route->matchers.path_matcher.string_matcher = std::string(path);
1341
+ } else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
1342
+ const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
1343
+ envoy_config_route_v3_RouteMatch_safe_regex(match);
1344
+ GPR_ASSERT(regex_matcher != nullptr);
1345
+ std::string matcher = UpbStringToStdString(
1346
+ envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
1347
+ std::unique_ptr<RE2> regex = absl::make_unique<RE2>(std::move(matcher));
1348
+ if (!regex->ok()) {
1349
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1350
+ "Invalid regex string specified in path matcher.");
1351
+ }
1352
+ route->matchers.path_matcher.type =
1353
+ XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX;
1354
+ route->matchers.path_matcher.regex_matcher = std::move(regex);
1355
+ } else {
1356
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1357
+ "Invalid route path specifier specified.");
1358
+ }
1359
+ return GRPC_ERROR_NONE;
1360
+ }
1361
+
1362
+ grpc_error* RouteHeaderMatchersParse(
1363
+ const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
1364
+ size_t size;
1365
+ const envoy_config_route_v3_HeaderMatcher* const* headers =
1366
+ envoy_config_route_v3_RouteMatch_headers(match, &size);
1367
+ for (size_t i = 0; i < size; ++i) {
1368
+ const envoy_config_route_v3_HeaderMatcher* header = headers[i];
1369
+ XdsApi::Route::Matchers::HeaderMatcher header_matcher;
1370
+ header_matcher.name =
1371
+ UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
1372
+ if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
1373
+ header_matcher.type =
1374
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::EXACT;
1375
+ header_matcher.string_matcher = UpbStringToStdString(
1376
+ envoy_config_route_v3_HeaderMatcher_exact_match(header));
1377
+ } else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
1378
+ header)) {
1379
+ const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
1380
+ envoy_config_route_v3_HeaderMatcher_safe_regex_match(header);
1381
+ GPR_ASSERT(regex_matcher != nullptr);
1382
+ const std::string matcher = UpbStringToStdString(
1383
+ envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
1384
+ std::unique_ptr<RE2> regex = absl::make_unique<RE2>(matcher);
1385
+ if (!regex->ok()) {
1386
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1387
+ "Invalid regex string specified in header matcher.");
1388
+ }
1389
+ header_matcher.type =
1390
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX;
1391
+ header_matcher.regex_match = std::move(regex);
1392
+ } else if (envoy_config_route_v3_HeaderMatcher_has_range_match(header)) {
1393
+ header_matcher.type =
1394
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE;
1395
+ const envoy_type_v3_Int64Range* range_matcher =
1396
+ envoy_config_route_v3_HeaderMatcher_range_match(header);
1397
+ header_matcher.range_start =
1398
+ envoy_type_v3_Int64Range_start(range_matcher);
1399
+ header_matcher.range_end = envoy_type_v3_Int64Range_end(range_matcher);
1400
+ if (header_matcher.range_end < header_matcher.range_start) {
1401
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1402
+ "Invalid range header matcher specifier specified: end "
1403
+ "cannot be smaller than start.");
1404
+ }
1405
+ } else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
1406
+ header_matcher.type =
1407
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PRESENT;
1408
+ header_matcher.present_match =
1409
+ envoy_config_route_v3_HeaderMatcher_present_match(header);
1410
+ } else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
1411
+ header_matcher.type =
1412
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PREFIX;
1413
+ header_matcher.string_matcher = UpbStringToStdString(
1414
+ envoy_config_route_v3_HeaderMatcher_prefix_match(header));
1415
+ } else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
1416
+ header_matcher.type =
1417
+ XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::SUFFIX;
1418
+ header_matcher.string_matcher = UpbStringToStdString(
1419
+ envoy_config_route_v3_HeaderMatcher_suffix_match(header));
1420
+ } else {
1421
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1422
+ "Invalid route header matcher specified.");
1423
+ }
1424
+ header_matcher.invert_match =
1425
+ envoy_config_route_v3_HeaderMatcher_invert_match(header);
1426
+ route->matchers.header_matchers.emplace_back(std::move(header_matcher));
1427
+ }
1428
+ return GRPC_ERROR_NONE;
1429
+ }
1430
+
1431
+ grpc_error* RouteRuntimeFractionParse(
1432
+ const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
1433
+ const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
1434
+ envoy_config_route_v3_RouteMatch_runtime_fraction(match);
1435
+ if (runtime_fraction != nullptr) {
1436
+ const envoy_type_v3_FractionalPercent* fraction =
1437
+ envoy_config_core_v3_RuntimeFractionalPercent_default_value(
1438
+ runtime_fraction);
1439
+ if (fraction != nullptr) {
1440
+ uint32_t numerator = envoy_type_v3_FractionalPercent_numerator(fraction);
1441
+ const auto denominator =
1442
+ static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
1443
+ envoy_type_v3_FractionalPercent_denominator(fraction));
1444
+ // Normalize to million.
1445
+ switch (denominator) {
1446
+ case envoy_type_v3_FractionalPercent_HUNDRED:
1447
+ numerator *= 10000;
1448
+ break;
1449
+ case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
1450
+ numerator *= 100;
1451
+ break;
1452
+ case envoy_type_v3_FractionalPercent_MILLION:
1453
+ break;
1454
+ default:
1455
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1456
+ "Unknown denominator type");
1457
+ }
1458
+ route->matchers.fraction_per_million = numerator;
1459
+ }
1460
+ }
1461
+ return GRPC_ERROR_NONE;
1462
+ }
1463
+
1464
+ grpc_error* RouteActionParse(const envoy_config_route_v3_Route* route_msg,
1465
+ XdsApi::Route* route, bool* ignore_route) {
1466
+ if (!envoy_config_route_v3_Route_has_route(route_msg)) {
1467
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1468
+ "No RouteAction found in route.");
1469
+ }
1470
+ const envoy_config_route_v3_RouteAction* route_action =
1471
+ envoy_config_route_v3_Route_route(route_msg);
1472
+ // Get the cluster or weighted_clusters in the RouteAction.
1473
+ if (envoy_config_route_v3_RouteAction_has_cluster(route_action)) {
1474
+ route->cluster_name = UpbStringToStdString(
1475
+ envoy_config_route_v3_RouteAction_cluster(route_action));
1476
+ if (route->cluster_name.size() == 0) {
1477
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1478
+ "RouteAction cluster contains empty cluster name.");
1479
+ }
1480
+ } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
1481
+ route_action)) {
1482
+ const envoy_config_route_v3_WeightedCluster* weighted_cluster =
1483
+ envoy_config_route_v3_RouteAction_weighted_clusters(route_action);
1484
+ uint32_t total_weight = 100;
1485
+ const google_protobuf_UInt32Value* weight =
1486
+ envoy_config_route_v3_WeightedCluster_total_weight(weighted_cluster);
1487
+ if (weight != nullptr) {
1488
+ total_weight = google_protobuf_UInt32Value_value(weight);
1489
+ }
1490
+ size_t clusters_size;
1491
+ const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
1492
+ envoy_config_route_v3_WeightedCluster_clusters(weighted_cluster,
1493
+ &clusters_size);
1494
+ uint32_t sum_of_weights = 0;
1495
+ for (size_t j = 0; j < clusters_size; ++j) {
1496
+ const envoy_config_route_v3_WeightedCluster_ClusterWeight*
1497
+ cluster_weight = clusters[j];
1498
+ XdsApi::Route::ClusterWeight cluster;
1499
+ cluster.name = UpbStringToStdString(
1500
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
1501
+ cluster_weight));
1502
+ if (cluster.name.empty()) {
1503
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1504
+ "RouteAction weighted_cluster cluster contains empty cluster "
1505
+ "name.");
1506
+ }
1507
+ const google_protobuf_UInt32Value* weight =
1508
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
1509
+ cluster_weight);
1510
+ if (weight == nullptr) {
1511
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1512
+ "RouteAction weighted_cluster cluster missing weight");
1513
+ }
1514
+ cluster.weight = google_protobuf_UInt32Value_value(weight);
1515
+ sum_of_weights += cluster.weight;
1516
+ route->weighted_clusters.emplace_back(std::move(cluster));
1517
+ }
1518
+ if (total_weight != sum_of_weights) {
1519
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1520
+ "RouteAction weighted_cluster has incorrect total weight");
1521
+ }
1522
+ if (route->weighted_clusters.empty()) {
1523
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1524
+ "RouteAction weighted_cluster has no valid clusters specified.");
1525
+ }
1526
+ } else {
1527
+ // No cluster or weighted_clusters found in RouteAction, ignore this route.
1528
+ *ignore_route = true;
1529
+ return GRPC_ERROR_NONE;
1530
+ }
1531
+ return GRPC_ERROR_NONE;
1532
+ }
1533
+
1534
+ grpc_error* RouteConfigParse(
1535
+ XdsClient* client, TraceFlag* tracer,
1536
+ const envoy_config_route_v3_RouteConfiguration* route_config,
1537
+ XdsApi::RdsUpdate* rds_update) {
1538
+ MaybeLogRouteConfiguration(client, tracer, route_config);
1539
+ // Get the virtual hosts.
1540
+ size_t size;
1541
+ const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
1542
+ envoy_config_route_v3_RouteConfiguration_virtual_hosts(route_config,
1543
+ &size);
1544
+ for (size_t i = 0; i < size; ++i) {
1545
+ rds_update->virtual_hosts.emplace_back();
1546
+ XdsApi::RdsUpdate::VirtualHost& vhost = rds_update->virtual_hosts.back();
1547
+ // Parse domains.
1548
+ size_t domain_size;
1549
+ upb_strview const* domains = envoy_config_route_v3_VirtualHost_domains(
1550
+ virtual_hosts[i], &domain_size);
1551
+ for (size_t j = 0; j < domain_size; ++j) {
1552
+ std::string domain_pattern = UpbStringToStdString(domains[j]);
1553
+ const MatchType match_type = DomainPatternMatchType(domain_pattern);
1554
+ if (match_type == INVALID_MATCH) {
1555
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid domain pattern.");
1556
+ }
1557
+ vhost.domains.emplace_back(std::move(domain_pattern));
1558
+ }
1559
+ if (vhost.domains.empty()) {
1560
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("VirtualHost has no domains");
1561
+ }
1562
+ // Parse routes.
1563
+ size_t num_routes;
1564
+ const envoy_config_route_v3_Route* const* routes =
1565
+ envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
1566
+ if (num_routes < 1) {
1567
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1568
+ "No route found in the virtual host.");
1569
+ }
1570
+ // Loop over the whole list of routes
1571
+ for (size_t j = 0; j < num_routes; ++j) {
1572
+ const envoy_config_route_v3_RouteMatch* match =
1573
+ envoy_config_route_v3_Route_match(routes[j]);
1574
+ size_t query_parameters_size;
1575
+ static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
1576
+ match, &query_parameters_size));
1577
+ if (query_parameters_size > 0) {
1578
+ continue;
1579
+ }
1580
+ XdsApi::Route route;
1581
+ bool ignore_route = false;
1582
+ grpc_error* error = RoutePathMatchParse(match, &route, &ignore_route);
1583
+ if (error != GRPC_ERROR_NONE) return error;
1584
+ if (ignore_route) continue;
1585
+ error = RouteHeaderMatchersParse(match, &route);
1586
+ if (error != GRPC_ERROR_NONE) return error;
1587
+ error = RouteRuntimeFractionParse(match, &route);
1588
+ if (error != GRPC_ERROR_NONE) return error;
1589
+ error = RouteActionParse(routes[j], &route, &ignore_route);
1590
+ if (error != GRPC_ERROR_NONE) return error;
1591
+ if (ignore_route) continue;
1592
+ const google_protobuf_BoolValue* case_sensitive =
1593
+ envoy_config_route_v3_RouteMatch_case_sensitive(match);
1594
+ if (case_sensitive != nullptr &&
1595
+ !google_protobuf_BoolValue_value(case_sensitive)) {
1596
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1597
+ "case_sensitive if set must be set to true.");
1598
+ }
1599
+ vhost.routes.emplace_back(std::move(route));
1600
+ }
1601
+ if (vhost.routes.empty()) {
1602
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
1603
+ }
1604
+ }
1605
+ return GRPC_ERROR_NONE;
1606
+ }
1607
+
1608
+ grpc_error* LdsResponseParse(
1609
+ XdsClient* client, TraceFlag* tracer,
1610
+ const envoy_service_discovery_v3_DiscoveryResponse* response,
1611
+ const std::string& expected_server_name,
1612
+ absl::optional<XdsApi::LdsUpdate>* lds_update, upb_arena* arena) {
1613
+ // Get the resources from the response.
1614
+ size_t size;
1615
+ const google_protobuf_Any* const* resources =
1616
+ envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
1617
+ for (size_t i = 0; i < size; ++i) {
1618
+ // Check the type_url of the resource.
1619
+ absl::string_view type_url =
1620
+ UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
1621
+ if (!IsLds(type_url)) {
1622
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not LDS.");
1623
+ }
1624
+ // Decode the listener.
1625
+ const upb_strview encoded_listener =
1626
+ google_protobuf_Any_value(resources[i]);
1627
+ const envoy_config_listener_v3_Listener* listener =
1628
+ envoy_config_listener_v3_Listener_parse(encoded_listener.data,
1629
+ encoded_listener.size, arena);
1630
+ if (listener == nullptr) {
1631
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode listener.");
1632
+ }
1633
+ // Check listener name. Ignore unexpected listeners.
1634
+ absl::string_view name =
1635
+ UpbStringToAbsl(envoy_config_listener_v3_Listener_name(listener));
1636
+ if (name != expected_server_name) continue;
1637
+ // Get api_listener and decode it to http_connection_manager.
1638
+ const envoy_config_listener_v3_ApiListener* api_listener =
1639
+ envoy_config_listener_v3_Listener_api_listener(listener);
1640
+ if (api_listener == nullptr) {
1641
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1642
+ "Listener has no ApiListener.");
1643
+ }
1644
+ const upb_strview encoded_api_listener = google_protobuf_Any_value(
1645
+ envoy_config_listener_v3_ApiListener_api_listener(api_listener));
1646
+ const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
1647
+ http_connection_manager =
1648
+ envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
1649
+ encoded_api_listener.data, encoded_api_listener.size, arena);
1650
+ if (http_connection_manager == nullptr) {
1651
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1652
+ "Could not parse HttpConnectionManager config from ApiListener");
1653
+ }
1654
+ // Found inlined route_config. Parse it to find the cluster_name.
1655
+ if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
1656
+ http_connection_manager)) {
1657
+ const envoy_config_route_v3_RouteConfiguration* route_config =
1658
+ envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
1659
+ http_connection_manager);
1660
+ XdsApi::RdsUpdate rds_update;
1661
+ grpc_error* error =
1662
+ RouteConfigParse(client, tracer, route_config, &rds_update);
1663
+ if (error != GRPC_ERROR_NONE) return error;
1664
+ lds_update->emplace();
1665
+ (*lds_update)->rds_update = std::move(rds_update);
1666
+ return GRPC_ERROR_NONE;
1667
+ }
1668
+ // Validate that RDS must be used to get the route_config dynamically.
1669
+ if (!envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_rds(
1670
+ http_connection_manager)) {
1671
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1672
+ "HttpConnectionManager neither has inlined route_config nor RDS.");
1673
+ }
1674
+ const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
1675
+ envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
1676
+ http_connection_manager);
1677
+ // Check that the ConfigSource specifies ADS.
1678
+ const envoy_config_core_v3_ConfigSource* config_source =
1679
+ envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
1680
+ rds);
1681
+ if (config_source == nullptr) {
1682
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1683
+ "HttpConnectionManager missing config_source for RDS.");
1684
+ }
1685
+ if (!envoy_config_core_v3_ConfigSource_has_ads(config_source)) {
1686
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1687
+ "HttpConnectionManager ConfigSource for RDS does not specify ADS.");
1688
+ }
1689
+ // Get the route_config_name.
1690
+ lds_update->emplace();
1691
+ (*lds_update)->route_config_name = UpbStringToStdString(
1692
+ envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
1693
+ rds));
1694
+ return GRPC_ERROR_NONE;
1695
+ }
1696
+ return GRPC_ERROR_NONE;
1697
+ }
1698
+
1699
+ grpc_error* RdsResponseParse(
1700
+ XdsClient* client, TraceFlag* tracer,
1701
+ const envoy_service_discovery_v3_DiscoveryResponse* response,
1702
+ const std::set<absl::string_view>& expected_route_configuration_names,
1703
+ absl::optional<XdsApi::RdsUpdate>* rds_update, upb_arena* arena) {
1704
+ // Get the resources from the response.
1705
+ size_t size;
1706
+ const google_protobuf_Any* const* resources =
1707
+ envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
1708
+ for (size_t i = 0; i < size; ++i) {
1709
+ // Check the type_url of the resource.
1710
+ absl::string_view type_url =
1711
+ UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
1712
+ if (!IsRds(type_url)) {
1713
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not RDS.");
1714
+ }
1715
+ // Decode the route_config.
1716
+ const upb_strview encoded_route_config =
1717
+ google_protobuf_Any_value(resources[i]);
1718
+ const envoy_config_route_v3_RouteConfiguration* route_config =
1719
+ envoy_config_route_v3_RouteConfiguration_parse(
1720
+ encoded_route_config.data, encoded_route_config.size, arena);
1721
+ if (route_config == nullptr) {
1722
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode route_config.");
1723
+ }
1724
+ // Check route_config_name. Ignore unexpected route_config.
1725
+ absl::string_view route_config_name = UpbStringToAbsl(
1726
+ envoy_config_route_v3_RouteConfiguration_name(route_config));
1727
+ if (expected_route_configuration_names.find(route_config_name) ==
1728
+ expected_route_configuration_names.end()) {
1729
+ continue;
1730
+ }
1731
+ // Parse the route_config.
1732
+ XdsApi::RdsUpdate local_rds_update;
1733
+ grpc_error* error =
1734
+ RouteConfigParse(client, tracer, route_config, &local_rds_update);
1735
+ if (error != GRPC_ERROR_NONE) return error;
1736
+ rds_update->emplace(std::move(local_rds_update));
1737
+ return GRPC_ERROR_NONE;
1738
+ }
1739
+ return GRPC_ERROR_NONE;
1740
+ }
1741
+
1742
+ grpc_error* CdsResponseParse(
1743
+ XdsClient* client, TraceFlag* tracer,
1744
+ const envoy_service_discovery_v3_DiscoveryResponse* response,
1745
+ const std::set<absl::string_view>& expected_cluster_names,
1746
+ XdsApi::CdsUpdateMap* cds_update_map, upb_arena* arena) {
1747
+ // Get the resources from the response.
1748
+ size_t size;
1749
+ const google_protobuf_Any* const* resources =
1750
+ envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
1751
+ // Parse all the resources in the CDS response.
1752
+ for (size_t i = 0; i < size; ++i) {
1753
+ XdsApi::CdsUpdate cds_update;
1754
+ // Check the type_url of the resource.
1755
+ absl::string_view type_url =
1756
+ UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
1757
+ if (!IsCds(type_url)) {
1758
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not CDS.");
1759
+ }
1760
+ // Decode the cluster.
1761
+ const upb_strview encoded_cluster = google_protobuf_Any_value(resources[i]);
1762
+ const envoy_config_cluster_v3_Cluster* cluster =
1763
+ envoy_config_cluster_v3_Cluster_parse(encoded_cluster.data,
1764
+ encoded_cluster.size, arena);
1765
+ if (cluster == nullptr) {
1766
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode cluster.");
1767
+ }
1768
+ MaybeLogCluster(client, tracer, cluster);
1769
+ // Ignore unexpected cluster names.
1770
+ std::string cluster_name =
1771
+ UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(cluster));
1772
+ if (expected_cluster_names.find(cluster_name) ==
1773
+ expected_cluster_names.end()) {
1774
+ continue;
1775
+ }
1776
+ // Fail on duplicate resources.
1777
+ if (cds_update_map->find(cluster_name) != cds_update_map->end()) {
1778
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1779
+ absl::StrCat("duplicate resource name \"", cluster_name, "\"")
1780
+ .c_str());
1781
+ }
1782
+ // Check the cluster_discovery_type.
1783
+ if (!envoy_config_cluster_v3_Cluster_has_type(cluster)) {
1784
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType not found.");
1785
+ }
1786
+ if (envoy_config_cluster_v3_Cluster_type(cluster) !=
1787
+ envoy_config_cluster_v3_Cluster_EDS) {
1788
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not EDS.");
1789
+ }
1790
+ // Check the EDS config source.
1791
+ const envoy_config_cluster_v3_Cluster_EdsClusterConfig* eds_cluster_config =
1792
+ envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
1793
+ const envoy_config_core_v3_ConfigSource* eds_config =
1794
+ envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
1795
+ eds_cluster_config);
1796
+ if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config)) {
1797
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1798
+ "EDS ConfigSource is not ADS.");
1799
+ }
1800
+ // Record EDS service_name (if any).
1801
+ upb_strview service_name =
1802
+ envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
1803
+ eds_cluster_config);
1804
+ if (service_name.size != 0) {
1805
+ cds_update.eds_service_name = UpbStringToStdString(service_name);
1806
+ }
1807
+ // Check the LB policy.
1808
+ if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) !=
1809
+ envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
1810
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1811
+ "LB policy is not ROUND_ROBIN.");
1812
+ }
1813
+ // Record LRS server name (if any).
1814
+ const envoy_config_core_v3_ConfigSource* lrs_server =
1815
+ envoy_config_cluster_v3_Cluster_lrs_server(cluster);
1816
+ if (lrs_server != nullptr) {
1817
+ if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
1818
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1819
+ "LRS ConfigSource is not self.");
1820
+ }
1821
+ cds_update.lrs_load_reporting_server_name.emplace("");
1822
+ }
1823
+ cds_update_map->emplace(std::move(cluster_name), std::move(cds_update));
1824
+ }
1825
+ return GRPC_ERROR_NONE;
1826
+ }
1827
+
1828
+ grpc_error* ServerAddressParseAndAppend(
1829
+ const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
1830
+ ServerAddressList* list) {
1831
+ // If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
1832
+ const int32_t health_status =
1833
+ envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
1834
+ if (health_status != envoy_config_core_v3_UNKNOWN &&
1835
+ health_status != envoy_config_core_v3_HEALTHY) {
1836
+ return GRPC_ERROR_NONE;
1837
+ }
1838
+ // Find the ip:port.
1839
+ const envoy_config_endpoint_v3_Endpoint* endpoint =
1840
+ envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
1841
+ const envoy_config_core_v3_Address* address =
1842
+ envoy_config_endpoint_v3_Endpoint_address(endpoint);
1843
+ const envoy_config_core_v3_SocketAddress* socket_address =
1844
+ envoy_config_core_v3_Address_socket_address(address);
1845
+ std::string address_str = UpbStringToStdString(
1846
+ envoy_config_core_v3_SocketAddress_address(socket_address));
1847
+ uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
1848
+ if (GPR_UNLIKELY(port >> 16) != 0) {
1849
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
1850
+ }
1851
+ // Populate grpc_resolved_address.
1852
+ grpc_resolved_address addr;
1853
+ grpc_string_to_sockaddr(&addr, address_str.c_str(), port);
1854
+ // Append the address to the list.
1855
+ list->emplace_back(addr, nullptr);
1856
+ return GRPC_ERROR_NONE;
1857
+ }
1858
+
1859
+ grpc_error* LocalityParse(
1860
+ const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
1861
+ XdsApi::PriorityListUpdate::LocalityMap::Locality* output_locality) {
1862
+ // Parse LB weight.
1863
+ const google_protobuf_UInt32Value* lb_weight =
1864
+ envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
1865
+ locality_lb_endpoints);
1866
+ // If LB weight is not specified, it means this locality is assigned no load.
1867
+ // TODO(juanlishen): When we support CDS to configure the inter-locality
1868
+ // policy, we should change the LB weight handling.
1869
+ output_locality->lb_weight =
1870
+ lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
1871
+ if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
1872
+ // Parse locality name.
1873
+ const envoy_config_core_v3_Locality* locality =
1874
+ envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
1875
+ locality_lb_endpoints);
1876
+ std::string region =
1877
+ UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
1878
+ std::string zone =
1879
+ UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
1880
+ std::string sub_zone =
1881
+ UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
1882
+ output_locality->name = MakeRefCounted<XdsLocalityName>(
1883
+ std::move(region), std::move(zone), std::move(sub_zone));
1884
+ // Parse the addresses.
1885
+ size_t size;
1886
+ const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
1887
+ envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
1888
+ locality_lb_endpoints, &size);
1889
+ for (size_t i = 0; i < size; ++i) {
1890
+ grpc_error* error = ServerAddressParseAndAppend(
1891
+ lb_endpoints[i], &output_locality->serverlist);
1892
+ if (error != GRPC_ERROR_NONE) return error;
1893
+ }
1894
+ // Parse the priority.
1895
+ output_locality->priority =
1896
+ envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
1897
+ locality_lb_endpoints);
1898
+ return GRPC_ERROR_NONE;
1899
+ }
1900
+
1901
+ grpc_error* DropParseAndAppend(
1902
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
1903
+ drop_overload,
1904
+ XdsApi::DropConfig* drop_config) {
1905
+ // Get the category.
1906
+ std::string category = UpbStringToStdString(
1907
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
1908
+ drop_overload));
1909
+ if (category.size() == 0) {
1910
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty drop category name");
1911
+ }
1912
+ // Get the drop rate (per million).
1913
+ const envoy_type_v3_FractionalPercent* drop_percentage =
1914
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
1915
+ drop_overload);
1916
+ uint32_t numerator =
1917
+ envoy_type_v3_FractionalPercent_numerator(drop_percentage);
1918
+ const auto denominator =
1919
+ static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
1920
+ envoy_type_v3_FractionalPercent_denominator(drop_percentage));
1921
+ // Normalize to million.
1922
+ switch (denominator) {
1923
+ case envoy_type_v3_FractionalPercent_HUNDRED:
1924
+ numerator *= 10000;
1925
+ break;
1926
+ case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
1927
+ numerator *= 100;
1928
+ break;
1929
+ case envoy_type_v3_FractionalPercent_MILLION:
1930
+ break;
1931
+ default:
1932
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
1933
+ }
1934
+ // Cap numerator to 1000000.
1935
+ numerator = GPR_MIN(numerator, 1000000);
1936
+ drop_config->AddCategory(std::move(category), numerator);
1937
+ return GRPC_ERROR_NONE;
1938
+ }
1939
+
1940
+ grpc_error* EdsResponseParse(
1941
+ XdsClient* client, TraceFlag* tracer,
1942
+ const envoy_service_discovery_v3_DiscoveryResponse* response,
1943
+ const std::set<absl::string_view>& expected_eds_service_names,
1944
+ XdsApi::EdsUpdateMap* eds_update_map, upb_arena* arena) {
1945
+ // Get the resources from the response.
1946
+ size_t size;
1947
+ const google_protobuf_Any* const* resources =
1948
+ envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
1949
+ for (size_t i = 0; i < size; ++i) {
1950
+ XdsApi::EdsUpdate eds_update;
1951
+ // Check the type_url of the resource.
1952
+ absl::string_view type_url =
1953
+ UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
1954
+ if (!IsEds(type_url)) {
1955
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource is not EDS.");
1956
+ }
1957
+ // Get the cluster_load_assignment.
1958
+ upb_strview encoded_cluster_load_assignment =
1959
+ google_protobuf_Any_value(resources[i]);
1960
+ envoy_config_endpoint_v3_ClusterLoadAssignment* cluster_load_assignment =
1961
+ envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
1962
+ encoded_cluster_load_assignment.data,
1963
+ encoded_cluster_load_assignment.size, arena);
1964
+ if (cluster_load_assignment == nullptr) {
1965
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1966
+ "Can't parse cluster_load_assignment.");
1967
+ }
1968
+ MaybeLogClusterLoadAssignment(client, tracer, cluster_load_assignment);
1969
+ // Check the EDS service name. Ignore unexpected names.
1970
+ std::string eds_service_name = UpbStringToStdString(
1971
+ envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(
1972
+ cluster_load_assignment));
1973
+ if (expected_eds_service_names.find(eds_service_name) ==
1974
+ expected_eds_service_names.end()) {
1975
+ continue;
1976
+ }
1977
+ // Fail on duplicate resources.
1978
+ if (eds_update_map->find(eds_service_name) != eds_update_map->end()) {
1979
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1980
+ absl::StrCat("duplicate resource name \"", eds_service_name, "\"")
1981
+ .c_str());
1982
+ }
1983
+ // Get the endpoints.
1984
+ size_t locality_size;
1985
+ const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
1986
+ envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
1987
+ cluster_load_assignment, &locality_size);
1988
+ for (size_t j = 0; j < locality_size; ++j) {
1989
+ XdsApi::PriorityListUpdate::LocalityMap::Locality locality;
1990
+ grpc_error* error = LocalityParse(endpoints[j], &locality);
1991
+ if (error != GRPC_ERROR_NONE) return error;
1992
+ // Filter out locality with weight 0.
1993
+ if (locality.lb_weight == 0) continue;
1994
+ eds_update.priority_list_update.Add(locality);
1995
+ }
1996
+ for (uint32_t priority = 0;
1997
+ priority < eds_update.priority_list_update.size(); ++priority) {
1998
+ auto* locality_map = eds_update.priority_list_update.Find(priority);
1999
+ if (locality_map == nullptr || locality_map->size() == 0) {
2000
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2001
+ "EDS update includes sparse priority list");
2002
+ }
2003
+ }
2004
+ // Get the drop config.
2005
+ eds_update.drop_config = MakeRefCounted<XdsApi::DropConfig>();
2006
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
2007
+ envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
2008
+ cluster_load_assignment);
2009
+ if (policy != nullptr) {
2010
+ size_t drop_size;
2011
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
2012
+ drop_overload =
2013
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
2014
+ policy, &drop_size);
2015
+ for (size_t j = 0; j < drop_size; ++j) {
2016
+ grpc_error* error =
2017
+ DropParseAndAppend(drop_overload[j], eds_update.drop_config.get());
2018
+ if (error != GRPC_ERROR_NONE) return error;
2019
+ }
2020
+ }
2021
+ eds_update_map->emplace(std::move(eds_service_name), std::move(eds_update));
2022
+ }
2023
+ return GRPC_ERROR_NONE;
2024
+ }
2025
+
2026
+ std::string TypeUrlInternalToExternal(absl::string_view type_url) {
2027
+ if (type_url == kLdsV2TypeUrl) {
2028
+ return XdsApi::kLdsTypeUrl;
2029
+ } else if (type_url == kRdsV2TypeUrl) {
2030
+ return XdsApi::kRdsTypeUrl;
2031
+ } else if (type_url == kCdsV2TypeUrl) {
2032
+ return XdsApi::kCdsTypeUrl;
2033
+ } else if (type_url == kEdsV2TypeUrl) {
2034
+ return XdsApi::kEdsTypeUrl;
2035
+ }
2036
+ return std::string(type_url);
2037
+ }
2038
+
2039
+ } // namespace
2040
+
2041
+ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
2042
+ const grpc_slice& encoded_response, const std::string& expected_server_name,
2043
+ const std::set<absl::string_view>& expected_route_configuration_names,
2044
+ const std::set<absl::string_view>& expected_cluster_names,
2045
+ const std::set<absl::string_view>& expected_eds_service_names) {
2046
+ AdsParseResult result;
2047
+ upb::Arena arena;
2048
+ // Decode the response.
2049
+ const envoy_service_discovery_v3_DiscoveryResponse* response =
2050
+ envoy_service_discovery_v3_DiscoveryResponse_parse(
2051
+ reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
2052
+ GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
2053
+ // If decoding fails, output an empty type_url and return.
2054
+ if (response == nullptr) {
2055
+ result.parse_error =
2056
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode DiscoveryResponse.");
2057
+ return result;
2058
+ }
2059
+ MaybeLogDiscoveryResponse(client_, tracer_, response);
2060
+ // Record the type_url, the version_info, and the nonce of the response.
2061
+ result.type_url = TypeUrlInternalToExternal(UpbStringToAbsl(
2062
+ envoy_service_discovery_v3_DiscoveryResponse_type_url(response)));
2063
+ result.version = UpbStringToStdString(
2064
+ envoy_service_discovery_v3_DiscoveryResponse_version_info(response));
2065
+ result.nonce = UpbStringToStdString(
2066
+ envoy_service_discovery_v3_DiscoveryResponse_nonce(response));
2067
+ // Parse the response according to the resource type.
2068
+ if (IsLds(result.type_url)) {
2069
+ result.parse_error =
2070
+ LdsResponseParse(client_, tracer_, response, expected_server_name,
2071
+ &result.lds_update, arena.ptr());
2072
+ } else if (IsRds(result.type_url)) {
2073
+ result.parse_error = RdsResponseParse(client_, tracer_, response,
2074
+ expected_route_configuration_names,
2075
+ &result.rds_update, arena.ptr());
2076
+ } else if (IsCds(result.type_url)) {
2077
+ result.parse_error =
2078
+ CdsResponseParse(client_, tracer_, response, expected_cluster_names,
2079
+ &result.cds_update_map, arena.ptr());
2080
+ } else if (IsEds(result.type_url)) {
2081
+ result.parse_error =
2082
+ EdsResponseParse(client_, tracer_, response, expected_eds_service_names,
2083
+ &result.eds_update_map, arena.ptr());
2084
+ }
2085
+ return result;
2086
+ }
2087
+
2088
+ namespace {
2089
+
2090
+ void MaybeLogLrsRequest(
2091
+ XdsClient* client, TraceFlag* tracer,
2092
+ const envoy_service_load_stats_v3_LoadStatsRequest* request,
2093
+ const std::string& build_version) {
2094
+ if (GRPC_TRACE_FLAG_ENABLED(*tracer) &&
2095
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
2096
+ // TODO(roth): When we can upgrade upb, use upb textformat code to dump
2097
+ // the raw proto instead of doing this manually.
2098
+ std::vector<std::string> fields;
2099
+ // node
2100
+ const auto* node =
2101
+ envoy_service_load_stats_v3_LoadStatsRequest_node(request);
2102
+ if (node != nullptr) {
2103
+ AddNodeLogFields(node, build_version, &fields);
2104
+ }
2105
+ // cluster_stats
2106
+ size_t num_cluster_stats;
2107
+ const struct envoy_config_endpoint_v3_ClusterStats* const* cluster_stats =
2108
+ envoy_service_load_stats_v3_LoadStatsRequest_cluster_stats(
2109
+ request, &num_cluster_stats);
2110
+ for (size_t i = 0; i < num_cluster_stats; ++i) {
2111
+ const auto* cluster_stat = cluster_stats[i];
2112
+ fields.emplace_back("cluster_stats {");
2113
+ // cluster_name
2114
+ AddStringField(
2115
+ " cluster_name",
2116
+ envoy_config_endpoint_v3_ClusterStats_cluster_name(cluster_stat),
2117
+ &fields);
2118
+ // cluster_service_name
2119
+ AddStringField(" cluster_service_name",
2120
+ envoy_config_endpoint_v3_ClusterStats_cluster_service_name(
2121
+ cluster_stat),
2122
+ &fields);
2123
+ // upstream_locality_stats
2124
+ size_t num_stats;
2125
+ const envoy_config_endpoint_v3_UpstreamLocalityStats* const* stats =
2126
+ envoy_config_endpoint_v3_ClusterStats_upstream_locality_stats(
2127
+ cluster_stat, &num_stats);
2128
+ for (size_t j = 0; j < num_stats; ++j) {
2129
+ const auto* stat = stats[j];
2130
+ fields.emplace_back(" upstream_locality_stats {");
2131
+ // locality
2132
+ const auto* locality =
2133
+ envoy_config_endpoint_v3_UpstreamLocalityStats_locality(stat);
2134
+ if (locality != nullptr) {
2135
+ fields.emplace_back(" locality {");
2136
+ AddLocalityField(3, locality, &fields);
2137
+ fields.emplace_back(" }");
2138
+ }
2139
+ // total_successful_requests
2140
+ fields.emplace_back(absl::StrCat(
2141
+ " total_successful_requests: ",
2142
+ envoy_config_endpoint_v3_UpstreamLocalityStats_total_successful_requests(
2143
+ stat)));
2144
+ // total_requests_in_progress
2145
+ fields.emplace_back(absl::StrCat(
2146
+ " total_requests_in_progress: ",
2147
+ envoy_config_endpoint_v3_UpstreamLocalityStats_total_requests_in_progress(
2148
+ stat)));
2149
+ // total_error_requests
2150
+ fields.emplace_back(absl::StrCat(
2151
+ " total_error_requests: ",
2152
+ envoy_config_endpoint_v3_UpstreamLocalityStats_total_error_requests(
2153
+ stat)));
2154
+ // total_issued_requests
2155
+ fields.emplace_back(absl::StrCat(
2156
+ " total_issued_requests: ",
2157
+ envoy_config_endpoint_v3_UpstreamLocalityStats_total_issued_requests(
2158
+ stat)));
2159
+ fields.emplace_back(" }");
2160
+ }
2161
+ // total_dropped_requests
2162
+ fields.emplace_back(absl::StrCat(
2163
+ " total_dropped_requests: ",
2164
+ envoy_config_endpoint_v3_ClusterStats_total_dropped_requests(
2165
+ cluster_stat)));
2166
+ // dropped_requests
2167
+ size_t num_drops;
2168
+ const envoy_config_endpoint_v3_ClusterStats_DroppedRequests* const*
2169
+ drops = envoy_config_endpoint_v3_ClusterStats_dropped_requests(
2170
+ cluster_stat, &num_drops);
2171
+ for (size_t j = 0; j < num_drops; ++j) {
2172
+ const auto* drop = drops[j];
2173
+ fields.emplace_back(" dropped_requests {");
2174
+ // category
2175
+ AddStringField(
2176
+ " category",
2177
+ envoy_config_endpoint_v3_ClusterStats_DroppedRequests_category(
2178
+ drop),
2179
+ &fields);
2180
+ // dropped_count
2181
+ fields.emplace_back(absl::StrCat(
2182
+ " dropped_count: ",
2183
+ envoy_config_endpoint_v3_ClusterStats_DroppedRequests_dropped_count(
2184
+ drop)));
2185
+ fields.emplace_back(" }");
2186
+ }
2187
+ // load_report_interval
2188
+ const auto* load_report_interval =
2189
+ envoy_config_endpoint_v3_ClusterStats_load_report_interval(
2190
+ cluster_stat);
2191
+ if (load_report_interval != nullptr) {
2192
+ fields.emplace_back(" load_report_interval {");
2193
+ fields.emplace_back(absl::StrCat(
2194
+ " seconds: ",
2195
+ google_protobuf_Duration_seconds(load_report_interval)));
2196
+ fields.emplace_back(
2197
+ absl::StrCat(" nanos: ",
2198
+ google_protobuf_Duration_nanos(load_report_interval)));
2199
+ fields.emplace_back(" }");
2200
+ }
2201
+ fields.emplace_back("}");
2202
+ }
2203
+ gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s", client,
2204
+ absl::StrJoin(fields, "\n").c_str());
2205
+ }
2206
+ }
2207
+
2208
+ grpc_slice SerializeLrsRequest(
2209
+ const envoy_service_load_stats_v3_LoadStatsRequest* request,
2210
+ upb_arena* arena) {
2211
+ size_t output_length;
2212
+ char* output = envoy_service_load_stats_v3_LoadStatsRequest_serialize(
2213
+ request, arena, &output_length);
2214
+ return grpc_slice_from_copied_buffer(output, output_length);
2215
+ }
2216
+
2217
+ } // namespace
2218
+
2219
+ grpc_slice XdsApi::CreateLrsInitialRequest(const std::string& server_name) {
2220
+ upb::Arena arena;
2221
+ // Create a request.
2222
+ envoy_service_load_stats_v3_LoadStatsRequest* request =
2223
+ envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
2224
+ // Populate node.
2225
+ envoy_config_core_v3_Node* node_msg =
2226
+ envoy_service_load_stats_v3_LoadStatsRequest_mutable_node(request,
2227
+ arena.ptr());
2228
+ PopulateNode(arena.ptr(), bootstrap_, build_version_, user_agent_name_,
2229
+ server_name, node_msg);
2230
+ envoy_config_core_v3_Node_add_client_features(
2231
+ node_msg, upb_strview_makez("envoy.lrs.supports_send_all_clusters"),
2232
+ arena.ptr());
2233
+ MaybeLogLrsRequest(client_, tracer_, request, build_version_);
2234
+ return SerializeLrsRequest(request, arena.ptr());
2235
+ }
2236
+
2237
+ namespace {
2238
+
2239
+ void LocalityStatsPopulate(
2240
+ envoy_config_endpoint_v3_UpstreamLocalityStats* output,
2241
+ const XdsLocalityName& locality_name,
2242
+ const XdsClusterLocalityStats::Snapshot& snapshot, upb_arena* arena) {
2243
+ // Set locality.
2244
+ envoy_config_core_v3_Locality* locality =
2245
+ envoy_config_endpoint_v3_UpstreamLocalityStats_mutable_locality(output,
2246
+ arena);
2247
+ if (!locality_name.region().empty()) {
2248
+ envoy_config_core_v3_Locality_set_region(
2249
+ locality, StdStringToUpbString(locality_name.region()));
2250
+ }
2251
+ if (!locality_name.zone().empty()) {
2252
+ envoy_config_core_v3_Locality_set_zone(
2253
+ locality, StdStringToUpbString(locality_name.zone()));
2254
+ }
2255
+ if (!locality_name.sub_zone().empty()) {
2256
+ envoy_config_core_v3_Locality_set_sub_zone(
2257
+ locality, StdStringToUpbString(locality_name.sub_zone()));
2258
+ }
2259
+ // Set total counts.
2260
+ envoy_config_endpoint_v3_UpstreamLocalityStats_set_total_successful_requests(
2261
+ output, snapshot.total_successful_requests);
2262
+ envoy_config_endpoint_v3_UpstreamLocalityStats_set_total_requests_in_progress(
2263
+ output, snapshot.total_requests_in_progress);
2264
+ envoy_config_endpoint_v3_UpstreamLocalityStats_set_total_error_requests(
2265
+ output, snapshot.total_error_requests);
2266
+ envoy_config_endpoint_v3_UpstreamLocalityStats_set_total_issued_requests(
2267
+ output, snapshot.total_issued_requests);
2268
+ // Add backend metrics.
2269
+ for (const auto& p : snapshot.backend_metrics) {
2270
+ const std::string& metric_name = p.first;
2271
+ const XdsClusterLocalityStats::BackendMetric& metric_value = p.second;
2272
+ envoy_config_endpoint_v3_EndpointLoadMetricStats* load_metric =
2273
+ envoy_config_endpoint_v3_UpstreamLocalityStats_add_load_metric_stats(
2274
+ output, arena);
2275
+ envoy_config_endpoint_v3_EndpointLoadMetricStats_set_metric_name(
2276
+ load_metric, StdStringToUpbString(metric_name));
2277
+ envoy_config_endpoint_v3_EndpointLoadMetricStats_set_num_requests_finished_with_metric(
2278
+ load_metric, metric_value.num_requests_finished_with_metric);
2279
+ envoy_config_endpoint_v3_EndpointLoadMetricStats_set_total_metric_value(
2280
+ load_metric, metric_value.total_metric_value);
2281
+ }
2282
+ }
2283
+
2284
+ } // namespace
2285
+
2286
+ grpc_slice XdsApi::CreateLrsRequest(
2287
+ ClusterLoadReportMap cluster_load_report_map) {
2288
+ upb::Arena arena;
2289
+ // Create a request.
2290
+ envoy_service_load_stats_v3_LoadStatsRequest* request =
2291
+ envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
2292
+ for (auto& p : cluster_load_report_map) {
2293
+ const std::string& cluster_name = p.first.first;
2294
+ const std::string& eds_service_name = p.first.second;
2295
+ const ClusterLoadReport& load_report = p.second;
2296
+ // Add cluster stats.
2297
+ envoy_config_endpoint_v3_ClusterStats* cluster_stats =
2298
+ envoy_service_load_stats_v3_LoadStatsRequest_add_cluster_stats(
2299
+ request, arena.ptr());
2300
+ // Set the cluster name.
2301
+ envoy_config_endpoint_v3_ClusterStats_set_cluster_name(
2302
+ cluster_stats, StdStringToUpbString(cluster_name));
2303
+ // Set EDS service name, if non-empty.
2304
+ if (!eds_service_name.empty()) {
2305
+ envoy_config_endpoint_v3_ClusterStats_set_cluster_service_name(
2306
+ cluster_stats, StdStringToUpbString(eds_service_name));
2307
+ }
2308
+ // Add locality stats.
2309
+ for (const auto& p : load_report.locality_stats) {
2310
+ const XdsLocalityName& locality_name = *p.first;
2311
+ const auto& snapshot = p.second;
2312
+ envoy_config_endpoint_v3_UpstreamLocalityStats* locality_stats =
2313
+ envoy_config_endpoint_v3_ClusterStats_add_upstream_locality_stats(
2314
+ cluster_stats, arena.ptr());
2315
+ LocalityStatsPopulate(locality_stats, locality_name, snapshot,
2316
+ arena.ptr());
2317
+ }
2318
+ // Add dropped requests.
2319
+ uint64_t total_dropped_requests = 0;
2320
+ for (const auto& p : load_report.dropped_requests) {
2321
+ const std::string& category = p.first;
2322
+ const uint64_t count = p.second;
2323
+ envoy_config_endpoint_v3_ClusterStats_DroppedRequests* dropped_requests =
2324
+ envoy_config_endpoint_v3_ClusterStats_add_dropped_requests(
2325
+ cluster_stats, arena.ptr());
2326
+ envoy_config_endpoint_v3_ClusterStats_DroppedRequests_set_category(
2327
+ dropped_requests, StdStringToUpbString(category));
2328
+ envoy_config_endpoint_v3_ClusterStats_DroppedRequests_set_dropped_count(
2329
+ dropped_requests, count);
2330
+ total_dropped_requests += count;
2331
+ }
2332
+ // Set total dropped requests.
2333
+ envoy_config_endpoint_v3_ClusterStats_set_total_dropped_requests(
2334
+ cluster_stats, total_dropped_requests);
2335
+ // Set real load report interval.
2336
+ gpr_timespec timespec =
2337
+ grpc_millis_to_timespec(load_report.load_report_interval, GPR_TIMESPAN);
2338
+ google_protobuf_Duration* load_report_interval =
2339
+ envoy_config_endpoint_v3_ClusterStats_mutable_load_report_interval(
2340
+ cluster_stats, arena.ptr());
2341
+ google_protobuf_Duration_set_seconds(load_report_interval, timespec.tv_sec);
2342
+ google_protobuf_Duration_set_nanos(load_report_interval, timespec.tv_nsec);
2343
+ }
2344
+ MaybeLogLrsRequest(client_, tracer_, request, build_version_);
2345
+ return SerializeLrsRequest(request, arena.ptr());
2346
+ }
2347
+
2348
+ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
2349
+ bool* send_all_clusters,
2350
+ std::set<std::string>* cluster_names,
2351
+ grpc_millis* load_reporting_interval) {
2352
+ upb::Arena arena;
2353
+ // Decode the response.
2354
+ const envoy_service_load_stats_v3_LoadStatsResponse* decoded_response =
2355
+ envoy_service_load_stats_v3_LoadStatsResponse_parse(
2356
+ reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
2357
+ GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
2358
+ // Parse the response.
2359
+ if (decoded_response == nullptr) {
2360
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode response.");
2361
+ }
2362
+ // Check send_all_clusters.
2363
+ if (envoy_service_load_stats_v3_LoadStatsResponse_send_all_clusters(
2364
+ decoded_response)) {
2365
+ *send_all_clusters = true;
2366
+ } else {
2367
+ // Store the cluster names.
2368
+ size_t size;
2369
+ const upb_strview* clusters =
2370
+ envoy_service_load_stats_v3_LoadStatsResponse_clusters(decoded_response,
2371
+ &size);
2372
+ for (size_t i = 0; i < size; ++i) {
2373
+ cluster_names->emplace(UpbStringToStdString(clusters[i]));
2374
+ }
2375
+ }
2376
+ // Get the load report interval.
2377
+ const google_protobuf_Duration* load_reporting_interval_duration =
2378
+ envoy_service_load_stats_v3_LoadStatsResponse_load_reporting_interval(
2379
+ decoded_response);
2380
+ gpr_timespec timespec{
2381
+ google_protobuf_Duration_seconds(load_reporting_interval_duration),
2382
+ google_protobuf_Duration_nanos(load_reporting_interval_duration),
2383
+ GPR_TIMESPAN};
2384
+ *load_reporting_interval = gpr_time_to_millis(timespec);
2385
+ return GRPC_ERROR_NONE;
2386
+ }
2387
+
2388
+ } // namespace grpc_core