grpc 1.35.0.pre1 → 1.37.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 (507) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +121 -89
  3. data/include/grpc/grpc.h +15 -1
  4. data/include/grpc/grpc_security.h +16 -11
  5. data/include/grpc/impl/codegen/port_platform.h +2 -0
  6. data/src/core/ext/filters/client_channel/client_channel.cc +359 -331
  7. data/src/core/ext/filters/client_channel/client_channel.h +0 -2
  8. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  9. data/src/core/ext/filters/client_channel/config_selector.h +9 -1
  10. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -4
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  12. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
  14. data/src/core/ext/filters/client_channel/lb_policy.cc +3 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  18. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
  19. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
  20. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  21. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -25
  25. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +232 -110
  27. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  28. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  29. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  30. data/src/core/ext/filters/client_channel/resolver.h +1 -12
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +34 -50
  35. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
  36. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
  37. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  38. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  39. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +307 -155
  40. data/src/core/ext/filters/client_channel/server_address.cc +9 -0
  41. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  42. data/src/core/ext/filters/client_channel/subchannel.cc +69 -146
  43. data/src/core/ext/filters/client_channel/subchannel.h +63 -95
  44. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  45. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  46. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +500 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  49. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  50. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  51. data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
  52. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  53. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  54. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +3 -2
  55. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  56. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -2
  57. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +490 -178
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  59. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  60. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +1 -1
  61. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  62. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +39 -7
  63. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  64. data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
  65. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  66. data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
  67. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  68. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  69. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
  70. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  71. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  72. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
  73. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
  74. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
  75. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
  76. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
  77. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
  78. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
  79. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
  80. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
  81. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
  82. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
  83. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  84. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
  87. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
  88. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
  89. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  90. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
  91. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
  92. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
  93. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  94. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  95. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  96. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  97. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
  98. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
  99. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  100. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
  101. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
  102. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  103. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  104. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  105. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  106. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  107. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  108. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  109. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  110. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
  112. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
  114. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
  115. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
  116. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
  117. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
  118. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
  119. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
  120. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
  121. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
  122. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
  123. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
  124. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  125. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  126. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  127. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  128. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
  129. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  130. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  131. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
  132. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
  133. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  134. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  135. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
  136. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  137. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  138. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  139. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  140. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  141. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
  142. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  143. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  144. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  145. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  146. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  147. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  148. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  149. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  150. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  151. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  152. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  153. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  154. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  155. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  156. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  157. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  158. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  159. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  160. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  161. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  162. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  163. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  164. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  165. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  166. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  167. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  168. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  169. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  170. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  171. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  172. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
  173. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  174. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  175. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  176. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  177. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  178. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  179. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  180. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  181. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  182. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  183. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
  184. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  185. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  186. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  187. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  188. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  189. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  190. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  191. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  192. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  193. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  194. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  195. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  196. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  197. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  198. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  199. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  200. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  201. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
  202. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
  203. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
  204. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
  205. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
  206. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
  207. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
  208. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  209. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  210. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  211. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  212. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  213. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  214. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  215. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  216. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  217. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  218. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  219. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  220. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  221. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  222. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  223. data/src/core/ext/xds/xds_api.cc +2149 -666
  224. data/src/core/ext/xds/xds_api.h +321 -119
  225. data/src/core/ext/xds/xds_bootstrap.cc +80 -45
  226. data/src/core/ext/xds/xds_bootstrap.h +17 -5
  227. data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
  228. data/src/core/ext/xds/xds_certificate_provider.h +83 -44
  229. data/src/core/ext/xds/xds_client.cc +181 -34
  230. data/src/core/ext/xds/xds_client.h +29 -0
  231. data/src/core/ext/xds/xds_client_stats.cc +2 -1
  232. data/src/core/ext/xds/xds_client_stats.h +2 -2
  233. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  234. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  235. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  236. data/src/core/ext/xds/xds_http_filters.h +130 -0
  237. data/src/core/ext/xds/xds_server_config_fetcher.cc +425 -24
  238. data/src/core/lib/channel/channel_stack.cc +12 -0
  239. data/src/core/lib/channel/channel_stack.h +7 -0
  240. data/src/core/lib/channel/channelz.cc +92 -4
  241. data/src/core/lib/channel/channelz.h +30 -1
  242. data/src/core/lib/channel/channelz_registry.cc +14 -0
  243. data/src/core/lib/channel/handshaker.cc +2 -44
  244. data/src/core/lib/channel/handshaker.h +1 -18
  245. data/src/core/lib/channel/status_util.cc +12 -2
  246. data/src/core/lib/channel/status_util.h +5 -0
  247. data/src/core/lib/gpr/log.cc +6 -1
  248. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  249. data/src/core/lib/gpr/sync_windows.cc +2 -2
  250. data/src/core/lib/gprpp/atomic.h +3 -3
  251. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  252. data/src/core/lib/gprpp/mpscq.cc +2 -2
  253. data/src/core/lib/gprpp/ref_counted.h +1 -1
  254. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
  255. data/src/core/lib/gprpp/sync.h +129 -40
  256. data/src/core/lib/gprpp/thd.h +1 -1
  257. data/src/core/lib/gprpp/time_util.cc +77 -0
  258. data/src/core/lib/gprpp/time_util.h +42 -0
  259. data/src/core/lib/http/httpcli_security_connector.cc +2 -2
  260. data/src/core/lib/iomgr/buffer_list.h +1 -1
  261. data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
  262. data/src/core/lib/iomgr/error.h +1 -1
  263. data/src/core/lib/iomgr/ev_apple.cc +11 -8
  264. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -3
  265. data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
  266. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  267. data/src/core/lib/iomgr/exec_ctx.cc +6 -2
  268. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  269. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  270. data/src/core/lib/iomgr/resource_quota.cc +1 -1
  271. data/src/core/lib/iomgr/sockaddr_utils.cc +121 -1
  272. data/src/core/lib/iomgr/sockaddr_utils.h +25 -0
  273. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  274. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  275. data/src/core/lib/iomgr/tcp_posix.cc +5 -8
  276. data/src/core/lib/iomgr/tcp_uv.cc +2 -2
  277. data/src/core/lib/iomgr/timer_generic.cc +2 -2
  278. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  279. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  280. data/src/core/lib/matchers/matchers.cc +339 -0
  281. data/src/core/lib/matchers/matchers.h +160 -0
  282. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  284. data/src/core/lib/security/credentials/credentials.h +2 -1
  285. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
  286. data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
  287. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
  288. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
  289. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
  290. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
  291. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  292. data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
  293. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
  294. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  295. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  296. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
  297. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  299. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  300. data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
  301. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  302. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  303. data/src/core/lib/security/security_connector/ssl_utils.cc +9 -4
  304. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +32 -14
  305. data/src/core/lib/security/transport/security_handshaker.cc +33 -5
  306. data/src/core/lib/security/transport/server_auth_filter.cc +7 -0
  307. data/src/core/lib/slice/slice_intern.cc +5 -6
  308. data/src/core/lib/surface/channel.h +3 -3
  309. data/src/core/lib/surface/completion_queue.cc +1 -1
  310. data/src/core/lib/surface/init.cc +13 -15
  311. data/src/core/lib/surface/lame_client.cc +38 -19
  312. data/src/core/lib/surface/lame_client.h +4 -3
  313. data/src/core/lib/surface/server.cc +43 -36
  314. data/src/core/lib/surface/server.h +76 -14
  315. data/src/core/lib/surface/version.cc +2 -2
  316. data/src/core/lib/transport/metadata.cc +6 -2
  317. data/src/core/lib/transport/metadata_batch.cc +27 -0
  318. data/src/core/lib/transport/metadata_batch.h +14 -0
  319. data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
  320. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -24
  321. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
  322. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  323. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  324. data/src/core/tsi/fake_transport_security.cc +11 -2
  325. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  326. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  327. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  328. data/src/core/tsi/ssl_transport_security.cc +0 -3
  329. data/src/core/tsi/ssl_transport_security.h +0 -3
  330. data/src/ruby/ext/grpc/extconf.rb +9 -1
  331. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  332. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  333. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  334. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  335. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  336. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  337. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  338. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
  339. data/src/ruby/ext/grpc/rb_server.c +13 -1
  340. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  341. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  342. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  343. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  344. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  345. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  346. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  349. data/src/ruby/spec/call_spec.rb +1 -1
  350. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  351. data/src/ruby/spec/channel_spec.rb +17 -6
  352. data/src/ruby/spec/client_auth_spec.rb +27 -1
  353. data/src/ruby/spec/errors_spec.rb +1 -1
  354. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  355. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  356. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  357. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  358. data/src/ruby/spec/server_spec.rb +22 -0
  359. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  360. data/third_party/boringssl-with-bazel/err_data.c +715 -713
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  372. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  373. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  374. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  375. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  377. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  378. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  379. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  381. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  382. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  383. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  384. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  385. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  386. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  387. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  388. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  389. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  395. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  396. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
  404. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  405. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  406. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  407. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  408. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  410. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  411. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  424. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  425. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  426. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  427. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  428. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  436. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  437. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  438. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  439. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
  440. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  441. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  442. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
  443. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  444. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  445. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  446. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  447. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  448. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  449. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
  451. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
  452. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
  453. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
  454. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  455. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  456. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  457. data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
  458. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  459. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  460. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
  461. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  462. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  463. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  464. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
  465. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  466. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  467. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
  468. data/third_party/xxhash/xxhash.h +5443 -0
  469. metadata +140 -84
  470. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  471. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  472. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  473. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  474. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  475. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  476. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  477. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  478. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  479. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  480. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  481. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  482. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  483. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  484. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  485. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  486. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  487. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  488. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  489. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  490. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  491. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  492. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  493. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  494. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  495. data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
  496. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  497. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  498. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  499. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  500. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  501. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  502. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  503. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  504. data/third_party/upb/upb/json_decode.c +0 -1443
  505. data/third_party/upb/upb/json_decode.h +0 -23
  506. data/third_party/upb/upb/json_encode.c +0 -713
  507. data/third_party/upb/upb/json_encode.h +0 -36
