grpc 1.30.2 → 1.31.0.pre1

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 (317) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security_constants.h +3 -0
  4. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  5. data/include/grpc/impl/codegen/port_platform.h +0 -32
  6. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  7. data/src/core/ext/filters/client_channel/client_channel.cc +406 -265
  8. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  9. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  10. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  11. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  12. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  13. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  16. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  17. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +376 -68
  18. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  19. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  20. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  25. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  26. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  27. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  28. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  29. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  30. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  31. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  32. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  33. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  34. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  35. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  36. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  37. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  38. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  39. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  40. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  41. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  42. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  43. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  44. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  45. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  46. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  47. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  48. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  49. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  50. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  51. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  52. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  53. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  54. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  55. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  56. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  57. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  59. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  60. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  61. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  62. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  63. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  64. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  65. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  66. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  70. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  71. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  72. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  76. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  77. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  87. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  88. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  89. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  90. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  91. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  95. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  96. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  97. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  101. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  102. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  103. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  104. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  106. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  107. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  108. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  109. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  110. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  111. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  112. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  113. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  114. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  115. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  116. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  117. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  118. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  119. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  120. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  121. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  122. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  123. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  124. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  125. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  126. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  127. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  128. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  129. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  130. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  131. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  132. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  133. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  134. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  135. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  136. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  137. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  141. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  142. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  143. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  144. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  145. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  146. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  147. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  148. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  149. data/src/core/lib/channel/channel_trace.cc +2 -6
  150. data/src/core/lib/channel/channelz.cc +5 -15
  151. data/src/core/lib/gpr/log_linux.cc +6 -8
  152. data/src/core/lib/gpr/log_posix.cc +6 -8
  153. data/src/core/lib/gpr/string.cc +10 -9
  154. data/src/core/lib/gpr/string.h +4 -2
  155. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  156. data/src/core/lib/http/httpcli.cc +13 -10
  157. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  158. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  159. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  160. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  161. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  162. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  163. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  164. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  165. data/src/core/lib/iomgr/iomgr.cc +10 -0
  166. data/src/core/lib/iomgr/iomgr.h +10 -0
  167. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  168. data/src/core/lib/iomgr/port.h +1 -21
  169. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  170. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  171. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  172. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  173. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  174. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  175. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  176. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  177. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  178. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  179. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  180. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  181. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  182. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  183. data/src/core/lib/iomgr/tcp_server.h +7 -5
  184. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  185. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  186. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  187. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  188. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  189. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  190. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  191. data/src/core/lib/iomgr/udp_server.cc +24 -23
  192. data/src/core/lib/iomgr/udp_server.h +5 -2
  193. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  194. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  195. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  196. data/src/core/lib/json/json_reader.cc +20 -21
  197. data/src/core/lib/security/credentials/credentials.h +5 -3
  198. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  201. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  202. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  203. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  204. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  205. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  206. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  207. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  208. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  209. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  210. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  211. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  212. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  213. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  214. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  215. data/src/core/lib/security/util/json_util.cc +12 -13
  216. data/src/core/lib/slice/slice.cc +38 -1
  217. data/src/core/lib/slice/slice_internal.h +1 -0
  218. data/src/core/lib/surface/call.cc +40 -41
  219. data/src/core/lib/surface/completion_queue.cc +271 -14
  220. data/src/core/lib/surface/completion_queue.h +8 -0
  221. data/src/core/lib/surface/init.cc +2 -0
  222. data/src/core/lib/surface/server.cc +565 -632
  223. data/src/core/lib/surface/server.h +34 -12
  224. data/src/core/lib/surface/version.cc +2 -2
  225. data/src/core/lib/transport/transport.h +6 -0
  226. data/src/core/lib/uri/uri_parser.cc +8 -15
  227. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  228. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  229. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  230. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  231. data/src/core/tsi/ssl_transport_security.cc +102 -11
  232. data/src/core/tsi/ssl_transport_security.h +14 -2
  233. data/src/core/tsi/transport_security_interface.h +5 -0
  234. data/src/ruby/ext/grpc/extconf.rb +5 -2
  235. data/src/ruby/ext/grpc/rb_call.c +3 -2
  236. data/src/ruby/ext/grpc/rb_call.h +4 -0
  237. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  238. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  241. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  242. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  243. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  244. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  245. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  246. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  247. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  248. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  249. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  251. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  252. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  253. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  254. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  255. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  265. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  266. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  267. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  268. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  269. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  270. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  271. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  272. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  275. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  276. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  280. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  281. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  283. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  286. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  287. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  288. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  289. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  290. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  291. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  292. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  293. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  294. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  295. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  296. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  297. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  298. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  299. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  300. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  301. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  302. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  303. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  304. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  305. data/third_party/upb/upb/decode.c +467 -504
  306. data/third_party/upb/upb/encode.c +163 -121
  307. data/third_party/upb/upb/msg.c +130 -64
  308. data/third_party/upb/upb/msg.h +418 -14
  309. data/third_party/upb/upb/port_def.inc +35 -6
  310. data/third_party/upb/upb/port_undef.inc +8 -1
  311. data/third_party/upb/upb/table.c +53 -75
  312. data/third_party/upb/upb/table.int.h +11 -43
  313. data/third_party/upb/upb/upb.c +148 -124
  314. data/third_party/upb/upb/upb.h +65 -147
  315. data/third_party/upb/upb/upb.hpp +86 -0
  316. metadata +40 -37
  317. data/third_party/upb/upb/generated_util.h +0 -105
