grpc 1.30.1 → 1.40.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 (1628) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1195 -18269
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/event_engine/README.md +38 -0
  6. data/include/grpc/event_engine/endpoint_config.h +48 -0
  7. data/include/grpc/event_engine/event_engine.h +330 -0
  8. data/include/grpc/event_engine/port.h +41 -0
  9. data/include/grpc/event_engine/slice_allocator.h +66 -0
  10. data/include/grpc/grpc.h +38 -9
  11. data/include/grpc/grpc_security.h +291 -186
  12. data/include/grpc/grpc_security_constants.h +18 -0
  13. data/include/grpc/impl/codegen/README.md +22 -0
  14. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  15. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  16. data/include/grpc/impl/codegen/grpc_types.h +60 -31
  17. data/include/grpc/impl/codegen/log.h +0 -2
  18. data/include/grpc/impl/codegen/port_platform.h +75 -87
  19. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  20. data/include/grpc/module.modulemap +14 -14
  21. data/include/grpc/slice_buffer.h +3 -3
  22. data/include/grpc/support/sync.h +3 -3
  23. data/include/grpc/support/time.h +7 -7
  24. data/src/core/ext/filters/client_channel/backend_metric.cc +14 -13
  25. data/src/core/ext/filters/client_channel/backup_poller.cc +6 -5
  26. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  27. data/src/core/ext/filters/client_channel/client_channel.cc +2112 -2959
  28. data/src/core/ext/filters/client_channel/client_channel.h +514 -62
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -4
  30. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  31. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  32. data/src/core/ext/filters/client_channel/config_selector.cc +58 -0
  33. data/src/core/ext/filters/client_channel/config_selector.h +146 -0
  34. data/src/core/ext/filters/client_channel/connector.h +1 -1
  35. data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
  36. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  37. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  39. data/src/core/ext/filters/client_channel/health/health_check_client.cc +46 -35
  40. data/src/core/ext/filters/client_channel/health/health_check_client.h +34 -33
  41. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +39 -37
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +42 -24
  43. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  45. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  46. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +301 -267
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -40
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +34 -37
  58. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -51
  59. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +18 -24
  62. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +15 -37
  63. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +41 -34
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +472 -145
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  66. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  67. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +787 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +700 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1372 -0
  70. data/src/core/ext/filters/client_channel/lb_policy.cc +11 -18
  71. data/src/core/ext/filters/client_channel/lb_policy.h +80 -53
  72. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  73. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +16 -10
  74. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  75. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  76. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +71 -78
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -33
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +11 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +14 -12
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -20
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +495 -79
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -1
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  88. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +45 -36
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +40 -45
  90. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -6
  91. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
  92. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  93. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +883 -71
  94. data/src/core/ext/filters/client_channel/{xds/xds_channel_args.h → resolver/xds/xds_resolver.h} +9 -7
  95. data/src/core/ext/filters/client_channel/resolver.cc +7 -5
  96. data/src/core/ext/filters/client_channel/resolver.h +7 -15
  97. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  98. data/src/core/ext/filters/client_channel/resolver_registry.cc +49 -49
  99. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  100. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +50 -303
  101. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -54
  102. data/src/core/ext/filters/client_channel/retry_filter.cc +2611 -0
  103. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  104. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  105. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  106. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  107. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  108. data/src/core/ext/filters/client_channel/server_address.cc +129 -7
  109. data/src/core/ext/filters/client_channel/server_address.h +75 -21
  110. data/src/core/ext/filters/client_channel/service_config.cc +27 -21
  111. data/src/core/ext/filters/client_channel/service_config.h +11 -7
  112. data/src/core/ext/filters/client_channel/service_config_call_data.h +60 -2
  113. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +143 -0
  114. data/src/core/ext/filters/client_channel/service_config_parser.cc +14 -12
  115. data/src/core/ext/filters/client_channel/service_config_parser.h +12 -6
  116. data/src/core/ext/filters/client_channel/subchannel.cc +188 -236
  117. data/src/core/ext/filters/client_channel/subchannel.h +88 -113
  118. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  119. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  120. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  121. data/src/core/ext/filters/client_idle/client_idle_filter.cc +18 -17
  122. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -86
  123. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  124. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
  125. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  126. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  127. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  128. data/src/core/ext/filters/http/client/http_client_filter.cc +39 -29
  129. data/src/core/ext/filters/http/client_authority_filter.cc +9 -9
  130. data/src/core/ext/filters/http/http_filters_plugin.cc +8 -4
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +91 -50
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +30 -26
  135. data/src/core/ext/filters/max_age/max_age_filter.cc +50 -44
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +72 -92
  137. data/src/core/ext/filters/message_size/message_size_filter.h +8 -1
  138. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
  139. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  140. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  141. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +90 -34
  142. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +22 -5
  143. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  144. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +23 -11
  145. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +38 -50
  146. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +803 -352
  147. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  148. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +14 -5
  149. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +22 -20
  150. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +67 -24
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +8 -8
  152. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +457 -447
  155. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  156. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  157. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  158. data/src/core/ext/transport/chttp2/transport/flow_control.cc +36 -33
  159. data/src/core/ext/transport/chttp2/transport/flow_control.h +34 -26
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +26 -25
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -23
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -14
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +19 -20
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +8 -7
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +19 -24
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  173. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +681 -765
  174. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  175. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +17 -20
  176. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  177. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  178. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  179. data/src/core/ext/transport/chttp2/transport/internal.h +57 -30
  180. data/src/core/ext/transport/chttp2/transport/parsing.cc +181 -180
  181. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  182. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  183. data/src/core/ext/transport/inproc/inproc_transport.cc +154 -88
  184. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  185. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  186. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -1
  187. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  188. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +10 -4
  189. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  190. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +865 -0
  191. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
  192. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1452 -0
  193. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  194. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +253 -0
  195. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +461 -0
  196. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1850 -0
  197. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  198. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +77 -0
  199. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  200. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +364 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +428 -0
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +88 -0
  205. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +370 -0
  206. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1126 -0
  207. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  208. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +388 -0
  209. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  210. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +78 -0
  211. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  212. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  213. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  214. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +839 -0
  215. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  216. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +767 -0
  217. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  218. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +88 -0
  219. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +239 -0
  220. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +982 -0
  221. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  222. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +65 -0
  223. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  224. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  225. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +95 -0
  227. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +43 -0
  228. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  229. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  230. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  231. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  232. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +243 -0
  233. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  234. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +305 -0
  235. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  236. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +367 -0
  237. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  238. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +73 -0
  239. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +138 -0
  240. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +604 -0
  241. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +161 -0
  242. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +638 -0
  243. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  244. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  245. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +42 -0
  246. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +115 -0
  247. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  248. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  249. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  250. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  251. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +179 -0
  252. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +662 -0
  253. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +82 -0
  254. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +294 -0
  255. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +953 -0
  256. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3862 -0
  257. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  258. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +159 -0
  259. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  260. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +122 -0
  261. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  262. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +285 -0
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +117 -0
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +404 -0
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1671 -0
  271. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +116 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +475 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +219 -0
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +146 -0
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +621 -0
  279. data/src/core/ext/upb-generated/envoy/{api/v2/rds.upb.c → service/cluster/v3/cds.upb.c} +6 -9
  280. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +56 -0
  281. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +6 -5
  282. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +56 -0
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +499 -0
  285. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +6 -10
  286. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +56 -0
  287. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +6 -10
  288. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +56 -0
  289. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  290. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +151 -0
  291. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +6 -7
  292. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +56 -0
  293. data/src/core/ext/upb-generated/envoy/{api/v2/cds.upb.c → service/route/v3/srds.upb.c} +6 -7
  294. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +56 -0
  295. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
  296. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +438 -0
  297. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  298. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +128 -0
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +84 -0
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +78 -0
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +65 -0
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +166 -0
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +146 -0
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  313. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  314. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +207 -0
  315. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  316. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +301 -0
  317. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  318. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +283 -0
  319. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  320. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +9 -9
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  322. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +99 -0
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  324. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +130 -0
  325. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +7 -6
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +68 -0
  327. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  328. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  329. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +871 -0
  332. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  333. data/src/core/ext/upb-generated/google/api/http.upb.h +52 -32
  334. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  335. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -6
  336. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +106 -106
  337. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +688 -499
  338. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +12 -6
  340. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  341. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +8 -2
  342. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +5 -5
  343. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +55 -57
  344. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +12 -6
  346. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  347. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +82 -28
  348. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/rpc/status.upb.h +17 -10
  350. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +5 -5
  351. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +40 -45
  352. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +43 -43
  353. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +236 -184
  354. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  355. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +29 -13
  356. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +19 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  359. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +122 -62
  360. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  361. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +30 -12
  362. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  363. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  364. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -1
  365. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  366. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +12 -6
  367. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  368. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +60 -0
  369. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +9 -9
  370. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +48 -68
  371. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  372. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  373. data/src/core/ext/upb-generated/validate/validate.upb.c +133 -117
  374. data/src/core/ext/upb-generated/validate/validate.upb.h +881 -645
  375. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  376. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  377. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  378. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  379. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  380. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  381. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  382. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  383. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  384. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  385. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  386. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  389. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +46 -0
  390. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  391. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  392. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +252 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
  396. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  397. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  399. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +570 -0
  400. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  403. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  404. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  406. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +300 -0
  410. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +145 -0
  411. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +144 -0
  412. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  413. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  414. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  415. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  416. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  417. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  418. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  422. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  423. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +287 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +100 -0
  425. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  426. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  428. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  429. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  430. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +72 -0
  432. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  436. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  437. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  438. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  439. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  440. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  441. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  442. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  443. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +205 -0
  444. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  445. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +201 -0
  446. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  447. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  448. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  449. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +67 -0
  450. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  451. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  452. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  453. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  454. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  456. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  457. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +964 -0
  458. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  459. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  460. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  461. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  463. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  464. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  465. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  466. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  467. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
  468. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  469. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
  470. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  471. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +571 -0
  472. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +125 -0
  473. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  474. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  475. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +178 -0
  476. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  477. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  478. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  479. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  480. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  481. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  482. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  483. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  484. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  485. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  486. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  487. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  488. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  489. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  490. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  491. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  492. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  493. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  494. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  495. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  496. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  497. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
  498. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  499. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  500. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  501. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  502. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  503. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  504. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  505. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  506. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  507. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  508. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  509. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +76 -0
  510. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  511. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  512. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  513. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  514. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  515. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  516. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  517. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  518. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  519. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  520. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  521. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  522. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  523. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  524. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  525. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  526. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  527. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  528. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  529. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  530. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  531. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  532. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  533. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  534. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  535. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  536. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  537. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  538. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  539. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  540. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  541. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  542. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  543. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  544. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  545. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  546. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  547. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  548. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  549. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  550. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  551. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  552. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  553. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  554. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  555. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  556. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  557. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  558. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  559. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  560. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  561. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +332 -0
  562. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  563. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  564. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  565. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  566. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  567. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  568. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  569. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  570. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  571. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  572. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  573. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  574. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  575. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  576. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  577. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  578. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  579. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  580. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  581. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  582. data/src/core/ext/xds/xds_api.cc +4124 -0
  583. data/src/core/ext/xds/xds_api.h +709 -0
  584. data/src/core/ext/xds/xds_bootstrap.cc +496 -0
  585. data/src/core/ext/xds/xds_bootstrap.h +115 -0
  586. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  587. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  588. data/src/core/ext/xds/xds_channel_args.h +32 -0
  589. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +1056 -884
  590. data/src/core/ext/xds/xds_client.h +375 -0
  591. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +63 -19
  592. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +52 -23
  593. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  594. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  595. data/src/core/ext/xds/xds_http_filters.cc +115 -0
  596. data/src/core/ext/xds/xds_http_filters.h +133 -0
  597. data/src/core/ext/xds/xds_server_config_fetcher.cc +546 -0
  598. data/src/core/{ext/filters/client_channel → lib/address_utils}/parse_address.cc +129 -45
  599. data/src/core/lib/address_utils/parse_address.h +77 -0
  600. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +138 -19
  601. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +38 -7
  602. data/src/core/lib/channel/call_tracer.h +85 -0
  603. data/src/core/lib/channel/channel_args.cc +9 -8
  604. data/src/core/lib/channel/channel_args.h +0 -1
  605. data/src/core/lib/channel/channel_stack.cc +22 -9
  606. data/src/core/lib/channel/channel_stack.h +18 -10
  607. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  608. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  609. data/src/core/lib/channel/channel_trace.cc +6 -8
  610. data/src/core/lib/channel/channel_trace.h +1 -1
  611. data/src/core/lib/channel/channelz.cc +148 -99
  612. data/src/core/lib/channel/channelz.h +47 -24
  613. data/src/core/lib/channel/channelz_registry.cc +29 -12
  614. data/src/core/lib/channel/channelz_registry.h +3 -1
  615. data/src/core/lib/channel/connected_channel.cc +4 -4
  616. data/src/core/lib/channel/context.h +3 -0
  617. data/src/core/lib/channel/handshaker.cc +11 -52
  618. data/src/core/lib/channel/handshaker.h +8 -25
  619. data/src/core/lib/channel/status_util.cc +12 -2
  620. data/src/core/lib/channel/status_util.h +9 -0
  621. data/src/core/lib/compression/compression.cc +8 -4
  622. data/src/core/lib/compression/compression_args.cc +3 -2
  623. data/src/core/lib/compression/compression_internal.cc +10 -5
  624. data/src/core/lib/compression/compression_internal.h +2 -1
  625. data/src/core/lib/compression/stream_compression.h +1 -1
  626. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  627. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  628. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  629. data/src/core/lib/debug/stats.h +3 -3
  630. data/src/core/lib/debug/stats_data.cc +1 -0
  631. data/src/core/lib/debug/stats_data.h +13 -13
  632. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  633. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  634. data/src/core/lib/event_engine/event_engine.cc +50 -0
  635. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  636. data/src/core/lib/event_engine/sockaddr.h +44 -0
  637. data/src/core/lib/gpr/alloc.cc +3 -2
  638. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  639. data/src/core/lib/gpr/log.cc +59 -17
  640. data/src/core/lib/gpr/log_linux.cc +23 -9
  641. data/src/core/lib/gpr/log_posix.cc +19 -7
  642. data/src/core/lib/gpr/log_windows.cc +18 -4
  643. data/src/core/lib/gpr/murmur_hash.cc +5 -3
  644. data/src/core/lib/gpr/spinlock.h +10 -2
  645. data/src/core/lib/gpr/string.cc +33 -31
  646. data/src/core/lib/gpr/string.h +9 -8
  647. data/src/core/lib/gpr/sync.cc +4 -4
  648. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  649. data/src/core/lib/gpr/sync_posix.cc +2 -8
  650. data/src/core/lib/gpr/sync_windows.cc +2 -2
  651. data/src/core/lib/gpr/time.cc +12 -12
  652. data/src/core/lib/gpr/time_precise.cc +5 -2
  653. data/src/core/lib/gpr/time_precise.h +6 -2
  654. data/src/core/lib/gpr/tls.h +4 -0
  655. data/src/core/lib/gpr/tls_msvc.h +2 -0
  656. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  657. data/src/core/lib/gpr/useful.h +5 -4
  658. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  659. data/src/core/lib/gprpp/arena.h +3 -2
  660. data/src/core/lib/gprpp/atomic.h +3 -3
  661. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  662. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  663. data/src/core/lib/gprpp/examine_stack.h +46 -0
  664. data/src/core/lib/gprpp/fork.cc +2 -2
  665. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  666. data/src/core/lib/gprpp/manual_constructor.h +2 -2
  667. data/src/core/lib/gprpp/mpscq.cc +2 -2
  668. data/src/core/lib/gprpp/orphanable.h +7 -11
  669. data/src/core/lib/gprpp/ref_counted.h +105 -68
  670. data/src/core/lib/gprpp/ref_counted_ptr.h +168 -7
  671. data/src/core/lib/gprpp/stat.h +38 -0
  672. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  673. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  674. data/src/core/lib/gprpp/status_helper.cc +407 -0
  675. data/src/core/lib/gprpp/status_helper.h +183 -0
  676. data/src/core/lib/gprpp/sync.h +104 -43
  677. data/src/core/lib/gprpp/thd.h +3 -3
  678. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  679. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  680. data/src/core/lib/gprpp/time_util.cc +77 -0
  681. data/src/core/lib/gprpp/time_util.h +42 -0
  682. data/src/core/lib/http/httpcli.cc +25 -22
  683. data/src/core/lib/http/httpcli.h +2 -3
  684. data/src/core/lib/http/httpcli_security_connector.cc +19 -15
  685. data/src/core/lib/http/parser.cc +63 -43
  686. data/src/core/lib/http/parser.h +4 -4
  687. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  688. data/src/core/lib/iomgr/buffer_list.h +5 -6
  689. data/src/core/lib/iomgr/call_combiner.cc +21 -15
  690. data/src/core/lib/iomgr/call_combiner.h +12 -14
  691. data/src/core/lib/iomgr/cfstream_handle.cc +6 -5
  692. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  693. data/src/core/lib/iomgr/closure.h +7 -6
  694. data/src/core/lib/iomgr/combiner.cc +16 -13
  695. data/src/core/lib/iomgr/combiner.h +2 -2
  696. data/src/core/lib/iomgr/endpoint.cc +6 -2
  697. data/src/core/lib/iomgr/endpoint.h +10 -6
  698. data/src/core/lib/iomgr/endpoint_cfstream.cc +46 -23
  699. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  700. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  701. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  702. data/src/core/lib/iomgr/error.cc +185 -73
  703. data/src/core/lib/iomgr/error.h +218 -107
  704. data/src/core/lib/iomgr/error_cfstream.cc +12 -10
  705. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  706. data/src/core/lib/iomgr/error_internal.h +6 -2
  707. data/src/core/lib/iomgr/ev_apple.cc +16 -13
  708. data/src/core/lib/iomgr/ev_apple.h +1 -1
  709. data/src/core/lib/iomgr/ev_epoll1_linux.cc +47 -41
  710. data/src/core/lib/iomgr/ev_epollex_linux.cc +92 -87
  711. data/src/core/lib/iomgr/ev_poll_posix.cc +41 -35
  712. data/src/core/lib/iomgr/ev_posix.cc +12 -11
  713. data/src/core/lib/iomgr/ev_posix.h +9 -9
  714. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  715. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  716. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  717. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  718. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  719. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  720. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  721. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  722. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  723. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  724. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  725. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  726. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  727. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  728. data/src/core/lib/iomgr/exec_ctx.cc +19 -7
  729. data/src/core/lib/iomgr/exec_ctx.h +20 -17
  730. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  731. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  732. data/src/core/lib/iomgr/executor/threadpool.h +6 -6
  733. data/src/core/lib/iomgr/executor.cc +10 -9
  734. data/src/core/lib/iomgr/executor.h +3 -3
  735. data/src/core/lib/iomgr/iomgr.cc +3 -3
  736. data/src/core/lib/iomgr/iomgr.h +1 -1
  737. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  738. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  739. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  740. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  741. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -13
  742. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  743. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  744. data/src/core/lib/iomgr/load_file.cc +4 -4
  745. data/src/core/lib/iomgr/load_file.h +2 -2
  746. data/src/core/lib/iomgr/lockfree_event.cc +20 -15
  747. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  748. data/src/core/lib/iomgr/pollset.cc +5 -5
  749. data/src/core/lib/iomgr/pollset.h +9 -9
  750. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  751. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  752. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  753. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  754. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  755. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  756. data/src/core/lib/iomgr/port.h +8 -26
  757. data/src/core/lib/iomgr/python_util.h +5 -5
  758. data/src/core/lib/iomgr/resolve_address.cc +12 -8
  759. data/src/core/lib/iomgr/resolve_address.h +12 -6
  760. data/src/core/lib/iomgr/resolve_address_custom.cc +23 -27
  761. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  762. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -8
  763. data/src/core/lib/iomgr/resolve_address_windows.cc +12 -12
  764. data/src/core/lib/iomgr/resource_quota.cc +48 -42
  765. data/src/core/lib/iomgr/sockaddr.h +1 -0
  766. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  767. data/src/core/lib/iomgr/socket_mutator.cc +18 -4
  768. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  769. data/src/core/lib/iomgr/socket_utils_common_posix.cc +120 -77
  770. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  771. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  772. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  773. data/src/core/lib/iomgr/tcp_client_cfstream.cc +13 -15
  774. data/src/core/lib/iomgr/tcp_client_custom.cc +17 -20
  775. data/src/core/lib/iomgr/tcp_client_posix.cc +48 -54
  776. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  777. data/src/core/lib/iomgr/tcp_client_windows.cc +16 -14
  778. data/src/core/lib/iomgr/tcp_custom.cc +67 -48
  779. data/src/core/lib/iomgr/tcp_custom.h +14 -13
  780. data/src/core/lib/iomgr/tcp_posix.cc +118 -94
  781. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  782. data/src/core/lib/iomgr/tcp_server.cc +9 -10
  783. data/src/core/lib/iomgr/tcp_server.h +19 -16
  784. data/src/core/lib/iomgr/tcp_server_custom.cc +57 -58
  785. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -61
  786. data/src/core/lib/iomgr/tcp_server_utils_posix.h +16 -16
  787. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +26 -25
  788. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -17
  789. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  790. data/src/core/lib/iomgr/tcp_server_windows.cc +42 -41
  791. data/src/core/lib/iomgr/tcp_uv.cc +27 -25
  792. data/src/core/lib/iomgr/tcp_windows.cc +39 -23
  793. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  794. data/src/core/lib/iomgr/timer.h +6 -1
  795. data/src/core/lib/iomgr/timer_custom.cc +7 -6
  796. data/src/core/lib/iomgr/timer_custom.h +1 -1
  797. data/src/core/lib/iomgr/timer_generic.cc +24 -23
  798. data/src/core/lib/iomgr/timer_manager.cc +4 -4
  799. data/src/core/lib/iomgr/udp_server.cc +46 -45
  800. data/src/core/lib/iomgr/udp_server.h +6 -4
  801. data/src/core/lib/iomgr/unix_sockets_posix.cc +36 -30
  802. data/src/core/lib/iomgr/unix_sockets_posix.h +9 -2
  803. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +20 -7
  804. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  805. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  806. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -6
  807. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  808. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  809. data/src/core/lib/iomgr/work_serializer.h +17 -1
  810. data/src/core/lib/json/json.h +13 -3
  811. data/src/core/lib/json/json_reader.cc +33 -31
  812. data/src/core/lib/json/json_util.cc +58 -0
  813. data/src/core/lib/json/json_util.h +204 -0
  814. data/src/core/lib/json/json_writer.cc +2 -1
  815. data/src/core/lib/matchers/matchers.cc +327 -0
  816. data/src/core/lib/matchers/matchers.h +161 -0
  817. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  818. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  819. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  820. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  821. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  822. data/src/core/lib/security/context/security_context.cc +4 -3
  823. data/src/core/lib/security/context/security_context.h +3 -1
  824. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  825. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  826. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  827. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  828. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  829. data/src/core/lib/security/credentials/credentials.cc +7 -7
  830. data/src/core/lib/security/credentials/credentials.h +12 -9
  831. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +417 -0
  832. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +82 -0
  833. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  834. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  835. data/src/core/lib/security/credentials/external/external_account_credentials.cc +500 -0
  836. data/src/core/lib/security/credentials/external/external_account_credentials.h +121 -0
  837. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  838. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  839. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  840. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +60 -0
  841. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  842. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  843. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  844. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +95 -65
  845. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  846. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  847. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  848. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -5
  849. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +10 -7
  850. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -5
  851. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +12 -9
  852. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  853. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  854. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +78 -92
  855. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -9
  856. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -12
  857. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  858. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +27 -6
  859. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  860. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +347 -0
  861. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  862. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +454 -0
  863. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +145 -0
  864. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +82 -150
  865. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +65 -185
  866. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  867. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  868. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  869. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  870. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  871. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  872. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -4
  873. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +33 -28
  874. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  875. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +97 -0
  876. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  877. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  878. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  879. data/src/core/lib/security/security_connector/local/local_security_connector.cc +25 -12
  880. data/src/core/lib/security/security_connector/security_connector.cc +6 -3
  881. data/src/core/lib/security/security_connector/security_connector.h +14 -7
  882. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -21
  883. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  884. data/src/core/lib/security/security_connector/ssl_utils.cc +82 -33
  885. data/src/core/lib/security/security_connector/ssl_utils.h +29 -25
  886. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +380 -312
  887. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +141 -79
  888. data/src/core/lib/security/transport/client_auth_filter.cc +28 -19
  889. data/src/core/lib/security/transport/secure_endpoint.cc +13 -7
  890. data/src/core/lib/security/transport/security_handshaker.cc +81 -44
  891. data/src/core/lib/security/transport/server_auth_filter.cc +19 -12
  892. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  893. data/src/core/lib/security/transport/tsi_error.h +2 -1
  894. data/src/core/lib/security/util/json_util.cc +14 -15
  895. data/src/core/lib/security/util/json_util.h +2 -1
  896. data/src/core/lib/slice/slice.cc +57 -7
  897. data/src/core/lib/slice/slice_buffer.cc +2 -1
  898. data/src/core/lib/slice/slice_intern.cc +11 -13
  899. data/src/core/lib/slice/slice_internal.h +4 -2
  900. data/src/core/lib/surface/call.cc +164 -136
  901. data/src/core/lib/surface/call.h +15 -3
  902. data/src/core/lib/surface/call_details.cc +8 -8
  903. data/src/core/lib/surface/channel.cc +55 -63
  904. data/src/core/lib/surface/channel.h +24 -7
  905. data/src/core/lib/surface/channel_init.cc +1 -1
  906. data/src/core/lib/surface/channel_ping.cc +1 -1
  907. data/src/core/lib/surface/completion_queue.cc +96 -96
  908. data/src/core/lib/surface/completion_queue.h +18 -17
  909. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  910. data/src/core/lib/surface/init.cc +46 -32
  911. data/src/core/lib/surface/init.h +10 -1
  912. data/src/core/lib/surface/lame_client.cc +51 -58
  913. data/src/core/lib/surface/lame_client.h +5 -0
  914. data/src/core/lib/surface/server.cc +1181 -1365
  915. data/src/core/lib/surface/server.h +463 -70
  916. data/src/core/lib/surface/validate_metadata.cc +7 -7
  917. data/src/core/lib/surface/validate_metadata.h +6 -2
  918. data/src/core/lib/surface/version.cc +2 -2
  919. data/src/core/lib/transport/authority_override.cc +40 -0
  920. data/src/core/lib/transport/authority_override.h +37 -0
  921. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  922. data/src/core/lib/transport/bdp_estimator.h +2 -1
  923. data/src/core/lib/transport/byte_stream.cc +5 -5
  924. data/src/core/lib/transport/byte_stream.h +11 -11
  925. data/src/core/lib/transport/connectivity_state.cc +19 -14
  926. data/src/core/lib/transport/connectivity_state.h +26 -12
  927. data/src/core/lib/transport/error_utils.cc +33 -9
  928. data/src/core/lib/transport/error_utils.h +15 -3
  929. data/src/core/lib/transport/metadata.cc +16 -2
  930. data/src/core/lib/transport/metadata.h +2 -2
  931. data/src/core/lib/transport/metadata_batch.cc +76 -38
  932. data/src/core/lib/transport/metadata_batch.h +43 -21
  933. data/src/core/lib/transport/static_metadata.cc +296 -277
  934. data/src/core/lib/transport/static_metadata.h +80 -73
  935. data/src/core/lib/transport/status_metadata.cc +4 -3
  936. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  937. data/src/core/lib/transport/transport.cc +9 -6
  938. data/src/core/lib/transport/transport.h +26 -11
  939. data/src/core/lib/transport/transport_op_string.cc +6 -6
  940. data/src/core/lib/uri/uri_parser.cc +135 -258
  941. data/src/core/lib/uri/uri_parser.h +58 -20
  942. data/src/core/plugin_registry/grpc_plugin_registry.cc +61 -20
  943. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  944. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  945. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  946. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +47 -42
  947. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +74 -53
  948. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  949. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  950. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  951. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  952. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  953. data/src/core/tsi/fake_transport_security.cc +17 -5
  954. data/src/core/tsi/local_transport_security.cc +5 -1
  955. data/src/core/tsi/local_transport_security.h +6 -7
  956. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  957. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  958. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  959. data/src/core/tsi/ssl_transport_security.cc +199 -73
  960. data/src/core/tsi/ssl_transport_security.h +23 -12
  961. data/src/core/tsi/transport_security.cc +10 -8
  962. data/src/core/tsi/transport_security_interface.h +6 -1
  963. data/src/ruby/bin/math_services_pb.rb +5 -5
  964. data/src/ruby/ext/grpc/extconf.rb +17 -4
  965. data/src/ruby/ext/grpc/rb_call.c +3 -2
  966. data/src/ruby/ext/grpc/rb_call.h +4 -0
  967. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  968. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  969. data/src/ruby/ext/grpc/rb_channel_credentials.c +20 -1
  970. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  971. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  972. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  973. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  974. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  975. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +46 -18
  976. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +87 -45
  977. data/src/ruby/ext/grpc/rb_server.c +13 -1
  978. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  979. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  980. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  981. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  982. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  983. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  984. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  985. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  986. data/src/ruby/lib/grpc/version.rb +1 -1
  987. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +3 -3
  988. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +40 -0
  989. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +50 -16
  990. data/src/ruby/spec/call_spec.rb +1 -1
  991. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  992. data/src/ruby/spec/channel_spec.rb +17 -6
  993. data/src/ruby/spec/client_auth_spec.rb +27 -1
  994. data/src/ruby/spec/errors_spec.rb +1 -1
  995. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  996. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  997. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  998. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  999. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  1000. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  1001. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  1002. data/src/ruby/spec/pb/codegen/package_option_spec.rb +27 -7
  1003. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1004. data/src/ruby/spec/server_spec.rb +22 -0
  1005. data/src/ruby/spec/user_agent_spec.rb +74 -0
  1006. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  1007. data/third_party/abseil-cpp/absl/base/attributes.h +122 -41
  1008. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1009. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  1010. data/third_party/abseil-cpp/absl/base/config.h +97 -26
  1011. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +442 -335
  1012. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1013. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1014. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1015. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  1016. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  1017. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  1018. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1019. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1020. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1021. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +35 -33
  1022. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +17 -5
  1023. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +36 -40
  1024. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +33 -30
  1025. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1026. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +11 -3
  1027. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1028. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  1029. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1030. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  1031. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1032. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  1033. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  1034. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1035. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1036. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1037. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  1038. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  1039. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1040. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1041. data/third_party/abseil-cpp/absl/base/optimization.h +69 -6
  1042. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1043. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1044. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1045. data/third_party/abseil-cpp/absl/base/thread_annotations.h +95 -40
  1046. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  1047. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1048. data/third_party/abseil-cpp/absl/container/inlined_vector.h +38 -39
  1049. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1050. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1051. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1052. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  1053. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1054. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1055. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +274 -0
  1056. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +322 -0
  1057. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1058. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1059. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  1060. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1061. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  1062. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +61 -0
  1063. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  1064. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1065. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1066. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1949 -0
  1067. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1068. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  1069. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  1070. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1071. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1072. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +80 -0
  1073. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1074. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1075. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1076. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1077. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1078. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +147 -0
  1079. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1080. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1081. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1082. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1083. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1084. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1085. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1086. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1087. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1088. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1089. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1090. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1091. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1092. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1093. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1094. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1095. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1096. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +70 -0
  1097. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1045 -0
  1098. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  1099. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  1100. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1101. data/third_party/abseil-cpp/absl/meta/type_traits.h +18 -10
  1102. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1103. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1104. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1105. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1106. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1107. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1108. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1109. data/third_party/abseil-cpp/absl/status/status.cc +452 -0
  1110. data/third_party/abseil-cpp/absl/status/status.h +878 -0
  1111. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1112. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1113. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1114. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1115. data/third_party/abseil-cpp/absl/strings/charconv.cc +7 -7
  1116. data/third_party/abseil-cpp/absl/strings/cord.cc +1953 -0
  1117. data/third_party/abseil-cpp/absl/strings/cord.h +1394 -0
  1118. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1119. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1120. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1121. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1122. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +8 -8
  1123. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  1124. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +543 -0
  1125. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1126. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  1127. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  1128. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  1129. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1130. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +150 -64
  1131. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +16 -2
  1132. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +29 -21
  1133. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +21 -14
  1134. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1135. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1136. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1137. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1138. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1139. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +22 -6
  1140. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +27 -11
  1141. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  1142. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1143. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1144. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1145. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  1146. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  1147. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1148. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1149. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1150. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1151. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1152. data/third_party/abseil-cpp/absl/strings/str_split.h +39 -4
  1153. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1154. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1155. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1156. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1157. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1158. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1159. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1160. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1161. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1162. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1163. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1164. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1165. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1166. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1167. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1168. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1169. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1170. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1171. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1172. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1173. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1174. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  1175. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1176. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1177. data/third_party/abseil-cpp/absl/time/duration.cc +93 -61
  1178. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  1179. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +33 -27
  1180. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  1181. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  1182. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  1183. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  1184. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  1185. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  1186. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  1187. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +15 -8
  1188. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +2 -2
  1189. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  1190. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1191. data/third_party/abseil-cpp/absl/time/time.h +41 -40
  1192. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1193. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1194. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1195. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1196. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1197. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1198. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1199. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1200. data/third_party/boringssl-with-bazel/err_data.c +763 -721
  1201. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +6 -6
  1202. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  1203. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1204. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1205. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +15 -20
  1206. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1207. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  1208. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +23 -11
  1209. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  1210. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -22
  1211. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +35 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1213. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1214. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1215. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1216. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  1217. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +40 -86
  1218. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +6 -17
  1219. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  1220. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1221. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  1222. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1226. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1227. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  1228. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1232. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +120 -273
  1233. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1235. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1236. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1237. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1238. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  1242. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1243. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → dsa/internal.h} +16 -11
  1244. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1245. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  1246. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  1247. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1248. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  1249. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  1255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +21 -3
  1256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  1258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +198 -37
  1259. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  1261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -5
  1267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  1268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  1269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  1270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  1271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  1273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  1275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  1276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +25 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +122 -43
  1284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -14
  1285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +56 -34
  1287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +116 -60
  1288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +231 -11
  1290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  1291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  1292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  1293. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +584 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/mem.c +43 -15
  1296. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  1297. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  1298. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1299. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +131 -53
  1300. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  1301. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1302. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1305. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1306. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1307. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1308. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +110 -70
  1309. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +348 -423
  1310. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +217 -79
  1311. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1312. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +7 -7
  1313. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  1314. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1315. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  1316. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  1317. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  1318. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1319. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  1320. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1322. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  1323. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +24 -39
  1324. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  1325. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  1326. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +52 -89
  1327. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +67 -12
  1328. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +9 -4
  1329. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1330. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  1331. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +71 -59
  1332. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  1333. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +98 -25
  1334. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  1335. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1336. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  1337. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -10
  1338. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1339. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +43 -17
  1340. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  1341. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1342. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +21 -172
  1343. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1344. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +25 -0
  1345. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1346. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +68 -9
  1347. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1348. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1349. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +12 -0
  1350. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  1351. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  1352. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  1353. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  1354. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  1355. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +4 -6
  1356. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1357. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1358. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1359. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1360. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1361. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1362. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +127 -41
  1363. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  1364. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +11 -14
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  1366. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +119 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +746 -561
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +58 -10
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +23 -7
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -4
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1377. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +25 -5
  1378. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1379. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +62 -20
  1380. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +16 -2
  1381. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1382. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  1383. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1384. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +104 -51
  1385. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1386. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  1387. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  1388. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1389. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1390. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  1391. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  1392. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1393. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  1394. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1395. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +467 -125
  1396. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +28 -12
  1397. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +43 -24
  1398. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1456 -780
  1399. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  1400. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +595 -441
  1401. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1402. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  1403. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1404. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +336 -25
  1406. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +97 -53
  1407. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +202 -109
  1408. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +174 -30
  1409. data/third_party/boringssl-with-bazel/src/ssl/internal.h +504 -162
  1410. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1411. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -3
  1412. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1413. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +55 -15
  1414. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +7 -12
  1415. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  1416. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  1417. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +162 -60
  1418. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1419. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +26 -73
  1420. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1421. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -5
  1422. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +12 -8
  1423. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +47 -28
  1424. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +1070 -566
  1425. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +66 -9
  1426. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +183 -76
  1427. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +169 -89
  1428. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +379 -140
  1429. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1430. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1431. data/third_party/re2/re2/bitmap256.h +117 -0
  1432. data/third_party/re2/re2/bitstate.cc +385 -0
  1433. data/third_party/re2/re2/compile.cc +1279 -0
  1434. data/third_party/re2/re2/dfa.cc +2130 -0
  1435. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1436. data/third_party/re2/re2/filtered_re2.h +109 -0
  1437. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1438. data/third_party/re2/re2/nfa.cc +713 -0
  1439. data/third_party/re2/re2/onepass.cc +623 -0
  1440. data/third_party/re2/re2/parse.cc +2464 -0
  1441. data/third_party/re2/re2/perl_groups.cc +119 -0
  1442. data/third_party/re2/re2/pod_array.h +55 -0
  1443. data/third_party/re2/re2/prefilter.cc +710 -0
  1444. data/third_party/re2/re2/prefilter.h +108 -0
  1445. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1446. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1447. data/third_party/re2/re2/prog.cc +988 -0
  1448. data/third_party/re2/re2/prog.h +436 -0
  1449. data/third_party/re2/re2/re2.cc +1362 -0
  1450. data/third_party/re2/re2/re2.h +1002 -0
  1451. data/third_party/re2/re2/regexp.cc +980 -0
  1452. data/third_party/re2/re2/regexp.h +659 -0
  1453. data/third_party/re2/re2/set.cc +154 -0
  1454. data/third_party/re2/re2/set.h +80 -0
  1455. data/third_party/re2/re2/simplify.cc +657 -0
  1456. data/third_party/re2/re2/sparse_array.h +392 -0
  1457. data/third_party/re2/re2/sparse_set.h +264 -0
  1458. data/third_party/re2/re2/stringpiece.cc +65 -0
  1459. data/third_party/re2/re2/stringpiece.h +210 -0
  1460. data/third_party/re2/re2/tostring.cc +351 -0
  1461. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1462. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1463. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1464. data/third_party/re2/re2/unicode_groups.h +67 -0
  1465. data/third_party/re2/re2/walker-inl.h +246 -0
  1466. data/third_party/re2/util/benchmark.h +156 -0
  1467. data/third_party/re2/util/flags.h +26 -0
  1468. data/third_party/re2/util/logging.h +109 -0
  1469. data/third_party/re2/util/malloc_counter.h +19 -0
  1470. data/third_party/re2/util/mix.h +41 -0
  1471. data/third_party/re2/util/mutex.h +148 -0
  1472. data/third_party/re2/util/pcre.cc +1025 -0
  1473. data/third_party/re2/util/pcre.h +681 -0
  1474. data/third_party/re2/util/rune.cc +260 -0
  1475. data/third_party/re2/util/strutil.cc +149 -0
  1476. data/third_party/re2/util/strutil.h +21 -0
  1477. data/third_party/re2/util/test.h +50 -0
  1478. data/third_party/re2/util/utf.h +44 -0
  1479. data/third_party/re2/util/util.h +42 -0
  1480. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1481. data/third_party/upb/upb/decode.c +604 -511
  1482. data/third_party/upb/upb/decode.h +20 -1
  1483. data/third_party/upb/upb/decode.int.h +163 -0
  1484. data/third_party/upb/upb/decode_fast.c +1040 -0
  1485. data/third_party/upb/upb/decode_fast.h +126 -0
  1486. data/third_party/upb/upb/def.c +2178 -0
  1487. data/third_party/upb/upb/def.h +315 -0
  1488. data/third_party/upb/upb/def.hpp +439 -0
  1489. data/third_party/upb/upb/encode.c +311 -211
  1490. data/third_party/upb/upb/encode.h +27 -2
  1491. data/third_party/upb/upb/msg.c +215 -70
  1492. data/third_party/upb/upb/msg.h +558 -14
  1493. data/third_party/upb/upb/port_def.inc +105 -63
  1494. data/third_party/upb/upb/port_undef.inc +10 -7
  1495. data/third_party/upb/upb/reflection.c +408 -0
  1496. data/third_party/upb/upb/reflection.h +168 -0
  1497. data/third_party/upb/upb/table.c +73 -269
  1498. data/third_party/upb/upb/table.int.h +25 -57
  1499. data/third_party/upb/upb/text_encode.c +421 -0
  1500. data/third_party/upb/upb/text_encode.h +38 -0
  1501. data/third_party/upb/upb/upb.c +138 -135
  1502. data/third_party/upb/upb/upb.h +119 -146
  1503. data/third_party/upb/upb/upb.hpp +88 -0
  1504. data/third_party/upb/upb/upb.int.h +29 -0
  1505. data/third_party/xxhash/xxhash.h +5325 -0
  1506. metadata +698 -181
  1507. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -938
  1508. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  1509. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -834
  1510. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1511. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1512. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1513. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -348
  1514. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -123
  1515. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  1516. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1517. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -342
  1518. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -88
  1519. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1520. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  1521. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -309
  1522. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  1523. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  1524. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  1525. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  1526. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  1527. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  1528. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  1529. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  1530. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1531. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  1532. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1533. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -35
  1534. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1535. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -55
  1536. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1537. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  1538. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  1539. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  1540. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1541. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +0 -35
  1542. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  1543. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  1544. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  1545. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  1546. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1547. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  1548. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  1549. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  1550. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1551. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  1552. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  1553. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -36
  1554. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1555. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  1556. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  1557. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  1558. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  1559. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1560. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1561. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  1562. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1563. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  1564. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  1565. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  1566. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1567. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  1568. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1569. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1570. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  1571. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1572. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  1573. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1574. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  1575. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1576. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  1577. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  1578. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1579. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  1580. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1581. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  1582. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  1583. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  1584. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1585. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  1586. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1587. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1588. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  1589. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1590. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  1591. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  1592. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -33
  1593. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1594. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  1595. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  1596. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1597. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  1598. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  1599. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  1600. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  1601. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  1602. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1603. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  1604. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1605. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -39
  1606. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1607. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -50
  1608. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1609. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1610. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  1611. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1612. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1613. data/src/core/lib/gpr/arena.h +0 -47
  1614. data/src/core/lib/gprpp/map.h +0 -53
  1615. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1616. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  1617. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1618. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1619. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1620. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1621. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1622. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1623. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  1624. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  1625. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1626. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1627. data/third_party/upb/upb/generated_util.h +0 -105
  1628. data/third_party/upb/upb/port.c +0 -26
