grpc 1.27.0.pre1 → 1.30.1

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 (972) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8023 -11437
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +24 -21
  7. data/include/grpc/impl/codegen/port_platform.h +13 -2
  8. data/include/grpc/impl/codegen/sync.h +5 -3
  9. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  10. data/include/grpc/module.modulemap +25 -37
  11. data/include/grpc/support/sync_abseil.h +26 -0
  12. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  13. data/src/core/ext/filters/client_channel/client_channel.cc +282 -249
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +31 -47
  15. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -3
  16. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  17. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  18. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  19. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  20. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -11
  21. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  22. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +271 -465
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +8 -7
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +18 -21
  31. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -4
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +148 -98
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  40. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -3
  41. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +49 -77
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  43. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  44. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  45. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  46. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +120 -132
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +17 -21
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +167 -121
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +3 -2
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +3 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +42 -45
  57. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +94 -103
  58. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  59. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  60. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +61 -10
  61. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  62. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  63. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  64. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +242 -300
  65. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +21 -18
  66. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +56 -206
  67. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +11 -14
  68. data/src/core/ext/filters/client_channel/server_address.h +3 -2
  69. data/src/core/ext/filters/client_channel/service_config.cc +144 -253
  70. data/src/core/ext/filters/client_channel/service_config.h +32 -109
  71. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  72. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  73. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  74. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  75. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  76. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1381 -301
  77. data/src/core/ext/filters/client_channel/xds/xds_api.h +211 -152
  78. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +214 -359
  79. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +28 -44
  80. data/src/core/ext/filters/client_channel/xds/xds_channel.h +3 -1
  81. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +16 -11
  82. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1118 -472
  83. data/src/core/ext/filters/client_channel/xds/xds_client.h +116 -45
  84. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +59 -135
  85. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +122 -137
  86. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  87. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  88. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  89. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  90. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  91. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +38 -44
  93. data/src/core/ext/filters/message_size/message_size_filter.h +5 -5
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +7 -10
  95. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +26 -27
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  100. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  101. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  105. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  107. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  108. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  109. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  110. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  111. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  112. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -9
  113. data/src/core/ext/transport/inproc/inproc_transport.cc +41 -42
  114. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  115. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  116. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  117. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +5 -205
  119. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -788
  120. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  121. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  124. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  125. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +5 -362
  127. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +14 -1337
  128. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  129. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  130. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +30 -8
  131. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +60 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +2 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +2 -0
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +7 -4
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +6 -2
  136. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +87 -23
  139. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +262 -62
  140. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +20 -15
  141. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +46 -32
  142. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +27 -4
  145. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +70 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +46 -25
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +98 -25
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +2 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +77 -21
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +201 -4
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  153. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -0
  154. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +8 -68
  155. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +14 -201
  156. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  157. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  158. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +2 -71
  159. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +3 -228
  160. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  161. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  162. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +2 -0
  163. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  164. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  166. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  167. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  168. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  169. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  170. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  171. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  172. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  173. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  174. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  175. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  176. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  177. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  178. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  179. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  180. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  181. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  182. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  183. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  184. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  185. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  186. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  187. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  188. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  189. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  190. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  191. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  192. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  193. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  194. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  195. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  196. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  197. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  198. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  199. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  200. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  201. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  202. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  203. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  204. data/src/core/ext/upb-generated/envoy/type/range.upb.c +12 -0
  205. data/src/core/ext/upb-generated/envoy/type/range.upb.h +27 -0
  206. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  207. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  208. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  209. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  210. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  211. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +30 -27
  213. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +64 -52
  214. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  215. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  216. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  217. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  218. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  220. data/src/core/ext/upb-generated/validate/validate.upb.c +44 -39
  221. data/src/core/ext/upb-generated/validate/validate.upb.h +155 -119
  222. data/src/core/lib/channel/channel_args.cc +15 -14
  223. data/src/core/lib/channel/channel_args.h +3 -1
  224. data/src/core/lib/channel/channel_stack.h +20 -13
  225. data/src/core/lib/channel/channel_trace.cc +32 -41
  226. data/src/core/lib/channel/channel_trace.h +3 -3
  227. data/src/core/lib/channel/channelz.cc +163 -254
  228. data/src/core/lib/channel/channelz.h +15 -17
  229. data/src/core/lib/channel/channelz_registry.cc +52 -77
  230. data/src/core/lib/channel/channelz_registry.h +4 -4
  231. data/src/core/lib/channel/connected_channel.cc +7 -5
  232. data/src/core/lib/channel/context.h +1 -1
  233. data/src/core/lib/channel/handshaker.cc +11 -13
  234. data/src/core/lib/channel/handshaker.h +4 -2
  235. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  236. data/src/core/lib/channel/status_util.cc +2 -3
  237. data/src/core/lib/compression/message_compress.cc +5 -1
  238. data/src/core/lib/debug/stats.cc +21 -27
  239. data/src/core/lib/debug/stats.h +3 -1
  240. data/src/core/lib/gpr/spinlock.h +2 -3
  241. data/src/core/lib/gpr/string.cc +2 -26
  242. data/src/core/lib/gpr/string.h +0 -16
  243. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  244. data/src/core/lib/gpr/sync_posix.cc +8 -5
  245. data/src/core/lib/gpr/sync_windows.cc +4 -2
  246. data/src/core/lib/gpr/time.cc +4 -0
  247. data/src/core/lib/gpr/time_posix.cc +1 -1
  248. data/src/core/lib/gprpp/atomic.h +6 -6
  249. data/src/core/lib/gprpp/fork.cc +1 -1
  250. data/src/core/lib/gprpp/host_port.cc +30 -36
  251. data/src/core/lib/gprpp/host_port.h +14 -17
  252. data/src/core/lib/gprpp/map.h +5 -11
  253. data/src/core/lib/gprpp/memory.h +2 -6
  254. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  255. data/src/core/lib/gprpp/sync.h +9 -0
  256. data/src/core/lib/http/format_request.cc +46 -65
  257. data/src/core/lib/http/httpcli.cc +2 -3
  258. data/src/core/lib/http/httpcli.h +2 -3
  259. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  260. data/src/core/lib/http/parser.h +2 -3
  261. data/src/core/lib/iomgr/buffer_list.cc +36 -35
  262. data/src/core/lib/iomgr/buffer_list.h +22 -21
  263. data/src/core/lib/iomgr/call_combiner.h +3 -2
  264. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  265. data/src/core/lib/iomgr/closure.h +2 -3
  266. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  267. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  268. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  269. data/src/core/lib/iomgr/error.cc +6 -9
  270. data/src/core/lib/iomgr/error.h +4 -5
  271. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  272. data/src/core/lib/iomgr/ev_apple.h +43 -0
  273. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  274. data/src/core/lib/iomgr/ev_epollex_linux.cc +14 -7
  275. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  276. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  277. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  278. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  279. data/src/core/lib/iomgr/load_file.cc +1 -0
  280. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  281. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  282. data/src/core/lib/iomgr/port.h +1 -0
  283. data/src/core/lib/iomgr/python_util.h +46 -0
  284. data/src/core/lib/iomgr/resolve_address.h +4 -6
  285. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  286. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  287. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  288. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  289. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  290. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  291. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  292. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  293. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  294. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  295. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  296. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  297. data/src/core/lib/iomgr/tcp_client_posix.cc +25 -22
  298. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  299. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  300. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  301. data/src/core/lib/iomgr/tcp_posix.cc +2 -1
  302. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  303. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  304. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  305. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  306. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  307. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  308. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  309. data/src/core/lib/iomgr/timer_generic.h +39 -0
  310. data/src/core/lib/iomgr/timer_heap.h +2 -3
  311. data/src/core/lib/iomgr/udp_server.cc +9 -14
  312. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  313. data/src/core/lib/iomgr/work_serializer.h +65 -0
  314. data/src/core/lib/json/json.h +210 -79
  315. data/src/core/lib/json/json_reader.cc +469 -455
  316. data/src/core/lib/json/json_writer.cc +174 -169
  317. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  318. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  319. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  320. data/src/core/lib/security/credentials/credentials.cc +0 -84
  321. data/src/core/lib/security/credentials/credentials.h +8 -59
  322. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  323. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -12
  324. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  325. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  326. data/src/core/lib/security/credentials/jwt/json_token.cc +26 -56
  327. data/src/core/lib/security/credentials/jwt/json_token.h +4 -6
  328. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +8 -18
  329. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  330. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +151 -168
  331. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  332. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +91 -60
  333. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -4
  334. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  335. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  336. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  337. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +40 -12
  338. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  339. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  340. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  341. data/src/core/lib/security/security_connector/local/local_security_connector.cc +6 -8
  342. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  343. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -37
  344. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  345. data/src/core/lib/security/security_connector/ssl_utils.cc +62 -13
  346. data/src/core/lib/security/security_connector/ssl_utils.h +12 -11
  347. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -52
  348. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +32 -6
  349. data/src/core/lib/security/transport/auth_filters.h +0 -5
  350. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  351. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  352. data/src/core/lib/security/util/json_util.cc +22 -15
  353. data/src/core/lib/security/util/json_util.h +2 -2
  354. data/src/core/lib/slice/slice_intern.cc +2 -3
  355. data/src/core/lib/slice/slice_internal.h +14 -0
  356. data/src/core/lib/slice/slice_utils.h +9 -0
  357. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  358. data/src/core/lib/surface/call.cc +2 -3
  359. data/src/core/lib/surface/call_log_batch.cc +50 -58
  360. data/src/core/lib/surface/channel.cc +53 -31
  361. data/src/core/lib/surface/channel.h +35 -4
  362. data/src/core/lib/surface/channel_ping.cc +2 -3
  363. data/src/core/lib/surface/completion_queue.cc +33 -33
  364. data/src/core/lib/surface/event_string.cc +18 -25
  365. data/src/core/lib/surface/event_string.h +3 -1
  366. data/src/core/lib/surface/init_secure.cc +1 -4
  367. data/src/core/lib/surface/server.cc +570 -369
  368. data/src/core/lib/surface/server.h +32 -0
  369. data/src/core/lib/surface/version.cc +2 -2
  370. data/src/core/lib/transport/byte_stream.h +7 -2
  371. data/src/core/lib/transport/connectivity_state.cc +7 -6
  372. data/src/core/lib/transport/connectivity_state.h +5 -3
  373. data/src/core/lib/transport/metadata.cc +3 -3
  374. data/src/core/lib/transport/metadata_batch.h +2 -3
  375. data/src/core/lib/transport/static_metadata.h +1 -1
  376. data/src/core/lib/transport/status_conversion.cc +6 -14
  377. data/src/core/lib/transport/transport.cc +2 -3
  378. data/src/core/lib/transport/transport.h +3 -2
  379. data/src/core/lib/transport/transport_op_string.cc +61 -102
  380. data/src/core/lib/uri/uri_parser.h +2 -3
  381. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  382. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  383. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +9 -2
  384. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  385. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +33 -3
  386. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  387. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  388. data/src/core/tsi/fake_transport_security.cc +10 -15
  389. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  390. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  391. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  392. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
  393. data/src/core/tsi/ssl_transport_security.cc +54 -40
  394. data/src/core/tsi/ssl_transport_security.h +8 -8
  395. data/src/core/tsi/ssl_types.h +0 -2
  396. data/src/core/tsi/transport_security.h +6 -9
  397. data/src/core/tsi/transport_security_grpc.h +2 -3
  398. data/src/core/tsi/transport_security_interface.h +3 -3
  399. data/src/ruby/ext/grpc/rb_call.c +9 -1
  400. data/src/ruby/ext/grpc/rb_call_credentials.c +3 -2
  401. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  402. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  403. data/src/ruby/lib/grpc/errors.rb +103 -42
  404. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  405. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  406. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  407. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  408. data/src/ruby/lib/grpc/structs.rb +1 -1
  409. data/src/ruby/lib/grpc/version.rb +1 -1
  410. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  411. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  412. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  413. data/src/ruby/spec/debug_message_spec.rb +134 -0
  414. data/src/ruby/spec/generic/service_spec.rb +2 -0
  415. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  416. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  417. data/src/ruby/spec/support/services.rb +10 -4
  418. data/src/ruby/spec/testdata/ca.pem +18 -13
  419. data/src/ruby/spec/testdata/client.key +26 -14
  420. data/src/ruby/spec/testdata/client.pem +18 -12
  421. data/src/ruby/spec/testdata/server1.key +26 -14
  422. data/src/ruby/spec/testdata/server1.pem +20 -14
  423. data/third_party/abseil-cpp/absl/base/attributes.h +13 -1
  424. data/third_party/abseil-cpp/absl/base/config.h +55 -6
  425. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +30 -9
  426. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  427. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +9 -6
  428. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +5 -1
  429. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +2 -2
  430. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -3
  431. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +3 -3
  432. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +15 -13
  433. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +12 -0
  434. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +9 -0
  435. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +37 -0
  436. data/third_party/abseil-cpp/absl/base/options.h +9 -12
  437. data/third_party/abseil-cpp/absl/numeric/int128.cc +2 -2
  438. data/third_party/abseil-cpp/absl/numeric/int128.h +1 -1
  439. data/third_party/abseil-cpp/absl/strings/ascii.cc +3 -3
  440. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -3
  441. data/third_party/abseil-cpp/absl/strings/charconv.cc +0 -1
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +2 -2
  443. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +4 -2
  444. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  445. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  451. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  452. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  453. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  454. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  455. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  456. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  457. data/third_party/abseil-cpp/absl/strings/numbers.cc +54 -5
  458. data/third_party/abseil-cpp/absl/strings/numbers.h +6 -3
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  460. data/third_party/abseil-cpp/absl/strings/string_view.h +31 -24
  461. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  462. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  463. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  464. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  465. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  466. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  467. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  468. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  469. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  470. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  471. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  472. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  473. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  474. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  475. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  476. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  477. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  485. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  486. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  487. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  488. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  489. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  490. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  491. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  492. data/{src/boringssl → third_party/boringssl-with-bazel}/err_data.c +329 -297
  493. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bitstr.c +0 -0
  494. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_bool.c +0 -0
  495. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_d2i_fp.c +0 -0
  496. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_dup.c +0 -0
  497. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_enum.c +0 -0
  498. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  499. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_i2d_fp.c +0 -0
  500. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_int.c +0 -0
  501. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_mbstr.c +0 -0
  502. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_object.c +0 -0
  503. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  504. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  505. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_strnid.c +0 -0
  506. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_time.c +3 -4
  507. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_type.c +0 -0
  508. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  509. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  510. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_lib.c +0 -0
  511. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  512. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  513. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn_pack.c +0 -0
  514. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_enum.c +0 -0
  515. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_int.c +0 -0
  516. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/f_string.c +0 -0
  517. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  518. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_enc.c +0 -0
  519. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  520. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  521. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  522. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  523. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  524. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/base64/base64.c +0 -0
  525. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio.c +0 -0
  526. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  527. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/connect.c +3 -4
  528. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/fd.c +0 -1
  529. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/file.c +5 -6
  530. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  531. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  532. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/pair.c +0 -1
  533. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  534. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket.c +0 -0
  535. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/socket_helper.c +0 -0
  536. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  537. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/convert.c +0 -0
  538. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/buf/buf.c +10 -69
  539. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  540. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/ber.c +0 -0
  541. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/cbb.c +41 -2
  542. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/cbs.c +60 -3
  543. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/internal.h +0 -0
  544. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/unicode.c +0 -0
  545. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/chacha.c +0 -0
  546. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/chacha/internal.h +0 -0
  547. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/cipher_extra.c +0 -0
  548. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/derive_key.c +1 -1
  549. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesccm.c +0 -0
  550. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesctrhmac.c +0 -0
  551. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_aesgcmsiv.c +8 -0
  552. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_chacha20poly1305.c +0 -0
  553. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  554. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  555. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  556. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_tls.c +0 -0
  557. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  558. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/tls_cbc.c +0 -0
  559. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cmac/cmac.c +0 -0
  560. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf.c +0 -0
  561. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  562. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  563. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  564. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  565. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm-linux.c +7 -6
  566. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm-linux.h +0 -0
  567. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  568. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-intel.c +13 -4
  569. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  570. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/crypto.c +11 -0
  571. data/third_party/{boringssl/third_party/fiat → boringssl-with-bazel/src/crypto/curve25519}/curve25519.c +18 -26
  572. data/third_party/{boringssl/third_party/fiat → boringssl-with-bazel/src/crypto/curve25519}/curve25519_tables.h +13 -21
  573. data/third_party/{boringssl/third_party/fiat → boringssl-with-bazel/src/crypto/curve25519}/internal.h +14 -22
  574. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/curve25519/spake25519.c +1 -1
  575. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/check.c +3 -3
  576. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh.c +16 -2
  577. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  578. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  579. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  580. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa.c +10 -0
  581. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  582. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ec_extra/ec_asn1.c +0 -0
  583. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ec_extra/ec_derive.c +2 -3
  584. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  585. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  586. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdh_extra/ecdh_extra.c +2 -2
  587. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ecdsa_extra/ecdsa_asn1.c +0 -0
  588. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/engine/engine.c +0 -0
  589. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/err/err.c +39 -38
  590. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/err/internal.h +0 -0
  591. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  592. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp.c +0 -0
  593. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_asn1.c +0 -0
  594. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/evp_ctx.c +0 -0
  595. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/internal.h +0 -0
  596. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_dsa_asn1.c +0 -0
  597. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ec.c +0 -1
  598. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ec_asn1.c +0 -0
  599. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519.c +0 -0
  600. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_ed25519_asn1.c +0 -0
  601. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_rsa.c +14 -2
  602. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_rsa_asn1.c +0 -0
  603. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_x25519.c +0 -0
  604. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/p_x25519_asn1.c +1 -2
  605. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  606. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  607. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/scrypt.c +0 -0
  608. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  609. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  610. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  611. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  612. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/internal.h +5 -7
  613. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/key_wrap.c +0 -0
  614. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/aes/mode_wrappers.c +0 -2
  615. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bcm.c +4 -1
  616. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  617. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  618. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bn.c +0 -0
  619. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  620. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/cmp.c +0 -0
  621. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/ctx.c +0 -0
  622. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div.c +0 -0
  623. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/div_extra.c +0 -0
  624. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/exponentiation.c +3 -3
  625. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd.c +0 -0
  626. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/gcd_extra.c +0 -0
  627. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  628. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/internal.h +14 -11
  629. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  630. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery.c +8 -8
  631. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/montgomery_inv.c +0 -0
  632. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/mul.c +30 -154
  633. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/prime.c +11 -12
  634. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/random.c +0 -0
  635. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.c +0 -0
  636. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/rsaz_exp.h +0 -0
  637. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/shift.c +0 -0
  638. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  639. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  640. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/cipher.c +0 -0
  641. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_aes.c +3 -5
  642. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/e_des.c +0 -0
  643. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/internal.h +0 -0
  644. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/delocate.h +0 -0
  645. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  646. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  647. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digest.c +0 -0
  648. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/digests.c +16 -0
  649. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  650. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/md32_common.h +0 -0
  651. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec.c +289 -117
  652. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec_key.c +14 -28
  653. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  654. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/felem.c +25 -7
  655. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/internal.h +432 -160
  656. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/oct.c +63 -71
  657. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p224-64.c +5 -14
  658. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  659. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  660. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/p256-x86_64.h +0 -0
  661. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  664. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/simple.c +125 -148
  665. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  666. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/util.c +0 -0
  667. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ec/wnaf.c +61 -18
  668. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  669. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  670. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/fips_shared_support.c +0 -0
  671. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  672. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/is_fips.c +0 -0
  673. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md4/md4.c +0 -0
  674. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/internal.h +0 -0
  675. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/md5/md5.c +0 -0
  676. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cbc.c +0 -0
  677. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/cfb.c +0 -0
  678. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ctr.c +0 -0
  679. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/gcm.c +45 -193
  680. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  681. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/internal.h +8 -18
  682. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/ofb.c +0 -0
  683. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  684. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/ctrdrbg.c +0 -0
  685. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  686. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  687. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  688. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/internal.h +41 -5
  689. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/rand.c +32 -17
  690. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rand/urandom.c +24 -114
  691. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/blinding.c +4 -0
  692. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/internal.h +1 -0
  693. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/padding.c +0 -0
  694. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/rsa.c +58 -39
  695. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/rsa/rsa_impl.c +72 -49
  696. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/self_check/self_check.c +0 -0
  697. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/internal.h +0 -0
  698. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  699. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1.c +0 -0
  700. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha256.c +0 -0
  701. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha512.c +44 -35
  702. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  703. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  704. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  705. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hrss/hrss.c +210 -311
  706. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hrss/internal.h +0 -1
  707. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/internal.h +21 -1
  708. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/lhash/lhash.c +0 -0
  709. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/mem.c +99 -12
  710. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj.c +16 -21
  711. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_dat.h +41 -6
  712. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  713. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_all.c +0 -0
  714. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_info.c +0 -1
  715. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_lib.c +7 -7
  716. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_oth.c +0 -1
  717. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_pk8.c +0 -1
  718. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_pkey.c +0 -1
  719. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  720. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  721. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  722. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7.c +0 -0
  723. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/pkcs7_x509.c +1 -1
  724. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/internal.h +0 -0
  725. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/p5_pbev2.c +0 -0
  726. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8.c +0 -0
  727. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs8/pkcs8_x509.c +0 -0
  728. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  729. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305.c +2 -2
  730. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305_arm.c +21 -20
  731. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/poly1305_vec.c +34 -17
  732. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/internal.h +0 -0
  733. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pool/pool.c +1 -2
  734. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/deterministic.c +6 -10
  735. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  736. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/fuchsia.c +0 -0
  737. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  738. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/windows.c +16 -0
  739. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  740. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  741. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_lock.c +0 -0
  742. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  743. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_print.c +0 -0
  744. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/siphash/siphash.c +3 -1
  745. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/stack/stack.c +0 -0
  746. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  747. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_none.c +0 -0
  748. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_pthread.c +4 -0
  749. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread_win.c +4 -0
  750. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  752. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  753. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  754. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  755. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_strex.c +0 -0
  756. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_verify.c +0 -1
  757. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/algorithm.c +0 -0
  758. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/asn1_gen.c +0 -0
  759. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/by_dir.c +1 -1
  760. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/by_file.c +0 -1
  761. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  762. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  763. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  764. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  765. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_crl.c +0 -0
  766. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_req.c +0 -0
  767. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509.c +0 -0
  768. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  769. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  770. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509.c +0 -0
  771. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  772. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_cmp.c +0 -1
  773. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  774. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_def.c +0 -0
  775. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  776. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_lu.c +0 -0
  777. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_obj.c +1 -1
  778. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_r2x.c +0 -1
  779. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_req.c +0 -1
  780. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_set.c +16 -0
  781. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_trs.c +1 -2
  782. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_txt.c +0 -0
  783. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  784. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_vfy.c +5 -1
  785. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_vpm.c +3 -4
  786. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509cset.c +0 -0
  787. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509name.c +4 -3
  788. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  789. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  790. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  791. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_all.c +0 -1
  792. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  793. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_crl.c +0 -0
  794. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  795. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  796. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  797. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  798. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pubkey.c +0 -0
  799. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  800. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_sig.c +0 -0
  801. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  802. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  803. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509.c +0 -0
  804. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  805. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/ext_dat.h +0 -0
  806. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/internal.h +0 -0
  807. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_cache.c +0 -0
  808. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  809. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  810. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  811. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  812. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_node.c +0 -0
  813. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_tree.c +0 -0
  814. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akey.c +0 -0
  815. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  816. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_alt.c +3 -3
  817. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  818. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  819. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_conf.c +0 -0
  820. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_cpols.c +0 -0
  821. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  822. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_enum.c +2 -2
  823. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  824. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_genn.c +0 -0
  825. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  826. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_info.c +4 -5
  827. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  828. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_lib.c +0 -0
  829. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  830. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ocsp.c +0 -0
  831. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pci.c +0 -0
  832. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  833. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  834. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  835. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  836. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  837. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_purp.c +2 -3
  838. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_skey.c +0 -0
  839. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  840. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_utl.c +11 -12
  841. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aead.h +0 -0
  842. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/aes.h +0 -0
  843. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/arm_arch.h +0 -0
  844. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1.h +0 -0
  845. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  846. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  847. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/base.h +5 -1
  848. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/base64.h +0 -0
  849. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bio.h +0 -0
  850. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/blowfish.h +0 -0
  851. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bn.h +32 -20
  852. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buf.h +9 -9
  853. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  854. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/bytestring.h +34 -0
  855. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cast.h +0 -0
  856. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  857. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cipher.h +0 -0
  858. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cmac.h +0 -0
  859. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/conf.h +0 -0
  860. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/cpu.h +0 -0
  861. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/crypto.h +9 -4
  862. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/curve25519.h +0 -0
  863. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  864. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dh.h +20 -0
  865. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/digest.h +1 -0
  866. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dsa.h +16 -0
  867. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  868. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/e_os2.h +0 -0
  869. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ec.h +11 -4
  870. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ec_key.h +4 -2
  871. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdh.h +0 -0
  872. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ecdsa.h +6 -0
  873. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/engine.h +0 -0
  874. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/err.h +13 -9
  875. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/evp.h +20 -0
  876. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  877. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  878. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hmac.h +0 -0
  879. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hrss.h +0 -0
  880. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  881. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/lhash.h +0 -0
  882. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md4.h +0 -0
  883. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/md5.h +0 -0
  884. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/mem.h +17 -2
  885. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/nid.h +14 -0
  886. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj.h +0 -0
  887. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  888. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  889. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  890. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  891. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  892. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pem.h +0 -0
  893. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  894. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs7.h +0 -0
  895. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs8.h +0 -0
  896. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/poly1305.h +5 -7
  897. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pool.h +0 -0
  898. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rand.h +3 -17
  899. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  900. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ripemd.h +0 -0
  901. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rsa.h +31 -0
  902. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  903. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/sha.h +26 -0
  904. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/siphash.h +0 -0
  905. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/span.h +0 -0
  906. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  907. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ssl.h +182 -97
  908. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ssl3.h +0 -0
  909. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/stack.h +0 -0
  910. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/thread.h +0 -0
  911. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/tls1.h +1 -3
  912. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  913. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/type_check.h +0 -0
  914. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509.h +5 -3
  915. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509_vfy.h +1 -0
  916. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/x509v3.h +0 -0
  917. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  918. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_both.cc +0 -5
  919. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_lib.cc +3 -3
  920. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_pkt.cc +0 -1
  921. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/d1_srtp.cc +0 -0
  922. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_method.cc +13 -5
  923. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/dtls_record.cc +0 -0
  924. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handoff.cc +237 -51
  925. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake.cc +19 -7
  926. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake_client.cc +51 -32
  927. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/handshake_server.cc +12 -8
  928. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/internal.h +94 -71
  929. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_both.cc +10 -10
  930. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_lib.cc +4 -5
  931. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/s3_pkt.cc +21 -22
  932. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_aead_ctx.cc +0 -0
  933. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_asn1.cc +30 -2
  934. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_buffer.cc +34 -15
  935. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_cert.cc +4 -1
  936. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_cipher.cc +0 -1
  937. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_file.cc +0 -0
  938. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_key_share.cc +0 -0
  939. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_lib.cc +19 -15
  940. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_privkey.cc +13 -2
  941. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_session.cc +66 -6
  942. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_stat.cc +6 -0
  943. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_transcript.cc +0 -0
  944. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_versions.cc +1 -1
  945. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/ssl_x509.cc +0 -0
  946. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/t1_enc.cc +6 -2
  947. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/t1_lib.cc +53 -219
  948. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_both.cc +1 -1
  949. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_client.cc +101 -31
  950. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_enc.cc +28 -76
  951. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls13_server.cc +111 -104
  952. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls_method.cc +64 -26
  953. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/tls_record.cc +7 -2
  954. data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_32.h +245 -175
  955. data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/curve25519_64.h +135 -75
  956. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  957. data/third_party/{boringssl → boringssl-with-bazel/src}/third_party/fiat/p256_64.h +512 -503
  958. metadata +648 -503
  959. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1917
  960. data/src/core/lib/gprpp/inlined_vector.h +0 -246
  961. data/src/core/lib/gprpp/optional.h +0 -74
  962. data/src/core/lib/gprpp/string_view.h +0 -169
  963. data/src/core/lib/iomgr/logical_thread.cc +0 -103
  964. data/src/core/lib/iomgr/logical_thread.h +0 -52
  965. data/src/core/lib/json/json.cc +0 -94
  966. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3297
  967. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -860
  968. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9501
  969. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +0 -96
  970. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +0 -84
  971. data/third_party/boringssl/third_party/fiat/p256.c +0 -1063
  972. data/third_party/boringssl/third_party/fiat/p256_32.h +0 -3226
