grpc 1.33.0.pre1 → 1.34.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 (533) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +342 -134
  3. data/include/grpc/grpc.h +1 -2
  4. data/include/grpc/grpc_security.h +149 -172
  5. data/include/grpc/impl/codegen/grpc_types.h +9 -2
  6. data/include/grpc/impl/codegen/port_platform.h +22 -55
  7. data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
  8. data/src/core/ext/filters/client_channel/config_selector.h +2 -3
  9. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
  10. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  11. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  12. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  13. data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
  20. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
  21. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
  22. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
  28. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  29. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  32. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  33. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  34. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
  36. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
  37. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  38. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
  39. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
  41. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  42. data/src/core/ext/filters/client_channel/server_address.h +0 -4
  43. data/src/core/ext/filters/client_channel/service_config.cc +3 -1
  44. data/src/core/ext/filters/client_channel/service_config.h +1 -1
  45. data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
  46. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  47. data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
  48. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  49. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  50. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  51. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  52. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  53. data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
  54. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  55. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
  56. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  57. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
  58. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
  59. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  61. data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
  62. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  63. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
  64. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  65. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  66. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  67. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  68. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  69. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  70. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  71. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  72. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  73. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  74. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  75. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  76. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  77. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  78. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  79. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  80. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  81. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  82. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  83. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  84. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  85. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  86. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  87. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  92. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  94. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  95. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  99. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  100. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  101. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  102. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  103. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  104. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  105. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  106. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  107. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  108. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  109. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  110. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  111. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  112. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  113. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  114. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  115. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  116. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  117. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  118. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  119. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  120. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  121. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  122. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  123. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  124. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  125. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  126. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  127. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  128. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  129. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  130. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  131. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  132. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  133. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  134. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  135. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  136. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  137. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  138. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  139. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  140. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  141. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  142. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  143. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  144. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  145. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  146. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  147. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  148. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  149. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  150. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  151. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  152. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  153. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  154. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  155. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  156. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  157. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  158. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  159. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  160. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  161. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  162. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  163. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  164. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  165. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  166. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  167. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  168. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  169. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  170. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  171. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  172. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  173. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  174. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  175. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  176. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  177. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  178. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  179. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  180. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  181. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  182. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  183. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  184. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  185. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  186. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  187. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  188. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  189. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  190. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  191. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  193. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  194. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  195. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  196. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  197. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  198. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  199. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  200. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  201. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  202. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  203. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  204. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  205. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  206. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  207. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  208. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  209. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  210. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  211. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  212. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  213. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  214. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  215. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  216. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  217. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  218. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  219. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  220. data/src/core/ext/xds/certificate_provider_factory.h +7 -5
  221. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  222. data/src/core/ext/xds/certificate_provider_store.h +65 -8
  223. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  224. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  225. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
  226. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
  227. data/src/core/ext/xds/xds_api.cc +241 -718
  228. data/src/core/ext/xds/xds_api.h +50 -9
  229. data/src/core/ext/xds/xds_bootstrap.cc +172 -25
  230. data/src/core/ext/xds/xds_bootstrap.h +23 -7
  231. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  232. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  233. data/src/core/ext/xds/xds_client.cc +161 -128
  234. data/src/core/ext/xds/xds_client.h +12 -11
  235. data/src/core/ext/xds/xds_client_stats.cc +41 -4
  236. data/src/core/ext/xds/xds_client_stats.h +2 -2
  237. data/src/core/lib/channel/channel_args.cc +2 -1
  238. data/src/core/lib/channel/channel_trace.cc +4 -2
  239. data/src/core/lib/channel/channelz.h +2 -2
  240. data/src/core/lib/channel/handshaker.h +2 -2
  241. data/src/core/lib/compression/compression.cc +8 -4
  242. data/src/core/lib/compression/compression_internal.cc +10 -5
  243. data/src/core/lib/compression/compression_internal.h +2 -1
  244. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  245. data/src/core/lib/debug/stats_data.cc +1 -0
  246. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  247. data/src/core/lib/gpr/log_linux.cc +17 -3
  248. data/src/core/lib/gpr/log_posix.cc +13 -1
  249. data/src/core/lib/gpr/log_windows.cc +16 -4
  250. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  251. data/src/core/lib/gpr/string.cc +1 -1
  252. data/src/core/lib/gpr/time_precise.cc +3 -2
  253. data/src/core/lib/gpr/tls.h +4 -0
  254. data/src/core/lib/gpr/tls_msvc.h +2 -0
  255. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  256. data/src/core/lib/gpr/useful.h +5 -4
  257. data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
  258. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  259. data/src/core/lib/gprpp/examine_stack.h +46 -0
  260. data/src/core/lib/gprpp/fork.cc +2 -2
  261. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  262. data/src/core/lib/gprpp/orphanable.h +4 -8
  263. data/src/core/lib/gprpp/ref_counted.h +40 -46
  264. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
  265. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  266. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  267. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  268. data/src/core/lib/gprpp/thd.h +2 -2
  269. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  270. data/src/core/lib/http/parser.cc +46 -25
  271. data/src/core/lib/iomgr/error.cc +2 -1
  272. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  273. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  274. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  275. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  276. data/src/core/lib/iomgr/parse_address.cc +84 -6
  277. data/src/core/lib/iomgr/parse_address.h +20 -0
  278. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  279. data/src/core/lib/iomgr/python_util.h +3 -3
  280. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  281. data/src/core/lib/iomgr/tcp_posix.cc +3 -2
  282. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  283. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  284. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  285. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  286. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  287. data/src/core/lib/json/json.h +2 -2
  288. data/src/core/lib/json/json_reader.cc +8 -4
  289. data/src/core/lib/json/json_util.h +167 -0
  290. data/src/core/lib/json/json_writer.cc +2 -1
  291. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  292. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  293. data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
  294. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  295. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  296. data/src/core/lib/security/context/security_context.h +3 -1
  297. data/src/core/lib/security/credentials/credentials.cc +1 -1
  298. data/src/core/lib/security/credentials/credentials.h +3 -3
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  307. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  308. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  309. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  310. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  312. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
  313. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
  314. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  315. data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
  316. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  317. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  318. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  319. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  320. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  321. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  322. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  323. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  324. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  325. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  326. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  327. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  328. data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
  329. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  330. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  331. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  332. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  333. data/src/core/lib/security/util/json_util.h +1 -0
  334. data/src/core/lib/slice/slice.cc +7 -4
  335. data/src/core/lib/slice/slice_buffer.cc +2 -1
  336. data/src/core/lib/slice/slice_intern.cc +2 -2
  337. data/src/core/lib/surface/call.cc +9 -8
  338. data/src/core/lib/surface/completion_queue.cc +7 -6
  339. data/src/core/lib/surface/server.cc +4 -2
  340. data/src/core/lib/surface/server.h +2 -2
  341. data/src/core/lib/surface/validate_metadata.h +3 -0
  342. data/src/core/lib/surface/version.cc +2 -2
  343. data/src/core/lib/transport/authority_override.h +2 -0
  344. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  345. data/src/core/lib/transport/byte_stream.h +3 -3
  346. data/src/core/lib/transport/connectivity_state.h +3 -3
  347. data/src/core/lib/transport/metadata.h +2 -2
  348. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  349. data/src/core/lib/transport/transport.cc +5 -3
  350. data/src/core/lib/transport/transport.h +1 -1
  351. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  352. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
  353. data/src/core/tsi/fake_transport_security.cc +1 -0
  354. data/src/core/tsi/local_transport_security.cc +5 -1
  355. data/src/core/tsi/local_transport_security.h +6 -7
  356. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  357. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  358. data/src/core/tsi/ssl_transport_security.cc +14 -7
  359. data/src/core/tsi/ssl_transport_security.h +3 -0
  360. data/src/core/tsi/transport_security.cc +4 -2
  361. data/src/ruby/ext/grpc/extconf.rb +1 -1
  362. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
  363. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
  364. data/src/ruby/lib/grpc/version.rb +1 -1
  365. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  366. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  367. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  368. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  369. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  370. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  371. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  372. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  373. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  374. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  375. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  376. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  377. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  378. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  379. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  380. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  381. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  382. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  383. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  384. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  385. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  386. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  387. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  388. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  389. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  390. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  391. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  392. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  393. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  394. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  395. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  396. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  397. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  398. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  399. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  400. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  401. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  402. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  403. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  404. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  405. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  406. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  407. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  409. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  410. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  411. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  412. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  413. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  414. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  416. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  417. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  418. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  419. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  420. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  421. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  422. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  423. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  424. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  425. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  426. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  427. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  428. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  429. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  430. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  431. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  432. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  433. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  434. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  435. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  436. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  437. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  438. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  439. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  440. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  441. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  442. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  444. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  445. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  452. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  453. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  455. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  456. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  457. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  458. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  459. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  460. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  461. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  462. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
  463. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  464. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  465. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  466. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  467. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  468. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  469. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  470. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  471. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  472. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  473. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  474. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  475. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  485. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  486. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  487. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  488. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  489. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  490. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  491. data/third_party/boringssl-with-bazel/err_data.c +340 -336
  492. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  494. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
  495. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
  497. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
  498. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
  499. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  505. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
  506. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  507. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  508. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  509. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  511. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
  512. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  513. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
  514. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
  515. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  516. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  517. data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
  524. data/third_party/upb/upb/def.c +2169 -0
  525. data/third_party/upb/upb/def.h +330 -0
  526. data/third_party/upb/upb/def.hpp +525 -0
  527. data/third_party/upb/upb/reflection.c +391 -0
  528. data/third_party/upb/upb/reflection.h +168 -0
  529. data/third_party/upb/upb/text_encode.c +398 -0
  530. data/third_party/upb/upb/text_encode.h +35 -0
  531. metadata +227 -37
  532. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
  533. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -7,13 +7,13 @@ namespace absl {
7
7
  ABSL_NAMESPACE_BEGIN
8
8
  namespace str_format_internal {
9
9
 
10
- bool ConvertFloatImpl(float v, const ConversionSpec &conv,
10
+ bool ConvertFloatImpl(float v, const FormatConversionSpecImpl &conv,
11
11
  FormatSinkImpl *sink);
12
12
 
13
- bool ConvertFloatImpl(double v, const ConversionSpec &conv,
13
+ bool ConvertFloatImpl(double v, const FormatConversionSpecImpl &conv,
14
14
  FormatSinkImpl *sink);
15
15
 
16
- bool ConvertFloatImpl(long double v, const ConversionSpec &conv,
16
+ bool ConvertFloatImpl(long double v, const FormatConversionSpecImpl &conv,
17
17
  FormatSinkImpl *sink);
18
18
 
19
19
  } // namespace str_format_internal
@@ -30,9 +30,6 @@
30
30
 
31
31
  namespace absl {
32
32
  ABSL_NAMESPACE_BEGIN
33
-
34
- class Cord;
35
-
36
33
  namespace str_format_internal {
37
34
 
38
35
  // RawSink implementation that writes into a char* buffer.
@@ -77,12 +74,6 @@ inline void AbslFormatFlush(std::ostream* out, string_view s) {
77
74
  out->write(s.data(), s.size());
78
75
  }
79
76
 
80
- template <class AbslCord, typename = typename std::enable_if<
81
- std::is_same<AbslCord, absl::Cord>::value>::type>
82
- inline void AbslFormatFlush(AbslCord* out, string_view s) {
83
- out->Append(s);
84
- }
85
-
86
77
  inline void AbslFormatFlush(FILERawSink* sink, string_view v) {
87
78
  sink->Write(v);
88
79
  }
@@ -91,10 +82,11 @@ inline void AbslFormatFlush(BufferRawSink* sink, string_view v) {
91
82
  sink->Write(v);
92
83
  }
93
84
 
85
+ // This is a SFINAE to get a better compiler error message when the type
86
+ // is not supported.
94
87
  template <typename T>
95
- auto InvokeFlush(T* out, string_view s)
96
- -> decltype(str_format_internal::AbslFormatFlush(out, s)) {
97
- str_format_internal::AbslFormatFlush(out, s);
88
+ auto InvokeFlush(T* out, string_view s) -> decltype(AbslFormatFlush(out, s)) {
89
+ AbslFormatFlush(out, s);
98
90
  }
99
91
 
100
92
  } // namespace str_format_internal
@@ -17,7 +17,7 @@ namespace absl {
17
17
  ABSL_NAMESPACE_BEGIN
18
18
  namespace str_format_internal {
19
19
 
20
- using CC = ConversionChar;
20
+ using CC = FormatConversionCharInternal;
21
21
  using LM = LengthMod;
22
22
 
23
23
  ABSL_CONST_INIT const ConvTag kTags[256] = {
@@ -29,9 +29,9 @@ ABSL_CONST_INIT const ConvTag kTags[256] = {
29
29
  {}, {}, {}, {}, {}, {}, {}, {}, // 28-2f
30
30
  {}, {}, {}, {}, {}, {}, {}, {}, // 30-37
31
31
  {}, {}, {}, {}, {}, {}, {}, {}, // 38-3f
32
- {}, CC::A, {}, CC::C, {}, CC::E, CC::F, CC::G, // @ABCDEFG
32
+ {}, CC::A, {}, {}, {}, CC::E, CC::F, CC::G, // @ABCDEFG
33
33
  {}, {}, {}, {}, LM::L, {}, {}, {}, // HIJKLMNO
34
- {}, {}, {}, CC::S, {}, {}, {}, {}, // PQRSTUVW
34
+ {}, {}, {}, {}, {}, {}, {}, {}, // PQRSTUVW
35
35
  CC::X, {}, {}, {}, {}, {}, {}, {}, // XYZ[\]^_
36
36
  {}, CC::a, {}, CC::c, CC::d, CC::e, CC::f, CC::g, // `abcdefg
37
37
  LM::h, CC::i, LM::j, {}, LM::l, {}, CC::n, CC::o, // hijklmno
@@ -296,15 +296,17 @@ struct ParsedFormatBase::ParsedFormatConsumer {
296
296
  char* data_pos;
297
297
  };
298
298
 
299
- ParsedFormatBase::ParsedFormatBase(string_view format, bool allow_ignored,
300
- std::initializer_list<Conv> convs)
299
+ ParsedFormatBase::ParsedFormatBase(
300
+ string_view format, bool allow_ignored,
301
+ std::initializer_list<FormatConversionCharSet> convs)
301
302
  : data_(format.empty() ? nullptr : new char[format.size()]) {
302
303
  has_error_ = !ParseFormatString(format, ParsedFormatConsumer(this)) ||
303
304
  !MatchesConversions(allow_ignored, convs);
304
305
  }
305
306
 
306
307
  bool ParsedFormatBase::MatchesConversions(
307
- bool allow_ignored, std::initializer_list<Conv> convs) const {
308
+ bool allow_ignored,
309
+ std::initializer_list<FormatConversionCharSet> convs) const {
308
310
  std::unordered_set<int> used;
309
311
  auto add_if_valid_conv = [&](int pos, char c) {
310
312
  if (static_cast<size_t>(pos) > convs.size() ||
@@ -67,7 +67,7 @@ struct UnboundConversion {
67
67
 
68
68
  Flags flags;
69
69
  LengthMod length_mod = LengthMod::none;
70
- ConversionChar conv = FormatConversionChar::kNone;
70
+ FormatConversionChar conv = FormatConversionCharInternal::kNone;
71
71
  };
72
72
 
73
73
  // Consume conversion spec prefix (not including '%') of [p, end) if valid.
@@ -83,7 +83,7 @@ const char* ConsumeUnboundConversion(const char* p, const char* end,
83
83
  // conversions.
84
84
  class ConvTag {
85
85
  public:
86
- constexpr ConvTag(ConversionChar conversion_char) // NOLINT
86
+ constexpr ConvTag(FormatConversionChar conversion_char) // NOLINT
87
87
  : tag_(static_cast<int8_t>(conversion_char)) {}
88
88
  // We invert the length modifiers to make them negative so that we can easily
89
89
  // test for them.
@@ -94,9 +94,9 @@ class ConvTag {
94
94
 
95
95
  bool is_conv() const { return tag_ >= 0; }
96
96
  bool is_length() const { return tag_ < 0 && tag_ != -128; }
97
- ConversionChar as_conv() const {
97
+ FormatConversionChar as_conv() const {
98
98
  assert(is_conv());
99
- return static_cast<ConversionChar>(tag_);
99
+ return static_cast<FormatConversionChar>(tag_);
100
100
  }
101
101
  LengthMod as_length() const {
102
102
  assert(is_length());
@@ -143,7 +143,7 @@ bool ParseFormatString(string_view src, Consumer consumer) {
143
143
  auto tag = GetTagForChar(percent[1]);
144
144
  if (tag.is_conv()) {
145
145
  if (ABSL_PREDICT_FALSE(next_arg < 0)) {
146
- // This indicates an error in the format std::string.
146
+ // This indicates an error in the format string.
147
147
  // The only way to get `next_arg < 0` here is to have a positional
148
148
  // argument first which sets next_arg to -1 and then a non-positional
149
149
  // argument.
@@ -186,8 +186,9 @@ constexpr bool EnsureConstexpr(string_view s) {
186
186
 
187
187
  class ParsedFormatBase {
188
188
  public:
189
- explicit ParsedFormatBase(string_view format, bool allow_ignored,
190
- std::initializer_list<Conv> convs);
189
+ explicit ParsedFormatBase(
190
+ string_view format, bool allow_ignored,
191
+ std::initializer_list<FormatConversionCharSet> convs);
191
192
 
192
193
  ParsedFormatBase(const ParsedFormatBase& other) { *this = other; }
193
194
 
@@ -234,8 +235,9 @@ class ParsedFormatBase {
234
235
  private:
235
236
  // Returns whether the conversions match and if !allow_ignored it verifies
236
237
  // that all conversions are used by the format.
237
- bool MatchesConversions(bool allow_ignored,
238
- std::initializer_list<Conv> convs) const;
238
+ bool MatchesConversions(
239
+ bool allow_ignored,
240
+ std::initializer_list<FormatConversionCharSet> convs) const;
239
241
 
240
242
  struct ParsedFormatConsumer;
241
243
 
@@ -280,14 +282,14 @@ class ParsedFormatBase {
280
282
  // This is the only API that allows the user to pass a runtime specified format
281
283
  // string. These factory functions will return NULL if the format does not match
282
284
  // the conversions requested by the user.
283
- template <str_format_internal::Conv... C>
285
+ template <FormatConversionCharSet... C>
284
286
  class ExtendedParsedFormat : public str_format_internal::ParsedFormatBase {
285
287
  public:
286
288
  explicit ExtendedParsedFormat(string_view format)
287
289
  #ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
288
290
  __attribute__((
289
291
  enable_if(str_format_internal::EnsureConstexpr(format),
290
- "Format std::string is not constexpr."),
292
+ "Format string is not constexpr."),
291
293
  enable_if(str_format_internal::ValidFormatImpl<C...>(format),
292
294
  "Format specified does not match the template arguments.")))
293
295
  #endif // ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
@@ -65,8 +65,8 @@ class ConvertibleToStringView {
65
65
  : value_(s) {}
66
66
 
67
67
  // Matches rvalue strings and moves their data to a member.
68
- ConvertibleToStringView(std::string&& s) // NOLINT(runtime/explicit)
69
- : copy_(std::move(s)), value_(copy_) {}
68
+ ConvertibleToStringView(std::string&& s) // NOLINT(runtime/explicit)
69
+ : copy_(std::move(s)), value_(copy_) {}
70
70
 
71
71
  ConvertibleToStringView(const ConvertibleToStringView& other)
72
72
  : copy_(other.copy_),
@@ -141,12 +141,12 @@ namespace strings_internal {
141
141
  std::string CatPieces(std::initializer_list<absl::string_view> pieces) {
142
142
  std::string result;
143
143
  size_t total_size = 0;
144
- for (const absl::string_view piece : pieces) total_size += piece.size();
144
+ for (const absl::string_view& piece : pieces) total_size += piece.size();
145
145
  strings_internal::STLStringResizeUninitialized(&result, total_size);
146
146
 
147
147
  char* const begin = &result[0];
148
148
  char* out = begin;
149
- for (const absl::string_view piece : pieces) {
149
+ for (const absl::string_view& piece : pieces) {
150
150
  const size_t this_size = piece.size();
151
151
  if (this_size != 0) {
152
152
  memcpy(out, piece.data(), this_size);
@@ -170,7 +170,7 @@ void AppendPieces(std::string* dest,
170
170
  std::initializer_list<absl::string_view> pieces) {
171
171
  size_t old_size = dest->size();
172
172
  size_t total_size = old_size;
173
- for (const absl::string_view piece : pieces) {
173
+ for (const absl::string_view& piece : pieces) {
174
174
  ASSERT_NO_OVERLAP(*dest, piece);
175
175
  total_size += piece.size();
176
176
  }
@@ -178,7 +178,7 @@ void AppendPieces(std::string* dest,
178
178
 
179
179
  char* const begin = &(*dest)[0];
180
180
  char* out = begin + old_size;
181
- for (const absl::string_view piece : pieces) {
181
+ for (const absl::string_view& piece : pieces) {
182
182
  const size_t this_size = piece.size();
183
183
  if (this_size != 0) {
184
184
  memcpy(out, piece.data(), this_size);
@@ -253,7 +253,7 @@ class AlphaNum {
253
253
  const std::basic_string<char, std::char_traits<char>, Allocator>& str)
254
254
  : piece_(str) {}
255
255
 
256
- // Use std::string literals ":" instead of character literals ':'.
256
+ // Use string literals ":" instead of character literals ':'.
257
257
  AlphaNum(char c) = delete; // NOLINT(runtime/explicit)
258
258
 
259
259
  AlphaNum(const AlphaNum&) = delete;
@@ -19,7 +19,7 @@
19
19
  //
20
20
  // The `str_format` library is a typesafe replacement for the family of
21
21
  // `printf()` string formatting routines within the `<cstdio>` standard library
22
- // header. Like the `printf` family, the `str_format` uses a "format string" to
22
+ // header. Like the `printf` family, `str_format` uses a "format string" to
23
23
  // perform argument substitutions based on types. See the `FormatSpec` section
24
24
  // below for format string documentation.
25
25
  //
@@ -57,8 +57,7 @@
57
57
  // arbitrary sink types:
58
58
  //
59
59
  // * A generic `Format()` function to write outputs to arbitrary sink types,
60
- // which must implement a `RawSinkFormat` interface. (See
61
- // `str_format_sink.h` for more information.)
60
+ // which must implement a `FormatRawSink` interface.
62
61
  //
63
62
  // * A `FormatUntyped()` function that is similar to `Format()` except it is
64
63
  // loosely typed. `FormatUntyped()` is not a template and does not perform
@@ -66,8 +65,7 @@
66
65
  // boolean from a runtime check.
67
66
  //
68
67
  // In addition, the `str_format` library provides extension points for
69
- // augmenting formatting to new types. These extensions are fully documented
70
- // within the `str_format_extension.h` header file.
68
+ // augmenting formatting to new types. See "StrFormat Extensions" below.
71
69
 
72
70
  #ifndef ABSL_STRINGS_STR_FORMAT_H_
73
71
  #define ABSL_STRINGS_STR_FORMAT_H_
@@ -255,8 +253,8 @@ class FormatCountCapture {
255
253
  // argument, etc.
256
254
 
257
255
  template <typename... Args>
258
- using FormatSpec =
259
- typename str_format_internal::FormatSpecDeductionBarrier<Args...>::type;
256
+ using FormatSpec = str_format_internal::FormatSpecTemplate<
257
+ str_format_internal::ArgumentToConv<Args>()...>;
260
258
 
261
259
  // ParsedFormat
262
260
  //
@@ -283,9 +281,36 @@ using FormatSpec =
283
281
  // } else {
284
282
  // ... error case ...
285
283
  // }
284
+
285
+ #if defined(__cpp_nontype_template_parameter_auto)
286
+ // If C++17 is available, an 'extended' format is also allowed that can specify
287
+ // multiple conversion characters per format argument, using a combination of
288
+ // `absl::FormatConversionCharSet` enum values (logically a set union)
289
+ // via the `|` operator. (Single character-based arguments are still accepted,
290
+ // but cannot be combined). Some common conversions also have predefined enum
291
+ // values, such as `absl::FormatConversionCharSet::kIntegral`.
292
+ //
293
+ // Example:
294
+ // // Extended format supports multiple conversion characters per argument,
295
+ // // specified via a combination of `FormatConversionCharSet` enums.
296
+ // using MyFormat = absl::ParsedFormat<absl::FormatConversionCharSet::d |
297
+ // absl::FormatConversionCharSet::x>;
298
+ // MyFormat GetFormat(bool use_hex) {
299
+ // if (use_hex) return MyFormat("foo %x bar");
300
+ // return MyFormat("foo %d bar");
301
+ // }
302
+ // // `format` can be used with any value that supports 'd' and 'x',
303
+ // // like `int`.
304
+ // auto format = GetFormat(use_hex);
305
+ // value = StringF(format, i);
306
+ template <auto... Conv>
307
+ using ParsedFormat = absl::str_format_internal::ExtendedParsedFormat<
308
+ absl::str_format_internal::ToFormatConversionCharSet(Conv)...>;
309
+ #else
286
310
  template <char... Conv>
287
311
  using ParsedFormat = str_format_internal::ExtendedParsedFormat<
288
- str_format_internal::ConversionCharToConv(Conv)...>;
312
+ absl::str_format_internal::ToFormatConversionCharSet(Conv)...>;
313
+ #endif // defined(__cpp_nontype_template_parameter_auto)
289
314
 
290
315
  // StrFormat()
291
316
  //
@@ -432,6 +457,16 @@ int SNPrintF(char* output, std::size_t size, const FormatSpec<Args...>& format,
432
457
  //
433
458
  // FormatRawSink is a type erased wrapper around arbitrary sink objects
434
459
  // specifically used as an argument to `Format()`.
460
+ //
461
+ // All the object has to do define an overload of `AbslFormatFlush()` for the
462
+ // sink, usually by adding a ADL-based free function in the same namespace as
463
+ // the sink:
464
+ //
465
+ // void AbslFormatFlush(MySink* dest, absl::string_view part);
466
+ //
467
+ // where `dest` is the pointer passed to `absl::Format()`. The function should
468
+ // append `part` to `dest`.
469
+ //
435
470
  // FormatRawSink does not own the passed sink object. The passed object must
436
471
  // outlive the FormatRawSink.
437
472
  class FormatRawSink {
@@ -455,12 +490,13 @@ class FormatRawSink {
455
490
  // `absl::FormatRawSink` interface), using a format string and zero or more
456
491
  // additional arguments.
457
492
  //
458
- // By default, `std::string` and `std::ostream` are supported as destination
459
- // objects. If a `std::string` is used the formatted string is appended to it.
493
+ // By default, `std::string`, `std::ostream`, and `absl::Cord` are supported as
494
+ // destination objects. If a `std::string` is used the formatted string is
495
+ // appended to it.
460
496
  //
461
- // `absl::Format()` is a generic version of `absl::StrFormat(), for custom
462
- // sinks. The format string, like format strings for `StrFormat()`, is checked
463
- // at compile-time.
497
+ // `absl::Format()` is a generic version of `absl::StrAppendFormat()`, for
498
+ // custom sinks. The format string, like format strings for `StrFormat()`, is
499
+ // checked at compile-time.
464
500
  //
465
501
  // On failure, this function returns `false` and the state of the sink is
466
502
  // unspecified.
@@ -531,6 +567,246 @@ ABSL_MUST_USE_RESULT inline bool FormatUntyped(
531
567
  str_format_internal::UntypedFormatSpecImpl::Extract(format), args);
532
568
  }
533
569
 
570
+ //------------------------------------------------------------------------------
571
+ // StrFormat Extensions
572
+ //------------------------------------------------------------------------------
573
+ //
574
+ // AbslFormatConvert()
575
+ //
576
+ // The StrFormat library provides a customization API for formatting
577
+ // user-defined types using absl::StrFormat(). The API relies on detecting an
578
+ // overload in the user-defined type's namespace of a free (non-member)
579
+ // `AbslFormatConvert()` function, usually as a friend definition with the
580
+ // following signature:
581
+ //
582
+ // absl::FormatConvertResult<...> AbslFormatConvert(
583
+ // const X& value,
584
+ // const absl::FormatConversionSpec& spec,
585
+ // absl::FormatSink *sink);
586
+ //
587
+ // An `AbslFormatConvert()` overload for a type should only be declared in the
588
+ // same file and namespace as said type.
589
+ //
590
+ // The abstractions within this definition include:
591
+ //
592
+ // * An `absl::FormatConversionSpec` to specify the fields to pull from a
593
+ // user-defined type's format string
594
+ // * An `absl::FormatSink` to hold the converted string data during the
595
+ // conversion process.
596
+ // * An `absl::FormatConvertResult` to hold the status of the returned
597
+ // formatting operation
598
+ //
599
+ // The return type encodes all the conversion characters that your
600
+ // AbslFormatConvert() routine accepts. The return value should be {true}.
601
+ // A return value of {false} will result in `StrFormat()` returning
602
+ // an empty string. This result will be propagated to the result of
603
+ // `FormatUntyped`.
604
+ //
605
+ // Example:
606
+ //
607
+ // struct Point {
608
+ // // To add formatting support to `Point`, we simply need to add a free
609
+ // // (non-member) function `AbslFormatConvert()`. This method interprets
610
+ // // `spec` to print in the request format. The allowed conversion characters
611
+ // // can be restricted via the type of the result, in this example
612
+ // // string and integral formatting are allowed (but not, for instance
613
+ // // floating point characters like "%f"). You can add such a free function
614
+ // // using a friend declaration within the body of the class:
615
+ // friend absl::FormatConvertResult<absl::FormatConversionCharSet::kString |
616
+ // absl::FormatConversionCharSet::kIntegral>
617
+ // AbslFormatConvert(const Point& p, const absl::FormatConversionSpec& spec,
618
+ // absl::FormatSink* s) {
619
+ // if (spec.conversion_char() == absl::FormatConversionChar::s) {
620
+ // s->Append(absl::StrCat("x=", p.x, " y=", p.y));
621
+ // } else {
622
+ // s->Append(absl::StrCat(p.x, ",", p.y));
623
+ // }
624
+ // return {true};
625
+ // }
626
+ //
627
+ // int x;
628
+ // int y;
629
+ // };
630
+
631
+ // clang-format off
632
+
633
+ // FormatConversionChar
634
+ //
635
+ // Specifies the formatting character provided in the format string
636
+ // passed to `StrFormat()`.
637
+ enum class FormatConversionChar : uint8_t {
638
+ c, s, // text
639
+ d, i, o, u, x, X, // int
640
+ f, F, e, E, g, G, a, A, // float
641
+ n, p // misc
642
+ };
643
+ // clang-format on
644
+
645
+ // FormatConversionSpec
646
+ //
647
+ // Specifies modifications to the conversion of the format string, through use
648
+ // of one or more format flags in the source format string.
649
+ class FormatConversionSpec {
650
+ public:
651
+ // FormatConversionSpec::is_basic()
652
+ //
653
+ // Indicates that width and precision are not specified, and no additional
654
+ // flags are set for this conversion character in the format string.
655
+ bool is_basic() const { return impl_.is_basic(); }
656
+
657
+ // FormatConversionSpec::has_left_flag()
658
+ //
659
+ // Indicates whether the result should be left justified for this conversion
660
+ // character in the format string. This flag is set through use of a '-'
661
+ // character in the format string. E.g. "%-s"
662
+ bool has_left_flag() const { return impl_.has_left_flag(); }
663
+
664
+ // FormatConversionSpec::has_show_pos_flag()
665
+ //
666
+ // Indicates whether a sign column is prepended to the result for this
667
+ // conversion character in the format string, even if the result is positive.
668
+ // This flag is set through use of a '+' character in the format string.
669
+ // E.g. "%+d"
670
+ bool has_show_pos_flag() const { return impl_.has_show_pos_flag(); }
671
+
672
+ // FormatConversionSpec::has_sign_col_flag()
673
+ //
674
+ // Indicates whether a mandatory sign column is added to the result for this
675
+ // conversion character. This flag is set through use of a space character
676
+ // (' ') in the format string. E.g. "% i"
677
+ bool has_sign_col_flag() const { return impl_.has_sign_col_flag(); }
678
+
679
+ // FormatConversionSpec::has_alt_flag()
680
+ //
681
+ // Indicates whether an "alternate" format is applied to the result for this
682
+ // conversion character. Alternative forms depend on the type of conversion
683
+ // character, and unallowed alternatives are undefined. This flag is set
684
+ // through use of a '#' character in the format string. E.g. "%#h"
685
+ bool has_alt_flag() const { return impl_.has_alt_flag(); }
686
+
687
+ // FormatConversionSpec::has_zero_flag()
688
+ //
689
+ // Indicates whether zeroes should be prepended to the result for this
690
+ // conversion character instead of spaces. This flag is set through use of the
691
+ // '0' character in the format string. E.g. "%0f"
692
+ bool has_zero_flag() const { return impl_.has_zero_flag(); }
693
+
694
+ // FormatConversionSpec::conversion_char()
695
+ //
696
+ // Returns the underlying conversion character.
697
+ FormatConversionChar conversion_char() const {
698
+ return impl_.conversion_char();
699
+ }
700
+
701
+ // FormatConversionSpec::width()
702
+ //
703
+ // Returns the specified width (indicated through use of a non-zero integer
704
+ // value or '*' character) of the conversion character. If width is
705
+ // unspecified, it returns a negative value.
706
+ int width() const { return impl_.width(); }
707
+
708
+ // FormatConversionSpec::precision()
709
+ //
710
+ // Returns the specified precision (through use of the '.' character followed
711
+ // by a non-zero integer value or '*' character) of the conversion character.
712
+ // If precision is unspecified, it returns a negative value.
713
+ int precision() const { return impl_.precision(); }
714
+
715
+ private:
716
+ explicit FormatConversionSpec(
717
+ str_format_internal::FormatConversionSpecImpl impl)
718
+ : impl_(impl) {}
719
+
720
+ friend str_format_internal::FormatConversionSpecImpl;
721
+
722
+ absl::str_format_internal::FormatConversionSpecImpl impl_;
723
+ };
724
+
725
+ // Type safe OR operator for FormatConversionCharSet to allow accepting multiple
726
+ // conversion chars in custom format converters.
727
+ constexpr FormatConversionCharSet operator|(FormatConversionCharSet a,
728
+ FormatConversionCharSet b) {
729
+ return static_cast<FormatConversionCharSet>(static_cast<uint64_t>(a) |
730
+ static_cast<uint64_t>(b));
731
+ }
732
+
733
+ // FormatConversionCharSet
734
+ //
735
+ // Specifies the _accepted_ conversion types as a template parameter to
736
+ // FormatConvertResult for custom implementations of `AbslFormatConvert`.
737
+ // Note the helper predefined alias definitions (kIntegral, etc.) below.
738
+ enum class FormatConversionCharSet : uint64_t {
739
+ // text
740
+ c = str_format_internal::FormatConversionCharToConvInt('c'),
741
+ s = str_format_internal::FormatConversionCharToConvInt('s'),
742
+ // integer
743
+ d = str_format_internal::FormatConversionCharToConvInt('d'),
744
+ i = str_format_internal::FormatConversionCharToConvInt('i'),
745
+ o = str_format_internal::FormatConversionCharToConvInt('o'),
746
+ u = str_format_internal::FormatConversionCharToConvInt('u'),
747
+ x = str_format_internal::FormatConversionCharToConvInt('x'),
748
+ X = str_format_internal::FormatConversionCharToConvInt('X'),
749
+ // Float
750
+ f = str_format_internal::FormatConversionCharToConvInt('f'),
751
+ F = str_format_internal::FormatConversionCharToConvInt('F'),
752
+ e = str_format_internal::FormatConversionCharToConvInt('e'),
753
+ E = str_format_internal::FormatConversionCharToConvInt('E'),
754
+ g = str_format_internal::FormatConversionCharToConvInt('g'),
755
+ G = str_format_internal::FormatConversionCharToConvInt('G'),
756
+ a = str_format_internal::FormatConversionCharToConvInt('a'),
757
+ A = str_format_internal::FormatConversionCharToConvInt('A'),
758
+ // misc
759
+ n = str_format_internal::FormatConversionCharToConvInt('n'),
760
+ p = str_format_internal::FormatConversionCharToConvInt('p'),
761
+
762
+ // Used for width/precision '*' specification.
763
+ kStar = static_cast<uint64_t>(
764
+ absl::str_format_internal::FormatConversionCharSetInternal::kStar),
765
+ // Some predefined values:
766
+ kIntegral = d | i | u | o | x | X,
767
+ kFloating = a | e | f | g | A | E | F | G,
768
+ kNumeric = kIntegral | kFloating,
769
+ kString = s,
770
+ kPointer = p,
771
+ };
772
+
773
+ // FormatSink
774
+ //
775
+ // An abstraction to which conversions write their string data.
776
+ //
777
+ class FormatSink {
778
+ public:
779
+ // Appends `count` copies of `ch`.
780
+ void Append(size_t count, char ch) { sink_->Append(count, ch); }
781
+
782
+ void Append(string_view v) { sink_->Append(v); }
783
+
784
+ // Appends the first `precision` bytes of `v`. If this is less than
785
+ // `width`, spaces will be appended first (if `left` is false), or
786
+ // after (if `left` is true) to ensure the total amount appended is
787
+ // at least `width`.
788
+ bool PutPaddedString(string_view v, int width, int precision, bool left) {
789
+ return sink_->PutPaddedString(v, width, precision, left);
790
+ }
791
+
792
+ private:
793
+ friend str_format_internal::FormatSinkImpl;
794
+ explicit FormatSink(str_format_internal::FormatSinkImpl* s) : sink_(s) {}
795
+ str_format_internal::FormatSinkImpl* sink_;
796
+ };
797
+
798
+ // FormatConvertResult
799
+ //
800
+ // Indicates whether a call to AbslFormatConvert() was successful.
801
+ // This return type informs the StrFormat extension framework (through
802
+ // ADL but using the return type) of what conversion characters are supported.
803
+ // It is strongly discouraged to return {false}, as this will result in an
804
+ // empty string in StrFormat.
805
+ template <FormatConversionCharSet C>
806
+ struct FormatConvertResult {
807
+ bool value;
808
+ };
809
+
534
810
  ABSL_NAMESPACE_END
535
811
  } // namespace absl
536
812