@@ -23,6 +23,7 @@
23
23
  #include <string.h>
24
24
 
25
25
  #include "absl/container/inlined_vector.h"
26
+ #include "absl/strings/str_cat.h"
26
27
 
27
28
  #include <grpc/support/alloc.h>
28
29
  #include <grpc/support/log.h>
@@ -65,22 +66,22 @@ class RegistryState {
65
66
  // If \a default_prefix_ needs to be prepended, sets \a canonical_target
66
67
  // to the canonical target string.
67
68
  ResolverFactory* FindResolverFactory(const char* target, grpc_uri** uri,
68
- char** canonical_target) const {
69
+ std::string* canonical_target) const {
69
70
  GPR_ASSERT(uri != nullptr);
70
71
  *uri = grpc_uri_parse(target, 1);
71
72
  ResolverFactory* factory =
72
73
  *uri == nullptr ? nullptr : LookupResolverFactory((*uri)->scheme);
73
74
  if (factory == nullptr) {
74
75
  grpc_uri_destroy(*uri);
75
- gpr_asprintf(canonical_target, "%s%s", default_prefix_.get(), target);
76
- *uri = grpc_uri_parse(*canonical_target, 1);
76
+ *canonical_target = absl::StrCat(default_prefix_.get(), target);
77
+ *uri = grpc_uri_parse(canonical_target->c_str(), 1);
77
78
  factory =
78
79
  *uri == nullptr ? nullptr : LookupResolverFactory((*uri)->scheme);
79
80
  if (factory == nullptr) {
80
81
  grpc_uri_destroy(grpc_uri_parse(target, 0));
81
- grpc_uri_destroy(grpc_uri_parse(*canonical_target, 0));
82
+ grpc_uri_destroy(grpc_uri_parse(canonical_target->c_str(), 0));
82
83
  gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target,
83
- *canonical_target);
84
+ canonical_target->c_str());
84
85
  }
85
86
  }
86
87
  return factory;
