grpc 1.34.0 → 1.35.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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +808 -2787
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +14 -0
  6. data/include/grpc/grpc_security.h +61 -3
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  12. data/include/grpc/slice_buffer.h +3 -3
  13. data/include/grpc/support/sync.h +3 -3
  14. data/include/grpc/support/time.h +7 -7
  15. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  16. data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
  17. data/src/core/ext/filters/client_channel/client_channel.h +0 -4
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -0
  20. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  21. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  22. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
  23. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +4 -5
  25. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  42. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
  43. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  44. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
  45. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
  46. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  48. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
  50. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  51. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  52. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  53. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  54. data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
  55. data/src/core/ext/filters/client_channel/subchannel.h +12 -18
  56. data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
  57. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  59. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  60. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  61. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  62. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  63. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  64. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  65. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
  66. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  70. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  71. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
  72. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  73. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  74. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  75. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
  77. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
  85. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  117. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  127. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  133. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
  135. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
  137. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  145. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
  151. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  157. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  159. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  177. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  178. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  179. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  180. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  182. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  184. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
  189. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  190. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  191. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  192. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  193. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  194. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  195. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  196. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  197. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  198. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  199. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  200. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  201. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  202. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  203. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  204. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  205. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  207. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  208. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  209. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  213. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  214. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  215. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  218. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  220. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  222. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  223. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  224. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  225. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
  227. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
  228. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
  229. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
  230. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
  231. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
  232. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
  233. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
  234. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
  235. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
  236. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
  237. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
  238. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  239. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  240. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  241. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  242. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  243. data/src/core/ext/xds/certificate_provider_store.h +12 -7
  244. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
  245. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
  246. data/src/core/ext/xds/xds_api.cc +220 -31
  247. data/src/core/ext/xds/xds_api.h +41 -10
  248. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  249. data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
  250. data/src/core/ext/xds/xds_certificate_provider.h +40 -2
  251. data/src/core/ext/xds/xds_client.cc +31 -29
  252. data/src/core/ext/xds/xds_client.h +6 -1
  253. data/src/core/ext/xds/xds_client_stats.cc +2 -2
  254. data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
  255. data/src/core/lib/channel/channel_args.cc +8 -8
  256. data/src/core/lib/channel/channel_trace.h +1 -1
  257. data/src/core/lib/channel/channelz.cc +13 -14
  258. data/src/core/lib/channel/channelz.h +0 -1
  259. data/src/core/lib/channel/channelz_registry.h +0 -1
  260. data/src/core/lib/channel/handshaker.cc +2 -2
  261. data/src/core/lib/compression/compression_args.cc +3 -2
  262. data/src/core/lib/debug/stats.h +2 -2
  263. data/src/core/lib/debug/stats_data.h +13 -13
  264. data/src/core/lib/gpr/alloc.cc +3 -2
  265. data/src/core/lib/gpr/log.cc +53 -16
  266. data/src/core/lib/gpr/log_linux.cc +3 -1
  267. data/src/core/lib/gpr/log_posix.cc +3 -1
  268. data/src/core/lib/gpr/log_windows.cc +3 -1
  269. data/src/core/lib/gpr/spinlock.h +10 -2
  270. data/src/core/lib/gpr/string.cc +22 -21
  271. data/src/core/lib/gpr/string.h +5 -6
  272. data/src/core/lib/gpr/sync.cc +4 -4
  273. data/src/core/lib/gpr/time.cc +12 -12
  274. data/src/core/lib/gprpp/arena.h +3 -2
  275. data/src/core/lib/gprpp/ref_counted.h +2 -2
  276. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
  277. data/src/core/lib/gprpp/thd_posix.cc +6 -1
  278. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  279. data/src/core/lib/http/httpcli.cc +1 -1
  280. data/src/core/lib/http/httpcli.h +2 -3
  281. data/src/core/lib/http/httpcli_security_connector.cc +1 -1
  282. data/src/core/lib/http/parser.cc +1 -2
  283. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  284. data/src/core/lib/iomgr/combiner.cc +2 -1
  285. data/src/core/lib/iomgr/endpoint.h +1 -1
  286. data/src/core/lib/iomgr/error.cc +15 -11
  287. data/src/core/lib/iomgr/error_internal.h +1 -1
  288. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  289. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
  290. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  291. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  292. data/src/core/lib/iomgr/executor.cc +2 -1
  293. data/src/core/lib/iomgr/executor.h +1 -1
  294. data/src/core/lib/iomgr/executor/threadpool.h +1 -1
  295. data/src/core/lib/iomgr/iomgr.cc +1 -1
  296. data/src/core/lib/iomgr/load_file.h +1 -1
  297. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  298. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  299. data/src/core/lib/iomgr/parse_address.cc +52 -46
  300. data/src/core/lib/iomgr/parse_address.h +13 -9
  301. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  302. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  303. data/src/core/lib/iomgr/python_util.h +1 -1
  304. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  305. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  306. data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
  307. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  308. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  309. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  310. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  311. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  312. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  313. data/src/core/lib/iomgr/tcp_posix.cc +9 -6
  314. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  315. data/src/core/lib/iomgr/timer_custom.cc +3 -3
  316. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  317. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  318. data/src/core/lib/iomgr/udp_server.cc +1 -2
  319. data/src/core/lib/iomgr/udp_server.h +1 -2
  320. data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
  321. data/src/core/lib/json/json.h +10 -0
  322. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  323. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  324. data/src/core/lib/security/context/security_context.cc +4 -3
  325. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  326. data/src/core/lib/security/credentials/credentials.cc +6 -6
  327. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  328. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  329. data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
  330. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
  331. data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
  332. data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
  333. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  334. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
  335. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
  339. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  341. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
  342. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  345. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
  346. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
  350. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
  351. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
  352. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
  353. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
  354. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  355. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  356. data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
  357. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  358. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  359. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  360. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
  361. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
  362. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +3 -2
  364. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  365. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  366. data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
  368. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
  369. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  370. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  371. data/src/core/lib/slice/slice_intern.cc +4 -5
  372. data/src/core/lib/slice/slice_internal.h +2 -2
  373. data/src/core/lib/surface/call.cc +32 -24
  374. data/src/core/lib/surface/call_details.cc +8 -8
  375. data/src/core/lib/surface/channel.cc +16 -10
  376. data/src/core/lib/surface/channel.h +3 -2
  377. data/src/core/lib/surface/channel_init.cc +1 -1
  378. data/src/core/lib/surface/completion_queue.cc +23 -18
  379. data/src/core/lib/surface/completion_queue.h +16 -16
  380. data/src/core/lib/surface/init.cc +6 -5
  381. data/src/core/lib/surface/lame_client.cc +20 -46
  382. data/src/core/lib/surface/lame_client.h +4 -0
  383. data/src/core/lib/surface/server.cc +59 -15
  384. data/src/core/lib/surface/server.h +37 -5
  385. data/src/core/lib/surface/version.cc +1 -1
  386. data/src/core/lib/transport/authority_override.cc +6 -4
  387. data/src/core/lib/transport/authority_override.h +5 -2
  388. data/src/core/lib/transport/connectivity_state.h +6 -4
  389. data/src/core/lib/transport/error_utils.h +1 -1
  390. data/src/core/lib/transport/metadata_batch.h +4 -4
  391. data/src/core/lib/transport/static_metadata.cc +1 -1
  392. data/src/core/lib/transport/status_metadata.cc +4 -3
  393. data/src/core/lib/transport/transport.h +7 -7
  394. data/src/core/lib/uri/uri_parser.cc +131 -249
  395. data/src/core/lib/uri/uri_parser.h +57 -21
  396. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  397. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  398. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  399. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  400. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
  401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  403. data/src/core/tsi/fake_transport_security.cc +5 -3
  404. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  405. data/src/core/tsi/ssl_transport_security.cc +62 -49
  406. data/src/core/tsi/ssl_transport_security.h +6 -6
  407. data/src/core/tsi/transport_security.cc +6 -6
  408. data/src/core/tsi/transport_security_interface.h +1 -1
  409. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
  411. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
  412. data/src/ruby/lib/grpc/version.rb +1 -1
  413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
  414. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  415. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  416. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  417. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  418. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  419. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  420. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  421. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  422. data/third_party/upb/upb/decode.c +248 -167
  423. data/third_party/upb/upb/decode.h +20 -1
  424. data/third_party/upb/upb/decode.int.h +163 -0
  425. data/third_party/upb/upb/decode_fast.c +1040 -0
  426. data/third_party/upb/upb/decode_fast.h +126 -0
  427. data/third_party/upb/upb/def.c +525 -516
  428. data/third_party/upb/upb/def.h +16 -31
  429. data/third_party/upb/upb/def.hpp +37 -123
  430. data/third_party/upb/upb/encode.c +227 -169
  431. data/third_party/upb/upb/encode.h +27 -2
  432. data/third_party/upb/upb/json_decode.c +1443 -0
  433. data/third_party/upb/upb/json_decode.h +23 -0
  434. data/third_party/upb/upb/json_encode.c +713 -0
  435. data/third_party/upb/upb/json_encode.h +36 -0
  436. data/third_party/upb/upb/msg.c +167 -88
  437. data/third_party/upb/upb/msg.h +174 -34
  438. data/third_party/upb/upb/port_def.inc +74 -61
  439. data/third_party/upb/upb/port_undef.inc +3 -7
  440. data/third_party/upb/upb/reflection.c +36 -19
  441. data/third_party/upb/upb/table.c +34 -197
  442. data/third_party/upb/upb/table.int.h +14 -5
  443. data/third_party/upb/upb/text_encode.c +45 -22
  444. data/third_party/upb/upb/text_encode.h +4 -1
  445. data/third_party/upb/upb/upb.c +18 -41
  446. data/third_party/upb/upb/upb.h +36 -7
  447. data/third_party/upb/upb/upb.hpp +4 -4
  448. data/third_party/upb/upb/upb.int.h +29 -0
  449. metadata +60 -46
  450. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  451. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  452. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  453. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  454. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  455. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  456. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  457. data/src/core/lib/gprpp/map.h +0 -53
  458. data/third_party/upb/upb/port.c +0 -26