@@ -52,8 +52,8 @@ class XdsServerCredentials final : public grpc_server_credentials {
52
52
  : grpc_server_credentials(kCredentialsTypeXds),
53
53
  fallback_credentials_(std::move(fallback_credentials)) {}
54
54
 
55
- RefCountedPtr<grpc_server_security_connector> create_security_connector()
56
- override;
55
+ RefCountedPtr<grpc_server_security_connector> create_security_connector(
56
+ const grpc_channel_args* /* args */) override;
57
57
 
58
58
  private:
59
59
  RefCountedPtr<grpc_server_credentials> fallback_credentials_;
@@ -62,7 +62,7 @@ class XdsServerCredentials final : public grpc_server_credentials {
62
62
  bool TestOnlyXdsVerifySubjectAlternativeNames(
63
63
  const char* const* subject_alternative_names,
64
64
  size_t subject_alternative_names_size,
65
- const std::vector<XdsApi::StringMatcher>& matchers);
65
+ const std::vector<StringMatcher>& matchers);
66
66
 
67
67
  } // namespace grpc_core
68
68
 
@@ -51,14 +51,14 @@ RefCountedPtr<grpc_auth_context> TestOnlyMakeInsecureAuthContext() {
51
51
  // check_call_host and cancel_check_call_host are no-ops since we want to
52
52
  // provide an insecure channel.
53
53
  bool InsecureChannelSecurityConnector::check_call_host(
54
- absl::string_view host, grpc_auth_context* auth_context,
55
- grpc_closure* on_call_host_checked, grpc_error** error) {
54
+ absl::string_view /*host*/, grpc_auth_context* /*auth_context*/,
55
+ grpc_closure* /*on_call_host_checked*/, grpc_error** error) {
56
56
  *error = GRPC_ERROR_NONE;
57
57
  return true;
58
58
  }
59
59
 
60
60
  void InsecureChannelSecurityConnector::cancel_check_call_host(
61
- grpc_closure* on_call_host_checked, grpc_error* error) {
61
+ grpc_closure* /*on_call_host_checked*/, grpc_error* error) {
62
62
  GRPC_ERROR_UNREF(error);
63
63
  }
64
64
 
@@ -76,7 +76,7 @@ void InsecureChannelSecurityConnector::add_handshakers(
76
76
  }
77
77
 
78
78
  void InsecureChannelSecurityConnector::check_peer(
79
- tsi_peer peer, grpc_endpoint* ep,
79
+ tsi_peer peer, grpc_endpoint* /*ep*/,
80
80
  RefCountedPtr<grpc_auth_context>* auth_context,
81
81
  grpc_closure* on_peer_checked) {
82
82
  *auth_context = MakeAuthContext();
@@ -104,7 +104,7 @@ void InsecureServerSecurityConnector::add_handshakers(
104
104
  }
105
105
 
106
106
  void InsecureServerSecurityConnector::check_peer(
107
- tsi_peer peer, grpc_endpoint* ep,
107
+ tsi_peer peer, grpc_endpoint* /*ep*/,
108
108
  grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
109
109
  grpc_closure* on_peer_checked) {
110
110
  *auth_context = MakeAuthContext();
@@ -41,11 +41,13 @@
41
41
 
42
42
  /* -- Constants. -- */
43
43
 
44
- #ifndef INSTALL_PREFIX
45
- static const char* installed_roots_path = "/usr/share/grpc/roots.pem";
46
- #else
44
+ #if defined(GRPC_ROOT_PEM_PATH)
45
+ static const char* installed_roots_path = GRPC_ROOT_PEM_PATH;
46
+ #elif defined(INSTALL_PREFIX)
47
47
  static const char* installed_roots_path =
48
- INSTALL_PREFIX "/share/grpc/roots.pem";
48
+ INSTALL_PREFIX "/usr/share/grpc/roots.pem";
49
+ #else
50
+ static const char* installed_roots_path = "/usr/share/grpc/roots.pem";
49
51
  #endif
50
52
 
51
53
  #ifndef TSI_OPENSSL_ALPN_SUPPORT
@@ -395,6 +397,9 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
395
397
  const char* root_certs;
396
398
  const tsi_ssl_root_certs_store* root_store;
397
399
  if (pem_root_certs == nullptr) {
400
+ gpr_log(GPR_INFO,
401
+ "No root certificates specified; use ones stored in system default "
402
+ "locations instead");
398
403
  // Use default root certificates.
399
404
  root_certs = grpc_core::DefaultSslRootStore::GetPemRootCerts();
400
405
  if (root_certs == nullptr) {
@@ -136,9 +136,20 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector(
136
136
  if (options_->watch_identity_pair()) {
137
137
  watched_identity_cert_name = options_->identity_cert_name();
138
138
  }
139
- distributor->WatchTlsCertificates(std::move(watcher_ptr),
140
- watched_root_cert_name,
141
- watched_identity_cert_name);
139
+ // We will use the root certs stored in system default locations if not
140
+ // watching root certs on the client side. We will handle this case
141
+ // differently here, because "watching a default roots without the identity
142
+ // certs" is a valid case(and hence we will need to call
143
+ // OnCertificatesChanged), but it requires nothing from the provider, and
144
+ // hence no need to register the watcher.
145
+ bool use_default_roots = !options_->watch_root_cert();
146
+ if (use_default_roots && !options_->watch_identity_pair()) {
147
+ watcher_ptr->OnCertificatesChanged(absl::nullopt, absl::nullopt);
148
+ } else {
149
+ distributor->WatchTlsCertificates(std::move(watcher_ptr),
150
+ watched_root_cert_name,
151
+ watched_identity_cert_name);
152
+ }
142
153
  }
143
154
 
144
155
  TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
@@ -148,7 +159,9 @@ TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
148
159
  // Cancel all the watchers.
149
160
  grpc_tls_certificate_distributor* distributor =
150
161
  options_->certificate_distributor();
151
- distributor->CancelTlsCertificatesWatch(certificate_watcher_);
162
+ if (distributor != nullptr) {
163
+ distributor->CancelTlsCertificatesWatch(certificate_watcher_);
164
+ }
152
165
  if (client_handshaker_factory_ != nullptr) {
153
166
  tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
154
167
  }
@@ -305,6 +318,12 @@ int TlsChannelSecurityConnector::cmp(
305
318
  bool TlsChannelSecurityConnector::check_call_host(
306
319
  absl::string_view host, grpc_auth_context* auth_context,
307
320
  grpc_closure* /*on_call_host_checked*/, grpc_error** error) {
321
+ if (options_->server_verification_option() ==
322
+ GRPC_TLS_SKIP_HOSTNAME_VERIFICATION ||
323
+ options_->server_verification_option() ==
324
+ GRPC_TLS_SKIP_ALL_SERVER_VERIFICATION) {
325
+ return true;
326
+ }
308
327
  return grpc_ssl_check_call_host(host, target_name_.c_str(),
309
328
  overridden_target_name_.c_str(), auth_context,
310
329
  error);
@@ -327,16 +346,12 @@ void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
327
346
  if (key_cert_pairs.has_value()) {
328
347
  security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
329
348
  }
330
- bool root_being_watched = security_connector_->options_->watch_root_cert();
331
- bool root_has_value = security_connector_->pem_root_certs_.has_value();
332
- bool identity_being_watched =
333
- security_connector_->options_->watch_identity_pair();
334
- bool identity_has_value =
349
+ const bool root_ready = !security_connector_->options_->watch_root_cert() ||
350
+ security_connector_->pem_root_certs_.has_value();
351
+ const bool identity_ready =
352
+ !security_connector_->options_->watch_identity_pair() ||
335
353
  security_connector_->pem_key_cert_pair_list_.has_value();
336
- if ((root_being_watched && root_has_value && identity_being_watched &&
337
- identity_has_value) ||
338
- (root_being_watched && root_has_value && !identity_being_watched) ||
339
- (!root_being_watched && identity_being_watched && identity_has_value)) {
354
+ if (root_ready && identity_ready) {
340
355
  if (security_connector_->UpdateHandshakerFactoryLocked() !=
341
356
  GRPC_SECURITY_OK) {
342
357
  gpr_log(GPR_ERROR, "Update handshaker factory failed.");
@@ -383,9 +398,11 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() {
383
398
  if (pem_key_cert_pair_list_.has_value()) {
384
399
  pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
385
400
  }
401
+ bool use_default_roots = !options_->watch_root_cert();
386
402
  grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init(
387
403
  pem_key_cert_pair,
388
- pem_root_certs.empty() ? nullptr : pem_root_certs.c_str(),
404
+ pem_root_certs.empty() || use_default_roots ? nullptr
405
+ : pem_root_certs.c_str(),
389
406
  skip_server_certificate_verification,
390
407
  grpc_get_tsi_tls_version(options_->min_tls_version()),
391
408
  grpc_get_tsi_tls_version(options_->max_tls_version()), ssl_session_cache_,
@@ -516,6 +533,7 @@ TlsServerSecurityConnector::TlsServerSecurityConnector(
516
533
  if (options_->watch_identity_pair()) {
517
534
  watched_identity_cert_name = options_->identity_cert_name();
518
535
  }
536
+ // Server side won't use default system roots at any time.
519
537
  distributor->WatchTlsCertificates(std::move(watcher_ptr),
520
538
  watched_root_cert_name,
521
539
  watched_identity_cert_name);
@@ -29,6 +29,7 @@
29
29
  #include <grpc/support/log.h>
30
30
 
31
31
  #include "src/core/lib/channel/channel_args.h"
32
+ #include "src/core/lib/channel/channelz.h"
32
33
  #include "src/core/lib/channel/handshaker.h"
33
34
  #include "src/core/lib/channel/handshaker_registry.h"
34
35
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -84,7 +85,7 @@ class SecurityHandshaker : public Handshaker {
84
85
  tsi_handshaker* handshaker_;
85
86
  RefCountedPtr<grpc_security_connector> connector_;
86
87
 
87
- gpr_mu mu_;
88
+ Mutex mu_;
88
89
 
89
90
  bool is_shutdown_ = false;
90
91
  // Endpoint and read buffer to destroy after a shutdown.
@@ -120,14 +121,12 @@ SecurityHandshaker::SecurityHandshaker(tsi_handshaker* handshaker,
120
121
  max_frame_size_ = grpc_channel_arg_get_integer(
121
122
  arg, {0, 0, std::numeric_limits<int>::max()});
122
123
  }
123
- gpr_mu_init(&mu_);
124
124
  grpc_slice_buffer_init(&outgoing_);
125
125
  GRPC_CLOSURE_INIT(&on_peer_checked_, &SecurityHandshaker::OnPeerCheckedFn,
126
126
  this, grpc_schedule_on_exec_ctx);
127
127
  }
128
128
 
129
129
  SecurityHandshaker::~SecurityHandshaker() {
130
- gpr_mu_destroy(&mu_);
131
130
  tsi_handshaker_destroy(handshaker_);
132
131
  tsi_handshaker_result_destroy(handshaker_result_);
133
132
  if (endpoint_to_destroy_ != nullptr) {
@@ -201,6 +200,31 @@ void SecurityHandshaker::HandshakeFailedLocked(grpc_error* error) {
201
200
  ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, error);
202
201
  }
203
202
 
203
+ namespace {
204
+
205
+ RefCountedPtr<channelz::SocketNode::Security>
206
+ MakeChannelzSecurityFromAuthContext(grpc_auth_context* auth_context) {
207
+ RefCountedPtr<channelz::SocketNode::Security> security =
208
+ MakeRefCounted<channelz::SocketNode::Security>();
209
+ // TODO(yashykt): Currently, we are assuming TLS by default and are only able
210
+ // to fill in the remote certificate but we should ideally be able to fill in
211
+ // other fields in
212
+ // https://github.com/grpc/grpc/blob/fcd43e90304862a823316b224ee733d17a8cfd90/src/proto/grpc/channelz/channelz.proto#L326
213
+ // from grpc_auth_context.
214
+ security->type = channelz::SocketNode::Security::ModelType::kTls;
215
+ security->tls = absl::make_optional<channelz::SocketNode::Security::Tls>();
216
+ grpc_auth_property_iterator it = grpc_auth_context_find_properties_by_name(
217
+ auth_context, GRPC_X509_PEM_CERT_PROPERTY_NAME);
218
+ const grpc_auth_property* prop = grpc_auth_property_iterator_next(&it);
219
+ if (prop != nullptr) {
220
+ security->tls->remote_certificate =
221
+ std::string(prop->value, prop->value_length);
222
+ }
223
+ return security;
224
+ }
225
+
226
+ } // namespace
227
+
204
228
  void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
205
229
  MutexLock lock(&mu_);
206
230
  if (error != GRPC_ERROR_NONE || is_shutdown_) {
@@ -253,9 +277,13 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
253
277
  tsi_handshaker_result_destroy(handshaker_result_);
254
278
  handshaker_result_ = nullptr;
255
279
  // Add auth context to channel args.
256
- grpc_arg auth_context_arg = grpc_auth_context_to_arg(auth_context_.get());
280
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
281
+ args_to_add.push_back(grpc_auth_context_to_arg(auth_context_.get()));
282
+ auto security = MakeChannelzSecurityFromAuthContext(auth_context_.get());
283
+ args_to_add.push_back(security->MakeChannelArg());
257
284
  grpc_channel_args* tmp_args = args_->args;
258
- args_->args = grpc_channel_args_copy_and_add(tmp_args, &auth_context_arg, 1);
285
+ args_->args = grpc_channel_args_copy_and_add(tmp_args, args_to_add.data(),
286
+ args_to_add.size());
259
287
  grpc_channel_args_destroy(tmp_args);
260
288
  // Invoke callback.
261
289
  ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, GRPC_ERROR_NONE);
@@ -300,6 +300,13 @@ static grpc_error* server_auth_init_channel_elem(
300
300
  GPR_ASSERT(!args->is_last);
301
301
  grpc_auth_context* auth_context =
302
302
  grpc_find_auth_context_in_args(args->channel_args);
303
+ if (auth_context == nullptr) {
304
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
305
+ "No authorization context found. This might be a TRANSIENT failure due "
306
+ "to certificates not having been loaded yet.");
307
+ gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
308
+ return error;
309
+ }
303
310
  GPR_ASSERT(auth_context != nullptr);
304
311
  grpc_server_credentials* creds =
305
312
  grpc_find_server_credentials_in_args(args->channel_args);
@@ -44,13 +44,13 @@
44
44
  using grpc_core::InternedSliceRefcount;
45
45
 
46
46
  typedef struct slice_shard {
47
- gpr_mu mu;
47
+ grpc_core::Mutex mu;
48
48
  InternedSliceRefcount** strs;
49
49
  size_t count;
50
50
  size_t capacity;
51
51
  } slice_shard;
52
52
 
53
- static slice_shard g_shards[SHARD_COUNT];
53
+ static slice_shard* g_shards;
54
54
 
55
55
  struct static_metadata_hash_ent {
56
56
  uint32_t hash;
@@ -259,13 +259,12 @@ template <typename SliceArgs>
259
259
  static InternedSliceRefcount* FindOrCreateInternedSlice(uint32_t hash,
260
260
  const SliceArgs& args) {
261
261
  slice_shard* shard = &g_shards[SHARD_IDX(hash)];
262
- gpr_mu_lock(&shard->mu);
262
+ grpc_core::MutexLock lock(&shard->mu);
263
263
  const size_t idx = TABLE_IDX(hash, shard->capacity);
264
264
  InternedSliceRefcount* s = MatchInternedSliceLocked(hash, idx, args);
265
265
  if (s == nullptr) {
266
266
  s = InternNewStringLocked(shard, idx, hash, args);
267
267
  }
268
- gpr_mu_unlock(&shard->mu);
269
268
  return s;
270
269
  }
271
270
 
@@ -312,9 +311,9 @@ void grpc_slice_intern_init(void) {
312
311
  grpc_core::g_hash_seed =
313
312
  static_cast<uint32_t>(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
314
313
  }
314
+ g_shards = new slice_shard[SHARD_COUNT];
315
315
  for (size_t i = 0; i < SHARD_COUNT; i++) {
316
316
  slice_shard* shard = &g_shards[i];
317
- gpr_mu_init(&shard->mu);
318
317
  shard->count = 0;
319
318
  shard->capacity = INITIAL_SHARD_CAPACITY;
320
319
  shard->strs = static_cast<InternedSliceRefcount**>(
@@ -352,7 +351,6 @@ void grpc_slice_intern_init(void) {
352
351
  void grpc_slice_intern_shutdown(void) {
353
352
  for (size_t i = 0; i < SHARD_COUNT; i++) {
354
353
  slice_shard* shard = &g_shards[i];
355
- gpr_mu_destroy(&shard->mu);
356
354
  /* TODO(ctiller): GPR_ASSERT(shard->count == 0); */
357
355
  if (shard->count != 0) {
358
356
  gpr_log(GPR_DEBUG, "WARNING: %" PRIuPTR " metadata strings were leaked",
@@ -371,4 +369,5 @@ void grpc_slice_intern_shutdown(void) {
371
369
  }
372
370
  gpr_free(shard->strs);
373
371
  }
372
+ delete[] g_shards;
374
373
  }
@@ -94,9 +94,9 @@ struct CallRegistrationTable {
94
94
  // The map key should be owned strings rather than unowned char*'s to
95
95
  // guarantee that it outlives calls on the core channel (which may outlast the
96
96
  // C++ or other wrapped language Channel that registered these calls).
97
- std::map<std::pair<std::string, std::string>, RegisteredCall>
98
- map /* GUARDED_BY(mu) */;
99
- int method_registration_attempts /* GUARDED_BY(mu) */ = 0;
97
+ std::map<std::pair<std::string, std::string>, RegisteredCall> map
98
+ ABSL_GUARDED_BY(mu);
99
+ int method_registration_attempts ABSL_GUARDED_BY(mu) = 0;
100
100
  };
101
101
 
102
102
  } // namespace grpc_core
@@ -705,7 +705,7 @@ static void cq_end_op_for_next(
705
705
  6, (cq, tag, errmsg, done, done_arg, storage));
706
706
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures) &&
707
707
  error != GRPC_ERROR_NONE) {
708
- gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
708
+ gpr_log(GPR_INFO, "Operation failed: tag=%p, error=%s", tag, errmsg);
709
709
  }
710
710
  }
711
711
  cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
@@ -63,16 +63,15 @@ extern void grpc_register_built_in_plugins(void);
63
63
  #define MAX_PLUGINS 128
64
64
 
65
65
  static gpr_once g_basic_init = GPR_ONCE_INIT;
66
- static gpr_mu g_init_mu;
66
+ static grpc_core::Mutex* g_init_mu;
67
67
  static int g_initializations;
68
- static gpr_cv* g_shutting_down_cv;
68
+ static grpc_core::CondVar* g_shutting_down_cv;
69
69
  static bool g_shutting_down;
70
70
 
71
71
  static void do_basic_init(void) {
72
72
  gpr_log_verbosity_init();
73
- gpr_mu_init(&g_init_mu);
74
- g_shutting_down_cv = static_cast<gpr_cv*>(malloc(sizeof(gpr_cv)));
75
- gpr_cv_init(g_shutting_down_cv);
73
+ g_init_mu = new grpc_core::Mutex();
74
+ g_shutting_down_cv = new grpc_core::CondVar();
76
75
  g_shutting_down = false;
77
76
  grpc_register_built_in_plugins();
78
77
  grpc_cq_global_init();
@@ -130,11 +129,11 @@ void grpc_init(void) {
130
129
  int i;
131
130
  gpr_once_init(&g_basic_init, do_basic_init);
132
131
 
133
- grpc_core::MutexLock lock(&g_init_mu);
132
+ grpc_core::MutexLock lock(g_init_mu);
134
133
  if (++g_initializations == 1) {
135
134
  if (g_shutting_down) {
136
135
  g_shutting_down = false;
137
- gpr_cv_broadcast(g_shutting_down_cv);
136
+ g_shutting_down_cv->SignalAll();
138
137
  }
139
138
  grpc_core::Fork::GlobalInit();
140
139
  grpc_fork_handlers_auto_register();
@@ -196,14 +195,14 @@ void grpc_shutdown_internal_locked(void) {
196
195
  grpc_core::ExecCtx::GlobalShutdown();
197
196
  grpc_core::ApplicationCallbackExecCtx::GlobalShutdown();
198
197
  g_shutting_down = false;
199
- gpr_cv_broadcast(g_shutting_down_cv);
198
+ g_shutting_down_cv->SignalAll();
200
199
  // Absolute last action will be to delete static metadata context.
201
200
  grpc_destroy_static_metadata_ctx();
202
201
  }
203
202
 
204
203
  void grpc_shutdown_internal(void* /*ignored*/) {
205
204
  GRPC_API_TRACE("grpc_shutdown_internal", 0, ());
206
- grpc_core::MutexLock lock(&g_init_mu);
205
+ grpc_core::MutexLock lock(g_init_mu);
207
206
  // We have released lock from the shutdown thread and it is possible that
208
207
  // another grpc_init has been called, and do nothing if that is the case.
209
208
  if (--g_initializations != 0) {
@@ -214,7 +213,7 @@ void grpc_shutdown_internal(void* /*ignored*/) {
214
213
 
215
214
  void grpc_shutdown(void) {
216
215
  GRPC_API_TRACE("grpc_shutdown(void)", 0, ());
217
- grpc_core::MutexLock lock(&g_init_mu);
216
+ grpc_core::MutexLock lock(g_init_mu);
218
217
 
219
218
  if (--g_initializations == 0) {
220
219
  grpc_core::ApplicationCallbackExecCtx* acec =
@@ -243,7 +242,7 @@ void grpc_shutdown(void) {
243
242
 
244
243
  void grpc_shutdown_blocking(void) {
245
244
  GRPC_API_TRACE("grpc_shutdown_blocking(void)", 0, ());
246
- grpc_core::MutexLock lock(&g_init_mu);
245
+ grpc_core::MutexLock lock(g_init_mu);
247
246
  if (--g_initializations == 0) {
248
247
  g_shutting_down = true;
249
248
  grpc_shutdown_internal_locked();
@@ -253,16 +252,15 @@ void grpc_shutdown_blocking(void) {
253
252
  int grpc_is_initialized(void) {
254
253
  int r;
255
254
  gpr_once_init(&g_basic_init, do_basic_init);
256
- grpc_core::MutexLock lock(&g_init_mu);
255
+ grpc_core::MutexLock lock(g_init_mu);
257
256
  r = g_initializations > 0;
258
257
  return r;
259
258
  }
260
259
 
261
260
  void grpc_maybe_wait_for_async_shutdown(void) {
262
261
  gpr_once_init(&g_basic_init, do_basic_init);
263
- grpc_core::MutexLock lock(&g_init_mu);
262
+ grpc_core::MutexLock lock(g_init_mu);
264
263
  while (g_shutting_down) {
265
- gpr_cv_wait(g_shutting_down_cv, &g_init_mu,
266
- gpr_inf_future(GPR_CLOCK_REALTIME));
264
+ g_shutting_down_cv->Wait(g_init_mu);
267
265
  }
268
266
  }
@@ -35,12 +35,20 @@
35
35
  #include "src/core/lib/transport/connectivity_state.h"
36
36
  #include "src/core/lib/transport/static_metadata.h"
37
37
 
38
+ #define GRPC_ARG_LAME_FILTER_ERROR "grpc.lame_filter_error"
39
+
38
40
  namespace grpc_core {
39
41
 
40
42
  namespace {
41
43
 
42
44
  struct ChannelData {
43
- ChannelData() : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {}
45
+ explicit ChannelData(grpc_channel_element_args* args)
46
+ : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {
47
+ grpc_error* err = grpc_channel_args_find_pointer<grpc_error>(
48
+ args->channel_args, GRPC_ARG_LAME_FILTER_ERROR);
49
+ if (err != nullptr) error = GRPC_ERROR_REF(err);
50
+ }
51
+
44
52
  ~ChannelData() { GRPC_ERROR_UNREF(error); }
45
53
 
46
54
  grpc_error* error = GRPC_ERROR_NONE;
@@ -105,9 +113,7 @@ static void lame_destroy_call_elem(grpc_call_element* /*elem*/,
105
113
 
106
114
  static grpc_error* lame_init_channel_elem(grpc_channel_element* elem,
107
115
  grpc_channel_element_args* args) {
108
- GPR_ASSERT(args->is_first);
109
- GPR_ASSERT(args->is_last);
110
- new (elem->channel_data) ChannelData;
116
+ new (elem->channel_data) ChannelData(args);
111
117
  return GRPC_ERROR_NONE;
112
118
  }
113
119
 
@@ -116,12 +122,25 @@ static void lame_destroy_channel_elem(grpc_channel_element* elem) {
116
122
  chand->~ChannelData();
117
123
  }
118
124
 
125
+ // Channel arg vtable for a grpc_error*.
126
+ void* ErrorCopy(void* p) {
127
+ grpc_error* error = static_cast<grpc_error*>(p);
128
+ return GRPC_ERROR_REF(error);
129
+ }
130
+ void ErrorDestroy(void* p) {
131
+ grpc_error* error = static_cast<grpc_error*>(p);
132
+ GRPC_ERROR_UNREF(error);
133
+ }
134
+ int ErrorCompare(void* p, void* q) { return GPR_ICMP(p, q); }
135
+ const grpc_arg_pointer_vtable kLameFilterErrorArgVtable = {
136
+ ErrorCopy, ErrorDestroy, ErrorCompare};
137
+
119
138
  } // namespace
120
139
 
121
- void SetLameFilterError(grpc_channel_element* elem, grpc_error* error) {
122
- GPR_ASSERT(elem->filter == &grpc_lame_filter);
123
- auto chand = static_cast<grpc_core::ChannelData*>(elem->channel_data);
124
- chand->error = error;
140
+ grpc_arg MakeLameClientErrorArg(grpc_error* error) {
141
+ return grpc_channel_arg_pointer_create(
142
+ const_cast<char*>(GRPC_ARG_LAME_FILTER_ERROR), error,
143
+ &kLameFilterErrorArgVtable);
125
144
  }
126
145
 
127
146
  } // namespace grpc_core
@@ -146,20 +165,20 @@ grpc_channel* grpc_lame_client_channel_create(const char* target,
146
165
  grpc_status_code error_code,
147
166
  const char* error_message) {
148
167
  grpc_core::ExecCtx exec_ctx;
149
- grpc_channel_element* elem;
150
- grpc_channel* channel =
151
- grpc_channel_create(target, nullptr, GRPC_CLIENT_LAME_CHANNEL, nullptr);
152
- elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
153
168
  GRPC_API_TRACE(
154
169
  "grpc_lame_client_channel_create(target=%s, error_code=%d, "
155
170
  "error_message=%s)",
156
171
  3, (target, (int)error_code, error_message));
157
- grpc_core::SetLameFilterError(
158
- elem, grpc_error_set_str(
159
- grpc_error_set_int(
160
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
161
- GRPC_ERROR_INT_GRPC_STATUS, error_code),
162
- GRPC_ERROR_STR_GRPC_MESSAGE,
163
- grpc_slice_from_static_string(error_message)));
172
+ grpc_error* error = grpc_error_set_str(
173
+ grpc_error_set_int(
174
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
175
+ GRPC_ERROR_INT_GRPC_STATUS, error_code),
176
+ GRPC_ERROR_STR_GRPC_MESSAGE,
177
+ grpc_slice_from_static_string(error_message));
178
+ grpc_arg error_arg = grpc_core::MakeLameClientErrorArg(error);
179
+ grpc_channel_args args = {1, &error_arg};
180
+ grpc_channel* channel =
181
+ grpc_channel_create(target, &args, GRPC_CLIENT_LAME_CHANNEL, nullptr);
182
+ GRPC_ERROR_UNREF(error);
164
183
  return channel;
165
184
  }