@@ -136,12 +137,11 @@ ResolverFactory* ResolverRegistry::LookupResolverFactory(const char* scheme) {
136
137
 
137
138
  bool ResolverRegistry::IsValidTarget(const char* target) {
138
139
  grpc_uri* uri = nullptr;
139
- char* canonical_target = nullptr;
140
+ std::string canonical_target;
140
141
  ResolverFactory* factory =
141
142
  g_state->FindResolverFactory(target, &uri, &canonical_target);
142
143
  bool result = factory == nullptr ? false : factory->IsValidUri(uri);
143
144
  grpc_uri_destroy(uri);
144
- gpr_free(canonical_target);
145
145
  return result;
146
146
  }
147
147
 
@@ -152,7 +152,7 @@ OrphanablePtr ResolverRegistry::CreateResolver(
152
152
  std::unique_ptr<Resolver::ResultHandler> result_handler) {
153
153
  GPR_ASSERT(g_state != nullptr);
154
154
  grpc_uri* uri = nullptr;
155
- char* canonical_target = nullptr;
155
+ std::string canonical_target;
156
156
  ResolverFactory* factory =
157
157
  g_state->FindResolverFactory(target, &uri, &canonical_target);
158
158
  ResolverArgs resolver_args;
@@ -165,7 +165,6 @@ OrphanablePtr ResolverRegistry::CreateResolver(
165
165
  factory == nullptr ? nullptr
166
166
  : factory->CreateResolver(std::move(resolver_args));
167
167
  grpc_uri_destroy(uri);
168
- gpr_free(canonical_target);
169
168
  return resolver;
170
169
  }
171
170
 
@@ -173,13 +172,12 @@ grpc_core::UniquePtr ResolverRegistry::GetDefaultAuthority(
173
172
  const char* target) {
174
173
  GPR_ASSERT(g_state != nullptr);
175
174
  grpc_uri* uri = nullptr;
176
- char* canonical_target = nullptr;
175
+ std::string canonical_target;
177
176
  ResolverFactory* factory =
178
177
  g_state->FindResolverFactory(target, &uri, &canonical_target);
179
178
  grpc_core::UniquePtr<char> authority =
180
179
  factory == nullptr ? nullptr : factory->GetDefaultAuthority(uri);
181
180
  grpc_uri_destroy(uri);
182
- gpr_free(canonical_target);
183
181
  return authority;
184
182
  }
185
183
 
@@ -187,11 +185,12 @@ grpc_core::UniquePtr ResolverRegistry::AddDefaultPrefixIfNeeded(
187
185
  const char* target) {
188
186
  GPR_ASSERT(g_state != nullptr);
189
187
  grpc_uri* uri = nullptr;
190
- char* canonical_target = nullptr;
188
+ std::string canonical_target;
191
189
  g_state->FindResolverFactory(target, &uri, &canonical_target);
192
190
  grpc_uri_destroy(uri);
193
- return grpc_core::UniquePtr<char>(
194
- canonical_target == nullptr ? gpr_strdup(target) : canonical_target);
191
+ return grpc_core::UniquePtr<char>(canonical_target.empty()
192
+ ? gpr_strdup(target)
193
+ : gpr_strdup(canonical_target.c_str()));
195
194
  }
196
195
 
197
196
  } // namespace grpc_core
@@ -24,6 +24,7 @@
24
24
  #include <stdio.h>
25
25
  #include <string.h>
26
26
 
27
+ #include "absl/strings/str_cat.h"
27
28
  #include "absl/types/optional.h"
28
29
 
29
30
  #include <grpc/support/alloc.h>
@@ -353,13 +354,11 @@ ClientChannelServiceConfigParser::ParseGlobalParams(const Json& json,
353
354
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
354
355
  "field:loadBalancingPolicy error:Unknown lb policy"));
355
356
  } else if (requires_config) {
356
- char* error_msg;
357
- gpr_asprintf(&error_msg,
358
- "field:loadBalancingPolicy error:%s requires a config. "
359
- "Please use loadBalancingConfig instead.",
360
- lb_policy_name.c_str());
361
- error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg));
362
- gpr_free(error_msg);
357
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
358
+ absl::StrCat("field:loadBalancingPolicy error:", lb_policy_name,
359
+ " requires a config. Please use loadBalancingConfig "
360
+ "instead.")
361
+ .c_str()));
363
362
  }
364
363
  }
365
364
  }
@@ -145,14 +145,12 @@ class ResolvingLoadBalancingPolicy::ResolvingControlHelper
145
145
 