@@ -134,7 +134,7 @@ class grpc_alts_channel_security_connector final
134
134
  class grpc_alts_server_security_connector final
135
135
  : public grpc_server_security_connector {
136
136
  public:
137
- grpc_alts_server_security_connector(
137
+ explicit grpc_alts_server_security_connector(
138
138
  grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
139
139
  : grpc_server_security_connector(GRPC_ALTS_URL_SCHEME,
140
140
  std::move(server_creds)) {}
@@ -275,7 +275,7 @@ void grpc_fake_channel_security_connector::check_peer(
275
275
  class grpc_fake_server_security_connector
276
276
  : public grpc_server_security_connector {
277
277
  public:
278
- grpc_fake_server_security_connector(
278
+ explicit grpc_fake_server_security_connector(
279
279
  grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
280
280
  : grpc_server_security_connector(GRPC_FAKE_SECURITY_URL_SCHEME,
281
281
  std::move(server_creds)) {}
@@ -28,6 +28,26 @@ namespace grpc_core {
28
28
 
29
29
  const char kInsecureTransportSecurityType[] = "insecure";
30
30
 
31
+ namespace {
32
+
33
+ RefCountedPtr<grpc_auth_context> MakeAuthContext() {
34
+ auto ctx = MakeRefCounted<grpc_auth_context>(nullptr);
35
+ grpc_auth_context_add_cstring_property(
36
+ ctx.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
37
+ kInsecureTransportSecurityType);
38
+ const char* security_level = tsi_security_level_to_string(TSI_SECURITY_NONE);
39
+ grpc_auth_context_add_property(ctx.get(),
40
+ GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME,
41
+ security_level, strlen(security_level));
42
+ return ctx;
43
+ }
44
+
45
+ } // namespace
46
+
47
+ RefCountedPtr<grpc_auth_context> TestOnlyMakeInsecureAuthContext() {
48
+ return MakeAuthContext();
49
+ }
50
+
31
51
  // check_call_host and cancel_check_call_host are no-ops since we want to
32
52
  // provide an insecure channel.
33
53
  bool InsecureChannelSecurityConnector::check_call_host(
@@ -70,19 +90,32 @@ int InsecureChannelSecurityConnector::cmp(
70
90
  static_cast<const grpc_channel_security_connector*>(other_sc));
71
91
  }
72
92
 
73
- RefCountedPtr<grpc_auth_context>
74
- InsecureChannelSecurityConnector::MakeAuthContext() {
75
- auto ctx = MakeRefCounted<grpc_auth_context>(nullptr);
76
- grpc_auth_context_add_cstring_property(
77
- ctx.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
78
- kInsecureTransportSecurityType);
79
- GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
80
- ctx.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME) == 1);
81
- const char* security_level = tsi_security_level_to_string(TSI_SECURITY_NONE);
82
- grpc_auth_context_add_property(ctx.get(),
83
- GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME,
84
- security_level, strlen(security_level));
85
- return ctx;
93
+ // add_handshakers should have been a no-op but we need to add a minimalist
94
+ // security handshaker so that check_peer is invoked and an auth_context is
95
+ // created with the security level of TSI_SECURITY_NONE.
96
+ void InsecureServerSecurityConnector::add_handshakers(
97
+ const grpc_channel_args* args, grpc_pollset_set* /* interested_parties */,
98
+ grpc_core::HandshakeManager* handshake_manager) {
99
+ tsi_handshaker* handshaker = nullptr;
100
+ // Re-use local_tsi_handshaker_create as a minimalist handshaker.
101
+ GPR_ASSERT(tsi_local_handshaker_create(false /* is_client */, &handshaker) ==
102
+ TSI_OK);
103
+ handshake_manager->Add(SecurityHandshakerCreate(handshaker, this, args));
104
+ }
105
+
106
+ void InsecureServerSecurityConnector::check_peer(
107
+ tsi_peer peer, grpc_endpoint* ep,
108
+ grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
109
+ grpc_closure* on_peer_checked) {
110
+ *auth_context = MakeAuthContext();
111
+ tsi_peer_destruct(&peer);
112
+ ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, GRPC_ERROR_NONE);
113
+ }
114
+
115
+ int InsecureServerSecurityConnector::cmp(
116
+ const grpc_security_connector* other) const {
117
+ return server_security_connector_cmp(
118
+ static_cast<const grpc_server_security_connector*>(other));
86
119
  }
87
120
 
88
121
  } // namespace grpc_core
@@ -29,6 +29,12 @@ namespace grpc_core {
29
29
 
30
30
  extern const char kInsecureTransportSecurityType[];
31
31
 
32
+ // Exposed for testing purposes only.
33
+ // Create an auth context which is necessary to pass the santiy check in
34
+ // client_auth_filter that verifies if the peer's auth context is obtained
35
+ // during handshakes.
36
+ RefCountedPtr<grpc_auth_context> TestOnlyMakeInsecureAuthContext();
37
+
32
38
  class InsecureChannelSecurityConnector
33
39
  : public grpc_channel_security_connector {
34
40
  public:
@@ -55,13 +61,24 @@ class InsecureChannelSecurityConnector
55
61
  grpc_closure* on_peer_checked) override;
56
62
 
57
63
  int cmp(const grpc_security_connector* other_sc) const override;
64
+ };
65
+
66
+ class InsecureServerSecurityConnector : public grpc_server_security_connector {
67
+ public:
68
+ explicit InsecureServerSecurityConnector(
69
+ grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
70
+ : grpc_server_security_connector(nullptr /* url_scheme */,
71
+ std::move(server_creds)) {}
72
+
73
+ void add_handshakers(const grpc_channel_args* args,
74
+ grpc_pollset_set* /* interested_parties */,
75
+ grpc_core::HandshakeManager* handshake_manager) override;
76
+
77
+ void check_peer(tsi_peer peer, grpc_endpoint* ep,
78
+ grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
79
+ grpc_closure* on_peer_checked) override;
58
80
 
59
- // Exposed for testing purposes only.
60
- // Create an auth context which is necessary to pass the santiy check in
61
- // client_auth_filter that verifies if the peer's auth context is obtained
62
- // during handshakes. The auth context is only checked for its existence and
63
- // not actually used.
64
- static RefCountedPtr<grpc_auth_context> MakeAuthContext();
81
+ int cmp(const grpc_security_connector* other) const override;
65
82
  };
66
83
 
67
84
  } // namespace grpc_core
@@ -206,7 +206,7 @@ class grpc_local_channel_security_connector final
206
206
  class grpc_local_server_security_connector final
207
207
  : public grpc_server_security_connector {
208
208
  public:
209
- grpc_local_server_security_connector(
209
+ explicit grpc_local_server_security_connector(
210
210
  grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
211
211
  : grpc_server_security_connector(nullptr, std::move(server_creds)) {}
212
212
  ~grpc_local_server_security_connector() override = default;
@@ -104,8 +104,9 @@ static const grpc_arg_pointer_vtable connector_arg_vtable = {
104
104
  connector_arg_copy, connector_arg_destroy, connector_cmp};
105
105
 
106
106
  grpc_arg grpc_security_connector_to_arg(grpc_security_connector* sc) {
107
- return grpc_channel_arg_pointer_create((char*)GRPC_ARG_SECURITY_CONNECTOR, sc,
108
- &connector_arg_vtable);
107
+ return grpc_channel_arg_pointer_create(
108
+ const_cast<char*>(GRPC_ARG_SECURITY_CONNECTOR), sc,
109
+ &connector_arg_vtable);
109
110
  }
110
111
 
111
112
  grpc_security_connector* grpc_security_connector_from_arg(const grpc_arg* arg) {
@@ -111,7 +111,7 @@ class grpc_ssl_channel_security_connector final
111
111
  const tsi_result result =
112
112
  tsi_create_ssl_client_handshaker_factory_with_options(
113
113
  &options, &client_handshaker_factory_);
114
- gpr_free((void*)options.alpn_protocols);
114
+ gpr_free(options.alpn_protocols);
115
115
  if (result != TSI_OK) {
116
116
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
117
117
  tsi_result_to_string(result));
@@ -206,7 +206,7 @@ class grpc_ssl_channel_security_connector final
206
206
  class grpc_ssl_server_security_connector
207
207
  : public grpc_server_security_connector {
208
208
  public:
209
- grpc_ssl_server_security_connector(
209
+ explicit grpc_ssl_server_security_connector(
210
210
  grpc_core::RefCountedPtr<grpc_server_credentials> server_creds)
211
211
  : grpc_server_security_connector(GRPC_SSL_URL_SCHEME,
212
212
  std::move(server_creds)) {}
@@ -258,7 +258,7 @@ class grpc_ssl_server_security_connector
258
258
  const tsi_result result =
259
259
  tsi_create_ssl_server_handshaker_factory_with_options(
260
260
  &options, &server_handshaker_factory_);
261
- gpr_free((void*)alpn_protocol_strings);
261
+ gpr_free(alpn_protocol_strings);
262
262
  if (result != TSI_OK) {
263
263
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
264
264
  tsi_result_to_string(result));
@@ -368,7 +368,7 @@ class grpc_ssl_server_security_connector
368
368
  grpc_tsi_ssl_pem_key_cert_pairs_destroy(
369
369
  const_cast<tsi_ssl_pem_key_cert_pair*>(options.pem_key_cert_pairs),
370
370
  options.num_key_cert_pairs);
371
- gpr_free((void*)alpn_protocol_strings);
371
+ gpr_free(alpn_protocol_strings);
372
372
 
373
373
  if (result != TSI_OK) {
374
374
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
@@ -427,7 +427,7 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
427
427
  const tsi_result result =
428
428
  tsi_create_ssl_client_handshaker_factory_with_options(&options,
429
429
  handshaker_factory);
430
- gpr_free((void*)options.alpn_protocols);
430
+ gpr_free(options.alpn_protocols);
431
431
  if (result != TSI_OK) {
432
432
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
433
433
  tsi_result_to_string(result));
@@ -459,7 +459,7 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
459
459
  const tsi_result result =
460
460
  tsi_create_ssl_server_handshaker_factory_with_options(&options,
461
461
  handshaker_factory);
462
- gpr_free((void*)alpn_protocol_strings);
462
+ gpr_free(alpn_protocol_strings);
463
463
  if (result != TSI_OK) {
464
464
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
465
465
  tsi_result_to_string(result));
@@ -145,13 +145,8 @@ class DefaultSslRootStore {
145
145
 
146
146
  class PemKeyCertPair {
147
147
  public:
148
- // Construct from the C struct. We steal its members and then immediately
149
- // free it.
150
- explicit PemKeyCertPair(grpc_ssl_pem_key_cert_pair* pair)
151
- : private_key_(const_cast<char*>(pair->private_key)),
152
- cert_chain_(const_cast<char*>(pair->cert_chain)) {
153
- gpr_free(pair);
154
- }
148
+ PemKeyCertPair(absl::string_view private_key, absl::string_view cert_chain)
149
+ : private_key_(private_key), cert_chain_(cert_chain) {}
155
150
 
156
151
  // Movable.
157
152
  PemKeyCertPair(PemKeyCertPair&& other) noexcept {
@@ -166,30 +161,28 @@ class PemKeyCertPair {
166
161
 
167
162
  // Copyable.
168
163
  PemKeyCertPair(const PemKeyCertPair& other)
169
- : private_key_(gpr_strdup(other.private_key())),
170
- cert_chain_(gpr_strdup(other.cert_chain())) {}
164
+ : private_key_(other.private_key()), cert_chain_(other.cert_chain()) {}
171
165
  PemKeyCertPair& operator=(const PemKeyCertPair& other) {
172
- private_key_ = grpc_core::UniquePtr<char>(gpr_strdup(other.private_key()));
173
- cert_chain_ = grpc_core::UniquePtr<char>(gpr_strdup(other.cert_chain()));
166
+ private_key_ = other.private_key();
167
+ cert_chain_ = other.cert_chain();
174
168
  return *this;
175
169
  }
176
170
 
177
171
  bool operator==(const PemKeyCertPair& other) const {
178
- return std::strcmp(this->private_key(), other.private_key()) == 0 &&
179
- std::strcmp(this->cert_chain(), other.cert_chain()) == 0;
172
+ return this->private_key() == other.private_key() &&
173
+ this->cert_chain() == other.cert_chain();
180
174
  }
181
175
 
182
- char* private_key() const { return private_key_.get(); }
183
- char* cert_chain() const { return cert_chain_.get(); }
176
+ const std::string& private_key() const { return private_key_; }
177
+ const std::string& cert_chain() const { return cert_chain_; }
184
178
 
185
179
  private:
186
- grpc_core::UniquePtr<char> private_key_;
187
- grpc_core::UniquePtr<char> cert_chain_;
180
+ std::string private_key_;
181
+ std::string cert_chain_;
188
182
  };
189
183
 
190
184
  typedef absl::InlinedVector<grpc_core::PemKeyCertPair, 1> PemKeyCertPairList;
191
185
 
192
186
  } // namespace grpc_core
193
187
 
194
- #endif /* GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_SSL_UTILS_H \
195
- */
188
+ #endif // GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_SSL_UTILS_H
@@ -55,10 +55,12 @@ tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
55
55
  gpr_zalloc(num_key_cert_pairs * sizeof(tsi_ssl_pem_key_cert_pair)));
56
56
  }
57
57
  for (size_t i = 0; i < num_key_cert_pairs; i++) {
58
- GPR_ASSERT(cert_pair_list[i].private_key() != nullptr);
59
- GPR_ASSERT(cert_pair_list[i].cert_chain() != nullptr);
60
- tsi_pairs[i].cert_chain = gpr_strdup(cert_pair_list[i].cert_chain());
61
- tsi_pairs[i].private_key = gpr_strdup(cert_pair_list[i].private_key());
58
+ GPR_ASSERT(!cert_pair_list[i].private_key().empty());
59
+ GPR_ASSERT(!cert_pair_list[i].cert_chain().empty());
60
+ tsi_pairs[i].cert_chain =
61
+ gpr_strdup(cert_pair_list[i].cert_chain().c_str());
62
+ tsi_pairs[i].private_key =
63
+ gpr_strdup(cert_pair_list[i].private_key().c_str());
62
64
  }
63
65
  return tsi_pairs;
64
66
  }
@@ -68,12 +70,12 @@ tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
68
70
  // -------------------channel security connector-------------------
69
71
  grpc_core::RefCountedPtr<grpc_channel_security_connector>
70
72
  TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector(
71
- grpc_core::RefCountedPtr<grpc_channel_credentials> ch_creds,
73
+ grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
72
74
  grpc_core::RefCountedPtr<grpc_tls_credentials_options> options,
73
75
  grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
74
76
  const char* target_name, const char* overridden_target_name,
75
77
  tsi_ssl_session_cache* ssl_session_cache) {
76
- if (ch_creds == nullptr) {
78
+ if (channel_creds == nullptr) {
77
79
  gpr_log(GPR_ERROR,
78
80
  "channel_creds is nullptr in "
79
81
  "TlsChannelSecurityConnectorCreate()");
@@ -93,19 +95,20 @@ TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector(
93
95
  }
94
96
  grpc_core::RefCountedPtr<TlsChannelSecurityConnector> c =
95
97
  grpc_core::MakeRefCounted<TlsChannelSecurityConnector>(
96
- std::move(ch_creds), std::move(options),
98
+ std::move(channel_creds), std::move(options),
97
99
  std::move(request_metadata_creds), target_name,
98
100
  overridden_target_name, ssl_session_cache);
99
101
  return c;
100
102
  }
101
103
 
102
104
  TlsChannelSecurityConnector::TlsChannelSecurityConnector(
103
- grpc_core::RefCountedPtr<grpc_channel_credentials> ch_creds,
105
+ grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
104
106
  grpc_core::RefCountedPtr<grpc_tls_credentials_options> options,
105
107
  grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
106
108
  const char* target_name, const char* overridden_target_name,
107
109
  tsi_ssl_session_cache* ssl_session_cache)
108
- : grpc_channel_security_connector(GRPC_SSL_URL_SCHEME, std::move(ch_creds),
110
+ : grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
111
+ std::move(channel_creds),
109
112
  std::move(request_metadata_creds)),
110
113
  options_(std::move(options)),
111
114
  overridden_target_name_(
@@ -240,6 +243,39 @@ void TlsChannelSecurityConnector::check_peer(
240
243
  : check_arg_->peer_cert_full_chain;
241
244
  gpr_free(peer_pem_chain);
242
245
  }
246
+ // TODO(zhenlian) - This should be cleaned up as part of the custom
247
+ // verification changes. Fill in the subject alternative names
248
+ std::vector<char*> subject_alternative_names;
249
+ for (size_t i = 0; i < peer.property_count; i++) {
250
+ const tsi_peer_property* prop = &peer.properties[i];
251
+ if (strcmp(prop->name,
252
+ TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY) == 0) {
253
+ char* san = new char[prop->value.length + 1];
254
+ memcpy(san, prop->value.data, prop->value.length);
255
+ san[prop->value.length] = '\0';
256
+ subject_alternative_names.emplace_back(san);
257
+ }
258
+ }
259
+ if (check_arg_->subject_alternative_names != nullptr) {
260
+ for (size_t i = 0; i < check_arg_->subject_alternative_names_size;
261
+ ++i) {
262
+ delete[] check_arg_->subject_alternative_names[i];
263
+ }
264
+ delete[] check_arg_->subject_alternative_names;
265
+ }
266
+ check_arg_->subject_alternative_names_size =
267
+ subject_alternative_names.size();
268
+ if (subject_alternative_names.empty()) {
269
+ check_arg_->subject_alternative_names = nullptr;
270
+ } else {
271
+ check_arg_->subject_alternative_names =
272
+ new char*[check_arg_->subject_alternative_names_size];
273
+ for (size_t i = 0; i < check_arg_->subject_alternative_names_size;
274
+ ++i) {
275
+ check_arg_->subject_alternative_names[i] =
276
+ subject_alternative_names[i];
277
+ }
278
+ }
243
279
  int callback_status = config->Schedule(check_arg_);
244
280
  /* Server authorization check is handled asynchronously. */
245
281
  if (callback_status) {
@@ -406,6 +442,11 @@ TlsChannelSecurityConnector::ServerAuthorizationCheckArgCreate(
406
442
  void* user_data) {
407
443
  grpc_tls_server_authorization_check_arg* arg =
408
444
  new grpc_tls_server_authorization_check_arg();
445
+ arg->target_name = nullptr;
446
+ arg->peer_cert = nullptr;
447
+ arg->peer_cert_full_chain = nullptr;
448
+ arg->subject_alternative_names = nullptr;
449
+ arg->subject_alternative_names_size = 0;
409
450
  arg->error_details = new grpc_tls_error_details();
410
451
  arg->cb = ServerAuthorizationCheckDone;
411
452
  arg->cb_user_data = user_data;
@@ -418,9 +459,13 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckArgDestroy(
418
459
  if (arg == nullptr) {
419
460
  return;
420
461
  }
421
- gpr_free((void*)arg->target_name);
422
- gpr_free((void*)arg->peer_cert);
423
- if (arg->peer_cert_full_chain) gpr_free((void*)arg->peer_cert_full_chain);
462
+ gpr_free(const_cast<char*>(arg->target_name));
463
+ gpr_free(const_cast<char*>(arg->peer_cert));
464
+ gpr_free(const_cast<char*>(arg->peer_cert_full_chain));
465
+ for (size_t i = 0; i < arg->subject_alternative_names_size; ++i) {
466
+ delete[] arg->subject_alternative_names[i];
467
+ }
468
+ delete[] arg->subject_alternative_names;
424
469
  delete arg->error_details;
425
470
  if (arg->destroy_context != nullptr) {
426
471
  arg->destroy_context(arg->context);
@@ -74,13 +74,12 @@ class TlsChannelSecurityConnector final
74
74
  return client_handshaker_factory_;
75
75
  };
76
76
 
77
- const absl::optional<absl::string_view>& RootCertsForTesting() {
77
+ absl::optional<absl::string_view> RootCertsForTesting() {
78
78
  grpc_core::MutexLock lock(&mu_);
79
79
  return pem_root_certs_;
80
80
  }
81
81
 
82
- const absl::optional<grpc_core::PemKeyCertPairList>&
83
- KeyCertPairListForTesting() {
82
+ absl::optional<grpc_core::PemKeyCertPairList> KeyCertPairListForTesting() {
84
83
  grpc_core::MutexLock lock(&mu_);
85
84
  return pem_key_cert_pair_list_;
86
85
  }
@@ -443,10 +443,10 @@ static const grpc_endpoint_vtable vtable = {endpoint_read,
443
443
  grpc_endpoint* grpc_secure_endpoint_create(
444
444
  struct tsi_frame_protector* protector,
445
445
  struct tsi_zero_copy_grpc_protector* zero_copy_protector,
446
- grpc_endpoint* transport, grpc_slice* leftover_slices,
446
+ grpc_endpoint* to_wrap, grpc_slice* leftover_slices,
447
447
  size_t leftover_nslices) {
448
448
  secure_endpoint* ep =
449
- new secure_endpoint(&vtable, protector, zero_copy_protector, transport,
449
+ new secure_endpoint(&vtable, protector, zero_copy_protector, to_wrap,
450
450
  leftover_slices, leftover_nslices);
451
451
  return &ep->base;
452
452
  }
@@ -241,8 +241,8 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
241
241
  handshaker_result_, &unused_bytes, &unused_bytes_size);
242
242
  // Create secure endpoint.
243
243
  if (unused_bytes_size > 0) {
244
- grpc_slice slice =
245
- grpc_slice_from_copied_buffer((char*)unused_bytes, unused_bytes_size);
244
+ grpc_slice slice = grpc_slice_from_copied_buffer(
245
+ reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
246
246
  args_->endpoint = grpc_secure_endpoint_create(
247
247
  protector, zero_copy_protector, args_->endpoint, &slice, 1);
248
248
  grpc_slice_unref_internal(slice);
@@ -273,17 +273,16 @@ grpc_core::ManagedMemorySlice::ManagedMemorySlice(const char* string)
273
273
  : grpc_core::ManagedMemorySlice::ManagedMemorySlice(string,
274
274
  strlen(string)) {}
275
275
 
276
- grpc_core::ManagedMemorySlice::ManagedMemorySlice(const char* string,
277
- size_t len) {
276
+ grpc_core::ManagedMemorySlice::ManagedMemorySlice(const char* buf, size_t len) {
278
277
  GPR_TIMER_SCOPE("grpc_slice_intern", 0);
279
- const uint32_t hash = gpr_murmur_hash3(string, len, g_hash_seed);
278
+ const uint32_t hash = gpr_murmur_hash3(buf, len, g_hash_seed);
280
279
  const StaticMetadataSlice* static_slice =
281
- MatchStaticSlice(hash, std::pair<const char*, size_t>(string, len));
280
+ MatchStaticSlice(hash, std::pair<const char*, size_t>(buf, len));
282
281
  if (static_slice) {
283
282
  *this = *static_slice;
284
283
  } else {
285
284
  *this = grpc_core::InternedSlice(FindOrCreateInternedSlice(
286
- hash, std::pair<const char*, size_t>(string, len)));
285
+ hash, std::pair<const char*, size_t>(buf, len)));
287
286
  }
288
287
  }
289
288