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
@@ -450,7 +450,7 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
450
450
 
451
451
  // The GET_INPUT macro gets the next input character, skipping
452
452
  // over any whitespace, and stopping when we reach the end of the
453
- // std::string or when we read any non-data character. The arguments are
453
+ // string or when we read any non-data character. The arguments are
454
454
  // an arbitrary identifier (used as a label for goto) and the number
455
455
  // of data bytes that must remain in the input to avoid aborting the
456
456
  // loop.
@@ -473,18 +473,18 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
473
473
  if (dest) {
474
474
  // This loop consumes 4 input bytes and produces 3 output bytes
475
475
  // per iteration. We can't know at the start that there is enough
476
- // data left in the std::string for a full iteration, so the loop may
476
+ // data left in the string for a full iteration, so the loop may
477
477
  // break out in the middle; if so 'state' will be set to the
478
478
  // number of input bytes read.
479
479
 
480
480
  while (szsrc >= 4) {
481
481
  // We'll start by optimistically assuming that the next four
482
- // bytes of the std::string (src[0..3]) are four good data bytes
482
+ // bytes of the string (src[0..3]) are four good data bytes
483
483
  // (that is, no nulls, whitespace, padding chars, or illegal
484
484
  // chars). We need to test src[0..2] for nulls individually
485
485
  // before constructing temp to preserve the property that we
486
- // never read past a null in the std::string (no matter how long
487
- // szsrc claims the std::string is).
486
+ // never read past a null in the string (no matter how long
487
+ // szsrc claims the string is).
488
488
 
489
489
  if (!src[0] || !src[1] || !src[2] ||
490
490
  ((temp = ((unsigned(unbase64[src[0]]) << 18) |
@@ -509,7 +509,7 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
509
509
  temp = (temp << 6) | decode;
510
510
  } else {
511
511
  // We really did have four good data bytes, so advance four
512
- // characters in the std::string.
512
+ // characters in the string.
513
513
 
514
514
  szsrc -= 4;
515
515
  src += 4;
@@ -644,7 +644,7 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
644
644
  state);
645
645
  }
646
646
 
647
- // The remainder of the std::string should be all whitespace, mixed with
647
+ // The remainder of the string should be all whitespace, mixed with
648
648
  // exactly 0 equals signs, or exactly 'expected_equals' equals
649
649
  // signs. (Always accepting 0 equals signs is an Abseil extension
650
650
  // not covered in the RFC, as is accepting dot as the pad character.)
@@ -771,7 +771,7 @@ constexpr char kWebSafeBase64Chars[] =
771
771
  template <typename String>
772
772
  bool Base64UnescapeInternal(const char* src, size_t slen, String* dest,
773
773
  const signed char* unbase64) {
774
- // Determine the size of the output std::string. Base64 encodes every 3 bytes into
774
+ // Determine the size of the output string. Base64 encodes every 3 bytes into
775
775
  // 4 characters. any leftover chars are added directly for good measure.
776
776
  // This is documented in the base64 RFC: http://tools.ietf.org/html/rfc3548
777
777
  const size_t dest_len = 3 * (slen / 4) + (slen % 4);
@@ -779,7 +779,7 @@ bool Base64UnescapeInternal(const char* src, size_t slen, String* dest,
779
779
  strings_internal::STLStringResizeUninitialized(dest, dest_len);
780
780
 
781
781
  // We are getting the destination buffer by getting the beginning of the
782
- // std::string and converting it into a char *.
782
+ // string and converting it into a char *.
783
783
  size_t len;
784
784
  const bool ok =
785
785
  Base64UnescapeInternal(src, slen, &(*dest)[0], dest_len, unbase64, &len);
@@ -72,7 +72,7 @@ class Charmap {
72
72
  CharMaskForWord(x, 2), CharMaskForWord(x, 3));
73
73
  }
74
74
 
75
- // Containing all the chars in the C-std::string 's'.
75
+ // Containing all the chars in the C-string 's'.
76
76
  // Note that this is expensively recursive because of the C++11 constexpr
77
77
  // formulation. Use only in constexpr initializers.
78
78
  static constexpr Charmap FromString(const char* s) {
@@ -208,7 +208,7 @@ int BigUnsigned<max_words>::ReadDigits(const char* begin, const char* end,
208
208
  ++dropped_digits;
209
209
  }
210
210
  if (begin < end && *std::prev(end) == '.') {
211
- // If the std::string ends in '.', either before or after dropping zeroes, then
211
+ // If the string ends in '.', either before or after dropping zeroes, then
212
212
  // drop the decimal point and look for more digits to drop.
213
213
  dropped_digits = 0;
214
214
  --end;
@@ -66,7 +66,7 @@ class BigUnsigned {
66
66
  static_cast<uint32_t>(v >> 32)} {}
67
67
 
68
68
  // Constructs a BigUnsigned from the given string_view containing a decimal
69
- // value. If the input std::string is not a decimal integer, constructs a 0
69
+ // value. If the input string is not a decimal integer, constructs a 0
70
70
  // instead.
71
71
  explicit BigUnsigned(absl::string_view sv) : size_(0), words_{} {
72
72
  // Check for valid input, returning a 0 otherwise. This is reasonable
@@ -210,7 +210,7 @@ class BigUnsigned {
210
210
  return words_[index];
211
211
  }
212
212
 
213
- // Returns this integer as a decimal std::string. This is not used in the decimal-
213
+ // Returns this integer as a decimal string. This is not used in the decimal-
214
214
  // to-binary conversion; it is intended to aid in testing.
215
215
  std::string ToString() const;
216
216
 
@@ -302,7 +302,7 @@ bool ParseInfinityOrNan(const char* begin, const char* end,
302
302
  switch (*begin) {
303
303
  case 'i':
304
304
  case 'I': {
305
- // An infinity std::string consists of the characters "inf" or "infinity",
305
+ // An infinity string consists of the characters "inf" or "infinity",
306
306
  // case insensitive.
307
307
  if (strings_internal::memcasecmp(begin + 1, "nf", 2) != 0) {
308
308
  return false;
@@ -326,7 +326,7 @@ bool ParseInfinityOrNan(const char* begin, const char* end,
326
326
  }
327
327
  out->type = strings_internal::FloatType::kNan;
328
328
  out->end = begin + 3;
329
- // NaN is allowed to be followed by a parenthesized std::string, consisting of
329
+ // NaN is allowed to be followed by a parenthesized string, consisting of
330
330
  // only the characters [a-zA-Z0-9_]. Match that if it's present.
331
331
  begin += 3;
332
332
  if (begin < end && *begin == '(') {
@@ -21,6 +21,8 @@
21
21
  #include <cstdint>
22
22
  #include <type_traits>
23
23
 
24
+ #include "absl/base/internal/invoke.h"
25
+ #include "absl/container/internal/compressed_tuple.h"
24
26
  #include "absl/meta/type_traits.h"
25
27
  #include "absl/strings/string_view.h"
26
28
 
@@ -86,8 +88,7 @@ struct CordRepExternal;
86
88
  struct CordRep {
87
89
  // The following three fields have to be less than 32 bytes since
88
90
  // that is the smallest supported flat node size.
89
- // We use uint64_t for the length even in 32-bit binaries.
90
- uint64_t length;
91
+ size_t length;
91
92
  Refcount refcount;
92
93
  // If tag < FLAT, it represents CordRepKind and indicates the type of node.
93
94
  // Otherwise, the node type is CordRepFlat and the tag is the encoded size.
@@ -115,35 +116,56 @@ struct CordRepSubstring : public CordRep {
115
116
  CordRep* child;
116
117
  };
117
118
 
118
- // TODO(strel): replace the following logic (and related functions in cord.cc)
119
- // with container_internal::Layout.
120
-
121
- // Alignment requirement for CordRepExternal so that the type erased releaser
122
- // will be stored at a suitably aligned address.
123
- constexpr size_t ExternalRepAlignment() {
124
- #if defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
125
- return __STDCPP_DEFAULT_NEW_ALIGNMENT__;
126
- #else
127
- return alignof(max_align_t);
128
- #endif
129
- }
130
-
131
- // Type for function pointer that will invoke and destroy the type-erased
132
- // releaser function object. Accepts a pointer to the releaser and the
133
- // `string_view` that were passed in to `NewExternalRep` below. The return value
134
- // is the size of the `Releaser` type.
135
- using ExternalReleaserInvoker = size_t (*)(void*, absl::string_view);
119
+ // Type for function pointer that will invoke the releaser function and also
120
+ // delete the `CordRepExternalImpl` corresponding to the passed in
121
+ // `CordRepExternal`.
122
+ using ExternalReleaserInvoker = void (*)(CordRepExternal*);
136
123
 
137
124
  // External CordReps are allocated together with a type erased releaser. The
138
125
  // releaser is stored in the memory directly following the CordRepExternal.
139
- struct alignas(ExternalRepAlignment()) CordRepExternal : public CordRep {
126
+ struct CordRepExternal : public CordRep {
140
127
  const char* base;
141
128
  // Pointer to function that knows how to call and destroy the releaser.
142
129
  ExternalReleaserInvoker releaser_invoker;
143
130
  };
144
131
 
145
- // TODO(strel): look into removing, it doesn't seem like anything relies on this
146
- static_assert(sizeof(CordRepConcat) == sizeof(CordRepSubstring), "");
132
+ struct Rank1 {};
133
+ struct Rank0 : Rank1 {};
134
+
135
+ template <typename Releaser, typename = ::absl::base_internal::invoke_result_t<
136
+ Releaser, absl::string_view>>
137
+ void InvokeReleaser(Rank0, Releaser&& releaser, absl::string_view data) {
138
+ ::absl::base_internal::invoke(std::forward<Releaser>(releaser), data);
139
+ }
140
+
141
+ template <typename Releaser,
142
+ typename = ::absl::base_internal::invoke_result_t<Releaser>>
143
+ void InvokeReleaser(Rank1, Releaser&& releaser, absl::string_view) {
144
+ ::absl::base_internal::invoke(std::forward<Releaser>(releaser));
145
+ }
146
+
147
+ // We use CompressedTuple so that we can benefit from EBCO.
148
+ template <typename Releaser>
149
+ struct CordRepExternalImpl
150
+ : public CordRepExternal,
151
+ public ::absl::container_internal::CompressedTuple<Releaser> {
152
+ // The extra int arg is so that we can avoid interfering with copy/move
153
+ // constructors while still benefitting from perfect forwarding.
154
+ template <typename T>
155
+ CordRepExternalImpl(T&& releaser, int)
156
+ : CordRepExternalImpl::CompressedTuple(std::forward<T>(releaser)) {
157
+ this->releaser_invoker = &Release;
158
+ }
159
+
160
+ ~CordRepExternalImpl() {
161
+ InvokeReleaser(Rank0{}, std::move(this->template get<0>()),
162
+ absl::string_view(base, length));
163
+ }
164
+
165
+ static void Release(CordRepExternal* rep) {
166
+ delete static_cast<CordRepExternalImpl*>(rep);
167
+ }
168
+ };
147
169
 
148
170
  } // namespace cord_internal
149
171
  ABSL_NAMESPACE_END
@@ -12,14 +12,13 @@
12
12
 
13
13
  #include "absl/base/port.h"
14
14
  #include "absl/strings/internal/str_format/float_conversion.h"
15
+ #include "absl/strings/numbers.h"
15
16
 
16
17
  namespace absl {
17
18
  ABSL_NAMESPACE_BEGIN
18
19
  namespace str_format_internal {
19
20
  namespace {
20
21
 
21
- const char kDigit[2][32] = { "0123456789abcdef", "0123456789ABCDEF" };
22
-
23
22
  // Reduce *capacity by s.size(), clipped to a 0 minimum.
24
23
  void ReducePadding(string_view s, size_t *capacity) {
25
24
  *capacity = Excess(s.size(), *capacity);
@@ -48,125 +47,179 @@ struct IsSigned<absl::int128> : std::true_type {};
48
47
  template <>
49
48
  struct IsSigned<absl::uint128> : std::false_type {};
50
49
 
51
- class ConvertedIntInfo {
50
+ // Integral digit printer.
51
+ // Call one of the PrintAs* routines after construction once.
52
+ // Use with_neg_and_zero/without_neg_or_zero/is_negative to access the results.
53
+ class IntDigits {
52
54
  public:
55
+ // Print the unsigned integer as octal.
56
+ // Supports unsigned integral types and uint128.
57
+ template <typename T>
58
+ void PrintAsOct(T v) {
59
+ static_assert(!IsSigned<T>::value, "");
60
+ char *p = storage_ + sizeof(storage_);
61
+ do {
62
+ *--p = static_cast<char>('0' + (static_cast<size_t>(v) & 7));
63
+ v >>= 3;
64
+ } while (v);
65
+ start_ = p;
66
+ size_ = storage_ + sizeof(storage_) - p;
67
+ }
68
+
69
+ // Print the signed or unsigned integer as decimal.
70
+ // Supports all integral types.
53
71
  template <typename T>
54
- ConvertedIntInfo(T v, ConversionChar conv) {
55
- using Unsigned = typename MakeUnsigned<T>::type;
56
- auto u = static_cast<Unsigned>(v);
57
- if (IsNeg(v)) {
58
- is_neg_ = true;
59
- u = Unsigned{} - u;
60
- } else {
61
- is_neg_ = false;
72
+ void PrintAsDec(T v) {
73
+ static_assert(std::is_integral<T>::value, "");
74
+ start_ = storage_;
75
+ size_ = numbers_internal::FastIntToBuffer(v, storage_) - storage_;
76
+ }
77
+
78
+ void PrintAsDec(int128 v) {
79
+ auto u = static_cast<uint128>(v);
80
+ bool add_neg = false;
81
+ if (v < 0) {
82
+ add_neg = true;
83
+ u = uint128{} - u;
62
84
  }
63
- UnsignedToStringRight(u, conv);
85
+ PrintAsDec(u, add_neg);
64
86
  }
65
87
 
66
- string_view digits() const {
67
- return {end() - size_, static_cast<size_t>(size_)};
88
+ void PrintAsDec(uint128 v, bool add_neg = false) {
89
+ // This function can be sped up if needed. We can call FastIntToBuffer
90
+ // twice, or fix FastIntToBuffer to support uint128.
91
+ char *p = storage_ + sizeof(storage_);
92
+ do {
93
+ p -= 2;
94
+ numbers_internal::PutTwoDigits(static_cast<size_t>(v % 100), p);
95
+ v /= 100;
96
+ } while (v);
97
+ if (p[0] == '0') {
98
+ // We printed one too many hexits.
99
+ ++p;
100
+ }
101
+ if (add_neg) {
102
+ *--p = '-';
103
+ }
104
+ size_ = storage_ + sizeof(storage_) - p;
105
+ start_ = p;
68
106
  }
69
- bool is_neg() const { return is_neg_; }
70
107
 
71
- private:
72
- template <typename T, bool IsSigned>
73
- struct IsNegImpl {
74
- static bool Eval(T v) { return v < 0; }
75
- };
108
+ // Print the unsigned integer as hex using lowercase.
109
+ // Supports unsigned integral types and uint128.
76
110
  template <typename T>
77
- struct IsNegImpl<T, false> {
78
- static bool Eval(T) {
79
- return false;
111
+ void PrintAsHexLower(T v) {
112
+ static_assert(!IsSigned<T>::value, "");
113
+ char *p = storage_ + sizeof(storage_);
114
+
115
+ do {
116
+ p -= 2;
117
+ constexpr const char* table = numbers_internal::kHexTable;
118
+ std::memcpy(p, table + 2 * (static_cast<size_t>(v) & 0xFF), 2);
119
+ if (sizeof(T) == 1) break;
120
+ v >>= 8;
121
+ } while (v);
122
+ if (p[0] == '0') {
123
+ // We printed one too many digits.
124
+ ++p;
80
125
  }
81
- };
126
+ start_ = p;
127
+ size_ = storage_ + sizeof(storage_) - p;
128
+ }
82
129
 
130
+ // Print the unsigned integer as hex using uppercase.
131
+ // Supports unsigned integral types and uint128.
83
132
  template <typename T>
84
- bool IsNeg(T v) {
85
- return IsNegImpl<T, IsSigned<T>::value>::Eval(v);
133
+ void PrintAsHexUpper(T v) {
134
+ static_assert(!IsSigned<T>::value, "");
135
+ char *p = storage_ + sizeof(storage_);
136
+
137
+ // kHexTable is only lowercase, so do it manually for uppercase.
138
+ do {
139
+ *--p = "0123456789ABCDEF"[static_cast<size_t>(v) & 15];
140
+ v >>= 4;
141
+ } while (v);
142
+ start_ = p;
143
+ size_ = storage_ + sizeof(storage_) - p;
86
144
  }
87
145
 
88
- template <typename T>
89
- void UnsignedToStringRight(T u, ConversionChar conv) {
90
- char *p = end();
91
- switch (FormatConversionCharRadix(conv)) {
92
- default:
93
- case 10:
94
- for (; u; u /= 10)
95
- *--p = static_cast<char>('0' + static_cast<size_t>(u % 10));
96
- break;
97
- case 8:
98
- for (; u; u /= 8)
99
- *--p = static_cast<char>('0' + static_cast<size_t>(u % 8));
100
- break;
101
- case 16: {
102
- const char *digits = kDigit[FormatConversionCharIsUpper(conv) ? 1 : 0];
103
- for (; u; u /= 16) *--p = digits[static_cast<size_t>(u % 16)];
104
- break;
105
- }
106
- }
107
- size_ = static_cast<int>(end() - p);
146
+ // The printed value including the '-' sign if available.
147
+ // For inputs of value `0`, this will return "0"
148
+ string_view with_neg_and_zero() const { return {start_, size_}; }
149
+
150
+ // The printed value not including the '-' sign.
151
+ // For inputs of value `0`, this will return "".
152
+ string_view without_neg_or_zero() const {
153
+ static_assert('-' < '0', "The check below verifies both.");
154
+ size_t advance = start_[0] <= '0' ? 1 : 0;
155
+ return {start_ + advance, size_ - advance};
108
156
  }
109
157
 
110
- const char *end() const { return storage_ + sizeof(storage_); }
111
- char *end() { return storage_ + sizeof(storage_); }
158
+ bool is_negative() const { return start_[0] == '-'; }
112
159
 
113
- bool is_neg_;
114
- int size_;
115
- // Max size: 128 bit value as octal -> 43 digits
116
- char storage_[128 / 3 + 1];
160
+ private:
161
+ const char *start_;
162
+ size_t size_;
163
+ // Max size: 128 bit value as octal -> 43 digits, plus sign char
164
+ char storage_[128 / 3 + 1 + 1];
117
165
  };
118
166
 
119
167
  // Note: 'o' conversions do not have a base indicator, it's just that
120
168
  // the '#' flag is specified to modify the precision for 'o' conversions.
121
- string_view BaseIndicator(const ConvertedIntInfo &info,
122
- const ConversionSpec conv) {
123
- bool alt = conv.flags().alt;
124
- int radix = FormatConversionCharRadix(conv.conv());
125
- if (conv.conv() == ConversionChar::p) alt = true; // always show 0x for %p.
169
+ string_view BaseIndicator(const IntDigits &as_digits,
170
+ const FormatConversionSpecImpl conv) {
171
+ // always show 0x for %p.
172
+ bool alt = conv.has_alt_flag() ||
173
+ conv.conversion_char() == FormatConversionCharInternal::p;
174
+ bool hex = (conv.conversion_char() == FormatConversionCharInternal::x ||
175
+ conv.conversion_char() == FormatConversionCharInternal::X ||
176
+ conv.conversion_char() == FormatConversionCharInternal::p);
126
177
  // From the POSIX description of '#' flag:
127
178
  // "For x or X conversion specifiers, a non-zero result shall have
128
179
  // 0x (or 0X) prefixed to it."
129
- if (alt && radix == 16 && !info.digits().empty()) {
130
- if (FormatConversionCharIsUpper(conv.conv())) return "0X";
131
- return "0x";
180
+ if (alt && hex && !as_digits.without_neg_or_zero().empty()) {
181
+ return conv.conversion_char() == FormatConversionCharInternal::X ? "0X"
182
+ : "0x";
132
183
  }
133
184
  return {};
134
185
  }
135
186
 
136
- string_view SignColumn(bool neg, const ConversionSpec conv) {
137
- if (FormatConversionCharIsSigned(conv.conv())) {
187
+ string_view SignColumn(bool neg, const FormatConversionSpecImpl conv) {
188
+ if (conv.conversion_char() == FormatConversionCharInternal::d ||
189
+ conv.conversion_char() == FormatConversionCharInternal::i) {
138
190
  if (neg) return "-";
139
- if (conv.flags().show_pos) return "+";
140
- if (conv.flags().sign_col) return " ";
191
+ if (conv.has_show_pos_flag()) return "+";
192
+ if (conv.has_sign_col_flag()) return " ";
141
193
  }
142
194
  return {};
143
195
  }
144
196
 
145
- bool ConvertCharImpl(unsigned char v, const ConversionSpec conv,
197
+ bool ConvertCharImpl(unsigned char v, const FormatConversionSpecImpl conv,
146
198
  FormatSinkImpl *sink) {
147
199
  size_t fill = 0;
148
200
  if (conv.width() >= 0) fill = conv.width();
149
201
  ReducePadding(1, &fill);
150
- if (!conv.flags().left) sink->Append(fill, ' ');
202
+ if (!conv.has_left_flag()) sink->Append(fill, ' ');
151
203
  sink->Append(1, v);
152
- if (conv.flags().left) sink->Append(fill, ' ');
204
+ if (conv.has_left_flag()) sink->Append(fill, ' ');
153
205
  return true;
154
206
  }
155
207
 
156
- bool ConvertIntImplInner(const ConvertedIntInfo &info,
157
- const ConversionSpec conv, FormatSinkImpl *sink) {
208
+ bool ConvertIntImplInnerSlow(const IntDigits &as_digits,
209
+ const FormatConversionSpecImpl conv,
210
+ FormatSinkImpl *sink) {
158
211
  // Print as a sequence of Substrings:
159
212
  // [left_spaces][sign][base_indicator][zeroes][formatted][right_spaces]
160
213
  size_t fill = 0;
161
214
  if (conv.width() >= 0) fill = conv.width();
162
215
 
163
- string_view formatted = info.digits();
216
+ string_view formatted = as_digits.without_neg_or_zero();
164
217
  ReducePadding(formatted, &fill);
165
218
 
166
- string_view sign = SignColumn(info.is_neg(), conv);
219
+ string_view sign = SignColumn(as_digits.is_negative(), conv);
167
220
  ReducePadding(sign, &fill);
168
221
 
169
- string_view base_indicator = BaseIndicator(info, conv);
222
+ string_view base_indicator = BaseIndicator(as_digits, conv);
170
223
  ReducePadding(base_indicator, &fill);
171
224
 
172
225
  int precision = conv.precision();
@@ -174,7 +227,8 @@ bool ConvertIntImplInner(const ConvertedIntInfo &info,
174
227
  if (!precision_specified)
175
228
  precision = 1;
176
229
 
177
- if (conv.flags().alt && conv.conv() == ConversionChar::o) {
230
+ if (conv.has_alt_flag() &&
231
+ conv.conversion_char() == FormatConversionCharInternal::o) {
178
232
  // From POSIX description of the '#' (alt) flag:
179
233
  // "For o conversion, it increases the precision (if necessary) to
180
234
  // force the first digit of the result to be zero."
@@ -187,13 +241,13 @@ bool ConvertIntImplInner(const ConvertedIntInfo &info,
187
241
  size_t num_zeroes = Excess(formatted.size(), precision);
188
242
  ReducePadding(num_zeroes, &fill);
189
243
 
190
- size_t num_left_spaces = !conv.flags().left ? fill : 0;
191
- size_t num_right_spaces = conv.flags().left ? fill : 0;
244
+ size_t num_left_spaces = !conv.has_left_flag() ? fill : 0;
245
+ size_t num_right_spaces = conv.has_left_flag() ? fill : 0;
192
246
 
193
247
  // From POSIX description of the '0' (zero) flag:
194
248
  // "For d, i, o, u, x, and X conversion specifiers, if a precision
195
249
  // is specified, the '0' flag is ignored."
196
- if (!precision_specified && conv.flags().zero) {
250
+ if (!precision_specified && conv.has_zero_flag()) {
197
251
  num_zeroes += num_left_spaces;
198
252
  num_left_spaces = 0;
199
253
  }
@@ -208,71 +262,97 @@ bool ConvertIntImplInner(const ConvertedIntInfo &info,
208
262
  }
209
263
 
210
264
  template <typename T>
211
- bool ConvertIntImplInner(T v, const ConversionSpec conv, FormatSinkImpl *sink) {
212
- ConvertedIntInfo info(v, conv.conv());
213
- if (conv.flags().basic && (conv.conv() != ConversionChar::p)) {
214
- if (info.is_neg()) sink->Append(1, '-');
215
- if (info.digits().empty()) {
216
- sink->Append(1, '0');
217
- } else {
218
- sink->Append(info.digits());
219
- }
220
- return true;
265
+ bool ConvertIntArg(T v, const FormatConversionSpecImpl conv,
266
+ FormatSinkImpl *sink) {
267
+ using U = typename MakeUnsigned<T>::type;
268
+ IntDigits as_digits;
269
+
270
+ // This odd casting is due to a bug in -Wswitch behavior in gcc49 which causes
271
+ // it to complain about a switch/case type mismatch, even though both are
272
+ // FormatConverionChar. Likely this is because at this point
273
+ // FormatConversionChar is declared, but not defined.
274
+ switch (static_cast<uint8_t>(conv.conversion_char())) {
275
+ case static_cast<uint8_t>(FormatConversionCharInternal::c):
276
+ return ConvertCharImpl(static_cast<unsigned char>(v), conv, sink);
277
+
278
+ case static_cast<uint8_t>(FormatConversionCharInternal::o):
279
+ as_digits.PrintAsOct(static_cast<U>(v));
280
+ break;
281
+
282
+ case static_cast<uint8_t>(FormatConversionCharInternal::x):
283
+ as_digits.PrintAsHexLower(static_cast<U>(v));
284
+ break;
285
+ case static_cast<uint8_t>(FormatConversionCharInternal::X):
286
+ as_digits.PrintAsHexUpper(static_cast<U>(v));
287
+ break;
288
+
289
+ case static_cast<uint8_t>(FormatConversionCharInternal::u):
290
+ as_digits.PrintAsDec(static_cast<U>(v));
291
+ break;
292
+
293
+ case static_cast<uint8_t>(FormatConversionCharInternal::d):
294
+ case static_cast<uint8_t>(FormatConversionCharInternal::i):
295
+ as_digits.PrintAsDec(v);
296
+ break;
297
+
298
+ case static_cast<uint8_t>(FormatConversionCharInternal::a):
299
+ case static_cast<uint8_t>(FormatConversionCharInternal::e):
300
+ case static_cast<uint8_t>(FormatConversionCharInternal::f):
301
+ case static_cast<uint8_t>(FormatConversionCharInternal::g):
302
+ case static_cast<uint8_t>(FormatConversionCharInternal::A):
303
+ case static_cast<uint8_t>(FormatConversionCharInternal::E):
304
+ case static_cast<uint8_t>(FormatConversionCharInternal::F):
305
+ case static_cast<uint8_t>(FormatConversionCharInternal::G):
306
+ return ConvertFloatImpl(static_cast<double>(v), conv, sink);
307
+
308
+ default:
309
+ ABSL_INTERNAL_ASSUME(false);
221
310
  }
222
- return ConvertIntImplInner(info, conv, sink);
223
- }
224
311
 
225
- template <typename T>
226
- bool ConvertIntArg(T v, const ConversionSpec conv, FormatSinkImpl *sink) {
227
- if (FormatConversionCharIsFloat(conv.conv())) {
228
- return FormatConvertImpl(static_cast<double>(v), conv, sink).value;
229
- }
230
- if (conv.conv() == ConversionChar::c)
231
- return ConvertCharImpl(static_cast<unsigned char>(v), conv, sink);
232
- if (!FormatConversionCharIsIntegral(conv.conv())) return false;
233
- if (!FormatConversionCharIsSigned(conv.conv()) && IsSigned<T>::value) {
234
- using U = typename MakeUnsigned<T>::type;
235
- return FormatConvertImpl(static_cast<U>(v), conv, sink).value;
312
+ if (conv.is_basic()) {
313
+ sink->Append(as_digits.with_neg_and_zero());
314
+ return true;
236
315
  }
237
- return ConvertIntImplInner(v, conv, sink);
316
+ return ConvertIntImplInnerSlow(as_digits, conv, sink);
238
317
  }
239
318
 
240
319
  template <typename T>
241
- bool ConvertFloatArg(T v, const ConversionSpec conv, FormatSinkImpl *sink) {
242
- return FormatConversionCharIsFloat(conv.conv()) &&
320
+ bool ConvertFloatArg(T v, const FormatConversionSpecImpl conv,
321
+ FormatSinkImpl *sink) {
322
+ return FormatConversionCharIsFloat(conv.conversion_char()) &&
243
323
  ConvertFloatImpl(v, conv, sink);
244
324
  }
245
325
 
246
- inline bool ConvertStringArg(string_view v, const ConversionSpec conv,
326
+ inline bool ConvertStringArg(string_view v, const FormatConversionSpecImpl conv,
247
327
  FormatSinkImpl *sink) {
248
- if (conv.conv() != ConversionChar::s) return false;
249
- if (conv.flags().basic) {
328
+ if (conv.is_basic()) {
250
329
  sink->Append(v);
251
330
  return true;
252
331
  }
253
332
  return sink->PutPaddedString(v, conv.width(), conv.precision(),
254
- conv.flags().left);
333
+ conv.has_left_flag());
255
334
  }
256
335
 
257
336
  } // namespace
258
337
 
259
338
  // ==================== Strings ====================
260
- ConvertResult<Conv::s> FormatConvertImpl(const std::string &v,
261
- const ConversionSpec conv,
262
- FormatSinkImpl *sink) {
339
+ StringConvertResult FormatConvertImpl(const std::string &v,
340
+ const FormatConversionSpecImpl conv,
341
+ FormatSinkImpl *sink) {
263
342
  return {ConvertStringArg(v, conv, sink)};
264
343
  }
265
344
 
266
- ConvertResult<Conv::s> FormatConvertImpl(string_view v,
267
- const ConversionSpec conv,
268
- FormatSinkImpl *sink) {
345
+ StringConvertResult FormatConvertImpl(string_view v,
346
+ const FormatConversionSpecImpl conv,
347
+ FormatSinkImpl *sink) {
269
348
  return {ConvertStringArg(v, conv, sink)};
270
349
  }
271
350
 
272
- ConvertResult<Conv::s | Conv::p> FormatConvertImpl(const char *v,
273
- const ConversionSpec conv,
274
- FormatSinkImpl *sink) {
275
- if (conv.conv() == ConversionChar::p)
351
+ ArgConvertResult<FormatConversionCharSetUnion(
352
+ FormatConversionCharSetInternal::s, FormatConversionCharSetInternal::p)>
353
+ FormatConvertImpl(const char *v, const FormatConversionSpecImpl conv,
354
+ FormatSinkImpl *sink) {
355
+ if (conv.conversion_char() == FormatConversionCharInternal::p)
276
356
  return {FormatConvertImpl(VoidPtr(v), conv, sink).value};
277
357
  size_t len;
278
358
  if (v == nullptr) {
@@ -287,93 +367,99 @@ ConvertResult<Conv::s | Conv::p> FormatConvertImpl(const char *v,
287
367
  }
288
368
 
289
369
  // ==================== Raw pointers ====================
290
- ConvertResult<Conv::p> FormatConvertImpl(VoidPtr v, const ConversionSpec conv,
291
- FormatSinkImpl *sink) {
292
- if (conv.conv() != ConversionChar::p) return {false};
370
+ ArgConvertResult<FormatConversionCharSetInternal::p> FormatConvertImpl(
371
+ VoidPtr v, const FormatConversionSpecImpl conv, FormatSinkImpl *sink) {
293
372
  if (!v.value) {
294
373
  sink->Append("(nil)");
295
374
  return {true};
296
375
  }
297
- return {ConvertIntImplInner(v.value, conv, sink)};
376
+ IntDigits as_digits;
377
+ as_digits.PrintAsHexLower(v.value);
378
+ return {ConvertIntImplInnerSlow(as_digits, conv, sink)};
298
379
  }
299
380
 
300
381
  // ==================== Floats ====================
301
- FloatingConvertResult FormatConvertImpl(float v, const ConversionSpec conv,
382
+ FloatingConvertResult FormatConvertImpl(float v,
383
+ const FormatConversionSpecImpl conv,
302
384
  FormatSinkImpl *sink) {
303
385
  return {ConvertFloatArg(v, conv, sink)};
304
386
  }
305
- FloatingConvertResult FormatConvertImpl(double v, const ConversionSpec conv,
387
+ FloatingConvertResult FormatConvertImpl(double v,
388
+ const FormatConversionSpecImpl conv,
306
389
  FormatSinkImpl *sink) {
307
390
  return {ConvertFloatArg(v, conv, sink)};
308
391
  }
309
392
  FloatingConvertResult FormatConvertImpl(long double v,
310
- const ConversionSpec conv,
393
+ const FormatConversionSpecImpl conv,
311
394
  FormatSinkImpl *sink) {
312
395
  return {ConvertFloatArg(v, conv, sink)};
313
396
  }
314
397
 
315
398
  // ==================== Chars ====================
316
- IntegralConvertResult FormatConvertImpl(char v, const ConversionSpec conv,
399
+ IntegralConvertResult FormatConvertImpl(char v,
400
+ const FormatConversionSpecImpl conv,
317
401
  FormatSinkImpl *sink) {
318
402
  return {ConvertIntArg(v, conv, sink)};
319
403
  }
320
404
  IntegralConvertResult FormatConvertImpl(signed char v,
321
- const ConversionSpec conv,
405
+ const FormatConversionSpecImpl conv,
322
406
  FormatSinkImpl *sink) {
323
407
  return {ConvertIntArg(v, conv, sink)};
324
408
  }
325
409
  IntegralConvertResult FormatConvertImpl(unsigned char v,
326
- const ConversionSpec conv,
410
+ const FormatConversionSpecImpl conv,
327
411
  FormatSinkImpl *sink) {
328
412
  return {ConvertIntArg(v, conv, sink)};
329
413
  }
330
414
 
331
415
  // ==================== Ints ====================
332
416
  IntegralConvertResult FormatConvertImpl(short v, // NOLINT
333
- const ConversionSpec conv,
417
+ const FormatConversionSpecImpl conv,
334
418
  FormatSinkImpl *sink) {
335
419
  return {ConvertIntArg(v, conv, sink)};
336
420
  }
337
421
  IntegralConvertResult FormatConvertImpl(unsigned short v, // NOLINT
338
- const ConversionSpec conv,
422
+ const FormatConversionSpecImpl conv,
339
423
  FormatSinkImpl *sink) {
340
424
  return {ConvertIntArg(v, conv, sink)};
341
425
  }
342
- IntegralConvertResult FormatConvertImpl(int v, const ConversionSpec conv,
426
+ IntegralConvertResult FormatConvertImpl(int v,
427
+ const FormatConversionSpecImpl conv,
343
428
  FormatSinkImpl *sink) {
344
429
  return {ConvertIntArg(v, conv, sink)};
345
430
  }
346
- IntegralConvertResult FormatConvertImpl(unsigned v, const ConversionSpec conv,
431
+ IntegralConvertResult FormatConvertImpl(unsigned v,
432
+ const FormatConversionSpecImpl conv,
347
433
  FormatSinkImpl *sink) {
348
434
  return {ConvertIntArg(v, conv, sink)};
349
435
  }
350
436
  IntegralConvertResult FormatConvertImpl(long v, // NOLINT
351
- const ConversionSpec conv,
437
+ const FormatConversionSpecImpl conv,
352
438
  FormatSinkImpl *sink) {
353
439
  return {ConvertIntArg(v, conv, sink)};
354
440
  }
355
441
  IntegralConvertResult FormatConvertImpl(unsigned long v, // NOLINT
356
- const ConversionSpec conv,
442
+ const FormatConversionSpecImpl conv,
357
443
  FormatSinkImpl *sink) {
358
444
  return {ConvertIntArg(v, conv, sink)};
359
445
  }
360
446
  IntegralConvertResult FormatConvertImpl(long long v, // NOLINT
361
- const ConversionSpec conv,
447
+ const FormatConversionSpecImpl conv,
362
448
  FormatSinkImpl *sink) {
363
449
  return {ConvertIntArg(v, conv, sink)};
364
450
  }
365
451
  IntegralConvertResult FormatConvertImpl(unsigned long long v, // NOLINT
366
- const ConversionSpec conv,
452
+ const FormatConversionSpecImpl conv,
367
453
  FormatSinkImpl *sink) {
368
454
  return {ConvertIntArg(v, conv, sink)};
369
455
  }
370
456
  IntegralConvertResult FormatConvertImpl(absl::int128 v,
371
- const ConversionSpec conv,
457
+ const FormatConversionSpecImpl conv,
372
458
  FormatSinkImpl *sink) {
373
459
  return {ConvertIntArg(v, conv, sink)};
374
460
  }
375
461
  IntegralConvertResult FormatConvertImpl(absl::uint128 v,
376
- const ConversionSpec conv,
462
+ const FormatConversionSpecImpl conv,
377
463
  FormatSinkImpl *sink) {
378
464
  return {ConvertIntArg(v, conv, sink)};
379
465
  }