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
@@ -331,17 +331,16 @@ class ABSL_LOCKABLE Mutex {
331
331
  // Mutex::AwaitWithTimeout()
332
332
  // Mutex::AwaitWithDeadline()
333
333
  //
334
- // If `cond` is initially true, do nothing, or act as though `cond` is
335
- // initially false.
336
- //
337
- // If `cond` is initially false, unlock this `Mutex` and block until
338
- // simultaneously:
334
+ // Unlocks this `Mutex` and blocks until simultaneously:
339
335
  // - either `cond` is true or the {timeout has expired, deadline has passed}
340
336
  // and
341
337
  // - this `Mutex` can be reacquired,
342
338
  // then reacquire this `Mutex` in the same mode in which it was previously
343
339
  // held, returning `true` iff `cond` is `true` on return.
344
340
  //
341
+ // If the condition is initially `true`, the implementation *may* skip the
342
+ // release/re-acquire step and return immediately.
343
+ //
345
344
  // Deadlines in the past are equivalent to an immediate deadline.
346
345
  // Negative timeouts are equivalent to a zero timeout.
347
346
  //
@@ -686,6 +685,11 @@ class Condition {
686
685
  // return processed_ >= current;
687
686
  // };
688
687
  // mu_.Await(Condition(&reached));
688
+ //
689
+ // NOTE: never use "mu_.AssertHeld()" instead of "mu_.AssertReadHeld()" in the
690
+ // lambda as it may be called when the mutex is being unlocked from a scope
691
+ // holding only a reader lock, which will make the assertion not fulfilled and
692
+ // crash the binary.
689
693
 
690
694
  // See class comment for performance advice. In particular, if there
691
695
  // might be more than one waiter for the same condition, make sure
@@ -770,6 +774,8 @@ class Condition {
770
774
  //
771
775
  class CondVar {
772
776
  public:
777
+ // A `CondVar` allocated on the heap or on the stack can use the this
778
+ // constructor.
773
779
  CondVar();
774
780
  ~CondVar();
775
781
 
@@ -901,9 +907,11 @@ class ABSL_SCOPED_LOCKABLE ReleasableMutexLock {
901
907
  };
902
908
 
903
909
  #ifdef ABSL_INTERNAL_USE_NONPROD_MUTEX
910
+
904
911
  inline constexpr Mutex::Mutex(absl::ConstInitType) : impl_(absl::kConstInit) {}
905
912
 
906
913
  #else
914
+
907
915
  inline Mutex::Mutex() : mu_(0) {
908
916
  ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
909
917
  }
@@ -911,7 +919,8 @@ inline Mutex::Mutex() : mu_(0) {
911
919
  inline constexpr Mutex::Mutex(absl::ConstInitType) : mu_(0) {}
912
920
 
913
921
  inline CondVar::CondVar() : cv_(0) {}
914
- #endif
922
+
923
+ #endif // ABSL_INTERNAL_USE_NONPROD_MUTEX
915
924
 
916
925
  // static
917
926
  template <typename T>
@@ -38,7 +38,7 @@ std::string FormatYearAnd(string_view fmt, CivilSecond cs) {
38
38
  const CivilSecond ncs(NormalizeYear(cs.year()), cs.month(), cs.day(),
39
39
  cs.hour(), cs.minute(), cs.second());
40
40
  const TimeZone utc = UTCTimeZone();
41
- // TODO(absl-team): Avoid conversion of fmt std::string.
41
+ // TODO(absl-team): Avoid conversion of fmt string.
42
42
  return StrCat(cs.year(),
43
43
  FormatTime(std::string(fmt), FromCivil(ncs, utc), utc));
44
44
  }
@@ -47,7 +47,7 @@ template <typename CivilT>
47
47
  bool ParseYearAnd(string_view fmt, string_view s, CivilT* c) {
48
48
  // Civil times support a larger year range than absl::Time, so we need to
49
49
  // parse the year separately, normalize it, then use absl::ParseTime on the
50
- // normalized std::string.
50
+ // normalized string.
51
51
  const std::string ss = std::string(s); // TODO(absl-team): Avoid conversion.
52
52
  const char* const np = ss.c_str();
53
53
  char* endp;
@@ -82,7 +82,7 @@ bool ParseAs(string_view s, CivilT2* c) {
82
82
 
83
83
  template <typename CivilT>
84
84
  bool ParseLenient(string_view s, CivilT* c) {
85
- // A fastpath for when the given std::string data parses exactly into the given
85
+ // A fastpath for when the given string data parses exactly into the given
86
86
  // type T (e.g., s="YYYY-MM-DD" and CivilT=CivilDay).
87
87
  if (ParseCivilTime(s, c)) return true;
88
88
  // Try parsing as each of the 6 types, trying the most common types first
@@ -98,26 +98,26 @@ bool ParseLenient(string_view s, CivilT* c) {
98
98
  } // namespace
99
99
 
100
100
  std::string FormatCivilTime(CivilSecond c) {
101
- return FormatYearAnd("-%m-%dT%H:%M:%S", c);
101
+ return FormatYearAnd("-%m-%d%ET%H:%M:%S", c);
102
102
  }
103
103
  std::string FormatCivilTime(CivilMinute c) {
104
- return FormatYearAnd("-%m-%dT%H:%M", c);
104
+ return FormatYearAnd("-%m-%d%ET%H:%M", c);
105
105
  }
106
106
  std::string FormatCivilTime(CivilHour c) {
107
- return FormatYearAnd("-%m-%dT%H", c);
107
+ return FormatYearAnd("-%m-%d%ET%H", c);
108
108
  }
109
109
  std::string FormatCivilTime(CivilDay c) { return FormatYearAnd("-%m-%d", c); }
110
110
  std::string FormatCivilTime(CivilMonth c) { return FormatYearAnd("-%m", c); }
111
111
  std::string FormatCivilTime(CivilYear c) { return FormatYearAnd("", c); }
112
112
 
113
113
  bool ParseCivilTime(string_view s, CivilSecond* c) {
114
- return ParseYearAnd("-%m-%dT%H:%M:%S", s, c);
114
+ return ParseYearAnd("-%m-%d%ET%H:%M:%S", s, c);
115
115
  }
116
116
  bool ParseCivilTime(string_view s, CivilMinute* c) {
117
- return ParseYearAnd("-%m-%dT%H:%M", s, c);
117
+ return ParseYearAnd("-%m-%d%ET%H:%M", s, c);
118
118
  }
119
119
  bool ParseCivilTime(string_view s, CivilHour* c) {
120
- return ParseYearAnd("-%m-%dT%H", s, c);
120
+ return ParseYearAnd("-%m-%d%ET%H", s, c);
121
121
  }
122
122
  bool ParseCivilTime(string_view s, CivilDay* c) {
123
123
  return ParseYearAnd("-%m-%d", s, c);
@@ -226,9 +226,9 @@ static_assert(((kMinNSBetweenSamples << (kScale + 1)) >> (kScale + 1)) ==
226
226
 
227
227
  // A reader-writer lock protecting the static locations below.
228
228
  // See SeqAcquire() and SeqRelease() above.
229
- static absl::base_internal::SpinLock lock(
230
- absl::base_internal::kLinkerInitialized);
231
- static std::atomic<uint64_t> seq(0);
229
+ ABSL_CONST_INIT static absl::base_internal::SpinLock lock(
230
+ absl::kConstInit, base_internal::SCHEDULE_KERNEL_ONLY);
231
+ ABSL_CONST_INIT static std::atomic<uint64_t> seq(0);
232
232
 
233
233
  // data from a sample of the kernel's time value
234
234
  struct TimeSampleAtomic {
@@ -67,7 +67,10 @@
67
67
  #include <string>
68
68
 
69
69
  #include "absl/base/casts.h"
70
+ #include "absl/base/macros.h"
70
71
  #include "absl/numeric/int128.h"
72
+ #include "absl/strings/string_view.h"
73
+ #include "absl/strings/strip.h"
71
74
  #include "absl/time/time.h"
72
75
 
73
76
  namespace absl {
@@ -708,16 +711,17 @@ char* Format64(char* ep, int width, int64_t v) {
708
711
  // fractional digits, because it is in the noise of what a Duration can
709
712
  // represent.
710
713
  struct DisplayUnit {
711
- const char* abbr;
714
+ absl::string_view abbr;
712
715
  int prec;
713
716
  double pow10;
714
717
  };
715
- const DisplayUnit kDisplayNano = {"ns", 2, 1e2};
716
- const DisplayUnit kDisplayMicro = {"us", 5, 1e5};
717
- const DisplayUnit kDisplayMilli = {"ms", 8, 1e8};
718
- const DisplayUnit kDisplaySec = {"s", 11, 1e11};
719
- const DisplayUnit kDisplayMin = {"m", -1, 0.0}; // prec ignored
720
- const DisplayUnit kDisplayHour = {"h", -1, 0.0}; // prec ignored
718
+ ABSL_CONST_INIT const DisplayUnit kDisplayNano = {"ns", 2, 1e2};
719
+ ABSL_CONST_INIT const DisplayUnit kDisplayMicro = {"us", 5, 1e5};
720
+ ABSL_CONST_INIT const DisplayUnit kDisplayMilli = {"ms", 8, 1e8};
721
+ ABSL_CONST_INIT const DisplayUnit kDisplaySec = {"s", 11, 1e11};
722
+ ABSL_CONST_INIT const DisplayUnit kDisplayMin = {"m", -1, 0.0}; // prec ignored
723
+ ABSL_CONST_INIT const DisplayUnit kDisplayHour = {"h", -1,
724
+ 0.0}; // prec ignored
721
725
 
722
726
  void AppendNumberUnit(std::string* out, int64_t n, DisplayUnit unit) {
723
727
  char buf[sizeof("2562047788015216")]; // hours in max duration
@@ -725,16 +729,16 @@ void AppendNumberUnit(std::string* out, int64_t n, DisplayUnit unit) {
725
729
  char* bp = Format64(ep, 0, n);
726
730
  if (*bp != '0' || bp + 1 != ep) {
727
731
  out->append(bp, ep - bp);
728
- out->append(unit.abbr);
732
+ out->append(unit.abbr.data(), unit.abbr.size());
729
733
  }
730
734
  }
731
735
 
732
736
  // Note: unit.prec is limited to double's digits10 value (typically 15) so it
733
737
  // always fits in buf[].
734
738
  void AppendNumberUnit(std::string* out, double n, DisplayUnit unit) {
735
- const int buf_size = std::numeric_limits<double>::digits10;
736
- const int prec = std::min(buf_size, unit.prec);
737
- char buf[buf_size]; // also large enough to hold integer part
739
+ constexpr int kBufferSize = std::numeric_limits<double>::digits10;
740
+ const int prec = std::min(kBufferSize, unit.prec);
741
+ char buf[kBufferSize]; // also large enough to hold integer part
738
742
  char* ep = buf + sizeof(buf);
739
743
  double d = 0;
740
744
  int64_t frac_part = Round(std::modf(n, &d) * unit.pow10);
@@ -748,7 +752,7 @@ void AppendNumberUnit(std::string* out, double n, DisplayUnit unit) {
748
752
  while (ep[-1] == '0') --ep;
749
753
  out->append(bp, ep - bp);
750
754
  }
751
- out->append(unit.abbr);
755
+ out->append(unit.abbr.data(), unit.abbr.size());
752
756
  }
753
757
  }
754
758
 
@@ -800,23 +804,27 @@ namespace {
800
804
  // A helper for ParseDuration() that parses a leading number from the given
801
805
  // string and stores the result in *int_part/*frac_part/*frac_scale. The
802
806
  // given string pointer is modified to point to the first unconsumed char.
803
- bool ConsumeDurationNumber(const char** dpp, int64_t* int_part,
807
+ bool ConsumeDurationNumber(const char** dpp, const char* ep, int64_t* int_part,
804
808
  int64_t* frac_part, int64_t* frac_scale) {
805
809
  *int_part = 0;
806
810
  *frac_part = 0;
807
811
  *frac_scale = 1; // invariant: *frac_part < *frac_scale
808
812
  const char* start = *dpp;
809
- for (; std::isdigit(**dpp); *dpp += 1) {
813
+ for (; *dpp != ep; *dpp += 1) {
810
814
  const int d = **dpp - '0'; // contiguous digits
815
+ if (d < 0 || 10 <= d) break;
816
+
811
817
  if (*int_part > kint64max / 10) return false;
812
818
  *int_part *= 10;
813
819
  if (*int_part > kint64max - d) return false;
814
820
  *int_part += d;
815
821
  }
816
822
  const bool int_part_empty = (*dpp == start);
817
- if (**dpp != '.') return !int_part_empty;
818
- for (*dpp += 1; std::isdigit(**dpp); *dpp += 1) {
823
+ if (*dpp == ep || **dpp != '.') return !int_part_empty;
824
+
825
+ for (*dpp += 1; *dpp != ep; *dpp += 1) {
819
826
  const int d = **dpp - '0'; // contiguous digits
827
+ if (d < 0 || 10 <= d) break;
820
828
  if (*frac_scale <= kint64max / 10) {
821
829
  *frac_part *= 10;
822
830
  *frac_part += d;
@@ -830,32 +838,56 @@ bool ConsumeDurationNumber(const char** dpp, int64_t* int_part,
830
838
  // ns, us, ms, s, m, h) from the given string and stores the resulting unit
831
839
  // in "*unit". The given string pointer is modified to point to the first
832
840
  // unconsumed char.
833
- bool ConsumeDurationUnit(const char** start, Duration* unit) {
834
- const char *s = *start;
835
- bool ok = true;
836
- if (strncmp(s, "ns", 2) == 0) {
837
- s += 2;
838
- *unit = Nanoseconds(1);
839
- } else if (strncmp(s, "us", 2) == 0) {
840
- s += 2;
841
- *unit = Microseconds(1);
842
- } else if (strncmp(s, "ms", 2) == 0) {
843
- s += 2;
844
- *unit = Milliseconds(1);
845
- } else if (strncmp(s, "s", 1) == 0) {
846
- s += 1;
847
- *unit = Seconds(1);
848
- } else if (strncmp(s, "m", 1) == 0) {
849
- s += 1;
850
- *unit = Minutes(1);
851
- } else if (strncmp(s, "h", 1) == 0) {
852
- s += 1;
853
- *unit = Hours(1);
854
- } else {
855
- ok = false;
841
+ bool ConsumeDurationUnit(const char** start, const char* end, Duration* unit) {
842
+ size_t size = end - *start;
843
+ switch (size) {
844
+ case 0:
845
+ return false;
846
+ default:
847
+ switch (**start) {
848
+ case 'n':
849
+ if (*(*start + 1) == 's') {
850
+ *start += 2;
851
+ *unit = Nanoseconds(1);
852
+ return true;
853
+ }
854
+ break;
855
+ case 'u':
856
+ if (*(*start + 1) == 's') {
857
+ *start += 2;
858
+ *unit = Microseconds(1);
859
+ return true;
860
+ }
861
+ break;
862
+ case 'm':
863
+ if (*(*start + 1) == 's') {
864
+ *start += 2;
865
+ *unit = Milliseconds(1);
866
+ return true;
867
+ }
868
+ break;
869
+ default:
870
+ break;
871
+ }
872
+ ABSL_FALLTHROUGH_INTENDED;
873
+ case 1:
874
+ switch (**start) {
875
+ case 's':
876
+ *unit = Seconds(1);
877
+ *start += 1;
878
+ return true;
879
+ case 'm':
880
+ *unit = Minutes(1);
881
+ *start += 1;
882
+ return true;
883
+ case 'h':
884
+ *unit = Hours(1);
885
+ *start += 1;
886
+ return true;
887
+ default:
888
+ return false;
889
+ }
856
890
  }
857
- *start = s;
858
- return ok;
859
891
  }
860
892
 
861
893
  } // namespace
@@ -865,39 +897,38 @@ bool ConsumeDurationUnit(const char** start, Duration* unit) {
865
897
  // a possibly signed sequence of decimal numbers, each with optional
866
898
  // fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m".
867
899
  // Valid time units are "ns", "us" "ms", "s", "m", "h".
868
- bool ParseDuration(const std::string& dur_string, Duration* d) {
869
- const char* start = dur_string.c_str();
900
+ bool ParseDuration(absl::string_view dur_sv, Duration* d) {
870
901
  int sign = 1;
871
-
872
- if (*start == '-' || *start == '+') {
873
- sign = *start == '-' ? -1 : 1;
874
- ++start;
875
- }
876
-
877
- // Can't parse a duration from an empty std::string.
878
- if (*start == '\0') {
879
- return false;
902
+ if (absl::ConsumePrefix(&dur_sv, "-")) {
903
+ sign = -1;
904
+ } else {
905
+ absl::ConsumePrefix(&dur_sv, "+");
880
906
  }
907
+ if (dur_sv.empty()) return false;
881
908
 
882
- // Special case for a std::string of "0".
883
- if (*start == '0' && *(start + 1) == '\0') {
909
+ // Special case for a string of "0".
910
+ if (dur_sv == "0") {
884
911
  *d = ZeroDuration();
885
912
  return true;
886
913
  }
887
914
 
888
- if (strcmp(start, "inf") == 0) {
915
+ if (dur_sv == "inf") {
889
916
  *d = sign * InfiniteDuration();
890
917
  return true;
891
918
  }
892
919
 
920
+ const char* start = dur_sv.data();
921
+ const char* end = start + dur_sv.size();
922
+
893
923
  Duration dur;
894
- while (*start != '\0') {
924
+ while (start != end) {
895
925
  int64_t int_part;
896
926
  int64_t frac_part;
897
927
  int64_t frac_scale;
898
928
  Duration unit;
899
- if (!ConsumeDurationNumber(&start, &int_part, &frac_part, &frac_scale) ||
900
- !ConsumeDurationUnit(&start, &unit)) {
929
+ if (!ConsumeDurationNumber(&start, end, &int_part, &frac_part,
930
+ &frac_scale) ||
931
+ !ConsumeDurationUnit(&start, end, &unit)) {
901
932
  return false;
902
933
  }
903
934
  if (int_part != 0) dur += sign * int_part * unit;
@@ -908,7 +939,7 @@ bool ParseDuration(const std::string& dur_string, Duration* d) {
908
939
  }
909
940
 
910
941
  bool AbslParseFlag(absl::string_view text, Duration* dst, std::string*) {
911
- return ParseDuration(std::string(text), dst);
942
+ return ParseDuration(text, dst);
912
943
  }
913
944
 
914
945
  std::string AbslUnparseFlag(Duration d) { return FormatDuration(d); }
@@ -13,9 +13,12 @@
13
13
  // limitations under the License.
14
14
 
15
15
  #include <string.h>
16
+
16
17
  #include <cctype>
17
18
  #include <cstdint>
18
19
 
20
+ #include "absl/strings/match.h"
21
+ #include "absl/strings/string_view.h"
19
22
  #include "absl/time/internal/cctz/include/cctz/time_zone.h"
20
23
  #include "absl/time/time.h"
21
24
 
@@ -24,14 +27,11 @@ namespace cctz = absl::time_internal::cctz;
24
27
  namespace absl {
25
28
  ABSL_NAMESPACE_BEGIN
26
29
 
27
- ABSL_DLL extern const char RFC3339_full[] =
28
- "%Y-%m-%dT%H:%M:%E*S%Ez";
29
- ABSL_DLL extern const char RFC3339_sec[] = "%Y-%m-%dT%H:%M:%S%Ez";
30
+ ABSL_DLL extern const char RFC3339_full[] = "%Y-%m-%d%ET%H:%M:%E*S%Ez";
31
+ ABSL_DLL extern const char RFC3339_sec[] = "%Y-%m-%d%ET%H:%M:%S%Ez";
30
32
 
31
- ABSL_DLL extern const char RFC1123_full[] =
32
- "%a, %d %b %E4Y %H:%M:%S %z";
33
- ABSL_DLL extern const char RFC1123_no_wday[] =
34
- "%d %b %E4Y %H:%M:%S %z";
33
+ ABSL_DLL extern const char RFC1123_full[] = "%a, %d %b %E4Y %H:%M:%S %z";
34
+ ABSL_DLL extern const char RFC1123_no_wday[] = "%d %b %E4Y %H:%M:%S %z";
35
35
 
36
36
  namespace {
37
37
 
@@ -71,12 +71,12 @@ absl::Time Join(const cctz_parts& parts) {
71
71
 
72
72
  } // namespace
73
73
 
74
- std::string FormatTime(const std::string& format, absl::Time t,
74
+ std::string FormatTime(absl::string_view format, absl::Time t,
75
75
  absl::TimeZone tz) {
76
- if (t == absl::InfiniteFuture()) return kInfiniteFutureStr;
77
- if (t == absl::InfinitePast()) return kInfinitePastStr;
76
+ if (t == absl::InfiniteFuture()) return std::string(kInfiniteFutureStr);
77
+ if (t == absl::InfinitePast()) return std::string(kInfinitePastStr);
78
78
  const auto parts = Split(t);
79
- return cctz::detail::format(format, parts.sec, parts.fem,
79
+ return cctz::detail::format(std::string(format), parts.sec, parts.fem,
80
80
  cctz::time_zone(tz));
81
81
  }
82
82
 
@@ -88,42 +88,50 @@ std::string FormatTime(absl::Time t) {
88
88
  return absl::FormatTime(RFC3339_full, t, absl::LocalTimeZone());
89
89
  }
90
90
 
91
- bool ParseTime(const std::string& format, const std::string& input,
91
+ bool ParseTime(absl::string_view format, absl::string_view input,
92
92
  absl::Time* time, std::string* err) {
93
93
  return absl::ParseTime(format, input, absl::UTCTimeZone(), time, err);
94
94
  }
95
95
 
96
96
  // If the input string does not contain an explicit UTC offset, interpret
97
97
  // the fields with respect to the given TimeZone.
98
- bool ParseTime(const std::string& format, const std::string& input,
98
+ bool ParseTime(absl::string_view format, absl::string_view input,
99
99
  absl::TimeZone tz, absl::Time* time, std::string* err) {
100
- const char* data = input.c_str();
101
- while (std::isspace(*data)) ++data;
102
-
103
- size_t inf_size = strlen(kInfiniteFutureStr);
104
- if (strncmp(data, kInfiniteFutureStr, inf_size) == 0) {
105
- const char* new_data = data + inf_size;
106
- while (std::isspace(*new_data)) ++new_data;
107
- if (*new_data == '\0') {
108
- *time = InfiniteFuture();
109
- return true;
100
+ auto strip_leading_space = [](absl::string_view* sv) {
101
+ while (!sv->empty()) {
102
+ if (!std::isspace(sv->front())) return;
103
+ sv->remove_prefix(1);
110
104
  }
111
- }
112
-
113
- inf_size = strlen(kInfinitePastStr);
114
- if (strncmp(data, kInfinitePastStr, inf_size) == 0) {
115
- const char* new_data = data + inf_size;
116
- while (std::isspace(*new_data)) ++new_data;
117
- if (*new_data == '\0') {
118
- *time = InfinitePast();
119
- return true;
105
+ };
106
+
107
+ // Portable toolchains means we don't get nice constexpr here.
108
+ struct Literal {
109
+ const char* name;
110
+ size_t size;
111
+ absl::Time value;
112
+ };
113
+ static Literal literals[] = {
114
+ {kInfiniteFutureStr, strlen(kInfiniteFutureStr), InfiniteFuture()},
115
+ {kInfinitePastStr, strlen(kInfinitePastStr), InfinitePast()},
116
+ };
117
+ strip_leading_space(&input);
118
+ for (const auto& lit : literals) {
119
+ if (absl::StartsWith(input, absl::string_view(lit.name, lit.size))) {
120
+ absl::string_view tail = input;
121
+ tail.remove_prefix(lit.size);
122
+ strip_leading_space(&tail);
123
+ if (tail.empty()) {
124
+ *time = lit.value;
125
+ return true;
126
+ }
120
127
  }
121
128
  }
122
129
 
123
130
  std::string error;
124
131
  cctz_parts parts;
125
- const bool b = cctz::detail::parse(format, input, cctz::time_zone(tz),
126
- &parts.sec, &parts.fem, &error);
132
+ const bool b =
133
+ cctz::detail::parse(std::string(format), std::string(input),
134
+ cctz::time_zone(tz), &parts.sec, &parts.fem, &error);
127
135
  if (b) {
128
136
  *time = Join(parts);
129
137
  } else if (err != nullptr) {
@@ -134,8 +142,7 @@ bool ParseTime(const std::string& format, const std::string& input,
134
142
 
135
143
  // Functions required to support absl::Time flags.
136
144
  bool AbslParseFlag(absl::string_view text, absl::Time* t, std::string* error) {
137
- return absl::ParseTime(RFC3339_full, std::string(text), absl::UTCTimeZone(),
138
- t, error);
145
+ return absl::ParseTime(RFC3339_full, text, absl::UTCTimeZone(), t, error);
139
146
  }
140
147
 
141
148
  std::string AbslUnparseFlag(absl::Time t) {