@@ -28,11 +28,16 @@
28
28
 
29
29
  #include <set>
30
30
 
31
+ #include "absl/strings/string_view.h"
32
+
31
33
  #include <grpc/support/alloc.h>
32
34
  #include <grpc/support/log.h>
33
35
  #include <grpc/support/string_util.h>
34
36
  #include <grpc/support/sync.h>
35
37
 
38
+ #include "absl/container/inlined_vector.h"
39
+ #include "absl/types/optional.h"
40
+
36
41
  #include "src/core/ext/filters/client_channel/backend_metric.h"
37
42
  #include "src/core/ext/filters/client_channel/backup_poller.h"
38
43
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
@@ -45,6 +50,7 @@
45
50
  #include "src/core/ext/filters/client_channel/resolving_lb_policy.h"
46
51
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
47
52
  #include "src/core/ext/filters/client_channel/service_config.h"
53
+ #include "src/core/ext/filters/client_channel/service_config_call_data.h"
48
54
  #include "src/core/ext/filters/client_channel/subchannel.h"
49
55
  #include "src/core/ext/filters/deadline/deadline_filter.h"
50
56
  #include "src/core/lib/backoff/backoff.h"
@@ -52,13 +58,12 @@
52
58
  #include "src/core/lib/channel/connected_channel.h"