146
146
  ResolvingLoadBalancingPolicy::ResolvingLoadBalancingPolicy(
147
147
  Args args, TraceFlag* tracer, grpc_core::UniquePtr<char> target_uri,
148
- ProcessResolverResultCallback process_resolver_result,
149
- void* process_resolver_result_user_data)
148
+ ChannelConfigHelper* helper)
150
149
  : LoadBalancingPolicy(std::move(args)),
151
150
  tracer_(tracer),
152
151
  target_uri_(std::move(target_uri)),
153
- process_resolver_result_(process_resolver_result),
154
- process_resolver_result_user_data_(process_resolver_result_user_data) {
155
- GPR_ASSERT(process_resolver_result != nullptr);
152
+ helper_(helper) {
153
+ GPR_ASSERT(helper_ != nullptr);
156
154
  resolver_ = ResolverRegistry::CreateResolver(
157
155
  target_uri_.get(), args.args, interested_parties(), work_serializer(),
158
156
  absl::make_unique<ResolverResultHandler>(Ref()));
@@ -214,6 +212,7 @@ void ResolvingLoadBalancingPolicy::OnResolverError(grpc_error* error) {
214
212
  if (lb_policy_ == nullptr) {
215
213
  grpc_error* state_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
216
214
  "Resolver transient failure", &error, 1);
215
+ helper_->ResolverTransientFailure(GRPC_ERROR_REF(state_error));
217
216
  channel_control_helper()->UpdateState(
218
217
  GRPC_CHANNEL_TRANSIENT_FAILURE,
219
218
  absl::make_unique<TransientFailurePicker>(state_error));
@@ -304,45 +303,51 @@ void ResolvingLoadBalancingPolicy::OnResolverResultChangedLocked(
304
303
  TraceStringVector trace_strings;
305
304
  const bool resolution_contains_addresses = result.addresses.size() > 0;
306
305
  // Process the resolver result.
307
- RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config;
308
- bool service_config_changed = false;
309
- std::string service_config_error_string;
310
- if (process_resolver_result_ != nullptr) {
311
- grpc_error* service_config_error = GRPC_ERROR_NONE;
312
- bool no_valid_service_config = false;
313
- service_config_changed = process_resolver_result_(
314
- process_resolver_result_user_data_, result, &lb_policy_config,
315
- &service_config_error, &no_valid_service_config);
316
- if (service_config_error != GRPC_ERROR_NONE) {
317
- service_config_error_string = grpc_error_string(service_config_error);
318
- if (no_valid_service_config) {
306
+ ChannelConfigHelper::ApplyServiceConfigResult service_config_result;
307
+ if (helper_ != nullptr) {
308
+ service_config_result = helper_->ApplyServiceConfig(result);
309
+ if (service_config_result.service_config_error != GRPC_ERROR_NONE) {
310
+ if (service_config_result.no_valid_service_config) {
319
311
  // We received an invalid service config and we don't have a
320
312
  // fallback service config.
321
- OnResolverError(service_config_error);
322
- } else {
323
- GRPC_ERROR_UNREF(service_config_error);
313
+ OnResolverError(service_config_result.service_config_error);
314
+ service_config_result.service_config_error = GRPC_ERROR_NONE;
324
315
  }
325
316
  }
326
317
  } else {
327
- lb_policy_config = child_lb_config_;
318
+ service_config_result.lb_policy_config = child_lb_config_;
328
319
  }
329
- if (lb_policy_config != nullptr) {
330
- // Create or update LB policy, as needed.
331
- CreateOrUpdateLbPolicyLocked(std::move(lb_policy_config),
332
- std::move(result));
320
+ // Before we send the args to the LB policy, grab the ConfigSelector for
321
+ // later use.
322
+ RefCountedPtr<ConfigSelector> config_selector =
323
+ ConfigSelector::GetFromChannelArgs(*result.args);
324
+ // Create or update LB policy, as needed.
325
+ if (service_config_result.lb_policy_config != nullptr) {
326
+ CreateOrUpdateLbPolicyLocked(
327
+ std::move(service_config_result.lb_policy_config), std::move(result));
328
+ }
329
+ // Apply ConfigSelector to channel.
330
+ // This needs to happen after the LB policy has been updated, since
331
+ // the ConfigSelector may need the LB policy to know about new
332
+ // destinations before it can send RPCs to those destinations.
333
+ if (helper_ != nullptr) {
334
+ helper_->ApplyConfigSelector(service_config_result.service_config_changed,
335
+ std::move(config_selector));
333
336
  }
334
337
  // Add channel trace event.
335
- if (service_config_changed) {
338
+ if (service_config_result.service_config_changed) {
336
339
  // TODO(ncteisen): might be worth somehow including a snippet of the
337
340
  // config in the trace, at the risk of bloating the trace logs.
338
341
  trace_strings.push_back("Service config changed");
339
342
  }
340
- if (!service_config_error_string.empty()) {
341
- trace_strings.push_back(service_config_error_string.c_str());
343
+ if (service_config_result.service_config_error != GRPC_ERROR_NONE) {
344
+ trace_strings.push_back(
345
+ grpc_error_string(service_config_result.service_config_error));
342
346
  }
343
347
  MaybeAddTraceMessagesForAddressChangesLocked(resolution_contains_addresses,
344
348
  &trace_strings);
345
349
  ConcatenateAndAddChannelTraceLocked(trace_strings);
350
+ GRPC_ERROR_UNREF(service_config_result.service_config_error);
346
351
  }
347
352
 
348
353
  } // namespace grpc_core
@@ -23,6 +23,7 @@
23
23
 
24
24
  #include "absl/container/inlined_vector.h"
25
25
 
26
+ #include "src/core/ext/filters/client_channel/config_selector.h"
26
27
  #include "src/core/ext/filters/client_channel/lb_policy.h"
27
28
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
28
29
  #include "src/core/ext/filters/client_channel/resolver.h"
@@ -52,22 +53,39 @@ namespace grpc_core {
52
53
  // child LB policy and config to use.
53
54
  class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
54
55
  public:
55
- // Synchronous callback that takes the resolver result and sets
56
- // lb_policy_config to point to the right data.
57
- // Returns true if the service config has changed since the last result.
58
- // If the returned no_valid_service_config is true, that means that we
59
- // don't have a valid service config to use, and we should set the channel
60
- // to be in TRANSIENT_FAILURE.
61
- typedef bool (*ProcessResolverResultCallback)(
62
- void* user_data, const Resolver::Result& result,
63
- RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config,
64
- grpc_error** service_config_error, bool* no_valid_service_config);
65
- // If error is set when this returns, then construction failed, and
66
- // the caller may not use the new object.
67
- ResolvingLoadBalancingPolicy(
68
- Args args, TraceFlag* tracer, grpc_core::UniquePtr<char> target_uri,
69
- ProcessResolverResultCallback process_resolver_result,
70
- void* process_resolver_result_user_data);
56
+ class ChannelConfigHelper {
57
+ public:
58
+ struct ApplyServiceConfigResult {
59
+ // Set to true if the service config has changed since the last result.
60
+ bool service_config_changed = false;
61
+ // Set to true if we don't have a valid service config to use.
62
+ // This tells the ResolvingLoadBalancingPolicy to put the channel
63
+ // into TRANSIENT_FAILURE.
64
+ bool no_valid_service_config = false;
65
+ // A service config parsing error occurred.
66
+ grpc_error* service_config_error = GRPC_ERROR_NONE;
67
+ // The LB policy config to use.
68
+ RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config;
69
+ };
70
+
71
+ virtual ~ChannelConfigHelper() = default;
72
+
73
+ // Applies the service config to the channel.
74
+ virtual ApplyServiceConfigResult ApplyServiceConfig(
75
+ const Resolver::Result& result) = 0;
76
+
77
+ // Applies the ConfigSelector to the channel.
78
+ virtual void ApplyConfigSelector(
79
+ bool service_config_changed,
80
+ RefCountedPtr<ConfigSelector> config_selector) = 0;
81
+
82
+ // Indicates a resolver transient failure.
83
+ virtual void ResolverTransientFailure(grpc_error* error) = 0;
84
+ };
85
+
86
+ ResolvingLoadBalancingPolicy(Args args, TraceFlag* tracer,
87
+ grpc_core::UniquePtr<char> target_uri,
88
+ ChannelConfigHelper* helper);
71
89
 
72
90
  virtual const char* name() const override { return "resolving_lb"; }
73
91
 
@@ -105,15 +123,16 @@ class ResolvingLoadBalancingPolicy : public LoadBalancingPolicy {
105
123
  // Passed in from caller at construction time.
106
124
  TraceFlag* tracer_;
107
125
  grpc_core::UniquePtr<char> target_uri_;
108
- ProcessResolverResultCallback process_resolver_result_ = nullptr;
109
- void* process_resolver_result_user_data_ = nullptr;
110
- grpc_core::UniquePtr<char> child_policy_name_;
111
- RefCountedPtr<LoadBalancingPolicy::Config> child_lb_config_;
126
+ ChannelConfigHelper* helper_;
112
127
 
113
128
  // Resolver and associated state.
114
129
  OrphanablePtr<Resolver> resolver_;
115
130
  bool previous_resolution_contained_addresses_ = false;
116
131
 
132
+ // Determined by resolver results.
133
+ grpc_core::UniquePtr<char> child_policy_name_;
134
+ RefCountedPtr<LoadBalancingPolicy::Config> child_lb_config_;
135
+
117
136
  // Child LB policy.
118
137
  OrphanablePtr<LoadBalancingPolicy> lb_policy_;
119
138
  };
@@ -0,0 +1,142 @@
1
+ //
2
+ // Copyright 2020 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ // This filter reads GRPC_ARG_SERVICE_CONFIG and populates ServiceConfigCallData
18
+ // in the call context per call for direct channels.
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include "src/core/ext/filters/client_channel/service_config_call_data.h"
23
+ #include "src/core/lib/channel/channel_args.h"
24
+ #include "src/core/lib/channel/channel_stack.h"
25
+ #include "src/core/lib/channel/channel_stack_builder.h"
26
+ #include "src/core/lib/surface/channel_init.h"
27
+
28
+ namespace grpc_core {
29
+
30
+ namespace {
31
+
32
+ class ServiceConfigChannelArgChannelData {
33
+ public:
34
+ explicit ServiceConfigChannelArgChannelData(
35
+ const grpc_channel_element_args* args) {
36
+ const char* service_config_str = grpc_channel_args_find_string(
37
+ args->channel_args, GRPC_ARG_SERVICE_CONFIG);
38
+ if (service_config_str != nullptr) {
39
+ grpc_error* service_config_error = GRPC_ERROR_NONE;
40
+ auto service_config =
41
+ ServiceConfig::Create(service_config_str, &service_config_error);
42
+ if (service_config_error == GRPC_ERROR_NONE) {
43
+ service_config_ = std::move(service_config);
44
+ } else {
45
+ gpr_log(GPR_ERROR, "%s", grpc_error_string(service_config_error));
46
+ }
47
+ GRPC_ERROR_UNREF(service_config_error);
48
+ }
49
+ }
50
+
51
+ RefCountedPtr<ServiceConfig> service_config() const {
52
+ return service_config_;
53
+ }
54
+
55
+ private:
56
+ RefCountedPtr<ServiceConfig> service_config_;
57
+ };
58
+
59
+ class ServiceConfigChannelArgCallData {
60
+ public:
61
+ ServiceConfigChannelArgCallData(grpc_call_element* elem,
62
+ const grpc_call_element_args* args) {
63
+ ServiceConfigChannelArgChannelData* chand =
64
+ static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
65
+ RefCountedPtr<ServiceConfig> service_config = chand->service_config();
66
+ if (service_config != nullptr) {
67
+ GPR_DEBUG_ASSERT(args->context != nullptr);
68
+ const auto* method_params_vector =
69
+ service_config->GetMethodParsedConfigVector(args->path);
70
+ args->arena->New<ServiceConfigCallData>(
71
+ std::move(service_config), method_params_vector, args->context);
72
+ }
73
+ }
74
+ };
75
+
76
+ grpc_error* ServiceConfigChannelArgInitCallElem(
77
+ grpc_call_element* elem, const grpc_call_element_args* args) {
78
+ ServiceConfigChannelArgCallData* calld =
79
+ static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
80
+ new (calld) ServiceConfigChannelArgCallData(elem, args);
81
+ return GRPC_ERROR_NONE;
82
+ }
83
+
84
+ void ServiceConfigChannelArgDestroyCallElem(
85
+ grpc_call_element* elem, const grpc_call_final_info* /* final_info */,
86
+ grpc_closure* /* then_schedule_closure */) {
87
+ ServiceConfigChannelArgCallData* calld =
88
+ static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
89
+ calld->~ServiceConfigChannelArgCallData();
90
+ }
91
+
92
+ grpc_error* ServiceConfigChannelArgInitChannelElem(
93
+ grpc_channel_element* elem, grpc_channel_element_args* args) {
94
+ ServiceConfigChannelArgChannelData* chand =
95
+ static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
96
+ new (chand) ServiceConfigChannelArgChannelData(args);
97
+ return GRPC_ERROR_NONE;
98
+ }
99
+
100
+ void ServiceConfigChannelArgDestroyChannelElem(grpc_channel_element* elem) {
101
+ ServiceConfigChannelArgChannelData* chand =
102
+ static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
103
+ chand->~ServiceConfigChannelArgChannelData();
104
+ }
105
+
106
+ const grpc_channel_filter ServiceConfigChannelArgFilter = {
107
+ grpc_call_next_op,
108
+ grpc_channel_next_op,
109
+ sizeof(ServiceConfigChannelArgCallData),
110
+ ServiceConfigChannelArgInitCallElem,
111
+ grpc_call_stack_ignore_set_pollset_or_pollset_set,
112
+ ServiceConfigChannelArgDestroyCallElem,
113
+ sizeof(ServiceConfigChannelArgChannelData),
114
+ ServiceConfigChannelArgInitChannelElem,
115
+ ServiceConfigChannelArgDestroyChannelElem,
116
+ grpc_channel_next_get_info,
117
+ "service_config_channel_arg"};
118
+
119
+ bool maybe_add_service_config_channel_arg_filter(
120
+ grpc_channel_stack_builder* builder, void* /* arg */) {
121
+ const grpc_channel_args* channel_args =
122
+ grpc_channel_stack_builder_get_channel_arguments(builder);
123
+ if (grpc_channel_args_want_minimal_stack(channel_args) ||
124
+ grpc_channel_args_find_string(channel_args, GRPC_ARG_SERVICE_CONFIG) ==
125
+ nullptr) {
126
+ return true;
127
+ }
128
+ return grpc_channel_stack_builder_prepend_filter(
129
+ builder, &ServiceConfigChannelArgFilter, nullptr, nullptr);
130
+ }
131
+
132
+ } // namespace
133
+
134
+ } // namespace grpc_core
135
+
136
+ void grpc_service_config_channel_arg_filter_init(void) {
137
+ grpc_channel_init_register_stage(
138
+ GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
139
+ grpc_core::maybe_add_service_config_channel_arg_filter, nullptr);
140
+ }
141
+
142
+ void grpc_service_config_channel_arg_filter_shutdown(void) {}
@@ -872,7 +872,7 @@ grpc_arg Subchannel::CreateSubchannelAddressArg(
872
872
  const grpc_resolved_address* addr) {
873
873
  return grpc_channel_arg_string_create(
874
874
  (char*)GRPC_ARG_SUBCHANNEL_ADDRESS,
875
- addr->len > 0 ? grpc_sockaddr_to_uri(addr) : gpr_strdup(""));
875
+ gpr_strdup(addr->len > 0 ? grpc_sockaddr_to_uri(addr).c_str() : ""));
876
876
  }
877
877
 
878
878
  const char* Subchannel::GetUriFromSubchannelAddressArg(