grpc 1.28.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -23,12 +23,14 @@
23
23
 
24
24
  #include <stdbool.h>
25
25
 
26
+ #include "absl/strings/str_split.h"
27
+ #include "absl/strings/string_view.h"
28
+
26
29
  #include <grpc/grpc_security.h>
27
30
  #include <grpc/slice_buffer.h>
28
31
 
29
32
  #include "src/core/lib/gprpp/global_config.h"
30
33
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
- #include "src/core/lib/gprpp/string_view.h"
32
34
  #include "src/core/lib/iomgr/error.h"
33
35
  #include "src/core/lib/security/security_connector/security_connector.h"
34
36
  #include "src/core/lib/security/security_connector/ssl_utils_config.h"
@@ -45,17 +47,17 @@
45
47
  grpc_error* grpc_ssl_check_alpn(const tsi_peer* peer);
46
48
 
47
49
  /* Check peer name information returned from SSL handshakes. */
48
- grpc_error* grpc_ssl_check_peer_name(grpc_core::StringView peer_name,
50
+ grpc_error* grpc_ssl_check_peer_name(absl::string_view peer_name,
49
51
  const tsi_peer* peer);
50
52
  /* Compare targer_name information extracted from SSL security connectors. */
51
- int grpc_ssl_cmp_target_name(
52
- grpc_core::StringView target_name, grpc_core::StringView other_target_name,
53
- grpc_core::StringView overridden_target_name,
54
- grpc_core::StringView other_overridden_target_name);
53
+ int grpc_ssl_cmp_target_name(absl::string_view target_name,
54
+ absl::string_view other_target_name,
55
+ absl::string_view overridden_target_name,
56
+ absl::string_view other_overridden_target_name);
55
57
  /* Check the host that will be set for a call is acceptable.*/
56
- bool grpc_ssl_check_call_host(grpc_core::StringView host,
57
- grpc_core::StringView target_name,
58
- grpc_core::StringView overridden_target_name,
58
+ bool grpc_ssl_check_call_host(absl::string_view host,
59
+ absl::string_view target_name,
60
+ absl::string_view overridden_target_name,
59
61
  grpc_auth_context* auth_context,
60
62
  grpc_error** error);
61
63
  /* Return HTTP2-compliant cipher suites that gRPC accepts by default. */
@@ -101,7 +103,7 @@ tsi_peer grpc_shallow_peer_from_ssl_auth_context(
101
103
  const grpc_auth_context* auth_context);
102
104
  void grpc_shallow_peer_destruct(tsi_peer* peer);
103
105
  int grpc_ssl_host_matches_name(const tsi_peer* peer,
104
- grpc_core::StringView peer_name);
106
+ absl::string_view peer_name);
105
107
 
106
108
  /* --- Default SSL Root Store. --- */
107
109
  namespace grpc_core {
@@ -23,6 +23,8 @@
23
23
  #include <stdbool.h>
24
24
  #include <string.h>
25
25
 
26
+ #include "absl/strings/string_view.h"
27
+
26
28
  #include <grpc/grpc.h>
27
29
  #include <grpc/support/alloc.h>
28
30
  #include <grpc/support/log.h>
@@ -62,54 +64,67 @@ tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
62
64
 
63
65
  } // namespace
64
66
 
65
- /** -- Util function to fetch TLS server/channel credentials. -- */
66
67
  grpc_status_code TlsFetchKeyMaterials(
67
68
  const grpc_core::RefCountedPtr<grpc_tls_key_materials_config>&
68
69
  key_materials_config,
69
- const grpc_tls_credentials_options& options, bool server_config,
70
- grpc_ssl_certificate_config_reload_status* reload_status) {
70
+ const grpc_tls_credentials_options& options, bool is_server,
71
+ grpc_ssl_certificate_config_reload_status* status) {
71
72
  GPR_ASSERT(key_materials_config != nullptr);
73
+ GPR_ASSERT(status != nullptr);
72
74
  bool is_key_materials_empty =
73
75
  key_materials_config->pem_key_cert_pair_list().empty();
74
- if (options.credential_reload_config() == nullptr && is_key_materials_empty &&
75
- server_config) {
76
+ grpc_tls_credential_reload_config* credential_reload_config =
77
+ options.credential_reload_config();
78
+ /** If there are no key materials and no credential reload config and the
79
+ * caller is a server, then return an error. We do not require that a client
80
+ * always provision certificates. **/
81
+ if (credential_reload_config == nullptr && is_key_materials_empty &&
82
+ is_server) {
76
83
  gpr_log(GPR_ERROR,
77
84
  "Either credential reload config or key materials should be "
78
85
  "provisioned.");
79
86
  return GRPC_STATUS_FAILED_PRECONDITION;
80
87
  }
81
- grpc_status_code status = GRPC_STATUS_OK;
82
- /* Use credential reload config to fetch credentials. */
83
- if (options.credential_reload_config() != nullptr) {
88
+ grpc_status_code reload_status = GRPC_STATUS_OK;
89
+ /** Use |credential_reload_config| to update |key_materials_config|. **/
90
+ if (credential_reload_config != nullptr) {
84
91
  grpc_tls_credential_reload_arg* arg = new grpc_tls_credential_reload_arg();
85
92
  arg->key_materials_config = key_materials_config.get();
86
- int result = options.credential_reload_config()->Schedule(arg);
93
+ arg->error_details = new grpc_tls_error_details();
94
+ int result = credential_reload_config->Schedule(arg);
87
95
  if (result) {
88
- /* Do not support async credential reload. */
96
+ /** Credential reloading is performed async. This is not yet supported.
97
+ * **/
89
98
  gpr_log(GPR_ERROR, "Async credential reload is unsupported now.");
90
- status =
99
+ *status = GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
100
+ reload_status =
91
101
  is_key_materials_empty ? GRPC_STATUS_UNIMPLEMENTED : GRPC_STATUS_OK;
92
102
  } else {
93
- GPR_ASSERT(reload_status != nullptr);
94
- *reload_status = arg->status;
103
+ /** Credential reloading is performed sync. **/
104
+ *status = arg->status;
95
105
  if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED) {
96
106
  /* Key materials is not empty. */
97
107
  gpr_log(GPR_DEBUG, "Credential does not change after reload.");
98
108
  } else if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL) {
99
109
  gpr_log(GPR_ERROR, "Credential reload failed with an error:");
100
110
  if (arg->error_details != nullptr) {
101
- gpr_log(GPR_ERROR, "%s", arg->error_details);
111
+ gpr_log(GPR_ERROR, "%s", arg->error_details->error_details().c_str());
102
112
  }
103
- status = is_key_materials_empty ? GRPC_STATUS_INTERNAL : GRPC_STATUS_OK;
113
+ reload_status =
114
+ is_key_materials_empty ? GRPC_STATUS_INTERNAL : GRPC_STATUS_OK;
104
115
  }
105
116
  }
106
- gpr_free((void*)arg->error_details);
117
+ delete arg->error_details;
118
+ /** If the credential reload config was constructed via a wrapped language,
119
+ * then |arg->context| and |arg->destroy_context| will not be nullptr. In
120
+ * this case, we must destroy |arg->context|, which stores the wrapped
121
+ * language-version of the credential reload arg. **/
107
122
  if (arg->destroy_context != nullptr) {
108
123
  arg->destroy_context(arg->context);
109
124
  }
110
125
  delete arg;
111
126
  }
112
- return status;
127
+ return reload_status;
113
128
  }
114
129
 
115
130
  grpc_error* TlsCheckHostName(const char* peer_name, const tsi_peer* peer) {
@@ -131,15 +146,14 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector(
131
146
  : grpc_channel_security_connector(GRPC_SSL_URL_SCHEME,
132
147
  std::move(channel_creds),
133
148
  std::move(request_metadata_creds)),
134
- overridden_target_name_(overridden_target_name == nullptr
135
- ? nullptr
136
- : gpr_strdup(overridden_target_name)) {
149
+ overridden_target_name_(
150
+ overridden_target_name == nullptr ? "" : overridden_target_name) {
137
151
  key_materials_config_ = grpc_tls_key_materials_config_create()->Ref();
138
152
  check_arg_ = ServerAuthorizationCheckArgCreate(this);
139
- grpc_core::StringView host;
140
- grpc_core::StringView port;
153
+ absl::string_view host;
154
+ absl::string_view port;
141
155
  grpc_core::SplitHostPort(target_name, &host, &port);
142
- target_name_ = grpc_core::StringViewToCString(host);
156
+ target_name_ = std::string(host);
143
157
  }
144
158
 
145
159
  TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
@@ -163,8 +177,8 @@ void TlsChannelSecurityConnector::add_handshakers(
163
177
  tsi_handshaker* tsi_hs = nullptr;
164
178
  tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
165
179
  client_handshaker_factory_,
166
- overridden_target_name_ != nullptr ? overridden_target_name_.get()
167
- : target_name_.get(),
180
+ overridden_target_name_.empty() ? target_name_.c_str()
181
+ : overridden_target_name_.c_str(),
168
182
  &tsi_hs);
169
183
  if (result != TSI_OK) {
170
184
  gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
@@ -179,9 +193,9 @@ void TlsChannelSecurityConnector::check_peer(
179
193
  tsi_peer peer, grpc_endpoint* /*ep*/,
180
194
  grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
181
195
  grpc_closure* on_peer_checked) {
182
- const char* target_name = overridden_target_name_ != nullptr
183
- ? overridden_target_name_.get()
184
- : target_name_.get();
196
+ const char* target_name = overridden_target_name_.empty()
197
+ ? target_name_.c_str()
198
+ : overridden_target_name_.c_str();
185
199
  grpc_error* error = grpc_ssl_check_alpn(&peer);
186
200
  if (error != GRPC_ERROR_NONE) {
187
201
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, error);
@@ -258,16 +272,16 @@ int TlsChannelSecurityConnector::cmp(
258
272
  if (c != 0) {
259
273
  return c;
260
274
  }
261
- return grpc_ssl_cmp_target_name(target_name_.get(), other->target_name_.get(),
262
- overridden_target_name_.get(),
263
- other->overridden_target_name_.get());
275
+ return grpc_ssl_cmp_target_name(
276
+ target_name_.c_str(), other->target_name_.c_str(),
277
+ overridden_target_name_.c_str(), other->overridden_target_name_.c_str());
264
278
  }
265
279
 
266
280
  bool TlsChannelSecurityConnector::check_call_host(
267
- grpc_core::StringView host, grpc_auth_context* auth_context,
281
+ absl::string_view host, grpc_auth_context* auth_context,
268
282
  grpc_closure* on_call_host_checked, grpc_error** error) {
269
- return grpc_ssl_check_call_host(host, target_name_.get(),
270
- overridden_target_name_.get(), auth_context,
283
+ return grpc_ssl_check_call_host(host, target_name_.c_str(),
284
+ overridden_target_name_.c_str(), auth_context,
271
285
  error);
272
286
  }
273
287
 
@@ -334,17 +348,18 @@ grpc_security_status TlsChannelSecurityConnector::InitializeHandshakerFactory(
334
348
  static_cast<const TlsCredentials*>(channel_creds());
335
349
  grpc_tls_key_materials_config* key_materials_config =
336
350
  creds->options().key_materials_config();
337
- /* Copy key materials config from credential options. */
351
+ // key_materials_config_->set_key_materials will handle the copying of the key
352
+ // materials users provided
338
353
  if (key_materials_config != nullptr) {
339
- grpc_tls_key_materials_config::PemKeyCertPairList cert_pair_list =
340
- key_materials_config->pem_key_cert_pair_list();
341
- auto pem_root_certs = grpc_core::UniquePtr<char>(
342
- gpr_strdup(key_materials_config->pem_root_certs()));
343
- key_materials_config_->set_key_materials(std::move(pem_root_certs),
344
- std::move(cert_pair_list));
354
+ key_materials_config_->set_key_materials(
355
+ key_materials_config->pem_root_certs(),
356
+ key_materials_config->pem_key_cert_pair_list());
345
357
  }
346
358
  grpc_ssl_certificate_config_reload_status reload_status =
347
359
  GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
360
+ /** If |creds->options()| has a credential reload config, then the call to
361
+ * |TlsFetchKeyMaterials| will use it to update the root cert and
362
+ * pem-key-cert-pair list stored in |key_materials_config_|. **/
348
363
  if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
349
364
  &reload_status) != GRPC_STATUS_OK) {
350
365
  /* Raise an error if key materials are not populated. */
@@ -359,6 +374,9 @@ grpc_security_status TlsChannelSecurityConnector::RefreshHandshakerFactory() {
359
374
  static_cast<const TlsCredentials*>(channel_creds());
360
375
  grpc_ssl_certificate_config_reload_status reload_status =
361
376
  GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
377
+ /** If |creds->options()| has a credential reload config, then the call to
378
+ * |TlsFetchKeyMaterials| will use it to update the root cert and
379
+ * pem-key-cert-pair list stored in |key_materials_config_|. **/
362
380
  if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
363
381
  &reload_status) != GRPC_STATUS_OK) {
364
382
  return GRPC_SECURITY_ERROR;
@@ -390,14 +408,14 @@ grpc_error* TlsChannelSecurityConnector::ProcessServerAuthorizationCheckResult(
390
408
  gpr_asprintf(&msg,
391
409
  "Server authorization check is cancelled by the caller with "
392
410
  "error: %s",
393
- arg->error_details);
411
+ arg->error_details->error_details().c_str());
394
412
  error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
395
413
  } else if (arg->status == GRPC_STATUS_OK) {
396
414
  /* Server authorization check completed successfully but returned check
397
415
  * failure. */
398
416
  if (!arg->success) {
399
417
  gpr_asprintf(&msg, "Server authorization check failed with error: %s",
400
- arg->error_details);
418
+ arg->error_details->error_details().c_str());
401
419
  error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
402
420
  }
403
421
  /* Server authorization check did not complete correctly. */
@@ -405,7 +423,7 @@ grpc_error* TlsChannelSecurityConnector::ProcessServerAuthorizationCheckResult(
405
423
  gpr_asprintf(
406
424
  &msg,
407
425
  "Server authorization check did not finish correctly with error: %s",
408
- arg->error_details);
426
+ arg->error_details->error_details().c_str());
409
427
  error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
410
428
  }
411
429
  gpr_free(msg);
@@ -417,6 +435,7 @@ TlsChannelSecurityConnector::ServerAuthorizationCheckArgCreate(
417
435
  void* user_data) {
418
436
  grpc_tls_server_authorization_check_arg* arg =
419
437
  new grpc_tls_server_authorization_check_arg();
438
+ arg->error_details = new grpc_tls_error_details();
420
439
  arg->cb = ServerAuthorizationCheckDone;
421
440
  arg->cb_user_data = user_data;
422
441
  arg->status = GRPC_STATUS_OK;
@@ -431,7 +450,7 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckArgDestroy(
431
450
  gpr_free((void*)arg->target_name);
432
451
  gpr_free((void*)arg->peer_cert);
433
452
  if (arg->peer_cert_full_chain) gpr_free((void*)arg->peer_cert_full_chain);
434
- gpr_free((void*)arg->error_details);
453
+ delete arg->error_details;
435
454
  if (arg->destroy_context != nullptr) {
436
455
  arg->destroy_context(arg->context);
437
456
  }
@@ -539,15 +558,17 @@ grpc_security_status TlsServerSecurityConnector::InitializeHandshakerFactory() {
539
558
  grpc_tls_key_materials_config* key_materials_config =
540
559
  creds->options().key_materials_config();
541
560
  if (key_materials_config != nullptr) {
542
- grpc_tls_key_materials_config::PemKeyCertPairList cert_pair_list =
543
- key_materials_config->pem_key_cert_pair_list();
544
- auto pem_root_certs = grpc_core::UniquePtr<char>(
545
- gpr_strdup(key_materials_config->pem_root_certs()));
546
- key_materials_config_->set_key_materials(std::move(pem_root_certs),
547
- std::move(cert_pair_list));
561
+ key_materials_config_->set_key_materials(
562
+ key_materials_config->pem_root_certs(),
563
+ key_materials_config->pem_key_cert_pair_list());
548
564
  }
549
565
  grpc_ssl_certificate_config_reload_status reload_status =
550
566
  GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
567
+ /** If |creds->options()| has a credential reload config, then the call to
568
+ * |TlsFetchKeyMaterials| will use it to update the root cert and
569
+ * pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
570
+ * will return |GRPC_STATUS_OK| if |key_materials_config_| already has
571
+ * credentials, and an error code if not. **/
551
572
  if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
552
573
  &reload_status) != GRPC_STATUS_OK) {
553
574
  /* Raise an error if key materials are not populated. */
@@ -562,6 +583,11 @@ grpc_security_status TlsServerSecurityConnector::RefreshHandshakerFactory() {
562
583
  static_cast<const TlsServerCredentials*>(server_creds());
563
584
  grpc_ssl_certificate_config_reload_status reload_status =
564
585
  GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
586
+ /** If |creds->options()| has a credential reload config, then the call to
587
+ * |TlsFetchKeyMaterials| will use it to update the root cert and
588
+ * pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
589
+ * will return |GRPC_STATUS_OK| if |key_materials_config_| already has
590
+ * credentials, and an error code if not. **/
565
591
  if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
566
592
  &reload_status) != GRPC_STATUS_OK) {
567
593
  return GRPC_SECURITY_ERROR;
@@ -57,8 +57,7 @@ class TlsChannelSecurityConnector final
57
57
 
58
58
  int cmp(const grpc_security_connector* other_sc) const override;
59
59
 
60
- bool check_call_host(grpc_core::StringView host,
61
- grpc_auth_context* auth_context,
60
+ bool check_call_host(absl::string_view host, grpc_auth_context* auth_context,
62
61
  grpc_closure* on_call_host_checked,
63
62
  grpc_error** error) override;
64
63
 
@@ -98,8 +97,8 @@ class TlsChannelSecurityConnector final
98
97
 
99
98
  grpc_core::Mutex mu_;
100
99
  grpc_closure* on_peer_checked_;
101
- grpc_core::UniquePtr<char> target_name_;
102
- grpc_core::UniquePtr<char> overridden_target_name_;
100
+ std::string target_name_;
101
+ std::string overridden_target_name_;
103
102
  tsi_ssl_client_handshaker_factory* client_handshaker_factory_ = nullptr;
104
103
  grpc_tls_server_authorization_check_arg* check_arg_;
105
104
  grpc_core::RefCountedPtr<grpc_tls_key_materials_config> key_materials_config_;
@@ -145,10 +144,33 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
145
144
  };
146
145
 
147
146
  // ---- Functions below are exposed for testing only -----------------------
147
+
148
+ /** The |TlsFetchKeyMaterials| API ensures that |key_materials_config| has a
149
+ * non-empty pem-key-cert pair list. This is done as follows:
150
+ * - if |options| is equipped with a credential reload config, then this
151
+ * methods uses credential reloading to populate |key_materials_config|, and
152
+ * afterwards it populates |reload_status| with the status of this operation.
153
+ * In particular, any data stored in |key_materials_config| is overwritten.
154
+ * - if |options| has no credential reload config, then:
155
+ * - if |key_materials_config| already has a non-empty pem-key-cert pair
156
+ * list or is called by a client, then the method returns |GRPC_STATUS_OK|.
157
+ * - if |key_materials_config| has an empty pem-key-cert pair list and is
158
+ * called by a server, then the method return an error code.
159
+ *
160
+ * The arguments are detailed below:
161
+ * - key_materials_config: a key materials config that will be populated by the
162
+ * method on success; the caller should not pass in nullptr. Any data held by
163
+ * the config will be overwritten.
164
+ * - options: the TLS credentials options whose credential reloading config
165
+ * will be used to populate |key_materials_config|.
166
+ * - is_server: true denotes that this method is called by a server, and
167
+ * false denotes that this method is called by a client.
168
+ * - status: the status of the credential reloading after the method
169
+ * returns; the caller should not pass in nullptr. **/
148
170
  grpc_status_code TlsFetchKeyMaterials(
149
171
  const grpc_core::RefCountedPtr<grpc_tls_key_materials_config>&
150
172
  key_materials_config,
151
- const grpc_tls_credentials_options& options, bool server_config,
173
+ const grpc_tls_credentials_options& options, bool is_server,
152
174
  grpc_ssl_certificate_config_reload_status* status);
153
175
 
154
176
  // TlsCheckHostName checks if |peer_name| matches the identity information
@@ -379,8 +379,7 @@ static void client_auth_start_transport_stream_op_batch(
379
379
  GRPC_CALL_STACK_REF(calld->owning_call, "check_call_host");
380
380
  GRPC_CLOSURE_INIT(&calld->async_result_closure, on_host_checked, batch,
381
381
  grpc_schedule_on_exec_ctx);
382
- grpc_core::StringView call_host(
383
- grpc_core::StringViewFromSlice(calld->host));
382
+ absl::string_view call_host(grpc_core::StringViewFromSlice(calld->host));
384
383
  grpc_error* error = GRPC_ERROR_NONE;
385
384
  if (chand->security_connector->check_call_host(
386
385
  call_host, chand->auth_context.get(),
@@ -52,11 +52,10 @@ typedef struct slice_shard {
52
52
 
53
53
  static slice_shard g_shards[SHARD_COUNT];
54
54
 
55
- typedef struct {
55
+ struct static_metadata_hash_ent {
56
56
  uint32_t hash;
57
57
  uint32_t idx;
58
- } static_metadata_hash_ent;
59
-
58
+ };
60
59
  static static_metadata_hash_ent
61
60
  static_metadata_hash[4 * GRPC_STATIC_MDSTR_COUNT];
62
61
  static uint32_t max_static_metadata_hash_probe;
@@ -347,4 +347,18 @@ size_t grpc_slice_memory_usage(grpc_slice s);
347
347
  grpc_core::UnmanagedMemorySlice grpc_slice_sub_no_ref(
348
348
  const grpc_core::UnmanagedMemorySlice& source, size_t begin, size_t end);
349
349
 
350
+ namespace grpc_core {
351
+
352
+ struct SliceHash {
353
+ std::size_t operator()(const grpc_slice& slice) const {
354
+ return grpc_slice_hash_internal(slice);
355
+ }
356
+ };
357
+
358
+ } // namespace grpc_core
359
+
360
+ inline bool operator==(const grpc_slice& s1, const grpc_slice& s2) {
361
+ return grpc_slice_eq(s1, s2);
362
+ }
363
+
350
364
  #endif /* GRPC_CORE_LIB_SLICE_SLICE_INTERNAL_H */
@@ -23,6 +23,8 @@
23
23
 
24
24
  #include <cstring>
25
25
 
26
+ #include "absl/strings/string_view.h"
27
+
26
28
  #include <grpc/slice.h>
27
29
 
28
30
  #include "src/core/lib/gpr/murmur_hash.h"
@@ -186,6 +188,13 @@ struct InternedSlice : public ManagedMemorySlice {
186
188
  explicit InternedSlice(InternedSliceRefcount* s);
187
189
  };
188
190
 
191
+ // Converts grpc_slice to absl::string_view.
192
+ inline absl::string_view StringViewFromSlice(const grpc_slice& slice) {
193
+ return absl::string_view(
194
+ reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(slice)),
195
+ GRPC_SLICE_LENGTH(slice));
196
+ }
197
+
189
198
  } // namespace grpc_core
190
199
 
191
200
  #endif /* GRPC_CORE_LIB_SLICE_SLICE_UTILS_H */
@@ -22,73 +22,28 @@
22
22
  #include <string.h>
23
23
 
24
24
  #include <grpc/byte_buffer.h>
25
- #include <grpc/compression.h>
26
25
  #include <grpc/grpc.h>
27
26
  #include <grpc/slice_buffer.h>
28
27
  #include <grpc/support/alloc.h>
29
28
  #include <grpc/support/log.h>
30
29
 
31
- #include "src/core/lib/compression/message_compress.h"
32
30
  #include "src/core/lib/iomgr/exec_ctx.h"
33
31
  #include "src/core/lib/slice/slice_internal.h"
34
32
 
35
- static int is_compressed(grpc_byte_buffer* buffer) {
36
- switch (buffer->type) {
37
- case GRPC_BB_RAW:
38
- if (buffer->data.raw.compression == GRPC_COMPRESS_NONE) {
39
- return 0 /* GPR_FALSE */;
40
- }
41
- break;
42
- }
43
- return 1 /* GPR_TRUE */;
44
- }
45
-
46
33
  int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader,
47
34
  grpc_byte_buffer* buffer) {
48
- grpc_core::ExecCtx exec_ctx;
49
- grpc_slice_buffer decompressed_slices_buffer;
50
35
  reader->buffer_in = buffer;
51
36
  switch (reader->buffer_in->type) {
52
37
  case GRPC_BB_RAW:
53
- grpc_slice_buffer_init(&decompressed_slices_buffer);
54
- if (is_compressed(reader->buffer_in)) {
55
- if (grpc_msg_decompress(
56
-
57
- grpc_compression_algorithm_to_message_compression_algorithm(
58
- reader->buffer_in->data.raw.compression),
59
- &reader->buffer_in->data.raw.slice_buffer,
60
- &decompressed_slices_buffer) == 0) {
61
- gpr_log(GPR_ERROR,
62
- "Unexpected error decompressing data for algorithm with enum "
63
- "value '%d'.",
64
- reader->buffer_in->data.raw.compression);
65
- memset(reader, 0, sizeof(*reader));
66
- return 0;
67
- } else { /* all fine */
68
- reader->buffer_out =
69
- grpc_raw_byte_buffer_create(decompressed_slices_buffer.slices,
70
- decompressed_slices_buffer.count);
71
- }
72
- grpc_slice_buffer_destroy_internal(&decompressed_slices_buffer);
73
- } else { /* not compressed, use the input buffer as output */
74
- reader->buffer_out = reader->buffer_in;
75
- }
38
+ reader->buffer_out = reader->buffer_in;
76
39
  reader->current.index = 0;
77
40
  break;
78
41
  }
79
-
80
42
  return 1;
81
43
  }
82
44
 
83
45
  void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader* reader) {
84
- switch (reader->buffer_in->type) {
85
- case GRPC_BB_RAW:
86
- /* keeping the same if-else structure as in the init function */
87
- if (is_compressed(reader->buffer_in)) {
88
- grpc_byte_buffer_destroy(reader->buffer_out);
89
- }
90
- break;
91
- }
46
+ reader->buffer_out = nullptr;
92
47
  }
93
48
 
94
49
  int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader* reader,