53
59
  #include "src/core/lib/channel/status_util.h"
54
60
  #include "src/core/lib/gpr/string.h"
55
- #include "src/core/lib/gprpp/inlined_vector.h"
56
61
  #include "src/core/lib/gprpp/manual_constructor.h"
57
62
  #include "src/core/lib/gprpp/map.h"
58
63
  #include "src/core/lib/gprpp/sync.h"
59
- #include "src/core/lib/iomgr/combiner.h"
60
64
  #include "src/core/lib/iomgr/iomgr.h"
61
65
  #include "src/core/lib/iomgr/polling_entity.h"
66
+ #include "src/core/lib/iomgr/work_serializer.h"
62
67
  #include "src/core/lib/profiling/timers.h"
63
68
  #include "src/core/lib/slice/slice_internal.h"
64
69
  #include "src/core/lib/slice/slice_string_helpers.h"
@@ -126,6 +131,7 @@ class ChannelData {
126
131
  size_t per_rpc_retry_buffer_size() const {
127
132
  return per_rpc_retry_buffer_size_;
128
133
  }
134
+ grpc_channel_stack* owning_stack() const { return owning_stack_; }
129
135
 
130
136
  // Note: Does NOT return a new ref.
131
137
  grpc_error* disconnect_error() const {
@@ -149,6 +155,7 @@ class ChannelData {
149
155
  RefCountedPtr<ServiceConfig> service_config() const {
150
156
  return service_config_;
151
157
  }
158
+ WorkSerializer* work_serializer() const { return work_serializer_.get(); }
152
159
 
153
160
  RefCountedPtr<ConnectedSubchannel> GetConnectedSubchannelInDataPlane(
154
161
  SubchannelInterface* subchannel) const;
@@ -159,21 +166,29 @@ class ChannelData {
159
166
  grpc_connectivity_state* state,
160
167
  grpc_closure* on_complete,
161
168
  grpc_closure* watcher_timer_init) {
162
- MutexLock lock(&external_watchers_mu_);
163
- // Will be deleted when the watch is complete.
164
- GPR_ASSERT(external_watchers_[on_complete] == nullptr);
165
- external_watchers_[on_complete] = new ExternalConnectivityWatcher(
169
+ auto* watcher = new ExternalConnectivityWatcher(
166
170
  this, pollent, state, on_complete, watcher_timer_init);
171
+ {
172
+ MutexLock lock(&external_watchers_mu_);
173
+ // Will be deleted when the watch is complete.
174
+ GPR_ASSERT(external_watchers_[on_complete] == nullptr);
175
+ external_watchers_[on_complete] = watcher;
176
+ }
177
+ watcher->Start();
167
178
  }
168
179
 
169
180
  void RemoveExternalConnectivityWatcher(grpc_closure* on_complete,
170
181
  bool cancel) {
171
- MutexLock lock(&external_watchers_mu_);
172
- auto it = external_watchers_.find(on_complete);
173
- if (it != external_watchers_.end()) {
174
- if (cancel) it->second->Cancel();
175
- external_watchers_.erase(it);
182
+ ExternalConnectivityWatcher* watcher = nullptr;
183
+ {
184
+ MutexLock lock(&external_watchers_mu_);
185
+ auto it = external_watchers_.find(on_complete);
186
+ if (it != external_watchers_.end()) {
187
+ watcher = it->second;
188
+ external_watchers_.erase(it);
189
+ }
176
190
  }
191
+ if (watcher != nullptr && cancel) watcher->Cancel();
177
192
  }
178
193
 
179
194
  int NumExternalConnectivityWatchers() const {
@@ -204,13 +219,15 @@ class ChannelData {
204
219
 
205
220
  ~ExternalConnectivityWatcher();
206
221
 
222
+ void Start();
223
+
207
224
  void Notify(grpc_connectivity_state state) override;
208
225
 
209
226
  void Cancel();
210
227
 
211
228
  private:
212
- static void AddWatcherLocked(void* arg, grpc_error* ignored);
213
- static void RemoveWatcherLocked(void* arg, grpc_error* ignored);
229
+ void AddWatcherLocked();
230
+ void RemoveWatcherLocked();
214
231
 
215
232
  ChannelData* chand_;
216
233
  grpc_polling_entity pollent_;
@@ -218,8 +235,6 @@ class ChannelData {
218
235
  grpc_connectivity_state* state_;
219
236
  grpc_closure* on_complete_;
220
237
  grpc_closure* watcher_timer_init_;
221
- grpc_closure add_closure_;
222
- grpc_closure remove_closure_;
223
238
  Atomic<bool> done_{false};
224
239
  };
225
240
 
@@ -239,20 +254,19 @@ class ChannelData {
239
254
  void DestroyResolvingLoadBalancingPolicyLocked();
240
255
 
241
256
  static bool ProcessResolverResultLocked(
242
- void* arg, const Resolver::Result& result, const char** lb_policy_name,
257
+ void* arg, const Resolver::Result& result,
243
258
  RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config,
244
- grpc_error** service_config_error);
259
+ grpc_error** service_config_error, bool* no_valid_service_config);
245
260
 
246
261
  grpc_error* DoPingLocked(grpc_transport_op* op);
247
262
 
248
- static void StartTransportOpLocked(void* arg, grpc_error* ignored);
263
+ void StartTransportOpLocked(grpc_transport_op* op);
249
264
 
250
- static void TryToConnectLocked(void* arg, grpc_error* error_ignored);
265
+ void TryToConnectLocked();
251
266
 
252
267
  void ProcessLbPolicy(
253
268
  const Resolver::Result& resolver_result,
254
269
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
255
- grpc_core::UniquePtr<char>* lb_policy_name,
256
270
  RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config);
257
271
 
258
272
  //
@@ -281,9 +295,9 @@ class ChannelData {
281
295
  RefCountedPtr<ServiceConfig> service_config_;
282
296
 
283
297
  //
284
- // Fields used in the control plane. Guarded by combiner.
298
+ // Fields used in the control plane. Guarded by work_serializer.
285
299
  //
286
- Combiner* combiner_;
300
+ std::shared_ptr<WorkSerializer> work_serializer_;
287
301
  grpc_pollset_set* interested_parties_;
288
302
  RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
289
303
  OrphanablePtr<ResolvingLoadBalancingPolicy> resolving_lb_policy_;
@@ -295,17 +309,17 @@ class ChannelData {
295
309
  std::map<Subchannel*, int> subchannel_refcount_map_;
296
310
  // The set of SubchannelWrappers that currently exist.
297
311
  // No need to hold a ref, since the map is updated in the control-plane
298
- // combiner when the SubchannelWrappers are created and destroyed.
312
+ // work_serializer when the SubchannelWrappers are created and destroyed.
299
313
  std::set<SubchannelWrapper*> subchannel_wrappers_;
300
314
  // Pending ConnectedSubchannel updates for each SubchannelWrapper.
301
- // Updates are queued here in the control plane combiner and then applied
302
- // in the data plane mutex when the picker is updated.
303
- std::map<RefCountedPtr<SubchannelWrapper>, RefCountedPtr<ConnectedSubchannel>,
304
- RefCountedPtrLess<SubchannelWrapper>>
315
+ // Updates are queued here in the control plane work_serializer and then
316
+ // applied in the data plane mutex when the picker is updated.
317
+ std::map<RefCountedPtr<SubchannelWrapper>, RefCountedPtr<ConnectedSubchannel>>
305
318
  pending_subchannel_updates_;
306
319
 
307
320
  //
308
- // Fields accessed from both data plane mutex and control plane combiner.
321
+ // Fields accessed from both data plane mutex and control plane
322
+ // work_serializer.
309
323
  //
310
324
  Atomic<grpc_error*> disconnect_error_;
311
325
 
@@ -365,7 +379,7 @@ class CallData {
365
379
  Metadata(CallData* calld, grpc_metadata_batch* batch)
366
380
  : calld_(calld), batch_(batch) {}
367
381
 
368
- void Add(StringView key, StringView value) override {
382
+ void Add(absl::string_view key, absl::string_view value) override {
369
383
  grpc_linked_mdelem* linked_mdelem = static_cast<grpc_linked_mdelem*>(
370
384
  calld_->arena_->Alloc(sizeof(grpc_linked_mdelem)));
371
385
  linked_mdelem->md = grpc_mdelem_from_slices(
@@ -400,7 +414,7 @@ class CallData {
400
414
  reinterpret_cast<grpc_linked_mdelem*>(handle);
401
415
  return reinterpret_cast<intptr_t>(linked_mdelem->next);
402
416
  }
403
- std::pair<StringView, StringView> IteratorHandleGet(
417
+ std::pair<absl::string_view, absl::string_view> IteratorHandleGet(
404
418
  intptr_t handle) const override {
405
419
  grpc_linked_mdelem* linked_mdelem =
406
420
  reinterpret_cast<grpc_linked_mdelem*>(handle);
@@ -432,6 +446,12 @@ class CallData {
432
446
  return calld_->backend_metric_data_;
433
447
  }
434
448
 
449
+ absl::string_view ExperimentalGetCallAttribute(const char* key) override {
450
+ auto it = calld_->call_attributes_.find(key);
451
+ if (it == calld_->call_attributes_.end()) return absl::string_view();
452
+ return it->second;
453
+ }
454
+
435
455
  private:
436
456
  CallData* calld_;
437
457
  };
@@ -751,8 +771,8 @@ class CallData {
751
771
  grpc_call_context_element* call_context_;
752
772
 
753
773
  RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_;
754
- ServiceConfig::CallData service_config_call_data_;
755
774
  const ClientChannelMethodParsedConfig* method_params_ = nullptr;
775
+ std::map<const char*, absl::string_view> call_attributes_;
756
776
 
757
777
  RefCountedPtr<SubchannelCall> subchannel_call_;
758
778
 
@@ -821,7 +841,7 @@ class CallData {
821
841
  // Note: We inline the cache for the first 3 send_message ops and use
822
842
  // dynamic allocation after that. This number was essentially picked
823
843
  // at random; it could be changed in the future to tune performance.
824
- InlinedVector<ByteStreamCache*, 3> send_messages_;
844
+ absl::InlinedVector<ByteStreamCache*, 3> send_messages_;
825
845
  // send_trailing_metadata
826
846
  bool seen_send_trailing_metadata_ = false;
827
847
  grpc_linked_mdelem* send_trailing_metadata_storage_ = nullptr;
@@ -839,7 +859,7 @@ class CallData {
839
859
  // Note that no synchronization is needed here, because even if the
840
860
  // underlying subchannel is shared between channels, this wrapper will only
841
861
  // be used within one channel, so it will always be synchronized by the
842
- // control plane combiner.
862
+ // control plane work_serializer.
843
863
  class ChannelData::SubchannelWrapper : public SubchannelInterface {
844
864
  public:
845
865
  SubchannelWrapper(ChannelData* chand, Subchannel* subchannel,
@@ -908,7 +928,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
908
928
  initial_state,
909
929
  grpc_core::UniquePtr<char>(
910
930
  gpr_strdup(health_check_service_name_.get())),
911
- OrphanablePtr<Subchannel::ConnectivityStateWatcherInterface>(
931
+ RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
912
932
  watcher_wrapper));
913
933
  }
914
934
 
@@ -958,14 +978,14 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
958
978
  replacement->last_seen_state(),
959
979
  grpc_core::UniquePtr<char>(
960
980
  gpr_strdup(health_check_service_name.get())),
961
- OrphanablePtr<Subchannel::ConnectivityStateWatcherInterface>(
981
+ RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
962
982
  replacement));
963
983
  }
964
984
  // Save the new health check service name.
965
985
  health_check_service_name_ = std::move(health_check_service_name);
966
986
  }
967
987
 
968
- // Caller must be holding the control-plane combiner.
988
+ // Caller must be holding the control-plane work_serializer.
969
989
  ConnectedSubchannel* connected_subchannel() const {
970
990
  return connected_subchannel_.get();
971
991
  }
@@ -1005,23 +1025,27 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
1005
1025
  parent_(std::move(parent)),
1006
1026
  last_seen_state_(initial_state) {}
1007
1027
 
1008
- ~WatcherWrapper() { parent_.reset(DEBUG_LOCATION, "WatcherWrapper"); }
1009
-
1010
- void Orphan() override { Unref(); }
1028
+ ~WatcherWrapper() {
1029
+ auto* parent = parent_.release(); // ref owned by lambda
1030
+ parent->chand_->work_serializer_->Run(
1031
+ [parent]() { parent->Unref(DEBUG_LOCATION, "WatcherWrapper"); },
1032
+ DEBUG_LOCATION);
1033
+ }
1011
1034
 
1012
- void OnConnectivityStateChange(
1013
- grpc_connectivity_state new_state,
1014
- RefCountedPtr<ConnectedSubchannel> connected_subchannel) override {
1035
+ void OnConnectivityStateChange() override {
1015
1036
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1016
1037
  gpr_log(GPR_INFO,
1017
1038
  "chand=%p: connectivity change for subchannel wrapper %p "
1018
- "subchannel %p (connected_subchannel=%p state=%s); "
1019
- "hopping into combiner",
1020
- parent_->chand_, parent_.get(), parent_->subchannel_,
1021
- connected_subchannel.get(), ConnectivityStateName(new_state));
1039
+ "subchannel %p; hopping into work_serializer",
1040
+ parent_->chand_, parent_.get(), parent_->subchannel_);
1022
1041
  }
1023
- // Will delete itself.
1024
- new Updater(Ref(), new_state, std::move(connected_subchannel));
1042
+ Ref().release(); // ref owned by lambda
1043
+ parent_->chand_->work_serializer_->Run(
1044
+ [this]() {
1045
+ ApplyUpdateInControlPlaneWorkSerializer();
1046
+ Unref();
1047
+ },
1048
+ DEBUG_LOCATION);
1025
1049
  }
1026
1050
 
1027
1051
  grpc_pollset_set* interested_parties() override {
@@ -1041,50 +1065,25 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
1041
1065
  grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
1042
1066
 
1043
1067
  private:
1044
- class Updater {
1045
- public:
1046
- Updater(RefCountedPtr<WatcherWrapper> parent,
1047
- grpc_connectivity_state new_state,
1048
- RefCountedPtr<ConnectedSubchannel> connected_subchannel)
1049
- : parent_(std::move(parent)),
1050
- state_(new_state),
1051
- connected_subchannel_(std::move(connected_subchannel)) {
1052
- parent_->parent_->chand_->combiner_->Run(
1053
- GRPC_CLOSURE_INIT(&closure_, ApplyUpdateInControlPlaneCombiner,
1054
- this, nullptr),
1055
- GRPC_ERROR_NONE);
1068
+ void ApplyUpdateInControlPlaneWorkSerializer() {
1069
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1070
+ gpr_log(GPR_INFO,
1071
+ "chand=%p: processing connectivity change in work serializer "
1072
+ "for subchannel wrapper %p subchannel %p "
1073
+ "watcher=%p",
1074
+ parent_->chand_, parent_.get(), parent_->subchannel_,
1075
+ watcher_.get());
1056
1076
  }
1057
-
1058
- private:
1059
- static void ApplyUpdateInControlPlaneCombiner(void* arg,
1060
- grpc_error* /*error*/) {
1061
- Updater* self = static_cast<Updater*>(arg);
1062
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1063
- gpr_log(GPR_INFO,
1064
- "chand=%p: processing connectivity change in combiner "
1065
- "for subchannel wrapper %p subchannel %p "
1066
- "(connected_subchannel=%p state=%s): watcher=%p",
1067
- self->parent_->parent_->chand_, self->parent_->parent_.get(),
1068
- self->parent_->parent_->subchannel_,
1069
- self->connected_subchannel_.get(),
1070
- ConnectivityStateName(self->state_),
1071
- self->parent_->watcher_.get());
1072
- }
1073
- // Ignore update if the parent WatcherWrapper has been replaced
1074
- // since this callback was scheduled.
1075
- if (self->parent_->watcher_ == nullptr) return;
1076
- self->parent_->last_seen_state_ = self->state_;
1077
- self->parent_->parent_->MaybeUpdateConnectedSubchannel(
1078
- std::move(self->connected_subchannel_));
1079
- self->parent_->watcher_->OnConnectivityStateChange(self->state_);
1080
- delete self;
1077
+ ConnectivityStateChange state_change = PopConnectivityStateChange();
1078
+ // Ignore update if the parent WatcherWrapper has been replaced
1079
+ // since this callback was scheduled.
1080
+ if (watcher_ != nullptr) {
1081
+ last_seen_state_ = state_change.state;
1082
+ parent_->MaybeUpdateConnectedSubchannel(
1083
+ std::move(state_change.connected_subchannel));
1084
+ watcher_->OnConnectivityStateChange(state_change.state);
1081
1085
  }
1082
-
1083
- RefCountedPtr<WatcherWrapper> parent_;
1084
- grpc_connectivity_state state_;
1085
- RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
1086
- grpc_closure closure_;
1087
- };
1086
+ }
1088
1087
 
1089
1088
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
1090
1089
  watcher_;
@@ -1123,7 +1122,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
1123
1122
  // CancelConnectivityStateWatch() with its watcher, we know the
1124
1123
  // corresponding WrapperWatcher to cancel on the underlying subchannel.
1125
1124
  std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_;
1126
- // To be accessed only in the control plane combiner.
1125
+ // To be accessed only in the control plane work_serializer.
1127
1126
  RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
1128
1127
  // To be accessed only in the data plane mutex.
1129
1128
  RefCountedPtr<ConnectedSubchannel> connected_subchannel_in_data_plane_;
@@ -1146,9 +1145,6 @@ ChannelData::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
1146
1145
  grpc_polling_entity_add_to_pollset_set(&pollent_,
1147
1146
  chand_->interested_parties_);
1148
1147
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExternalConnectivityWatcher");
1149
- chand_->combiner_->Run(
1150
- GRPC_CLOSURE_INIT(&add_closure_, AddWatcherLocked, this, nullptr),
1151
- GRPC_ERROR_NONE);
1152
1148
  }
1153
1149
 
1154
1150
  ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
@@ -1158,6 +1154,11 @@ ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
1158
1154
  "ExternalConnectivityWatcher");
1159
1155
  }
1160
1156
 
1157
+ void ChannelData::ExternalConnectivityWatcher::Start() {
1158
+ chand_->work_serializer_->Run([this]() { AddWatcherLocked(); },
1159
+ DEBUG_LOCATION);
1160
+ }
1161
+
1161
1162
  void ChannelData::ExternalConnectivityWatcher::Notify(
1162
1163
  grpc_connectivity_state state) {
1163
1164
  bool done = false;
@@ -1170,13 +1171,12 @@ void ChannelData::ExternalConnectivityWatcher::Notify(
1170
1171
  // Report new state to the user.
1171
1172
  *state_ = state;
1172
1173
  ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_NONE);
1173
- // Hop back into the combiner to clean up.
1174
+ // Hop back into the work_serializer to clean up.
1174
1175
  // Not needed in state SHUTDOWN, because the tracker will
1175
1176
  // automatically remove all watchers in that case.
1176
1177
  if (state != GRPC_CHANNEL_SHUTDOWN) {
1177
- chand_->combiner_->Run(
1178
- GRPC_CLOSURE_INIT(&remove_closure_, RemoveWatcherLocked, this, nullptr),
1179
- GRPC_ERROR_NONE);
1178
+ chand_->work_serializer_->Run([this]() { RemoveWatcherLocked(); },
1179
+ DEBUG_LOCATION);
1180
1180
  }
1181
1181
  }
1182
1182
 
@@ -1187,28 +1187,20 @@ void ChannelData::ExternalConnectivityWatcher::Cancel() {
1187
1187
  return; // Already done.
1188
1188
  }
1189
1189
  ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
1190
- // Hop back into the combiner to clean up.
1191
- chand_->combiner_->Run(
1192
- GRPC_CLOSURE_INIT(&remove_closure_, RemoveWatcherLocked, this, nullptr),
1193
- GRPC_ERROR_NONE);
1190
+ // Hop back into the work_serializer to clean up.
1191
+ chand_->work_serializer_->Run([this]() { RemoveWatcherLocked(); },
1192
+ DEBUG_LOCATION);
1194
1193
  }
1195
1194
 
1196
- void ChannelData::ExternalConnectivityWatcher::AddWatcherLocked(
1197
- void* arg, grpc_error* /*ignored*/) {
1198
- ExternalConnectivityWatcher* self =
1199
- static_cast<ExternalConnectivityWatcher*>(arg);
1200
- Closure::Run(DEBUG_LOCATION, self->watcher_timer_init_, GRPC_ERROR_NONE);
1195
+ void ChannelData::ExternalConnectivityWatcher::AddWatcherLocked() {
1196
+ Closure::Run(DEBUG_LOCATION, watcher_timer_init_, GRPC_ERROR_NONE);
1201
1197
  // Add new watcher.
1202
- self->chand_->state_tracker_.AddWatcher(
1203
- self->initial_state_,
1204
- OrphanablePtr<ConnectivityStateWatcherInterface>(self));
1198
+ chand_->state_tracker_.AddWatcher(
1199
+ initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
1205
1200
  }
1206
1201
 
1207
- void ChannelData::ExternalConnectivityWatcher::RemoveWatcherLocked(
1208
- void* arg, grpc_error* /*ignored*/) {
1209
- ExternalConnectivityWatcher* self =
1210
- static_cast<ExternalConnectivityWatcher*>(arg);
1211
- self->chand_->state_tracker_.RemoveWatcher(self);
1202
+ void ChannelData::ExternalConnectivityWatcher::RemoveWatcherLocked() {
1203
+ chand_->state_tracker_.RemoveWatcher(this);
1212
1204
  }
1213
1205
 
1214
1206
  //
@@ -1224,28 +1216,20 @@ class ChannelData::ConnectivityWatcherAdder {
1224
1216
  initial_state_(initial_state),
1225
1217
  watcher_(std::move(watcher)) {
1226
1218
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherAdder");
1227
- chand_->combiner_->Run(
1228
- GRPC_CLOSURE_INIT(&closure_,
1229
- &ConnectivityWatcherAdder::AddWatcherLocked, this,
1230
- nullptr),
1231
- GRPC_ERROR_NONE);
1219
+ chand_->work_serializer_->Run([this]() { AddWatcherLocked(); },
1220
+ DEBUG_LOCATION);
1232
1221
  }
1233
1222
 
1234
1223
  private:
1235
- static void AddWatcherLocked(void* arg, grpc_error* /*error*/) {
1236
- ConnectivityWatcherAdder* self =
1237
- static_cast<ConnectivityWatcherAdder*>(arg);
1238
- self->chand_->state_tracker_.AddWatcher(self->initial_state_,
1239
- std::move(self->watcher_));
1240
- GRPC_CHANNEL_STACK_UNREF(self->chand_->owning_stack_,
1241
- "ConnectivityWatcherAdder");
1242
- delete self;
1224
+ void AddWatcherLocked() {
1225
+ chand_->state_tracker_.AddWatcher(initial_state_, std::move(watcher_));
1226
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ConnectivityWatcherAdder");
1227
+ delete this;
1243
1228
  }
1244
1229
 
1245
1230
  ChannelData* chand_;
1246
1231
  grpc_connectivity_state initial_state_;
1247
1232
  OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher_;
1248
- grpc_closure closure_;
1249
1233
  };
1250
1234
 
1251
1235
  //
@@ -1258,26 +1242,20 @@ class ChannelData::ConnectivityWatcherRemover {
1258
1242
  AsyncConnectivityStateWatcherInterface* watcher)
1259
1243
  : chand_(chand), watcher_(watcher) {
1260
1244
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherRemover");
1261
- chand_->combiner_->Run(
1262
- GRPC_CLOSURE_INIT(&closure_,
1263
- &ConnectivityWatcherRemover::RemoveWatcherLocked,
1264
- this, nullptr),
1265
- GRPC_ERROR_NONE);
1245
+ chand_->work_serializer_->Run([this]() { RemoveWatcherLocked(); },
1246
+ DEBUG_LOCATION);
1266
1247
  }
1267
1248
 
1268
1249
  private:
1269
- static void RemoveWatcherLocked(void* arg, grpc_error* /*error*/) {
1270
- ConnectivityWatcherRemover* self =
1271
- static_cast<ConnectivityWatcherRemover*>(arg);
1272
- self->chand_->state_tracker_.RemoveWatcher(self->watcher_);
1273
- GRPC_CHANNEL_STACK_UNREF(self->chand_->owning_stack_,
1250
+ void RemoveWatcherLocked() {
1251
+ chand_->state_tracker_.RemoveWatcher(watcher_);
1252
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_,
1274
1253
  "ConnectivityWatcherRemover");
1275
- delete self;
1254
+ delete this;
1276
1255
  }
1277
1256
 
1278
1257
  ChannelData* chand_;
1279
1258
  AsyncConnectivityStateWatcherInterface* watcher_;
1280
- grpc_closure closure_;
1281
1259
  };
1282
1260
 
1283
1261
  //
@@ -1341,7 +1319,8 @@ class ChannelData::ClientChannelControlHelper
1341
1319
  // No-op -- we should never get this from ResolvingLoadBalancingPolicy.
1342
1320
  void RequestReresolution() override {}
1343
1321
 
1344
- void AddTraceEvent(TraceSeverity severity, StringView message) override {
1322
+ void AddTraceEvent(TraceSeverity severity,
1323
+ absl::string_view message) override {
1345
1324
  if (chand_->channelz_node_ != nullptr) {
1346
1325
  chand_->channelz_node_->AddTraceEvent(
1347
1326
  ConvertSeverityEnum(severity),
@@ -1418,7 +1397,7 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
1418
1397
  client_channel_factory_(
1419
1398
  ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1420
1399
  channelz_node_(GetChannelzNode(args->channel_args)),
1421
- combiner_(grpc_combiner_create()),
1400
+ work_serializer_(std::make_shared<WorkSerializer>()),
1422
1401
  interested_parties_(grpc_pollset_set_create()),
1423
1402
  subchannel_pool_(GetSubchannelPool(args->channel_args)),
1424
1403
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
@@ -1489,7 +1468,6 @@ ChannelData::~ChannelData() {
1489
1468
  // Stop backup polling.
1490
1469
  grpc_client_channel_stop_backup_polling(interested_parties_);
1491
1470
  grpc_pollset_set_destroy(interested_parties_);
1492
- GRPC_COMBINER_UNREF(combiner_, "client_channel");
1493
1471
  GRPC_ERROR_UNREF(disconnect_error_.Load(MemoryOrder::RELAXED));
1494
1472
  gpr_mu_destroy(&info_mu_);
1495
1473
  }
@@ -1593,8 +1571,9 @@ void ChannelData::UpdateServiceConfigLocked(
1593
1571
  void ChannelData::CreateResolvingLoadBalancingPolicyLocked() {
1594
1572
  // Instantiate resolving LB policy.
1595
1573
  LoadBalancingPolicy::Args lb_args;
1596
- lb_args.combiner = combiner_;
1597
- lb_args.channel_control_helper = MakeUnique<ClientChannelControlHelper>(this);
1574
+ lb_args.work_serializer = work_serializer_;
1575
+ lb_args.channel_control_helper =
1576
+ absl::make_unique<ClientChannelControlHelper>(this);
1598
1577
  lb_args.args = channel_args_;
1599
1578
  grpc_core::UniquePtr<char> target_uri(gpr_strdup(target_uri_.get()));
1600
1579
  resolving_lb_policy_.reset(new ResolvingLoadBalancingPolicy(
@@ -1619,37 +1598,56 @@ void ChannelData::DestroyResolvingLoadBalancingPolicyLocked() {
1619
1598
  void ChannelData::ProcessLbPolicy(
1620
1599
  const Resolver::Result& resolver_result,
1621
1600
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
1622
- grpc_core::UniquePtr<char>* lb_policy_name,
1623
1601
  RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config) {
1624
- // Prefer the LB policy name found in the service config.
1602
+ // Prefer the LB policy config found in the service config.
1625
1603
  if (parsed_service_config != nullptr &&
1626
1604
  parsed_service_config->parsed_lb_config() != nullptr) {
1627
- lb_policy_name->reset(
1628
- gpr_strdup(parsed_service_config->parsed_lb_config()->name()));
1629
1605
  *lb_policy_config = parsed_service_config->parsed_lb_config();
1630
1606
  return;
1631
1607
  }
1632
- const char* local_policy_name = nullptr;
1608
+ // Try the deprecated LB policy name from the service config.
1609
+ // If not, try the setting from channel args.
1610
+ const char* policy_name = nullptr;
1633
1611
  if (parsed_service_config != nullptr &&
1634
- parsed_service_config->parsed_deprecated_lb_policy() != nullptr) {
1635
- local_policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1612
+ !parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1613
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1636
1614
  } else {
1637
1615
  const grpc_arg* channel_arg =
1638
1616
  grpc_channel_args_find(resolver_result.args, GRPC_ARG_LB_POLICY_NAME);
1639
- local_policy_name = grpc_channel_arg_get_string(channel_arg);
1617
+ policy_name = grpc_channel_arg_get_string(channel_arg);
1640
1618
  }
1641
1619
  // Use pick_first if nothing was specified and we didn't select grpclb
1642
1620
  // above.
1643
- lb_policy_name->reset(gpr_strdup(
1644
- local_policy_name == nullptr ? "pick_first" : local_policy_name));
1621
+ if (policy_name == nullptr) policy_name = "pick_first";
1622
+ // Now that we have the policy name, construct an empty config for it.
1623
+ Json config_json = Json::Array{Json::Object{
1624
+ {policy_name, Json::Object{}},
1625
+ }};
1626
+ grpc_error* parse_error = GRPC_ERROR_NONE;
1627
+ *lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1628
+ config_json, &parse_error);
1629
+ // The policy name came from one of three places:
1630
+ // - The deprecated loadBalancingPolicy field in the service config,
1631
+ // in which case the code in ClientChannelServiceConfigParser
1632
+ // already verified that the policy does not require a config.
1633
+ // - One of the hard-coded values here, all of which are known to not
1634
+ // require a config.
1635
+ // - A channel arg, in which case the application did something that
1636
+ // is a misuse of our API.
1637
+ // In the first two cases, these assertions will always be true. In
1638
+ // the last case, this is probably fine for now.
1639
+ // TODO(roth): If the last case becomes a problem, add better error
1640
+ // handling here.
1641
+ GPR_ASSERT(*lb_policy_config != nullptr);
1642
+ GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1645
1643
  }
1646
1644
 
1647
1645
  // Synchronous callback from ResolvingLoadBalancingPolicy to process a
1648
1646
  // resolver result update.
1649
1647
  bool ChannelData::ProcessResolverResultLocked(
1650
- void* arg, const Resolver::Result& result, const char** lb_policy_name,
1648
+ void* arg, const Resolver::Result& result,
1651
1649
  RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config,
1652
- grpc_error** service_config_error) {
1650
+ grpc_error** service_config_error, bool* no_valid_service_config) {
1653
1651
  ChannelData* chand = static_cast<ChannelData*>(arg);
1654
1652
  RefCountedPtr<ServiceConfig> service_config;
1655
1653
  // If resolver did not return a service config or returned an invalid service
@@ -1659,13 +1657,13 @@ bool ChannelData::ProcessResolverResultLocked(
1659
1657
  // config. If there is no saved config either, use the default service
1660
1658
  // config.
1661
1659
  if (chand->saved_service_config_ != nullptr) {
1662
- service_config = chand->saved_service_config_;
1663
1660
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1664
1661
  gpr_log(GPR_INFO,
1665
1662
  "chand=%p: resolver returned invalid service config. "
1666
1663
  "Continuing to use previous service config.",
1667
1664
  chand);
1668
1665
  }
1666
+ service_config = chand->saved_service_config_;
1669
1667
  } else if (chand->default_service_config_ != nullptr) {
1670
1668
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1671
1669
  gpr_log(GPR_INFO,
@@ -1691,6 +1689,7 @@ bool ChannelData::ProcessResolverResultLocked(
1691
1689
  *service_config_error = GRPC_ERROR_REF(result.service_config_error);
1692
1690
  if (service_config == nullptr &&
1693
1691
  result.service_config_error != GRPC_ERROR_NONE) {
1692
+ *no_valid_service_config = true;
1694
1693
  return false;
1695
1694
  }
1696
1695
  // Process service config.
@@ -1708,11 +1707,11 @@ bool ChannelData::ProcessResolverResultLocked(
1708
1707
  ((service_config == nullptr) !=
1709
1708
  (chand->saved_service_config_ == nullptr)) ||
1710
1709
  (service_config != nullptr &&
1711
- strcmp(service_config->service_config_json(),
1712
- chand->saved_service_config_->service_config_json()) != 0);
1710
+ service_config->json_string() !=
1711
+ chand->saved_service_config_->json_string());
1713
1712
  if (service_config_changed) {
1714
1713
  service_config_json.reset(gpr_strdup(
1715
- service_config != nullptr ? service_config->service_config_json()
1714
+ service_config != nullptr ? service_config->json_string().c_str()
1716
1715
  : ""));
1717
1716
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1718
1717
  gpr_log(GPR_INFO,
@@ -1742,7 +1741,7 @@ bool ChannelData::ProcessResolverResultLocked(
1742
1741
  chand->received_first_resolver_result_ = true;
1743
1742
  RefCountedPtr<ServerRetryThrottleData> retry_throttle_data;
1744
1743
  if (parsed_service_config != nullptr) {
1745
- Optional<internal::ClientChannelGlobalParsedConfig::RetryThrottling>
1744
+ absl::optional<internal::ClientChannelGlobalParsedConfig::RetryThrottling>
1746
1745
  retry_throttle_config = parsed_service_config->retry_throttling();
1747
1746
  if (retry_throttle_config.has_value()) {
1748
1747
  retry_throttle_data =
@@ -1755,19 +1754,18 @@ bool ChannelData::ProcessResolverResultLocked(
1755
1754
  chand->UpdateServiceConfigLocked(std::move(retry_throttle_data),
1756
1755
  chand->saved_service_config_);
1757
1756
  }
1758
- grpc_core::UniquePtr<char> processed_lb_policy_name;
1759
- chand->ProcessLbPolicy(result, parsed_service_config,
1760
- &processed_lb_policy_name, lb_policy_config);
1757
+ chand->ProcessLbPolicy(result, parsed_service_config, lb_policy_config);
1758
+ grpc_core::UniquePtr<char> lb_policy_name(
1759
+ gpr_strdup((*lb_policy_config)->name()));
1761
1760
  // Swap out the data used by GetChannelInfo().
1762
1761
  {
1763
1762
  MutexLock lock(&chand->info_mu_);
1764
- chand->info_lb_policy_name_ = std::move(processed_lb_policy_name);
1763
+ chand->info_lb_policy_name_ = std::move(lb_policy_name);
1765
1764
  if (service_config_json != nullptr) {
1766
1765
  chand->info_service_config_json_ = std::move(service_config_json);
1767
1766
  }
1768
1767
  }
1769
1768
  // Return results.
1770
- *lb_policy_name = chand->info_lb_policy_name_.get();
1771
1769
  return service_config_changed;
1772
1770
  }
1773
1771
 
@@ -1794,22 +1792,18 @@ grpc_error* ChannelData::DoPingLocked(grpc_transport_op* op) {
1794
1792
  return result.error;
1795
1793
  }
1796
1794
 
1797
- void ChannelData::StartTransportOpLocked(void* arg, grpc_error* /*ignored*/) {
1798
- grpc_transport_op* op = static_cast<grpc_transport_op*>(arg);
1799
- grpc_channel_element* elem =
1800
- static_cast<grpc_channel_element*>(op->handler_private.extra_arg);
1801
- ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
1795
+ void ChannelData::StartTransportOpLocked(grpc_transport_op* op) {
1802
1796
  // Connectivity watch.
1803
1797
  if (op->start_connectivity_watch != nullptr) {
1804
- chand->state_tracker_.AddWatcher(op->start_connectivity_watch_state,
1805
- std::move(op->start_connectivity_watch));
1798
+ state_tracker_.AddWatcher(op->start_connectivity_watch_state,
1799
+ std::move(op->start_connectivity_watch));
1806
1800
  }
1807
1801
  if (op->stop_connectivity_watch != nullptr) {
1808
- chand->state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
1802
+ state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
1809
1803
  }
1810
1804
  // Ping.
1811
1805
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1812
- grpc_error* error = chand->DoPingLocked(op);
1806
+ grpc_error* error = DoPingLocked(op);
1813
1807
  if (error != GRPC_ERROR_NONE) {
1814
1808
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1815
1809
  GRPC_ERROR_REF(error));
@@ -1821,40 +1815,39 @@ void ChannelData::StartTransportOpLocked(void* arg, grpc_error* /*ignored*/) {
1821
1815
  }
1822
1816
  // Reset backoff.
1823
1817
  if (op->reset_connect_backoff) {
1824
- if (chand->resolving_lb_policy_ != nullptr) {
1825
- chand->resolving_lb_policy_->ResetBackoffLocked();
1818
+ if (resolving_lb_policy_ != nullptr) {
1819
+ resolving_lb_policy_->ResetBackoffLocked();
1826
1820
  }
1827
1821
  }
1828
1822
  // Disconnect or enter IDLE.
1829
1823
  if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1830
1824
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1831
- gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", chand,
1825
+ gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1832
1826
  grpc_error_string(op->disconnect_with_error));
1833
1827
  }
1834
- chand->DestroyResolvingLoadBalancingPolicyLocked();
1828
+ DestroyResolvingLoadBalancingPolicyLocked();
1835
1829
  intptr_t value;
1836
1830
  if (grpc_error_get_int(op->disconnect_with_error,
1837
1831
  GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1838
1832
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1839
- if (chand->disconnect_error() == GRPC_ERROR_NONE) {
1833
+ if (disconnect_error() == GRPC_ERROR_NONE) {
1840
1834
  // Enter IDLE state.
1841
- chand->UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE,
1842
- "channel entering IDLE", nullptr);
1835
+ UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, "channel entering IDLE",
1836
+ nullptr);
1843
1837
  }
1844
1838
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1845
1839
  } else {
1846
1840
  // Disconnect.
1847
- GPR_ASSERT(chand->disconnect_error_.Load(MemoryOrder::RELAXED) ==
1841
+ GPR_ASSERT(disconnect_error_.Load(MemoryOrder::RELAXED) ==
1848
1842
  GRPC_ERROR_NONE);
1849
- chand->disconnect_error_.Store(op->disconnect_with_error,
1850
- MemoryOrder::RELEASE);
1851
- chand->UpdateStateAndPickerLocked(
1843
+ disconnect_error_.Store(op->disconnect_with_error, MemoryOrder::RELEASE);
1844
+ UpdateStateAndPickerLocked(
1852
1845
  GRPC_CHANNEL_SHUTDOWN, "shutdown from API",
1853
- MakeUnique<LoadBalancingPolicy::TransientFailurePicker>(
1846
+ absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
1854
1847
  GRPC_ERROR_REF(op->disconnect_with_error)));
1855
1848
  }
1856
1849
  }
1857
- GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "start_transport_op");
1850
+ GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
1858
1851
  ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
1859
1852
  }
1860
1853
 
@@ -1866,13 +1859,10 @@ void ChannelData::StartTransportOp(grpc_channel_element* elem,
1866
1859
  if (op->bind_pollset != nullptr) {
1867
1860
  grpc_pollset_set_add_pollset(chand->interested_parties_, op->bind_pollset);
1868
1861
  }
1869
- // Pop into control plane combiner for remaining ops.
1870
- op->handler_private.extra_arg = elem;
1862
+ // Pop into control plane work_serializer for remaining ops.
1871
1863
  GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "start_transport_op");
1872
- chand->combiner_->Run(
1873
- GRPC_CLOSURE_INIT(&op->handler_private.closure,
1874
- ChannelData::StartTransportOpLocked, op, nullptr),
1875
- GRPC_ERROR_NONE);
1864
+ chand->work_serializer_->Run(
1865
+ [chand, op]() { chand->StartTransportOpLocked(op); }, DEBUG_LOCATION);
1876
1866
  }
1877
1867
 
1878
1868
  void ChannelData::GetChannelInfo(grpc_channel_element* elem,
@@ -1923,14 +1913,13 @@ ChannelData::GetConnectedSubchannelInDataPlane(
1923
1913
  return connected_subchannel->Ref();
1924
1914
  }
1925
1915
 
1926
- void ChannelData::TryToConnectLocked(void* arg, grpc_error* /*error_ignored*/) {
1927
- auto* chand = static_cast<ChannelData*>(arg);
1928
- if (chand->resolving_lb_policy_ != nullptr) {
1929
- chand->resolving_lb_policy_->ExitIdleLocked();
1916
+ void ChannelData::TryToConnectLocked() {
1917
+ if (resolving_lb_policy_ != nullptr) {
1918
+ resolving_lb_policy_->ExitIdleLocked();
1930
1919
  } else {
1931
- chand->CreateResolvingLoadBalancingPolicyLocked();
1920
+ CreateResolvingLoadBalancingPolicyLocked();
1932
1921
  }
1933
- GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "TryToConnect");
1922
+ GRPC_CHANNEL_STACK_UNREF(owning_stack_, "TryToConnect");
1934
1923
  }
1935
1924
 
1936
1925
  grpc_connectivity_state ChannelData::CheckConnectivityState(
@@ -1938,8 +1927,7 @@ grpc_connectivity_state ChannelData::CheckConnectivityState(
1938
1927
  grpc_connectivity_state out = state_tracker_.state();
1939
1928
  if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
1940
1929
  GRPC_CHANNEL_STACK_REF(owning_stack_, "TryToConnect");
1941
- combiner_->Run(GRPC_CLOSURE_CREATE(TryToConnectLocked, this, nullptr),
1942
- GRPC_ERROR_NONE);
1930
+ work_serializer_->Run([this]() { TryToConnectLocked(); }, DEBUG_LOCATION);
1943
1931
  }
1944
1932
  return out;
1945
1933
  }
@@ -2245,10 +2233,32 @@ void CallData::FreeCachedSendOpDataForCompletedBatch(
2245
2233
  void CallData::RecvTrailingMetadataReadyForLoadBalancingPolicy(
2246
2234
  void* arg, grpc_error* error) {
2247
2235
  CallData* calld = static_cast<CallData*>(arg);
2236
+ // Set error if call did not succeed.
2237
+ grpc_error* error_for_lb = GRPC_ERROR_NONE;
2238
+ if (error != GRPC_ERROR_NONE) {
2239
+ error_for_lb = error;
2240
+ } else {
2241
+ const auto& fields = calld->recv_trailing_metadata_->idx.named;
2242
+ GPR_ASSERT(fields.grpc_status != nullptr);
2243
+ grpc_status_code status =
2244
+ grpc_get_status_code_from_metadata(fields.grpc_status->md);
2245
+ std::string msg;
2246
+ if (status != GRPC_STATUS_OK) {
2247
+ error_for_lb = grpc_error_set_int(
2248
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("call failed"),
2249
+ GRPC_ERROR_INT_GRPC_STATUS, status);
2250
+ if (fields.grpc_message != nullptr) {
2251
+ error_for_lb = grpc_error_set_str(
2252
+ error_for_lb, GRPC_ERROR_STR_GRPC_MESSAGE,
2253
+ grpc_slice_ref_internal(GRPC_MDVALUE(fields.grpc_message->md)));
2254
+ }
2255
+ }
2256
+ }
2248
2257
  // Invoke callback to LB policy.
2249
2258
  Metadata trailing_metadata(calld, calld->recv_trailing_metadata_);
2250
- calld->lb_recv_trailing_metadata_ready_(error, &trailing_metadata,
2259
+ calld->lb_recv_trailing_metadata_ready_(error_for_lb, &trailing_metadata,
2251
2260
  &calld->lb_call_state_);
2261
+ if (error == GRPC_ERROR_NONE) GRPC_ERROR_UNREF(error_for_lb);
2252
2262
  // Chain to original callback.
2253
2263
  Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
2254
2264
  GRPC_ERROR_REF(error));
@@ -3165,10 +3175,9 @@ void CallData::OnComplete(void* arg, grpc_error* error) {
3165
3175
  ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
3166
3176
  CallData* calld = static_cast<CallData*>(elem->call_data);
3167
3177
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
3168
- char* batch_str = grpc_transport_stream_op_batch_string(&batch_data->batch);
3169
3178
  gpr_log(GPR_INFO, "chand=%p calld=%p: got on_complete, error=%s, batch=%s",
3170
- chand, calld, grpc_error_string(error), batch_str);
3171
- gpr_free(batch_str);
3179
+ chand, calld, grpc_error_string(error),
3180
+ grpc_transport_stream_op_batch_string(&batch_data->batch).c_str());
3172
3181
  }
3173
3182
  SubchannelCallRetryState* retry_state =
3174
3183
  static_cast<SubchannelCallRetryState*>(
@@ -3241,10 +3250,8 @@ void CallData::AddClosureForSubchannelBatch(
3241
3250
  GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
3242
3251
  batch, grpc_schedule_on_exec_ctx);
3243
3252
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
3244
- char* batch_str = grpc_transport_stream_op_batch_string(batch);
3245
3253
  gpr_log(GPR_INFO, "chand=%p calld=%p: starting subchannel batch: %s", chand,
3246
- this, batch_str);
3247
- gpr_free(batch_str);
3254
+ this, grpc_transport_stream_op_batch_string(batch).c_str());
3248
3255
  }
3249
3256
  closures->Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
3250
3257
  "start_subchannel_batch");
@@ -3757,45 +3764,52 @@ void CallData::ApplyServiceConfigToCallLocked(grpc_call_element* elem) {
3757
3764
  gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
3758
3765
  chand, this);
3759
3766
  }
3760
- // Store a ref to the service_config in service_config_call_data_. Also, save
3761
- // a pointer to this in the call_context so that all future filters can access
3762
- // it.
3763
- service_config_call_data_ =
3764
- ServiceConfig::CallData(chand->service_config(), path_);
3765
- if (service_config_call_data_.service_config() != nullptr) {
3766
- call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value =
3767
- &service_config_call_data_;
3767
+ auto service_config = chand->service_config();
3768
+ if (service_config != nullptr) {
3769
+ // Create a ServiceConfigCallData for the call. This stores a ref to the
3770
+ // ServiceConfig and caches the right set of parsed configs to use for
3771
+ // the call. The MethodConfig will store itself in the call context,
3772
+ // so that it can be accessed by filters in the subchannel, and it
3773
+ // will be cleaned up when the call ends.
3774
+ const auto* method_params_vector =
3775
+ service_config->GetMethodParsedConfigVector(path_);
3776
+ auto* service_config_call_data = arena_->New<ServiceConfigCallData>(
3777
+ std::move(service_config), method_params_vector, call_context_);
3778
+ // Apply our own method params to the call.
3768
3779
  method_params_ = static_cast<ClientChannelMethodParsedConfig*>(
3769
- service_config_call_data_.GetMethodParsedConfig(
3780
+ service_config_call_data->GetMethodParsedConfig(
3770
3781
  internal::ClientChannelServiceConfigParser::ParserIndex()));
3771
- }
3772
- retry_throttle_data_ = chand->retry_throttle_data();
3773
- if (method_params_ != nullptr) {
3774
- // If the deadline from the service config is shorter than the one
3775
- // from the client API, reset the deadline timer.
3776
- if (chand->deadline_checking_enabled() && method_params_->timeout() != 0) {
3777
- const grpc_millis per_method_deadline =
3778
- grpc_cycle_counter_to_millis_round_up(call_start_time_) +
3779
- method_params_->timeout();
3780
- if (per_method_deadline < deadline_) {
3781
- deadline_ = per_method_deadline;
3782
- grpc_deadline_state_reset(elem, deadline_);
3782
+ if (method_params_ != nullptr) {
3783
+ // If the deadline from the service config is shorter than the one
3784
+ // from the client API, reset the deadline timer.
3785
+ if (chand->deadline_checking_enabled() &&
3786
+ method_params_->timeout() != 0) {
3787
+ const grpc_millis per_method_deadline =
3788
+ grpc_cycle_counter_to_millis_round_up(call_start_time_) +
3789
+ method_params_->timeout();
3790
+ if (per_method_deadline < deadline_) {
3791
+ deadline_ = per_method_deadline;
3792
+ grpc_deadline_state_reset(elem, deadline_);
3793
+ }
3783
3794
  }
3784
- }
3785
- // If the service config set wait_for_ready and the application
3786
- // did not explicitly set it, use the value from the service config.
3787
- uint32_t* send_initial_metadata_flags =
3788
- &pending_batches_[0]
3789
- .batch->payload->send_initial_metadata.send_initial_metadata_flags;
3790
- if (method_params_->wait_for_ready().has_value() &&
3791
- !(*send_initial_metadata_flags &
3792
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
3793
- if (method_params_->wait_for_ready().value()) {
3794
- *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
3795
- } else {
3796
- *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
3795
+ // If the service config set wait_for_ready and the application
3796
+ // did not explicitly set it, use the value from the service config.
3797
+ uint32_t* send_initial_metadata_flags =
3798
+ &pending_batches_[0]
3799
+ .batch->payload->send_initial_metadata
3800
+ .send_initial_metadata_flags;
3801
+ if (method_params_->wait_for_ready().has_value() &&
3802
+ !(*send_initial_metadata_flags &
3803
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
3804
+ if (method_params_->wait_for_ready().value()) {
3805
+ *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
3806
+ } else {
3807
+ *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
3808
+ }
3797
3809
  }
3798
3810
  }
3811
+ // Set retry throttle data for call.
3812
+ retry_throttle_data_ = chand->retry_throttle_data();
3799
3813
  }
3800
3814
  // If no retry policy, disable retries.
3801
3815
  // TODO(roth): Remove this when adding support for transparent retries.
@@ -3851,8 +3865,25 @@ bool CallData::PickSubchannelLocked(grpc_call_element* elem,
3851
3865
  // The picker being null means that the channel is currently in IDLE state.
3852
3866
  // The incoming call will make the channel exit IDLE.
3853
3867
  if (chand->picker() == nullptr) {
3854
- // Bounce into the control plane combiner to exit IDLE.
3855
- chand->CheckConnectivityState(/*try_to_connect=*/true);
3868
+ GRPC_CHANNEL_STACK_REF(chand->owning_stack(), "PickSubchannelLocked");
3869
+ // Bounce into the control plane work serializer to exit IDLE. Since we are
3870
+ // holding on to the data plane mutex here, we offload it on the ExecCtx so
3871
+ // that we don't deadlock with ourselves.
3872
+ ExecCtx::Run(
3873
+ DEBUG_LOCATION,
3874
+ GRPC_CLOSURE_CREATE(
3875
+ [](void* arg, grpc_error* /*error*/) {
3876
+ auto* chand = static_cast<ChannelData*>(arg);
3877
+ chand->work_serializer()->Run(
3878
+ [chand]() {
3879
+ chand->CheckConnectivityState(/*try_to_connect=*/true);
3880
+ GRPC_CHANNEL_STACK_UNREF(chand->owning_stack(),
3881
+ "PickSubchannelLocked");
3882
+ },
3883
+ DEBUG_LOCATION);
3884
+ },
3885
+ chand, nullptr),
3886
+ GRPC_ERROR_NONE);
3856
3887
  // Queue the pick, so that it will be attempted once the channel
3857
3888
  // becomes connected.
3858
3889
  AddCallToQueuedPicksLocked(elem);
@@ -3937,8 +3968,10 @@ bool CallData::PickSubchannelLocked(grpc_call_element* elem,
3937
3968
  if (pick_queued_) RemoveCallFromQueuedPicksLocked(elem);
3938
3969
  // Handle drops.
3939
3970
  if (GPR_UNLIKELY(result.subchannel == nullptr)) {
3940
- result.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
3941
- "Call dropped by load balancing policy");
3971
+ result.error = grpc_error_set_int(
3972
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
3973
+ "Call dropped by load balancing policy"),
3974
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
3942
3975
  } else {
3943
3976
  // Grab a ref to the connected subchannel while we're still
3944
3977
  // holding the data plane mutex.