@@ -0,0 +1,1953 @@
1
+ // Copyright 2020 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/strings/cord.h"
16
+
17
+ #include <algorithm>
18
+ #include <atomic>
19
+ #include <cstddef>
20
+ #include <cstdio>
21
+ #include <cstdlib>
22
+ #include <iomanip>
23
+ #include <iostream>
24
+ #include <limits>
25
+ #include <ostream>
26
+ #include <sstream>
27
+ #include <type_traits>
28
+ #include <unordered_set>
29
+ #include <vector>
30
+
31
+ #include "absl/base/casts.h"
32
+ #include "absl/base/internal/raw_logging.h"
33
+ #include "absl/base/macros.h"
34
+ #include "absl/base/port.h"
35
+ #include "absl/container/fixed_array.h"
36
+ #include "absl/container/inlined_vector.h"
37
+ #include "absl/strings/escaping.h"
38
+ #include "absl/strings/internal/cord_internal.h"
39
+ #include "absl/strings/internal/cord_rep_flat.h"
40
+ #include "absl/strings/internal/cord_rep_ring.h"
41
+ #include "absl/strings/internal/resize_uninitialized.h"
42
+ #include "absl/strings/str_cat.h"
43
+ #include "absl/strings/str_format.h"
44
+ #include "absl/strings/str_join.h"
45
+ #include "absl/strings/string_view.h"
46
+
47
+ namespace absl {
48
+ ABSL_NAMESPACE_BEGIN
49
+
50
+ using ::absl::cord_internal::CordRep;
51
+ using ::absl::cord_internal::CordRepConcat;
52
+ using ::absl::cord_internal::CordRepExternal;
53
+ using ::absl::cord_internal::CordRepFlat;
54
+ using ::absl::cord_internal::CordRepRing;
55
+ using ::absl::cord_internal::CordRepSubstring;
56
+ using ::absl::cord_internal::kMinFlatLength;
57
+ using ::absl::cord_internal::kMaxFlatLength;
58
+
59
+ using ::absl::cord_internal::CONCAT;
60
+ using ::absl::cord_internal::EXTERNAL;
61
+ using ::absl::cord_internal::FLAT;
62
+ using ::absl::cord_internal::RING;
63
+ using ::absl::cord_internal::SUBSTRING;
64
+
65
+ using ::absl::cord_internal::kInlinedVectorSize;
66
+ using ::absl::cord_internal::kMaxBytesToCopy;
67
+
68
+ constexpr uint64_t Fibonacci(unsigned char n, uint64_t a = 0, uint64_t b = 1) {
69
+ return n == 0 ? a : Fibonacci(n - 1, b, a + b);
70
+ }
71
+
72
+ static_assert(Fibonacci(63) == 6557470319842,
73
+ "Fibonacci values computed incorrectly");
74
+
75
+ // Minimum length required for a given depth tree -- a tree is considered
76
+ // balanced if
77
+ // length(t) >= min_length[depth(t)]
78
+ // The root node depth is allowed to become twice as large to reduce rebalancing
79
+ // for larger strings (see IsRootBalanced).
80
+ static constexpr uint64_t min_length[] = {
81
+ Fibonacci(2), Fibonacci(3), Fibonacci(4), Fibonacci(5),
82
+ Fibonacci(6), Fibonacci(7), Fibonacci(8), Fibonacci(9),
83
+ Fibonacci(10), Fibonacci(11), Fibonacci(12), Fibonacci(13),
84
+ Fibonacci(14), Fibonacci(15), Fibonacci(16), Fibonacci(17),
85
+ Fibonacci(18), Fibonacci(19), Fibonacci(20), Fibonacci(21),
86
+ Fibonacci(22), Fibonacci(23), Fibonacci(24), Fibonacci(25),
87
+ Fibonacci(26), Fibonacci(27), Fibonacci(28), Fibonacci(29),
88
+ Fibonacci(30), Fibonacci(31), Fibonacci(32), Fibonacci(33),
89
+ Fibonacci(34), Fibonacci(35), Fibonacci(36), Fibonacci(37),
90
+ Fibonacci(38), Fibonacci(39), Fibonacci(40), Fibonacci(41),
91
+ Fibonacci(42), Fibonacci(43), Fibonacci(44), Fibonacci(45),
92
+ Fibonacci(46), Fibonacci(47),
93
+ 0xffffffffffffffffull, // Avoid overflow
94
+ };
95
+
96
+ static const int kMinLengthSize = ABSL_ARRAYSIZE(min_length);
97
+
98
+ static inline bool cord_ring_enabled() {
99
+ return cord_internal::cord_ring_buffer_enabled.load(
100
+ std::memory_order_relaxed);
101
+ }
102
+
103
+ static inline bool IsRootBalanced(CordRep* node) {
104
+ if (node->tag != CONCAT) {
105
+ return true;
106
+ } else if (node->concat()->depth() <= 15) {
107
+ return true;
108
+ } else if (node->concat()->depth() > kMinLengthSize) {
109
+ return false;
110
+ } else {
111
+ // Allow depth to become twice as large as implied by fibonacci rule to
112
+ // reduce rebalancing for larger strings.
113
+ return (node->length >= min_length[node->concat()->depth() / 2]);
114
+ }
115
+ }
116
+
117
+ static CordRep* Rebalance(CordRep* node);
118
+ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
119
+ int indent = 0);
120
+ static bool VerifyNode(CordRep* root, CordRep* start_node,
121
+ bool full_validation);
122
+
123
+ static inline CordRep* VerifyTree(CordRep* node) {
124
+ // Verification is expensive, so only do it in debug mode.
125
+ // Even in debug mode we normally do only light validation.
126
+ // If you are debugging Cord itself, you should define the
127
+ // macro EXTRA_CORD_VALIDATION, e.g. by adding
128
+ // --copt=-DEXTRA_CORD_VALIDATION to the blaze line.
129
+ #ifdef EXTRA_CORD_VALIDATION
130
+ assert(node == nullptr || VerifyNode(node, node, /*full_validation=*/true));
131
+ #else // EXTRA_CORD_VALIDATION
132
+ assert(node == nullptr || VerifyNode(node, node, /*full_validation=*/false));
133
+ #endif // EXTRA_CORD_VALIDATION
134
+ static_cast<void>(&VerifyNode);
135
+
136
+ return node;
137
+ }
138
+
139
+ // Return the depth of a node
140
+ static int Depth(const CordRep* rep) {
141
+ if (rep->tag == CONCAT) {
142
+ return rep->concat()->depth();
143
+ } else {
144
+ return 0;
145
+ }
146
+ }
147
+
148
+ static void SetConcatChildren(CordRepConcat* concat, CordRep* left,
149
+ CordRep* right) {
150
+ concat->left = left;
151
+ concat->right = right;
152
+
153
+ concat->length = left->length + right->length;
154
+ concat->set_depth(1 + std::max(Depth(left), Depth(right)));
155
+ }
156
+
157
+ // Create a concatenation of the specified nodes.
158
+ // Does not change the refcounts of "left" and "right".
159
+ // The returned node has a refcount of 1.
160
+ static CordRep* RawConcat(CordRep* left, CordRep* right) {
161
+ // Avoid making degenerate concat nodes (one child is empty)
162
+ if (left == nullptr) return right;
163
+ if (right == nullptr) return left;
164
+ if (left->length == 0) {
165
+ CordRep::Unref(left);
166
+ return right;
167
+ }
168
+ if (right->length == 0) {
169
+ CordRep::Unref(right);
170
+ return left;
171
+ }
172
+
173
+ CordRepConcat* rep = new CordRepConcat();
174
+ rep->tag = CONCAT;
175
+ SetConcatChildren(rep, left, right);
176
+
177
+ return rep;
178
+ }
179
+
180
+ static CordRep* Concat(CordRep* left, CordRep* right) {
181
+ CordRep* rep = RawConcat(left, right);
182
+ if (rep != nullptr && !IsRootBalanced(rep)) {
183
+ rep = Rebalance(rep);
184
+ }
185
+ return VerifyTree(rep);
186
+ }
187
+
188
+ // Make a balanced tree out of an array of leaf nodes.
189
+ static CordRep* MakeBalancedTree(CordRep** reps, size_t n) {
190
+ // Make repeated passes over the array, merging adjacent pairs
191
+ // until we are left with just a single node.
192
+ while (n > 1) {
193
+ size_t dst = 0;
194
+ for (size_t src = 0; src < n; src += 2) {
195
+ if (src + 1 < n) {
196
+ reps[dst] = Concat(reps[src], reps[src + 1]);
197
+ } else {
198
+ reps[dst] = reps[src];
199
+ }
200
+ dst++;
201
+ }
202
+ n = dst;
203
+ }
204
+
205
+ return reps[0];
206
+ }
207
+
208
+ static CordRepFlat* CreateFlat(const char* data, size_t length,
209
+ size_t alloc_hint) {
210
+ CordRepFlat* flat = CordRepFlat::New(length + alloc_hint);
211
+ flat->length = length;
212
+ memcpy(flat->Data(), data, length);
213
+ return flat;
214
+ }
215
+
216
+ // Creates a new flat or ringbuffer out of the specified array.
217
+ // The returned node has a refcount of 1.
218
+ static CordRep* RingNewTree(const char* data, size_t length,
219
+ size_t alloc_hint) {
220
+ if (length <= kMaxFlatLength) {
221
+ return CreateFlat(data, length, alloc_hint);
222
+ }
223
+ CordRepFlat* flat = CreateFlat(data, kMaxFlatLength, 0);
224
+ data += kMaxFlatLength;
225
+ length -= kMaxFlatLength;
226
+ size_t extra = (length - 1) / kMaxFlatLength + 1;
227
+ auto* root = CordRepRing::Create(flat, extra);
228
+ return CordRepRing::Append(root, {data, length}, alloc_hint);
229
+ }
230
+
231
+ // Create a new tree out of the specified array.
232
+ // The returned node has a refcount of 1.
233
+ static CordRep* NewTree(const char* data,
234
+ size_t length,
235
+ size_t alloc_hint) {
236
+ if (length == 0) return nullptr;
237
+ if (cord_ring_enabled()) {
238
+ return RingNewTree(data, length, alloc_hint);
239
+ }
240
+ absl::FixedArray<CordRep*> reps((length - 1) / kMaxFlatLength + 1);
241
+ size_t n = 0;
242
+ do {
243
+ const size_t len = std::min(length, kMaxFlatLength);
244
+ CordRepFlat* rep = CordRepFlat::New(len + alloc_hint);
245
+ rep->length = len;
246
+ memcpy(rep->Data(), data, len);
247
+ reps[n++] = VerifyTree(rep);
248
+ data += len;
249
+ length -= len;
250
+ } while (length != 0);
251
+ return MakeBalancedTree(reps.data(), n);
252
+ }
253
+
254
+ namespace cord_internal {
255
+
256
+ void InitializeCordRepExternal(absl::string_view data, CordRepExternal* rep) {
257
+ assert(!data.empty());
258
+ rep->length = data.size();
259
+ rep->tag = EXTERNAL;
260
+ rep->base = data.data();
261
+ VerifyTree(rep);
262
+ }
263
+
264
+ } // namespace cord_internal
265
+
266
+ static CordRep* NewSubstring(CordRep* child, size_t offset, size_t length) {
267
+ // Never create empty substring nodes
268
+ if (length == 0) {
269
+ CordRep::Unref(child);
270
+ return nullptr;
271
+ } else {
272
+ CordRepSubstring* rep = new CordRepSubstring();
273
+ assert((offset + length) <= child->length);
274
+ rep->length = length;
275
+ rep->tag = SUBSTRING;
276
+ rep->start = offset;
277
+ rep->child = child;
278
+ return VerifyTree(rep);
279
+ }
280
+ }
281
+
282
+ // --------------------------------------------------------------------
283
+ // Cord::InlineRep functions
284
+
285
+ constexpr unsigned char Cord::InlineRep::kMaxInline;
286
+
287
+ inline void Cord::InlineRep::set_data(const char* data, size_t n,
288
+ bool nullify_tail) {
289
+ static_assert(kMaxInline == 15, "set_data is hard-coded for a length of 15");
290
+
291
+ cord_internal::SmallMemmove(data_.as_chars(), data, n, nullify_tail);
292
+ set_inline_size(n);
293
+ }
294
+
295
+ inline char* Cord::InlineRep::set_data(size_t n) {
296
+ assert(n <= kMaxInline);
297
+ ResetToEmpty();
298
+ set_inline_size(n);
299
+ return data_.as_chars();
300
+ }
301
+
302
+ inline CordRep* Cord::InlineRep::force_tree(size_t extra_hint) {
303
+ if (data_.is_tree()) {
304
+ return data_.as_tree();
305
+ }
306
+
307
+ size_t len = inline_size();
308
+ CordRepFlat* result = CordRepFlat::New(len + extra_hint);
309
+ result->length = len;
310
+ static_assert(kMinFlatLength >= sizeof(data_), "");
311
+ memcpy(result->Data(), data_.as_chars(), sizeof(data_));
312
+ set_tree(result);
313
+ return result;
314
+ }
315
+
316
+ inline void Cord::InlineRep::reduce_size(size_t n) {
317
+ size_t tag = inline_size();
318
+ assert(tag <= kMaxInline);
319
+ assert(tag >= n);
320
+ tag -= n;
321
+ memset(data_.as_chars() + tag, 0, n);
322
+ set_inline_size(static_cast<char>(tag));
323
+ }
324
+
325
+ inline void Cord::InlineRep::remove_prefix(size_t n) {
326
+ cord_internal::SmallMemmove(data_.as_chars(), data_.as_chars() + n,
327
+ inline_size() - n);
328
+ reduce_size(n);
329
+ }
330
+
331
+ // Returns `rep` converted into a CordRepRing.
332
+ // Directly returns `rep` if `rep` is already a CordRepRing.
333
+ static CordRepRing* ForceRing(CordRep* rep, size_t extra) {
334
+ return (rep->tag == RING) ? rep->ring() : CordRepRing::Create(rep, extra);
335
+ }
336
+
337
+ void Cord::InlineRep::AppendTree(CordRep* tree) {
338
+ if (tree == nullptr) return;
339
+ if (data_.is_empty()) {
340
+ set_tree(tree);
341
+ } else if (cord_ring_enabled()) {
342
+ set_tree(CordRepRing::Append(ForceRing(force_tree(0), 1), tree));
343
+ } else {
344
+ set_tree(Concat(force_tree(0), tree));
345
+ }
346
+ }
347
+
348
+ void Cord::InlineRep::PrependTree(CordRep* tree) {
349
+ assert(tree != nullptr);
350
+ if (data_.is_empty()) {
351
+ set_tree(tree);
352
+ } else if (cord_ring_enabled()) {
353
+ set_tree(CordRepRing::Prepend(ForceRing(force_tree(0), 1), tree));
354
+ } else {
355
+ set_tree(Concat(tree, force_tree(0)));
356
+ }
357
+ }
358
+
359
+ // Searches for a non-full flat node at the rightmost leaf of the tree. If a
360
+ // suitable leaf is found, the function will update the length field for all
361
+ // nodes to account for the size increase. The append region address will be
362
+ // written to region and the actual size increase will be written to size.
363
+ static inline bool PrepareAppendRegion(CordRep* root, char** region,
364
+ size_t* size, size_t max_length) {
365
+ if (root->tag == RING && root->refcount.IsOne()) {
366
+ Span<char> span = root->ring()->GetAppendBuffer(max_length);
367
+ if (!span.empty()) {
368
+ *region = span.data();
369
+ *size = span.size();
370
+ return true;
371
+ }
372
+ }
373
+
374
+ // Search down the right-hand path for a non-full FLAT node.
375
+ CordRep* dst = root;
376
+ while (dst->tag == CONCAT && dst->refcount.IsOne()) {
377
+ dst = dst->concat()->right;
378
+ }
379
+
380
+ if (dst->tag < FLAT || !dst->refcount.IsOne()) {
381
+ *region = nullptr;
382
+ *size = 0;
383
+ return false;
384
+ }
385
+
386
+ const size_t in_use = dst->length;
387
+ const size_t capacity = dst->flat()->Capacity();
388
+ if (in_use == capacity) {
389
+ *region = nullptr;
390
+ *size = 0;
391
+ return false;
392
+ }
393
+
394
+ size_t size_increase = std::min(capacity - in_use, max_length);
395
+
396
+ // We need to update the length fields for all nodes, including the leaf node.
397
+ for (CordRep* rep = root; rep != dst; rep = rep->concat()->right) {
398
+ rep->length += size_increase;
399
+ }
400
+ dst->length += size_increase;
401
+
402
+ *region = dst->flat()->Data() + in_use;
403
+ *size = size_increase;
404
+ return true;
405
+ }
406
+
407
+ void Cord::InlineRep::GetAppendRegion(char** region, size_t* size,
408
+ size_t max_length) {
409
+ if (max_length == 0) {
410
+ *region = nullptr;
411
+ *size = 0;
412
+ return;
413
+ }
414
+
415
+ // Try to fit in the inline buffer if possible.
416
+ if (!is_tree()) {
417
+ size_t inline_length = inline_size();
418
+ if (max_length <= kMaxInline - inline_length) {
419
+ *region = data_.as_chars() + inline_length;
420
+ *size = max_length;
421
+ set_inline_size(inline_length + max_length);
422
+ return;
423
+ }
424
+ }
425
+
426
+ CordRep* root = force_tree(max_length);
427
+
428
+ if (PrepareAppendRegion(root, region, size, max_length)) {
429
+ return;
430
+ }
431
+
432
+ // Allocate new node.
433
+ CordRepFlat* new_node =
434
+ CordRepFlat::New(std::max(static_cast<size_t>(root->length), max_length));
435
+ new_node->length = std::min(new_node->Capacity(), max_length);
436
+ *region = new_node->Data();
437
+ *size = new_node->length;
438
+
439
+ if (cord_ring_enabled()) {
440
+ replace_tree(CordRepRing::Append(ForceRing(root, 1), new_node));
441
+ return;
442
+ }
443
+ replace_tree(Concat(root, new_node));
444
+ }
445
+
446
+ void Cord::InlineRep::GetAppendRegion(char** region, size_t* size) {
447
+ const size_t max_length = std::numeric_limits<size_t>::max();
448
+
449
+ // Try to fit in the inline buffer if possible.
450
+ if (!data_.is_tree()) {
451
+ size_t inline_length = inline_size();
452
+ if (inline_length < kMaxInline) {
453
+ *region = data_.as_chars() + inline_length;
454
+ *size = kMaxInline - inline_length;
455
+ set_inline_size(kMaxInline);
456
+ return;
457
+ }
458
+ }
459
+
460
+ CordRep* root = force_tree(max_length);
461
+
462
+ if (PrepareAppendRegion(root, region, size, max_length)) {
463
+ return;
464
+ }
465
+
466
+ // Allocate new node.
467
+ CordRepFlat* new_node = CordRepFlat::New(root->length);
468
+ new_node->length = new_node->Capacity();
469
+ *region = new_node->Data();
470
+ *size = new_node->length;
471
+
472
+ if (cord_ring_enabled()) {
473
+ replace_tree(CordRepRing::Append(ForceRing(root, 1), new_node));
474
+ return;
475
+ }
476
+ replace_tree(Concat(root, new_node));
477
+ }
478
+
479
+ // If the rep is a leaf, this will increment the value at total_mem_usage and
480
+ // will return true.
481
+ static bool RepMemoryUsageLeaf(const CordRep* rep, size_t* total_mem_usage) {
482
+ if (rep->tag >= FLAT) {
483
+ *total_mem_usage += rep->flat()->AllocatedSize();
484
+ return true;
485
+ }
486
+ if (rep->tag == EXTERNAL) {
487
+ *total_mem_usage += sizeof(CordRepConcat) + rep->length;
488
+ return true;
489
+ }
490
+ return false;
491
+ }
492
+
493
+ void Cord::InlineRep::AssignSlow(const Cord::InlineRep& src) {
494
+ ClearSlow();
495
+
496
+ data_ = src.data_;
497
+ if (is_tree()) {
498
+ data_.set_profiled(false);
499
+ CordRep::Ref(tree());
500
+ clear_cordz_info();
501
+ }
502
+ }
503
+
504
+ void Cord::InlineRep::ClearSlow() {
505
+ if (is_tree()) {
506
+ CordRep::Unref(tree());
507
+ }
508
+ ResetToEmpty();
509
+ }
510
+
511
+ // --------------------------------------------------------------------
512
+ // Constructors and destructors
513
+
514
+ Cord::Cord(absl::string_view src) {
515
+ const size_t n = src.size();
516
+ if (n <= InlineRep::kMaxInline) {
517
+ contents_.set_data(src.data(), n, false);
518
+ } else {
519
+ contents_.set_tree(NewTree(src.data(), n, 0));
520
+ }
521
+ }
522
+
523
+ template <typename T, Cord::EnableIfString<T>>
524
+ Cord::Cord(T&& src) {
525
+ if (
526
+ // String is short: copy data to avoid external block overhead.
527
+ src.size() <= kMaxBytesToCopy ||
528
+ // String is wasteful: copy data to avoid pinning too much unused memory.
529
+ src.size() < src.capacity() / 2
530
+ ) {
531
+ if (src.size() <= InlineRep::kMaxInline) {
532
+ contents_.set_data(src.data(), src.size(), false);
533
+ } else {
534
+ contents_.set_tree(NewTree(src.data(), src.size(), 0));
535
+ }
536
+ } else {
537
+ struct StringReleaser {
538
+ void operator()(absl::string_view /* data */) {}
539
+ std::string data;
540
+ };
541
+ const absl::string_view original_data = src;
542
+ auto* rep = static_cast<
543
+ ::absl::cord_internal::CordRepExternalImpl<StringReleaser>*>(
544
+ absl::cord_internal::NewExternalRep(
545
+ original_data, StringReleaser{std::forward<T>(src)}));
546
+ // Moving src may have invalidated its data pointer, so adjust it.
547
+ rep->base = rep->template get<0>().data.data();
548
+ contents_.set_tree(rep);
549
+ }
550
+ }
551
+
552
+ template Cord::Cord(std::string&& src);
553
+
554
+ // The destruction code is separate so that the compiler can determine
555
+ // that it does not need to call the destructor on a moved-from Cord.
556
+ void Cord::DestroyCordSlow() {
557
+ if (CordRep* tree = contents_.tree()) {
558
+ CordRep::Unref(VerifyTree(tree));
559
+ }
560
+ }
561
+
562
+ // --------------------------------------------------------------------
563
+ // Mutators
564
+
565
+ void Cord::Clear() {
566
+ if (CordRep* tree = contents_.clear()) {
567
+ CordRep::Unref(tree);
568
+ }
569
+ }
570
+
571
+ Cord& Cord::operator=(absl::string_view src) {
572
+
573
+ const char* data = src.data();
574
+ size_t length = src.size();
575
+ CordRep* tree = contents_.tree();
576
+ if (length <= InlineRep::kMaxInline) {
577
+ // Embed into this->contents_
578
+ contents_.set_data(data, length, true);
579
+ if (tree) CordRep::Unref(tree);
580
+ return *this;
581
+ }
582
+ if (tree != nullptr && tree->tag >= FLAT &&
583
+ tree->flat()->Capacity() >= length &&
584
+ tree->refcount.IsOne()) {
585
+ // Copy in place if the existing FLAT node is reusable.
586
+ memmove(tree->flat()->Data(), data, length);
587
+ tree->length = length;
588
+ VerifyTree(tree);
589
+ return *this;
590
+ }
591
+ contents_.set_tree(NewTree(data, length, 0));
592
+ if (tree) CordRep::Unref(tree);
593
+ return *this;
594
+ }
595
+
596
+ template <typename T, Cord::EnableIfString<T>>
597
+ Cord& Cord::operator=(T&& src) {
598
+ if (src.size() <= kMaxBytesToCopy) {
599
+ *this = absl::string_view(src);
600
+ } else {
601
+ *this = Cord(std::forward<T>(src));
602
+ }
603
+ return *this;
604
+ }
605
+
606
+ template Cord& Cord::operator=(std::string&& src);
607
+
608
+ // TODO(sanjay): Move to Cord::InlineRep section of file. For now,
609
+ // we keep it here to make diffs easier.
610
+ void Cord::InlineRep::AppendArray(const char* src_data, size_t src_size) {
611
+ if (src_size == 0) return; // memcpy(_, nullptr, 0) is undefined.
612
+
613
+ size_t appended = 0;
614
+ CordRep* root = nullptr;
615
+ if (is_tree()) {
616
+ root = data_.as_tree();
617
+ char* region;
618
+ if (PrepareAppendRegion(root, &region, &appended, src_size)) {
619
+ memcpy(region, src_data, appended);
620
+ }
621
+ } else {
622
+ // Try to fit in the inline buffer if possible.
623
+ size_t inline_length = inline_size();
624
+ if (src_size <= kMaxInline - inline_length) {
625
+ // Append new data to embedded array
626
+ memcpy(data_.as_chars() + inline_length, src_data, src_size);
627
+ set_inline_size(inline_length + src_size);
628
+ return;
629
+ }
630
+
631
+ // It is possible that src_data == data_, but when we transition from an
632
+ // InlineRep to a tree we need to assign data_ = root via set_tree. To
633
+ // avoid corrupting the source data before we copy it, delay calling
634
+ // set_tree until after we've copied data.
635
+ // We are going from an inline size to beyond inline size. Make the new size
636
+ // either double the inlined size, or the added size + 10%.
637
+ const size_t size1 = inline_length * 2 + src_size;
638
+ const size_t size2 = inline_length + src_size / 10;
639
+ root = CordRepFlat::New(std::max<size_t>(size1, size2));
640
+ appended = std::min(
641
+ src_size, root->flat()->Capacity() - inline_length);
642
+ memcpy(root->flat()->Data(), data_.as_chars(), inline_length);
643
+ memcpy(root->flat()->Data() + inline_length, src_data, appended);
644
+ root->length = inline_length + appended;
645
+ set_tree(root);
646
+ }
647
+
648
+ src_data += appended;
649
+ src_size -= appended;
650
+ if (src_size == 0) {
651
+ return;
652
+ }
653
+
654
+ if (cord_ring_enabled()) {
655
+ absl::string_view data(src_data, src_size);
656
+ root = ForceRing(root, (data.size() - 1) / kMaxFlatLength + 1);
657
+ replace_tree(CordRepRing::Append(root->ring(), data));
658
+ return;
659
+ }
660
+
661
+ // Use new block(s) for any remaining bytes that were not handled above.
662
+ // Alloc extra memory only if the right child of the root of the new tree is
663
+ // going to be a FLAT node, which will permit further inplace appends.
664
+ size_t length = src_size;
665
+ if (src_size < kMaxFlatLength) {
666
+ // The new length is either
667
+ // - old size + 10%
668
+ // - old_size + src_size
669
+ // This will cause a reasonable conservative step-up in size that is still
670
+ // large enough to avoid excessive amounts of small fragments being added.
671
+ length = std::max<size_t>(root->length / 10, src_size);
672
+ }
673
+ set_tree(Concat(root, NewTree(src_data, src_size, length - src_size)));
674
+ }
675
+
676
+ inline CordRep* Cord::TakeRep() const& {
677
+ return CordRep::Ref(contents_.tree());
678
+ }
679
+
680
+ inline CordRep* Cord::TakeRep() && {
681
+ CordRep* rep = contents_.tree();
682
+ contents_.clear();
683
+ return rep;
684
+ }
685
+
686
+ template <typename C>
687
+ inline void Cord::AppendImpl(C&& src) {
688
+ if (empty()) {
689
+ // In case of an empty destination avoid allocating a new node, do not copy
690
+ // data.
691
+ *this = std::forward<C>(src);
692
+ return;
693
+ }
694
+
695
+ // For short cords, it is faster to copy data if there is room in dst.
696
+ const size_t src_size = src.contents_.size();
697
+ if (src_size <= kMaxBytesToCopy) {
698
+ CordRep* src_tree = src.contents_.tree();
699
+ if (src_tree == nullptr) {
700
+ // src has embedded data.
701
+ contents_.AppendArray(src.contents_.data(), src_size);
702
+ return;
703
+ }
704
+ if (src_tree->tag >= FLAT) {
705
+ // src tree just has one flat node.
706
+ contents_.AppendArray(src_tree->flat()->Data(), src_size);
707
+ return;
708
+ }
709
+ if (&src == this) {
710
+ // ChunkIterator below assumes that src is not modified during traversal.
711
+ Append(Cord(src));
712
+ return;
713
+ }
714
+ // TODO(mec): Should we only do this if "dst" has space?
715
+ for (absl::string_view chunk : src.Chunks()) {
716
+ Append(chunk);
717
+ }
718
+ return;
719
+ }
720
+
721
+ // Guaranteed to be a tree (kMaxBytesToCopy > kInlinedSize)
722
+ contents_.AppendTree(std::forward<C>(src).TakeRep());
723
+ }
724
+
725
+ void Cord::Append(const Cord& src) { AppendImpl(src); }
726
+
727
+ void Cord::Append(Cord&& src) { AppendImpl(std::move(src)); }
728
+
729
+ template <typename T, Cord::EnableIfString<T>>
730
+ void Cord::Append(T&& src) {
731
+ if (src.size() <= kMaxBytesToCopy) {
732
+ Append(absl::string_view(src));
733
+ } else {
734
+ Append(Cord(std::forward<T>(src)));
735
+ }
736
+ }
737
+
738
+ template void Cord::Append(std::string&& src);
739
+
740
+ void Cord::Prepend(const Cord& src) {
741
+ CordRep* src_tree = src.contents_.tree();
742
+ if (src_tree != nullptr) {
743
+ CordRep::Ref(src_tree);
744
+ contents_.PrependTree(src_tree);
745
+ return;
746
+ }
747
+
748
+ // `src` cord is inlined.
749
+ absl::string_view src_contents(src.contents_.data(), src.contents_.size());
750
+ return Prepend(src_contents);
751
+ }
752
+
753
+ void Cord::Prepend(absl::string_view src) {
754
+ if (src.empty()) return; // memcpy(_, nullptr, 0) is undefined.
755
+ if (!contents_.is_tree()) {
756
+ size_t cur_size = contents_.inline_size();
757
+ if (cur_size + src.size() <= InlineRep::kMaxInline) {
758
+ // Use embedded storage.
759
+ char data[InlineRep::kMaxInline + 1] = {0};
760
+ memcpy(data, src.data(), src.size());
761
+ memcpy(data + src.size(), contents_.data(), cur_size);
762
+ memcpy(contents_.data_.as_chars(), data, InlineRep::kMaxInline + 1);
763
+ contents_.set_inline_size(cur_size + src.size());
764
+ return;
765
+ }
766
+ }
767
+ contents_.PrependTree(NewTree(src.data(), src.size(), 0));
768
+ }
769
+
770
+ template <typename T, Cord::EnableIfString<T>>
771
+ inline void Cord::Prepend(T&& src) {
772
+ if (src.size() <= kMaxBytesToCopy) {
773
+ Prepend(absl::string_view(src));
774
+ } else {
775
+ Prepend(Cord(std::forward<T>(src)));
776
+ }
777
+ }
778
+
779
+ template void Cord::Prepend(std::string&& src);
780
+
781
+ static CordRep* RemovePrefixFrom(CordRep* node, size_t n) {
782
+ if (n >= node->length) return nullptr;
783
+ if (n == 0) return CordRep::Ref(node);
784
+ absl::InlinedVector<CordRep*, kInlinedVectorSize> rhs_stack;
785
+
786
+ while (node->tag == CONCAT) {
787
+ assert(n <= node->length);
788
+ if (n < node->concat()->left->length) {
789
+ // Push right to stack, descend left.
790
+ rhs_stack.push_back(node->concat()->right);
791
+ node = node->concat()->left;
792
+ } else {
793
+ // Drop left, descend right.
794
+ n -= node->concat()->left->length;
795
+ node = node->concat()->right;
796
+ }
797
+ }
798
+ assert(n <= node->length);
799
+
800
+ if (n == 0) {
801
+ CordRep::Ref(node);
802
+ } else {
803
+ size_t start = n;
804
+ size_t len = node->length - n;
805
+ if (node->tag == SUBSTRING) {
806
+ // Consider in-place update of node, similar to in RemoveSuffixFrom().
807
+ start += node->substring()->start;
808
+ node = node->substring()->child;
809
+ }
810
+ node = NewSubstring(CordRep::Ref(node), start, len);
811
+ }
812
+ while (!rhs_stack.empty()) {
813
+ node = Concat(node, CordRep::Ref(rhs_stack.back()));
814
+ rhs_stack.pop_back();
815
+ }
816
+ return node;
817
+ }
818
+
819
+ // RemoveSuffixFrom() is very similar to RemovePrefixFrom(), with the
820
+ // exception that removing a suffix has an optimization where a node may be
821
+ // edited in place iff that node and all its ancestors have a refcount of 1.
822
+ static CordRep* RemoveSuffixFrom(CordRep* node, size_t n) {
823
+ if (n >= node->length) return nullptr;
824
+ if (n == 0) return CordRep::Ref(node);
825
+ absl::InlinedVector<CordRep*, kInlinedVectorSize> lhs_stack;
826
+ bool inplace_ok = node->refcount.IsOne();
827
+
828
+ while (node->tag == CONCAT) {
829
+ assert(n <= node->length);
830
+ if (n < node->concat()->right->length) {
831
+ // Push left to stack, descend right.
832
+ lhs_stack.push_back(node->concat()->left);
833
+ node = node->concat()->right;
834
+ } else {
835
+ // Drop right, descend left.
836
+ n -= node->concat()->right->length;
837
+ node = node->concat()->left;
838
+ }
839
+ inplace_ok = inplace_ok && node->refcount.IsOne();
840
+ }
841
+ assert(n <= node->length);
842
+
843
+ if (n == 0) {
844
+ CordRep::Ref(node);
845
+ } else if (inplace_ok && node->tag != EXTERNAL) {
846
+ // Consider making a new buffer if the current node capacity is much
847
+ // larger than the new length.
848
+ CordRep::Ref(node);
849
+ node->length -= n;
850
+ } else {
851
+ size_t start = 0;
852
+ size_t len = node->length - n;
853
+ if (node->tag == SUBSTRING) {
854
+ start = node->substring()->start;
855
+ node = node->substring()->child;
856
+ }
857
+ node = NewSubstring(CordRep::Ref(node), start, len);
858
+ }
859
+ while (!lhs_stack.empty()) {
860
+ node = Concat(CordRep::Ref(lhs_stack.back()), node);
861
+ lhs_stack.pop_back();
862
+ }
863
+ return node;
864
+ }
865
+
866
+ void Cord::RemovePrefix(size_t n) {
867
+ ABSL_INTERNAL_CHECK(n <= size(),
868
+ absl::StrCat("Requested prefix size ", n,
869
+ " exceeds Cord's size ", size()));
870
+ CordRep* tree = contents_.tree();
871
+ if (tree == nullptr) {
872
+ contents_.remove_prefix(n);
873
+ } else if (tree->tag == RING) {
874
+ contents_.replace_tree(CordRepRing::RemovePrefix(tree->ring(), n));
875
+ } else {
876
+ CordRep* newrep = RemovePrefixFrom(tree, n);
877
+ CordRep::Unref(tree);
878
+ contents_.replace_tree(VerifyTree(newrep));
879
+ }
880
+ }
881
+
882
+ void Cord::RemoveSuffix(size_t n) {
883
+ ABSL_INTERNAL_CHECK(n <= size(),
884
+ absl::StrCat("Requested suffix size ", n,
885
+ " exceeds Cord's size ", size()));
886
+ CordRep* tree = contents_.tree();
887
+ if (tree == nullptr) {
888
+ contents_.reduce_size(n);
889
+ } else if (tree->tag == RING) {
890
+ contents_.replace_tree(CordRepRing::RemoveSuffix(tree->ring(), n));
891
+ } else {
892
+ CordRep* newrep = RemoveSuffixFrom(tree, n);
893
+ CordRep::Unref(tree);
894
+ contents_.replace_tree(VerifyTree(newrep));
895
+ }
896
+ }
897
+
898
+ // Work item for NewSubRange().
899
+ struct SubRange {
900
+ SubRange(CordRep* a_node, size_t a_pos, size_t a_n)
901
+ : node(a_node), pos(a_pos), n(a_n) {}
902
+ CordRep* node; // nullptr means concat last 2 results.
903
+ size_t pos;
904
+ size_t n;
905
+ };
906
+
907
+ static CordRep* NewSubRange(CordRep* node, size_t pos, size_t n) {
908
+ absl::InlinedVector<CordRep*, kInlinedVectorSize> results;
909
+ absl::InlinedVector<SubRange, kInlinedVectorSize> todo;
910
+ todo.push_back(SubRange(node, pos, n));
911
+ do {
912
+ const SubRange& sr = todo.back();
913
+ node = sr.node;
914
+ pos = sr.pos;
915
+ n = sr.n;
916
+ todo.pop_back();
917
+
918
+ if (node == nullptr) {
919
+ assert(results.size() >= 2);
920
+ CordRep* right = results.back();
921
+ results.pop_back();
922
+ CordRep* left = results.back();
923
+ results.pop_back();
924
+ results.push_back(Concat(left, right));
925
+ } else if (pos == 0 && n == node->length) {
926
+ results.push_back(CordRep::Ref(node));
927
+ } else if (node->tag != CONCAT) {
928
+ if (node->tag == SUBSTRING) {
929
+ pos += node->substring()->start;
930
+ node = node->substring()->child;
931
+ }
932
+ results.push_back(NewSubstring(CordRep::Ref(node), pos, n));
933
+ } else if (pos + n <= node->concat()->left->length) {
934
+ todo.push_back(SubRange(node->concat()->left, pos, n));
935
+ } else if (pos >= node->concat()->left->length) {
936
+ pos -= node->concat()->left->length;
937
+ todo.push_back(SubRange(node->concat()->right, pos, n));
938
+ } else {
939
+ size_t left_n = node->concat()->left->length - pos;
940
+ todo.push_back(SubRange(nullptr, 0, 0)); // Concat()
941
+ todo.push_back(SubRange(node->concat()->right, 0, n - left_n));
942
+ todo.push_back(SubRange(node->concat()->left, pos, left_n));
943
+ }
944
+ } while (!todo.empty());
945
+ assert(results.size() == 1);
946
+ return results[0];
947
+ }
948
+
949
+ Cord Cord::Subcord(size_t pos, size_t new_size) const {
950
+ Cord sub_cord;
951
+ size_t length = size();
952
+ if (pos > length) pos = length;
953
+ if (new_size > length - pos) new_size = length - pos;
954
+ CordRep* tree = contents_.tree();
955
+ if (tree == nullptr) {
956
+ // sub_cord is newly constructed, no need to re-zero-out the tail of
957
+ // contents_ memory.
958
+ sub_cord.contents_.set_data(contents_.data() + pos, new_size, false);
959
+ } else if (new_size == 0) {
960
+ // We want to return empty subcord, so nothing to do.
961
+ } else if (new_size <= InlineRep::kMaxInline) {
962
+ Cord::ChunkIterator it = chunk_begin();
963
+ it.AdvanceBytes(pos);
964
+ char* dest = sub_cord.contents_.data_.as_chars();
965
+ size_t remaining_size = new_size;
966
+ while (remaining_size > it->size()) {
967
+ cord_internal::SmallMemmove(dest, it->data(), it->size());
968
+ remaining_size -= it->size();
969
+ dest += it->size();
970
+ ++it;
971
+ }
972
+ cord_internal::SmallMemmove(dest, it->data(), remaining_size);
973
+ sub_cord.contents_.set_inline_size(new_size);
974
+ } else if (tree->tag == RING) {
975
+ tree = CordRepRing::SubRing(CordRep::Ref(tree)->ring(), pos, new_size);
976
+ sub_cord.contents_.set_tree(tree);
977
+ } else {
978
+ sub_cord.contents_.set_tree(NewSubRange(tree, pos, new_size));
979
+ }
980
+ return sub_cord;
981
+ }
982
+
983
+ // --------------------------------------------------------------------
984
+ // Balancing
985
+
986
+ class CordForest {
987
+ public:
988
+ explicit CordForest(size_t length)
989
+ : root_length_(length), trees_(kMinLengthSize, nullptr) {}
990
+
991
+ void Build(CordRep* cord_root) {
992
+ std::vector<CordRep*> pending = {cord_root};
993
+
994
+ while (!pending.empty()) {
995
+ CordRep* node = pending.back();
996
+ pending.pop_back();
997
+ CheckNode(node);
998
+ if (ABSL_PREDICT_FALSE(node->tag != CONCAT)) {
999
+ AddNode(node);
1000
+ continue;
1001
+ }
1002
+
1003
+ CordRepConcat* concat_node = node->concat();
1004
+ if (concat_node->depth() >= kMinLengthSize ||
1005
+ concat_node->length < min_length[concat_node->depth()]) {
1006
+ pending.push_back(concat_node->right);
1007
+ pending.push_back(concat_node->left);
1008
+
1009
+ if (concat_node->refcount.IsOne()) {
1010
+ concat_node->left = concat_freelist_;
1011
+ concat_freelist_ = concat_node;
1012
+ } else {
1013
+ CordRep::Ref(concat_node->right);
1014
+ CordRep::Ref(concat_node->left);
1015
+ CordRep::Unref(concat_node);
1016
+ }
1017
+ } else {
1018
+ AddNode(node);
1019
+ }
1020
+ }
1021
+ }
1022
+
1023
+ CordRep* ConcatNodes() {
1024
+ CordRep* sum = nullptr;
1025
+ for (auto* node : trees_) {
1026
+ if (node == nullptr) continue;
1027
+
1028
+ sum = PrependNode(node, sum);
1029
+ root_length_ -= node->length;
1030
+ if (root_length_ == 0) break;
1031
+ }
1032
+ ABSL_INTERNAL_CHECK(sum != nullptr, "Failed to locate sum node");
1033
+ return VerifyTree(sum);
1034
+ }
1035
+
1036
+ private:
1037
+ CordRep* AppendNode(CordRep* node, CordRep* sum) {
1038
+ return (sum == nullptr) ? node : MakeConcat(sum, node);
1039
+ }
1040
+
1041
+ CordRep* PrependNode(CordRep* node, CordRep* sum) {
1042
+ return (sum == nullptr) ? node : MakeConcat(node, sum);
1043
+ }
1044
+
1045
+ void AddNode(CordRep* node) {
1046
+ CordRep* sum = nullptr;
1047
+
1048
+ // Collect together everything with which we will merge with node
1049
+ int i = 0;
1050
+ for (; node->length > min_length[i + 1]; ++i) {
1051
+ auto& tree_at_i = trees_[i];
1052
+
1053
+ if (tree_at_i == nullptr) continue;
1054
+ sum = PrependNode(tree_at_i, sum);
1055
+ tree_at_i = nullptr;
1056
+ }
1057
+
1058
+ sum = AppendNode(node, sum);
1059
+
1060
+ // Insert sum into appropriate place in the forest
1061
+ for (; sum->length >= min_length[i]; ++i) {
1062
+ auto& tree_at_i = trees_[i];
1063
+ if (tree_at_i == nullptr) continue;
1064
+
1065
+ sum = MakeConcat(tree_at_i, sum);
1066
+ tree_at_i = nullptr;
1067
+ }
1068
+
1069
+ // min_length[0] == 1, which means sum->length >= min_length[0]
1070
+ assert(i > 0);
1071
+ trees_[i - 1] = sum;
1072
+ }
1073
+
1074
+ // Make concat node trying to resue existing CordRepConcat nodes we
1075
+ // already collected in the concat_freelist_.
1076
+ CordRep* MakeConcat(CordRep* left, CordRep* right) {
1077
+ if (concat_freelist_ == nullptr) return RawConcat(left, right);
1078
+
1079
+ CordRepConcat* rep = concat_freelist_;
1080
+ if (concat_freelist_->left == nullptr) {
1081
+ concat_freelist_ = nullptr;
1082
+ } else {
1083
+ concat_freelist_ = concat_freelist_->left->concat();
1084
+ }
1085
+ SetConcatChildren(rep, left, right);
1086
+
1087
+ return rep;
1088
+ }
1089
+
1090
+ static void CheckNode(CordRep* node) {
1091
+ ABSL_INTERNAL_CHECK(node->length != 0u, "");
1092
+ if (node->tag == CONCAT) {
1093
+ ABSL_INTERNAL_CHECK(node->concat()->left != nullptr, "");
1094
+ ABSL_INTERNAL_CHECK(node->concat()->right != nullptr, "");
1095
+ ABSL_INTERNAL_CHECK(node->length == (node->concat()->left->length +
1096
+ node->concat()->right->length),
1097
+ "");
1098
+ }
1099
+ }
1100
+
1101
+ size_t root_length_;
1102
+
1103
+ // use an inlined vector instead of a flat array to get bounds checking
1104
+ absl::InlinedVector<CordRep*, kInlinedVectorSize> trees_;
1105
+
1106
+ // List of concat nodes we can re-use for Cord balancing.
1107
+ CordRepConcat* concat_freelist_ = nullptr;
1108
+ };
1109
+
1110
+ static CordRep* Rebalance(CordRep* node) {
1111
+ VerifyTree(node);
1112
+ assert(node->tag == CONCAT);
1113
+
1114
+ if (node->length == 0) {
1115
+ return nullptr;
1116
+ }
1117
+
1118
+ CordForest forest(node->length);
1119
+ forest.Build(node);
1120
+ return forest.ConcatNodes();
1121
+ }
1122
+
1123
+ // --------------------------------------------------------------------
1124
+ // Comparators
1125
+
1126
+ namespace {
1127
+
1128
+ int ClampResult(int memcmp_res) {
1129
+ return static_cast<int>(memcmp_res > 0) - static_cast<int>(memcmp_res < 0);
1130
+ }
1131
+
1132
+ int CompareChunks(absl::string_view* lhs, absl::string_view* rhs,
1133
+ size_t* size_to_compare) {
1134
+ size_t compared_size = std::min(lhs->size(), rhs->size());
1135
+ assert(*size_to_compare >= compared_size);
1136
+ *size_to_compare -= compared_size;
1137
+
1138
+ int memcmp_res = ::memcmp(lhs->data(), rhs->data(), compared_size);
1139
+ if (memcmp_res != 0) return memcmp_res;
1140
+
1141
+ lhs->remove_prefix(compared_size);
1142
+ rhs->remove_prefix(compared_size);
1143
+
1144
+ return 0;
1145
+ }
1146
+
1147
+ // This overload set computes comparison results from memcmp result. This
1148
+ // interface is used inside GenericCompare below. Differet implementations
1149
+ // are specialized for int and bool. For int we clamp result to {-1, 0, 1}
1150
+ // set. For bool we just interested in "value == 0".
1151
+ template <typename ResultType>
1152
+ ResultType ComputeCompareResult(int memcmp_res) {
1153
+ return ClampResult(memcmp_res);
1154
+ }
1155
+ template <>
1156
+ bool ComputeCompareResult<bool>(int memcmp_res) {
1157
+ return memcmp_res == 0;
1158
+ }
1159
+
1160
+ } // namespace
1161
+
1162
+ // Helper routine. Locates the first flat chunk of the Cord without
1163
+ // initializing the iterator.
1164
+ inline absl::string_view Cord::InlineRep::FindFlatStartPiece() const {
1165
+ if (!is_tree()) {
1166
+ return absl::string_view(data_.as_chars(), data_.inline_size());
1167
+ }
1168
+
1169
+ CordRep* node = tree();
1170
+ if (node->tag >= FLAT) {
1171
+ return absl::string_view(node->flat()->Data(), node->length);
1172
+ }
1173
+
1174
+ if (node->tag == EXTERNAL) {
1175
+ return absl::string_view(node->external()->base, node->length);
1176
+ }
1177
+
1178
+ if (node->tag == RING) {
1179
+ return node->ring()->entry_data(node->ring()->head());
1180
+ }
1181
+
1182
+ // Walk down the left branches until we hit a non-CONCAT node.
1183
+ while (node->tag == CONCAT) {
1184
+ node = node->concat()->left;
1185
+ }
1186
+
1187
+ // Get the child node if we encounter a SUBSTRING.
1188
+ size_t offset = 0;
1189
+ size_t length = node->length;
1190
+ assert(length != 0);
1191
+
1192
+ if (node->tag == SUBSTRING) {
1193
+ offset = node->substring()->start;
1194
+ node = node->substring()->child;
1195
+ }
1196
+
1197
+ if (node->tag >= FLAT) {
1198
+ return absl::string_view(node->flat()->Data() + offset, length);
1199
+ }
1200
+
1201
+ assert((node->tag == EXTERNAL) && "Expect FLAT or EXTERNAL node here");
1202
+
1203
+ return absl::string_view(node->external()->base + offset, length);
1204
+ }
1205
+
1206
+ inline int Cord::CompareSlowPath(absl::string_view rhs, size_t compared_size,
1207
+ size_t size_to_compare) const {
1208
+ auto advance = [](Cord::ChunkIterator* it, absl::string_view* chunk) {
1209
+ if (!chunk->empty()) return true;
1210
+ ++*it;
1211
+ if (it->bytes_remaining_ == 0) return false;
1212
+ *chunk = **it;
1213
+ return true;
1214
+ };
1215
+
1216
+ Cord::ChunkIterator lhs_it = chunk_begin();
1217
+
1218
+ // compared_size is inside first chunk.
1219
+ absl::string_view lhs_chunk =
1220
+ (lhs_it.bytes_remaining_ != 0) ? *lhs_it : absl::string_view();
1221
+ assert(compared_size <= lhs_chunk.size());
1222
+ assert(compared_size <= rhs.size());
1223
+ lhs_chunk.remove_prefix(compared_size);
1224
+ rhs.remove_prefix(compared_size);
1225
+ size_to_compare -= compared_size; // skip already compared size.
1226
+
1227
+ while (advance(&lhs_it, &lhs_chunk) && !rhs.empty()) {
1228
+ int comparison_result = CompareChunks(&lhs_chunk, &rhs, &size_to_compare);
1229
+ if (comparison_result != 0) return comparison_result;
1230
+ if (size_to_compare == 0) return 0;
1231
+ }
1232
+
1233
+ return static_cast<int>(rhs.empty()) - static_cast<int>(lhs_chunk.empty());
1234
+ }
1235
+
1236
+ inline int Cord::CompareSlowPath(const Cord& rhs, size_t compared_size,
1237
+ size_t size_to_compare) const {
1238
+ auto advance = [](Cord::ChunkIterator* it, absl::string_view* chunk) {
1239
+ if (!chunk->empty()) return true;
1240
+ ++*it;
1241
+ if (it->bytes_remaining_ == 0) return false;
1242
+ *chunk = **it;
1243
+ return true;
1244
+ };
1245
+
1246
+ Cord::ChunkIterator lhs_it = chunk_begin();
1247
+ Cord::ChunkIterator rhs_it = rhs.chunk_begin();
1248
+
1249
+ // compared_size is inside both first chunks.
1250
+ absl::string_view lhs_chunk =
1251
+ (lhs_it.bytes_remaining_ != 0) ? *lhs_it : absl::string_view();
1252
+ absl::string_view rhs_chunk =
1253
+ (rhs_it.bytes_remaining_ != 0) ? *rhs_it : absl::string_view();
1254
+ assert(compared_size <= lhs_chunk.size());
1255
+ assert(compared_size <= rhs_chunk.size());
1256
+ lhs_chunk.remove_prefix(compared_size);
1257
+ rhs_chunk.remove_prefix(compared_size);
1258
+ size_to_compare -= compared_size; // skip already compared size.
1259
+
1260
+ while (advance(&lhs_it, &lhs_chunk) && advance(&rhs_it, &rhs_chunk)) {
1261
+ int memcmp_res = CompareChunks(&lhs_chunk, &rhs_chunk, &size_to_compare);
1262
+ if (memcmp_res != 0) return memcmp_res;
1263
+ if (size_to_compare == 0) return 0;
1264
+ }
1265
+
1266
+ return static_cast<int>(rhs_chunk.empty()) -
1267
+ static_cast<int>(lhs_chunk.empty());
1268
+ }
1269
+
1270
+ inline absl::string_view Cord::GetFirstChunk(const Cord& c) {
1271
+ return c.contents_.FindFlatStartPiece();
1272
+ }
1273
+ inline absl::string_view Cord::GetFirstChunk(absl::string_view sv) {
1274
+ return sv;
1275
+ }
1276
+
1277
+ // Compares up to 'size_to_compare' bytes of 'lhs' with 'rhs'. It is assumed
1278
+ // that 'size_to_compare' is greater that size of smallest of first chunks.
1279
+ template <typename ResultType, typename RHS>
1280
+ ResultType GenericCompare(const Cord& lhs, const RHS& rhs,
1281
+ size_t size_to_compare) {
1282
+ absl::string_view lhs_chunk = Cord::GetFirstChunk(lhs);
1283
+ absl::string_view rhs_chunk = Cord::GetFirstChunk(rhs);
1284
+
1285
+ size_t compared_size = std::min(lhs_chunk.size(), rhs_chunk.size());
1286
+ assert(size_to_compare >= compared_size);
1287
+ int memcmp_res = ::memcmp(lhs_chunk.data(), rhs_chunk.data(), compared_size);
1288
+ if (compared_size == size_to_compare || memcmp_res != 0) {
1289
+ return ComputeCompareResult<ResultType>(memcmp_res);
1290
+ }
1291
+
1292
+ return ComputeCompareResult<ResultType>(
1293
+ lhs.CompareSlowPath(rhs, compared_size, size_to_compare));
1294
+ }
1295
+
1296
+ bool Cord::EqualsImpl(absl::string_view rhs, size_t size_to_compare) const {
1297
+ return GenericCompare<bool>(*this, rhs, size_to_compare);
1298
+ }
1299
+
1300
+ bool Cord::EqualsImpl(const Cord& rhs, size_t size_to_compare) const {
1301
+ return GenericCompare<bool>(*this, rhs, size_to_compare);
1302
+ }
1303
+
1304
+ template <typename RHS>
1305
+ inline int SharedCompareImpl(const Cord& lhs, const RHS& rhs) {
1306
+ size_t lhs_size = lhs.size();
1307
+ size_t rhs_size = rhs.size();
1308
+ if (lhs_size == rhs_size) {
1309
+ return GenericCompare<int>(lhs, rhs, lhs_size);
1310
+ }
1311
+ if (lhs_size < rhs_size) {
1312
+ auto data_comp_res = GenericCompare<int>(lhs, rhs, lhs_size);
1313
+ return data_comp_res == 0 ? -1 : data_comp_res;
1314
+ }
1315
+
1316
+ auto data_comp_res = GenericCompare<int>(lhs, rhs, rhs_size);
1317
+ return data_comp_res == 0 ? +1 : data_comp_res;
1318
+ }
1319
+
1320
+ int Cord::Compare(absl::string_view rhs) const {
1321
+ return SharedCompareImpl(*this, rhs);
1322
+ }
1323
+
1324
+ int Cord::CompareImpl(const Cord& rhs) const {
1325
+ return SharedCompareImpl(*this, rhs);
1326
+ }
1327
+
1328
+ bool Cord::EndsWith(absl::string_view rhs) const {
1329
+ size_t my_size = size();
1330
+ size_t rhs_size = rhs.size();
1331
+
1332
+ if (my_size < rhs_size) return false;
1333
+
1334
+ Cord tmp(*this);
1335
+ tmp.RemovePrefix(my_size - rhs_size);
1336
+ return tmp.EqualsImpl(rhs, rhs_size);
1337
+ }
1338
+
1339
+ bool Cord::EndsWith(const Cord& rhs) const {
1340
+ size_t my_size = size();
1341
+ size_t rhs_size = rhs.size();
1342
+
1343
+ if (my_size < rhs_size) return false;
1344
+
1345
+ Cord tmp(*this);
1346
+ tmp.RemovePrefix(my_size - rhs_size);
1347
+ return tmp.EqualsImpl(rhs, rhs_size);
1348
+ }
1349
+
1350
+ // --------------------------------------------------------------------
1351
+ // Misc.
1352
+
1353
+ Cord::operator std::string() const {
1354
+ std::string s;
1355
+ absl::CopyCordToString(*this, &s);
1356
+ return s;
1357
+ }
1358
+
1359
+ void CopyCordToString(const Cord& src, std::string* dst) {
1360
+ if (!src.contents_.is_tree()) {
1361
+ src.contents_.CopyTo(dst);
1362
+ } else {
1363
+ absl::strings_internal::STLStringResizeUninitialized(dst, src.size());
1364
+ src.CopyToArraySlowPath(&(*dst)[0]);
1365
+ }
1366
+ }
1367
+
1368
+ void Cord::CopyToArraySlowPath(char* dst) const {
1369
+ assert(contents_.is_tree());
1370
+ absl::string_view fragment;
1371
+ if (GetFlatAux(contents_.tree(), &fragment)) {
1372
+ memcpy(dst, fragment.data(), fragment.size());
1373
+ return;
1374
+ }
1375
+ for (absl::string_view chunk : Chunks()) {
1376
+ memcpy(dst, chunk.data(), chunk.size());
1377
+ dst += chunk.size();
1378
+ }
1379
+ }
1380
+
1381
+ Cord::ChunkIterator& Cord::ChunkIterator::AdvanceStack() {
1382
+ auto& stack_of_right_children = stack_of_right_children_;
1383
+ if (stack_of_right_children.empty()) {
1384
+ assert(!current_chunk_.empty()); // Called on invalid iterator.
1385
+ // We have reached the end of the Cord.
1386
+ return *this;
1387
+ }
1388
+
1389
+ // Process the next node on the stack.
1390
+ CordRep* node = stack_of_right_children.back();
1391
+ stack_of_right_children.pop_back();
1392
+
1393
+ // Walk down the left branches until we hit a non-CONCAT node. Save the
1394
+ // right children to the stack for subsequent traversal.
1395
+ while (node->tag == CONCAT) {
1396
+ stack_of_right_children.push_back(node->concat()->right);
1397
+ node = node->concat()->left;
1398
+ }
1399
+
1400
+ // Get the child node if we encounter a SUBSTRING.
1401
+ size_t offset = 0;
1402
+ size_t length = node->length;
1403
+ if (node->tag == SUBSTRING) {
1404
+ offset = node->substring()->start;
1405
+ node = node->substring()->child;
1406
+ }
1407
+
1408
+ assert(node->tag == EXTERNAL || node->tag >= FLAT);
1409
+ assert(length != 0);
1410
+ const char* data =
1411
+ node->tag == EXTERNAL ? node->external()->base : node->flat()->Data();
1412
+ current_chunk_ = absl::string_view(data + offset, length);
1413
+ current_leaf_ = node;
1414
+ return *this;
1415
+ }
1416
+
1417
+ Cord Cord::ChunkIterator::AdvanceAndReadBytes(size_t n) {
1418
+ ABSL_HARDENING_ASSERT(bytes_remaining_ >= n &&
1419
+ "Attempted to iterate past `end()`");
1420
+ Cord subcord;
1421
+
1422
+ if (n <= InlineRep::kMaxInline) {
1423
+ // Range to read fits in inline data. Flatten it.
1424
+ char* data = subcord.contents_.set_data(n);
1425
+ while (n > current_chunk_.size()) {
1426
+ memcpy(data, current_chunk_.data(), current_chunk_.size());
1427
+ data += current_chunk_.size();
1428
+ n -= current_chunk_.size();
1429
+ ++*this;
1430
+ }
1431
+ memcpy(data, current_chunk_.data(), n);
1432
+ if (n < current_chunk_.size()) {
1433
+ RemoveChunkPrefix(n);
1434
+ } else if (n > 0) {
1435
+ ++*this;
1436
+ }
1437
+ return subcord;
1438
+ }
1439
+
1440
+ if (ring_reader_) {
1441
+ size_t chunk_size = current_chunk_.size();
1442
+ if (n <= chunk_size && n <= kMaxBytesToCopy) {
1443
+ subcord = Cord(current_chunk_.substr(0, n));
1444
+ } else {
1445
+ auto* ring = CordRep::Ref(ring_reader_.ring())->ring();
1446
+ size_t offset = ring_reader_.length() - bytes_remaining_;
1447
+ subcord.contents_.set_tree(CordRepRing::SubRing(ring, offset, n));
1448
+ }
1449
+ if (n < chunk_size) {
1450
+ bytes_remaining_ -= n;
1451
+ current_chunk_.remove_prefix(n);
1452
+ } else {
1453
+ AdvanceBytesRing(n);
1454
+ }
1455
+ return subcord;
1456
+ }
1457
+
1458
+ auto& stack_of_right_children = stack_of_right_children_;
1459
+ if (n < current_chunk_.size()) {
1460
+ // Range to read is a proper subrange of the current chunk.
1461
+ assert(current_leaf_ != nullptr);
1462
+ CordRep* subnode = CordRep::Ref(current_leaf_);
1463
+ const char* data = subnode->tag == EXTERNAL ? subnode->external()->base
1464
+ : subnode->flat()->Data();
1465
+ subnode = NewSubstring(subnode, current_chunk_.data() - data, n);
1466
+ subcord.contents_.set_tree(VerifyTree(subnode));
1467
+ RemoveChunkPrefix(n);
1468
+ return subcord;
1469
+ }
1470
+
1471
+ // Range to read begins with a proper subrange of the current chunk.
1472
+ assert(!current_chunk_.empty());
1473
+ assert(current_leaf_ != nullptr);
1474
+ CordRep* subnode = CordRep::Ref(current_leaf_);
1475
+ if (current_chunk_.size() < subnode->length) {
1476
+ const char* data = subnode->tag == EXTERNAL ? subnode->external()->base
1477
+ : subnode->flat()->Data();
1478
+ subnode = NewSubstring(subnode, current_chunk_.data() - data,
1479
+ current_chunk_.size());
1480
+ }
1481
+ n -= current_chunk_.size();
1482
+ bytes_remaining_ -= current_chunk_.size();
1483
+
1484
+ // Process the next node(s) on the stack, reading whole subtrees depending on
1485
+ // their length and how many bytes we are advancing.
1486
+ CordRep* node = nullptr;
1487
+ while (!stack_of_right_children.empty()) {
1488
+ node = stack_of_right_children.back();
1489
+ stack_of_right_children.pop_back();
1490
+ if (node->length > n) break;
1491
+ // TODO(qrczak): This might unnecessarily recreate existing concat nodes.
1492
+ // Avoiding that would need pretty complicated logic (instead of
1493
+ // current_leaf, keep current_subtree_ which points to the highest node
1494
+ // such that the current leaf can be found on the path of left children
1495
+ // starting from current_subtree_; delay creating subnode while node is
1496
+ // below current_subtree_; find the proper node along the path of left
1497
+ // children starting from current_subtree_ if this loop exits while staying
1498
+ // below current_subtree_; etc.; alternatively, push parents instead of
1499
+ // right children on the stack).
1500
+ subnode = Concat(subnode, CordRep::Ref(node));
1501
+ n -= node->length;
1502
+ bytes_remaining_ -= node->length;
1503
+ node = nullptr;
1504
+ }
1505
+
1506
+ if (node == nullptr) {
1507
+ // We have reached the end of the Cord.
1508
+ assert(bytes_remaining_ == 0);
1509
+ subcord.contents_.set_tree(VerifyTree(subnode));
1510
+ return subcord;
1511
+ }
1512
+
1513
+ // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1514
+ // right children to the stack for subsequent traversal.
1515
+ while (node->tag == CONCAT) {
1516
+ if (node->concat()->left->length > n) {
1517
+ // Push right, descend left.
1518
+ stack_of_right_children.push_back(node->concat()->right);
1519
+ node = node->concat()->left;
1520
+ } else {
1521
+ // Read left, descend right.
1522
+ subnode = Concat(subnode, CordRep::Ref(node->concat()->left));
1523
+ n -= node->concat()->left->length;
1524
+ bytes_remaining_ -= node->concat()->left->length;
1525
+ node = node->concat()->right;
1526
+ }
1527
+ }
1528
+
1529
+ // Get the child node if we encounter a SUBSTRING.
1530
+ size_t offset = 0;
1531
+ size_t length = node->length;
1532
+ if (node->tag == SUBSTRING) {
1533
+ offset = node->substring()->start;
1534
+ node = node->substring()->child;
1535
+ }
1536
+
1537
+ // Range to read ends with a proper (possibly empty) subrange of the current
1538
+ // chunk.
1539
+ assert(node->tag == EXTERNAL || node->tag >= FLAT);
1540
+ assert(length > n);
1541
+ if (n > 0) {
1542
+ subnode = Concat(subnode, NewSubstring(CordRep::Ref(node), offset, n));
1543
+ }
1544
+ const char* data =
1545
+ node->tag == EXTERNAL ? node->external()->base : node->flat()->Data();
1546
+ current_chunk_ = absl::string_view(data + offset + n, length - n);
1547
+ current_leaf_ = node;
1548
+ bytes_remaining_ -= n;
1549
+ subcord.contents_.set_tree(VerifyTree(subnode));
1550
+ return subcord;
1551
+ }
1552
+
1553
+ void Cord::ChunkIterator::AdvanceBytesSlowPath(size_t n) {
1554
+ assert(bytes_remaining_ >= n && "Attempted to iterate past `end()`");
1555
+ assert(n >= current_chunk_.size()); // This should only be called when
1556
+ // iterating to a new node.
1557
+
1558
+ n -= current_chunk_.size();
1559
+ bytes_remaining_ -= current_chunk_.size();
1560
+
1561
+ if (stack_of_right_children_.empty()) {
1562
+ // We have reached the end of the Cord.
1563
+ assert(bytes_remaining_ == 0);
1564
+ return;
1565
+ }
1566
+
1567
+ // Process the next node(s) on the stack, skipping whole subtrees depending on
1568
+ // their length and how many bytes we are advancing.
1569
+ CordRep* node = nullptr;
1570
+ auto& stack_of_right_children = stack_of_right_children_;
1571
+ while (!stack_of_right_children.empty()) {
1572
+ node = stack_of_right_children.back();
1573
+ stack_of_right_children.pop_back();
1574
+ if (node->length > n) break;
1575
+ n -= node->length;
1576
+ bytes_remaining_ -= node->length;
1577
+ node = nullptr;
1578
+ }
1579
+
1580
+ if (node == nullptr) {
1581
+ // We have reached the end of the Cord.
1582
+ assert(bytes_remaining_ == 0);
1583
+ return;
1584
+ }
1585
+
1586
+ // Walk down the appropriate branches until we hit a non-CONCAT node. Save the
1587
+ // right children to the stack for subsequent traversal.
1588
+ while (node->tag == CONCAT) {
1589
+ if (node->concat()->left->length > n) {
1590
+ // Push right, descend left.
1591
+ stack_of_right_children.push_back(node->concat()->right);
1592
+ node = node->concat()->left;
1593
+ } else {
1594
+ // Skip left, descend right.
1595
+ n -= node->concat()->left->length;
1596
+ bytes_remaining_ -= node->concat()->left->length;
1597
+ node = node->concat()->right;
1598
+ }
1599
+ }
1600
+
1601
+ // Get the child node if we encounter a SUBSTRING.
1602
+ size_t offset = 0;
1603
+ size_t length = node->length;
1604
+ if (node->tag == SUBSTRING) {
1605
+ offset = node->substring()->start;
1606
+ node = node->substring()->child;
1607
+ }
1608
+
1609
+ assert(node->tag == EXTERNAL || node->tag >= FLAT);
1610
+ assert(length > n);
1611
+ const char* data =
1612
+ node->tag == EXTERNAL ? node->external()->base : node->flat()->Data();
1613
+ current_chunk_ = absl::string_view(data + offset + n, length - n);
1614
+ current_leaf_ = node;
1615
+ bytes_remaining_ -= n;
1616
+ }
1617
+
1618
+ char Cord::operator[](size_t i) const {
1619
+ ABSL_HARDENING_ASSERT(i < size());
1620
+ size_t offset = i;
1621
+ const CordRep* rep = contents_.tree();
1622
+ if (rep == nullptr) {
1623
+ return contents_.data()[i];
1624
+ }
1625
+ while (true) {
1626
+ assert(rep != nullptr);
1627
+ assert(offset < rep->length);
1628
+ if (rep->tag >= FLAT) {
1629
+ // Get the "i"th character directly from the flat array.
1630
+ return rep->flat()->Data()[offset];
1631
+ } else if (rep->tag == RING) {
1632
+ return rep->ring()->GetCharacter(offset);
1633
+ } else if (rep->tag == EXTERNAL) {
1634
+ // Get the "i"th character from the external array.
1635
+ return rep->external()->base[offset];
1636
+ } else if (rep->tag == CONCAT) {
1637
+ // Recursively branch to the side of the concatenation that the "i"th
1638
+ // character is on.
1639
+ size_t left_length = rep->concat()->left->length;
1640
+ if (offset < left_length) {
1641
+ rep = rep->concat()->left;
1642
+ } else {
1643
+ offset -= left_length;
1644
+ rep = rep->concat()->right;
1645
+ }
1646
+ } else {
1647
+ // This must be a substring a node, so bypass it to get to the child.
1648
+ assert(rep->tag == SUBSTRING);
1649
+ offset += rep->substring()->start;
1650
+ rep = rep->substring()->child;
1651
+ }
1652
+ }
1653
+ }
1654
+
1655
+ absl::string_view Cord::FlattenSlowPath() {
1656
+ size_t total_size = size();
1657
+ CordRep* new_rep;
1658
+ char* new_buffer;
1659
+
1660
+ // Try to put the contents into a new flat rep. If they won't fit in the
1661
+ // biggest possible flat node, use an external rep instead.
1662
+ if (total_size <= kMaxFlatLength) {
1663
+ new_rep = CordRepFlat::New(total_size);
1664
+ new_rep->length = total_size;
1665
+ new_buffer = new_rep->flat()->Data();
1666
+ CopyToArraySlowPath(new_buffer);
1667
+ } else {
1668
+ new_buffer = std::allocator<char>().allocate(total_size);
1669
+ CopyToArraySlowPath(new_buffer);
1670
+ new_rep = absl::cord_internal::NewExternalRep(
1671
+ absl::string_view(new_buffer, total_size), [](absl::string_view s) {
1672
+ std::allocator<char>().deallocate(const_cast<char*>(s.data()),
1673
+ s.size());
1674
+ });
1675
+ }
1676
+ if (CordRep* tree = contents_.tree()) {
1677
+ CordRep::Unref(tree);
1678
+ }
1679
+ contents_.set_tree(new_rep);
1680
+ return absl::string_view(new_buffer, total_size);
1681
+ }
1682
+
1683
+ /* static */ bool Cord::GetFlatAux(CordRep* rep, absl::string_view* fragment) {
1684
+ assert(rep != nullptr);
1685
+ if (rep->tag >= FLAT) {
1686
+ *fragment = absl::string_view(rep->flat()->Data(), rep->length);
1687
+ return true;
1688
+ } else if (rep->tag == EXTERNAL) {
1689
+ *fragment = absl::string_view(rep->external()->base, rep->length);
1690
+ return true;
1691
+ } else if (rep->tag == SUBSTRING) {
1692
+ CordRep* child = rep->substring()->child;
1693
+ if (child->tag >= FLAT) {
1694
+ *fragment = absl::string_view(
1695
+ child->flat()->Data() + rep->substring()->start, rep->length);
1696
+ return true;
1697
+ } else if (child->tag == EXTERNAL) {
1698
+ *fragment = absl::string_view(
1699
+ child->external()->base + rep->substring()->start, rep->length);
1700
+ return true;
1701
+ }
1702
+ }
1703
+ return false;
1704
+ }
1705
+
1706
+ /* static */ void Cord::ForEachChunkAux(
1707
+ absl::cord_internal::CordRep* rep,
1708
+ absl::FunctionRef<void(absl::string_view)> callback) {
1709
+ if (rep->tag == RING) {
1710
+ ChunkIterator it(rep), end;
1711
+ while (it != end) {
1712
+ callback(*it);
1713
+ ++it;
1714
+ }
1715
+ return;
1716
+ }
1717
+
1718
+ assert(rep != nullptr);
1719
+ int stack_pos = 0;
1720
+ constexpr int stack_max = 128;
1721
+ // Stack of right branches for tree traversal
1722
+ absl::cord_internal::CordRep* stack[stack_max];
1723
+ absl::cord_internal::CordRep* current_node = rep;
1724
+ while (true) {
1725
+ if (current_node->tag == CONCAT) {
1726
+ if (stack_pos == stack_max) {
1727
+ // There's no more room on our stack array to add another right branch,
1728
+ // and the idea is to avoid allocations, so call this function
1729
+ // recursively to navigate this subtree further. (This is not something
1730
+ // we expect to happen in practice).
1731
+ ForEachChunkAux(current_node, callback);
1732
+
1733
+ // Pop the next right branch and iterate.
1734
+ current_node = stack[--stack_pos];
1735
+ continue;
1736
+ } else {
1737
+ // Save the right branch for later traversal and continue down the left
1738
+ // branch.
1739
+ stack[stack_pos++] = current_node->concat()->right;
1740
+ current_node = current_node->concat()->left;
1741
+ continue;
1742
+ }
1743
+ }
1744
+ // This is a leaf node, so invoke our callback.
1745
+ absl::string_view chunk;
1746
+ bool success = GetFlatAux(current_node, &chunk);
1747
+ assert(success);
1748
+ if (success) {
1749
+ callback(chunk);
1750
+ }
1751
+ if (stack_pos == 0) {
1752
+ // end of traversal
1753
+ return;
1754
+ }
1755
+ current_node = stack[--stack_pos];
1756
+ }
1757
+ }
1758
+
1759
+ static void DumpNode(CordRep* rep, bool include_data, std::ostream* os,
1760
+ int indent) {
1761
+ const int kIndentStep = 1;
1762
+ absl::InlinedVector<CordRep*, kInlinedVectorSize> stack;
1763
+ absl::InlinedVector<int, kInlinedVectorSize> indents;
1764
+ for (;;) {
1765
+ *os << std::setw(3) << rep->refcount.Get();
1766
+ *os << " " << std::setw(7) << rep->length;
1767
+ *os << " [";
1768
+ if (include_data) *os << static_cast<void*>(rep);
1769
+ *os << "]";
1770
+ *os << " " << (IsRootBalanced(rep) ? 'b' : 'u');
1771
+ *os << " " << std::setw(indent) << "";
1772
+ if (rep->tag == CONCAT) {
1773
+ *os << "CONCAT depth=" << Depth(rep) << "\n";
1774
+ indent += kIndentStep;
1775
+ indents.push_back(indent);
1776
+ stack.push_back(rep->concat()->right);
1777
+ rep = rep->concat()->left;
1778
+ } else if (rep->tag == SUBSTRING) {
1779
+ *os << "SUBSTRING @ " << rep->substring()->start << "\n";
1780
+ indent += kIndentStep;
1781
+ rep = rep->substring()->child;
1782
+ } else { // Leaf or ring
1783
+ if (rep->tag == EXTERNAL) {
1784
+ *os << "EXTERNAL [";
1785
+ if (include_data)
1786
+ *os << absl::CEscape(std::string(rep->external()->base, rep->length));
1787
+ *os << "]\n";
1788
+ } else if (rep->tag >= FLAT) {
1789
+ *os << "FLAT cap=" << rep->flat()->Capacity()
1790
+ << " [";
1791
+ if (include_data)
1792
+ *os << absl::CEscape(std::string(rep->flat()->Data(), rep->length));
1793
+ *os << "]\n";
1794
+ } else {
1795
+ assert(rep->tag == RING);
1796
+ auto* ring = rep->ring();
1797
+ *os << "RING, entries = " << ring->entries() << "\n";
1798
+ CordRepRing::index_type head = ring->head();
1799
+ do {
1800
+ DumpNode(ring->entry_child(head), include_data, os,
1801
+ indent + kIndentStep);
1802
+ head = ring->advance(head);;
1803
+ } while (head != ring->tail());
1804
+ }
1805
+ if (stack.empty()) break;
1806
+ rep = stack.back();
1807
+ stack.pop_back();
1808
+ indent = indents.back();
1809
+ indents.pop_back();
1810
+ }
1811
+ }
1812
+ ABSL_INTERNAL_CHECK(indents.empty(), "");
1813
+ }
1814
+
1815
+ static std::string ReportError(CordRep* root, CordRep* node) {
1816
+ std::ostringstream buf;
1817
+ buf << "Error at node " << node << " in:";
1818
+ DumpNode(root, true, &buf);
1819
+ return buf.str();
1820
+ }
1821
+
1822
+ static bool VerifyNode(CordRep* root, CordRep* start_node,
1823
+ bool full_validation) {
1824
+ absl::InlinedVector<CordRep*, 2> worklist;
1825
+ worklist.push_back(start_node);
1826
+ do {
1827
+ CordRep* node = worklist.back();
1828
+ worklist.pop_back();
1829
+
1830
+ ABSL_INTERNAL_CHECK(node != nullptr, ReportError(root, node));
1831
+ if (node != root) {
1832
+ ABSL_INTERNAL_CHECK(node->length != 0, ReportError(root, node));
1833
+ }
1834
+
1835
+ if (node->tag == CONCAT) {
1836
+ ABSL_INTERNAL_CHECK(node->concat()->left != nullptr,
1837
+ ReportError(root, node));
1838
+ ABSL_INTERNAL_CHECK(node->concat()->right != nullptr,
1839
+ ReportError(root, node));
1840
+ ABSL_INTERNAL_CHECK((node->length == node->concat()->left->length +
1841
+ node->concat()->right->length),
1842
+ ReportError(root, node));
1843
+ if (full_validation) {
1844
+ worklist.push_back(node->concat()->right);
1845
+ worklist.push_back(node->concat()->left);
1846
+ }
1847
+ } else if (node->tag >= FLAT) {
1848
+ ABSL_INTERNAL_CHECK(
1849
+ node->length <= node->flat()->Capacity(),
1850
+ ReportError(root, node));
1851
+ } else if (node->tag == EXTERNAL) {
1852
+ ABSL_INTERNAL_CHECK(node->external()->base != nullptr,
1853
+ ReportError(root, node));
1854
+ } else if (node->tag == SUBSTRING) {
1855
+ ABSL_INTERNAL_CHECK(
1856
+ node->substring()->start < node->substring()->child->length,
1857
+ ReportError(root, node));
1858
+ ABSL_INTERNAL_CHECK(node->substring()->start + node->length <=
1859
+ node->substring()->child->length,
1860
+ ReportError(root, node));
1861
+ }
1862
+ } while (!worklist.empty());
1863
+ return true;
1864
+ }
1865
+
1866
+ // Traverses the tree and computes the total memory allocated.
1867
+ /* static */ size_t Cord::MemoryUsageAux(const CordRep* rep) {
1868
+ size_t total_mem_usage = 0;
1869
+
1870
+ // Allow a quick exit for the common case that the root is a leaf.
1871
+ if (RepMemoryUsageLeaf(rep, &total_mem_usage)) {
1872
+ return total_mem_usage;
1873
+ }
1874
+
1875
+ // Iterate over the tree. cur_node is never a leaf node and leaf nodes will
1876
+ // never be appended to tree_stack. This reduces overhead from manipulating
1877
+ // tree_stack.
1878
+ absl::InlinedVector<const CordRep*, kInlinedVectorSize> tree_stack;
1879
+ const CordRep* cur_node = rep;
1880
+ while (true) {
1881
+ const CordRep* next_node = nullptr;
1882
+
1883
+ if (cur_node->tag == CONCAT) {
1884
+ total_mem_usage += sizeof(CordRepConcat);
1885
+ const CordRep* left = cur_node->concat()->left;
1886
+ if (!RepMemoryUsageLeaf(left, &total_mem_usage)) {
1887
+ next_node = left;
1888
+ }
1889
+
1890
+ const CordRep* right = cur_node->concat()->right;
1891
+ if (!RepMemoryUsageLeaf(right, &total_mem_usage)) {
1892
+ if (next_node) {
1893
+ tree_stack.push_back(next_node);
1894
+ }
1895
+ next_node = right;
1896
+ }
1897
+ } else if (cur_node->tag == RING) {
1898
+ total_mem_usage += CordRepRing::AllocSize(cur_node->ring()->capacity());
1899
+ const CordRepRing* ring = cur_node->ring();
1900
+ CordRepRing::index_type pos = ring->head(), tail = ring->tail();
1901
+ do {
1902
+ CordRep* node = ring->entry_child(pos);
1903
+ assert(node->tag >= FLAT || node->tag == EXTERNAL);
1904
+ RepMemoryUsageLeaf(node, &total_mem_usage);
1905
+ } while ((pos = ring->advance(pos)) != tail);
1906
+ } else {
1907
+ // Since cur_node is not a leaf or a concat node it must be a substring.
1908
+ assert(cur_node->tag == SUBSTRING);
1909
+ total_mem_usage += sizeof(CordRepSubstring);
1910
+ next_node = cur_node->substring()->child;
1911
+ if (RepMemoryUsageLeaf(next_node, &total_mem_usage)) {
1912
+ next_node = nullptr;
1913
+ }
1914
+ }
1915
+
1916
+ if (!next_node) {
1917
+ if (tree_stack.empty()) {
1918
+ return total_mem_usage;
1919
+ }
1920
+ next_node = tree_stack.back();
1921
+ tree_stack.pop_back();
1922
+ }
1923
+ cur_node = next_node;
1924
+ }
1925
+ }
1926
+
1927
+ std::ostream& operator<<(std::ostream& out, const Cord& cord) {
1928
+ for (absl::string_view chunk : cord.Chunks()) {
1929
+ out.write(chunk.data(), chunk.size());
1930
+ }
1931
+ return out;
1932
+ }
1933
+
1934
+ namespace strings_internal {
1935
+ size_t CordTestAccess::FlatOverhead() { return cord_internal::kFlatOverhead; }
1936
+ size_t CordTestAccess::MaxFlatLength() { return cord_internal::kMaxFlatLength; }
1937
+ size_t CordTestAccess::FlatTagToLength(uint8_t tag) {
1938
+ return cord_internal::TagToLength(tag);
1939
+ }
1940
+ uint8_t CordTestAccess::LengthToTag(size_t s) {
1941
+ ABSL_INTERNAL_CHECK(s <= kMaxFlatLength, absl::StrCat("Invalid length ", s));
1942
+ return cord_internal::AllocatedSizeToTag(s + cord_internal::kFlatOverhead);
1943
+ }
1944
+ size_t CordTestAccess::SizeofCordRepConcat() { return sizeof(CordRepConcat); }
1945
+ size_t CordTestAccess::SizeofCordRepExternal() {
1946
+ return sizeof(CordRepExternal);
1947
+ }
1948
+ size_t CordTestAccess::SizeofCordRepSubstring() {
1949
+ return sizeof(CordRepSubstring);
1950
+ }
1951
+ } // namespace strings_internal
1952
+ ABSL_NAMESPACE_END
1953
+ } // namespace absl