grpc 1.30.2 → 1.31.0.pre1

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

Potentially problematic release.


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

Files changed (317) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security_constants.h +3 -0
  4. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  5. data/include/grpc/impl/codegen/port_platform.h +0 -32
  6. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  7. data/src/core/ext/filters/client_channel/client_channel.cc +406 -265
  8. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  9. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  10. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  11. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  12. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  13. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  14. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  16. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  17. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +376 -68
  18. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  19. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  20. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  25. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  26. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  27. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  28. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  29. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  30. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  31. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  32. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  33. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  34. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  35. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  36. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  37. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  38. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  39. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  40. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  41. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  42. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  43. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  44. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  45. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  46. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  47. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  48. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  49. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  50. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  51. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  52. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  53. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  54. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  55. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  56. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  57. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  59. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  60. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  61. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  62. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  63. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  64. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  65. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  66. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  70. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  71. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  72. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  76. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  77. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  87. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  88. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  89. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  90. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  91. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  95. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  96. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  97. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  101. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  102. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  103. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  104. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  106. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  107. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  108. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  109. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  110. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  111. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  112. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  113. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  114. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  115. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  116. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  117. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  118. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  119. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  120. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  121. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  122. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  123. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  124. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  125. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  126. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  127. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  128. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  129. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  130. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  131. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  132. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  133. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  134. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  135. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  136. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  137. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  141. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  142. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  143. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  144. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  145. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  146. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  147. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  148. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  149. data/src/core/lib/channel/channel_trace.cc +2 -6
  150. data/src/core/lib/channel/channelz.cc +5 -15
  151. data/src/core/lib/gpr/log_linux.cc +6 -8
  152. data/src/core/lib/gpr/log_posix.cc +6 -8
  153. data/src/core/lib/gpr/string.cc +10 -9
  154. data/src/core/lib/gpr/string.h +4 -2
  155. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  156. data/src/core/lib/http/httpcli.cc +13 -10
  157. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  158. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  159. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  160. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  161. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  162. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  163. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  164. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  165. data/src/core/lib/iomgr/iomgr.cc +10 -0
  166. data/src/core/lib/iomgr/iomgr.h +10 -0
  167. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  168. data/src/core/lib/iomgr/port.h +1 -21
  169. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  170. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  171. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  172. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  173. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  174. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  175. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  176. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  177. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  178. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  179. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  180. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  181. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  182. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  183. data/src/core/lib/iomgr/tcp_server.h +7 -5
  184. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  185. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  186. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  187. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  188. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  189. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  190. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  191. data/src/core/lib/iomgr/udp_server.cc +24 -23
  192. data/src/core/lib/iomgr/udp_server.h +5 -2
  193. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  194. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  195. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  196. data/src/core/lib/json/json_reader.cc +20 -21
  197. data/src/core/lib/security/credentials/credentials.h +5 -3
  198. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  201. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  202. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  203. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  204. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  205. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  206. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  207. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  208. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  209. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  210. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  211. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  212. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  213. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  214. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  215. data/src/core/lib/security/util/json_util.cc +12 -13
  216. data/src/core/lib/slice/slice.cc +38 -1
  217. data/src/core/lib/slice/slice_internal.h +1 -0
  218. data/src/core/lib/surface/call.cc +40 -41
  219. data/src/core/lib/surface/completion_queue.cc +271 -14
  220. data/src/core/lib/surface/completion_queue.h +8 -0
  221. data/src/core/lib/surface/init.cc +2 -0
  222. data/src/core/lib/surface/server.cc +565 -632
  223. data/src/core/lib/surface/server.h +34 -12
  224. data/src/core/lib/surface/version.cc +2 -2
  225. data/src/core/lib/transport/transport.h +6 -0
  226. data/src/core/lib/uri/uri_parser.cc +8 -15
  227. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  228. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  229. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  230. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  231. data/src/core/tsi/ssl_transport_security.cc +102 -11
  232. data/src/core/tsi/ssl_transport_security.h +14 -2
  233. data/src/core/tsi/transport_security_interface.h +5 -0
  234. data/src/ruby/ext/grpc/extconf.rb +5 -2
  235. data/src/ruby/ext/grpc/rb_call.c +3 -2
  236. data/src/ruby/ext/grpc/rb_call.h +4 -0
  237. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  238. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  239. data/src/ruby/lib/grpc/version.rb +1 -1
  240. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  241. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  242. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  243. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  244. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  245. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  246. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  247. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  248. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  249. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  251. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  252. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  253. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  254. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  255. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  265. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  266. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  267. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  268. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  269. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  270. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  271. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  272. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  275. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  276. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  280. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  281. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  283. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  286. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  287. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  288. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  289. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  290. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  291. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  292. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  293. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  294. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  295. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  296. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  297. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  298. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  299. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  300. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  301. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  302. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  303. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  304. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  305. data/third_party/upb/upb/decode.c +467 -504
  306. data/third_party/upb/upb/encode.c +163 -121
  307. data/third_party/upb/upb/msg.c +130 -64
  308. data/third_party/upb/upb/msg.h +418 -14
  309. data/third_party/upb/upb/port_def.inc +35 -6
  310. data/third_party/upb/upb/port_undef.inc +8 -1
  311. data/third_party/upb/upb/table.c +53 -75
  312. data/third_party/upb/upb/table.int.h +11 -43
  313. data/third_party/upb/upb/upb.c +148 -124
  314. data/third_party/upb/upb/upb.h +65 -147
  315. data/third_party/upb/upb/upb.hpp +86 -0
  316. metadata +40 -37
  317. data/third_party/upb/upb/generated_util.h +0 -105
@@ -33,7 +33,10 @@ struct grpc_ssl_config {
33
33
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pair;
34
34
  char* pem_root_certs;
35
35
  verify_peer_options verify_options;
36
+ grpc_tls_version min_tls_version = grpc_tls_version::TLS1_2;
37
+ grpc_tls_version max_tls_version = grpc_tls_version::TLS1_3;
36
38
  };
39
+
37
40
  /* Creates an SSL channel_security_connector.
38
41
  - request_metadata_creds is the credentials object which metadata
39
42
  will be sent with each request. This parameter can be NULL.
@@ -62,6 +65,8 @@ struct grpc_ssl_server_config {
62
65
  char* pem_root_certs = nullptr;
63
66
  grpc_ssl_client_certificate_request_type client_certificate_request =
64
67
  GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE;
68
+ grpc_tls_version min_tls_version = grpc_tls_version::TLS1_2;
69
+ grpc_tls_version max_tls_version = grpc_tls_version::TLS1_3;
65
70
  };
66
71
  /* Creates an SSL server_security_connector.
67
72
  - config is the SSL config to be used for the SSL channel establishment.
@@ -20,12 +20,13 @@
20
20
 
21
21
  #include "src/core/lib/security/security_connector/ssl_utils.h"
22
22
 
23
+ #include <vector>
24
+
25
+ #include "absl/strings/str_cat.h"
26
+
23
27
  #include <grpc/slice_buffer.h>
24
28
  #include <grpc/support/alloc.h>
25
29
  #include <grpc/support/log.h>
26
- #include <grpc/support/string_util.h>
27
-
28
- #include <vector>
29
30
 
30
31
  #include "src/core/ext/transport/chttp2/alpn/alpn.h"
31
32
  #include "src/core/lib/channel/channel_args.h"
@@ -67,6 +68,9 @@ static const char* cipher_suites = nullptr;
67
68
  // All cipher suites for default are compliant with HTTP2.
68
69
  GPR_GLOBAL_CONFIG_DEFINE_STRING(
69
70
  grpc_ssl_cipher_suites,
71
+ "TLS_AES_128_GCM_SHA256:"
72
+ "TLS_AES_256_GCM_SHA384:"
73
+ "TLS_CHACHA20_POLY1305_SHA256:"
70
74
  "ECDHE-ECDSA-AES128-GCM-SHA256:"
71
75
  "ECDHE-ECDSA-AES256-GCM-SHA384:"
72
76
  "ECDHE-RSA-AES128-GCM-SHA256:"
@@ -134,6 +138,18 @@ grpc_get_tsi_client_certificate_request_type(
134
138
  }
135
139
  }
136
140
 
141
+ tsi_tls_version grpc_get_tsi_tls_version(grpc_tls_version tls_version) {
142
+ switch (tls_version) {
143
+ case grpc_tls_version::TLS1_2:
144
+ return tsi_tls_version::TSI_TLS1_2;
145
+ case grpc_tls_version::TLS1_3:
146
+ return tsi_tls_version::TSI_TLS1_3;
147
+ default:
148
+ gpr_log(GPR_INFO, "Falling back to TLS 1.2.");
149
+ return tsi_tls_version::TSI_TLS1_2;
150
+ }
151
+ }
152
+
137
153
  grpc_error* grpc_ssl_check_alpn(const tsi_peer* peer) {
138
154
  #if TSI_OPENSSL_ALPN_SUPPORT
139
155
  /* Check the ALPN if ALPN is supported. */
@@ -155,12 +171,9 @@ grpc_error* grpc_ssl_check_peer_name(absl::string_view peer_name,
155
171
  const tsi_peer* peer) {
156
172
  /* Check the peer name if specified. */
157
173
  if (!peer_name.empty() && !grpc_ssl_host_matches_name(peer, peer_name)) {
158
- char* msg;
159
- gpr_asprintf(&msg, "Peer name %s is not in peer certificate",
160
- peer_name.data());
161
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
162
- gpr_free(msg);
163
- return error;
174
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
175
+ absl::StrCat("Peer name ", peer_name, " is not in peer certificate")
176
+ .c_str());
164
177
  }
165
178
  return GRPC_ERROR_NONE;
166
179
  }
@@ -257,7 +270,8 @@ grpc_core::RefCountedPtr grpc_ssl_peer_to_auth_context(
257
270
  transport_security_type);
258
271
  const char* spiffe_data = nullptr;
259
272
  size_t spiffe_length = 0;
260
- int spiffe_id_count = 0;
273
+ int uri_count = 0;
274
+ bool has_spiffe_id = false;
261
275
  for (i = 0; i < peer->property_count; i++) {
262
276
  const tsi_peer_property* prop = &peer->properties[i];
263
277
  if (prop->name == nullptr) continue;
@@ -290,11 +304,12 @@ grpc_core::RefCountedPtr grpc_ssl_peer_to_auth_context(
290
304
  ctx.get(), GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME,
291
305
  prop->value.data, prop->value.length);
292
306
  } else if (strcmp(prop->name, TSI_X509_URI_PEER_PROPERTY) == 0) {
307
+ uri_count++;
293
308
  absl::string_view spiffe_id(prop->value.data, prop->value.length);
294
309
  if (IsSpiffeId(spiffe_id)) {
295
310
  spiffe_data = prop->value.data;
296
311
  spiffe_length = prop->value.length;
297
- spiffe_id_count += 1;
312
+ has_spiffe_id = true;
298
313
  }
299
314
  }
300
315
  }
@@ -302,16 +317,17 @@ grpc_core::RefCountedPtr grpc_ssl_peer_to_auth_context(
302
317
  GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
303
318
  ctx.get(), peer_identity_property_name) == 1);
304
319
  }
305
- // SPIFFE ID should be unique. If we find more than one SPIFFE IDs, we log
306
- // the error without returning the error.
307
- if (spiffe_id_count > 1) {
308
- gpr_log(GPR_INFO, "Invalid SPIFFE ID: SPIFFE ID should be unique.");
309
- }
310
- if (spiffe_id_count == 1) {
311
- GPR_ASSERT(spiffe_length > 0);
312
- GPR_ASSERT(spiffe_data != nullptr);
313
- grpc_auth_context_add_property(ctx.get(), GRPC_PEER_SPIFFE_ID_PROPERTY_NAME,
314
- spiffe_data, spiffe_length);
320
+ // A valid SPIFFE certificate can only have exact one URI SAN field.
321
+ if (has_spiffe_id) {
322
+ if (uri_count == 1) {
323
+ GPR_ASSERT(spiffe_length > 0);
324
+ GPR_ASSERT(spiffe_data != nullptr);
325
+ grpc_auth_context_add_property(ctx.get(),
326
+ GRPC_PEER_SPIFFE_ID_PROPERTY_NAME,
327
+ spiffe_data, spiffe_length);
328
+ } else {
329
+ gpr_log(GPR_INFO, "Invalid SPIFFE ID: multiple URI SANs.");
330
+ }
315
331
  }
316
332
  return ctx;
317
333
  }
@@ -373,8 +389,8 @@ void grpc_shallow_peer_destruct(tsi_peer* peer) {
373
389
 
374
390
  grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
375
391
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pair, const char* pem_root_certs,
376
- bool skip_server_certificate_verification,
377
- tsi_ssl_session_cache* ssl_session_cache,
392
+ bool skip_server_certificate_verification, tsi_tls_version min_tls_version,
393
+ tsi_tls_version max_tls_version, tsi_ssl_session_cache* ssl_session_cache,
378
394
  tsi_ssl_client_handshaker_factory** handshaker_factory) {
379
395
  const char* root_certs;
380
396
  const tsi_ssl_root_certs_store* root_store;
@@ -406,6 +422,8 @@ grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
406
422
  options.session_cache = ssl_session_cache;
407
423
  options.skip_server_certificate_verification =
408
424
  skip_server_certificate_verification;
425
+ options.min_tls_version = min_tls_version;
426
+ options.max_tls_version = max_tls_version;
409
427
  const tsi_result result =
410
428
  tsi_create_ssl_client_handshaker_factory_with_options(&options,
411
429
  handshaker_factory);
@@ -422,6 +440,7 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
422
440
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs, size_t num_key_cert_pairs,
423
441
  const char* pem_root_certs,
424
442
  grpc_ssl_client_certificate_request_type client_certificate_request,
443
+ tsi_tls_version min_tls_version, tsi_tls_version max_tls_version,
425
444
  tsi_ssl_server_handshaker_factory** handshaker_factory) {
426
445
  size_t num_alpn_protocols = 0;
427
446
  const char** alpn_protocol_strings =
@@ -435,6 +454,8 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
435
454
  options.cipher_suites = grpc_get_ssl_cipher_suites();
436
455
  options.alpn_protocols = alpn_protocol_strings;
437
456
  options.num_alpn_protocols = static_cast<uint16_t>(num_alpn_protocols);
457
+ options.min_tls_version = min_tls_version;
458
+ options.max_tls_version = max_tls_version;
438
459
  const tsi_result result =
439
460
  tsi_create_ssl_server_handshaker_factory_with_options(&options,
440
461
  handshaker_factory);
@@ -73,6 +73,9 @@ grpc_get_tsi_client_certificate_request_type(
73
73
  grpc_security_level grpc_tsi_security_level_string_to_enum(
74
74
  const char* security_level);
75
75
 
76
+ /* Map grpc_tls_version to tsi_tls_version. */
77
+ tsi_tls_version grpc_get_tsi_tls_version(grpc_tls_version tls_version);
78
+
76
79
  /* Map grpc_security_level enum to a string. */
77
80
  const char* grpc_security_level_to_string(grpc_security_level security_level);
78
81
 
@@ -86,14 +89,15 @@ const char** grpc_fill_alpn_protocol_strings(size_t* num_alpn_protocols);
86
89
  /* Initialize TSI SSL server/client handshaker factory. */
87
90
  grpc_security_status grpc_ssl_tsi_client_handshaker_factory_init(
88
91
  tsi_ssl_pem_key_cert_pair* key_cert_pair, const char* pem_root_certs,
89
- bool skip_server_certificate_verification,
90
- tsi_ssl_session_cache* ssl_session_cache,
92
+ bool skip_server_certificate_verification, tsi_tls_version min_tls_version,
93
+ tsi_tls_version max_tls_version, tsi_ssl_session_cache* ssl_session_cache,
91
94
  tsi_ssl_client_handshaker_factory** handshaker_factory);
92
95
 
93
96
  grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
94
97
  tsi_ssl_pem_key_cert_pair* key_cert_pairs, size_t num_key_cert_pairs,
95
98
  const char* pem_root_certs,
96
99
  grpc_ssl_client_certificate_request_type client_certificate_request,
100
+ tsi_tls_version min_tls_version, tsi_tls_version max_tls_version,
97
101
  tsi_ssl_server_handshaker_factory** handshaker_factory);
98
102
 
99
103
  /* Exposed for testing only. */
@@ -23,6 +23,7 @@
23
23
  #include <stdbool.h>
24
24
  #include <string.h>
25
25
 
26
+ #include "absl/strings/str_cat.h"
26
27
  #include "absl/strings/string_view.h"
27
28
 
28
29
  #include <grpc/grpc.h>
@@ -130,11 +131,9 @@ grpc_status_code TlsFetchKeyMaterials(
130
131
  grpc_error* TlsCheckHostName(const char* peer_name, const tsi_peer* peer) {
131
132
  /* Check the peer name if specified. */
132
133
  if (peer_name != nullptr && !grpc_ssl_host_matches_name(peer, peer_name)) {
133
- char* msg;
134
- gpr_asprintf(&msg, "Peer name %s is not in peer certificate", peer_name);
135
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
136
- gpr_free(msg);
137
- return error;
134
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
135
+ absl::StrCat("Peer name ", peer_name, " is not in peer certificate")
136
+ .c_str());
138
137
  }
139
138
  return GRPC_ERROR_NONE;
140
139
  }
@@ -279,7 +278,7 @@ int TlsChannelSecurityConnector::cmp(
279
278
 
280
279
  bool TlsChannelSecurityConnector::check_call_host(
281
280
  absl::string_view host, grpc_auth_context* auth_context,
282
- grpc_closure* on_call_host_checked, grpc_error** error) {
281
+ grpc_closure* /*on_call_host_checked*/, grpc_error** error) {
283
282
  return grpc_ssl_check_call_host(host, target_name_.c_str(),
284
283
  overridden_target_name_.c_str(), auth_context,
285
284
  error);
@@ -334,8 +333,10 @@ grpc_security_status TlsChannelSecurityConnector::ReplaceHandshakerFactory(
334
333
  key_materials_config_->pem_key_cert_pair_list());
335
334
  grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init(
336
335
  pem_key_cert_pair, key_materials_config_->pem_root_certs(),
337
- skip_server_certificate_verification, ssl_session_cache,
338
- &client_handshaker_factory_);
336
+ skip_server_certificate_verification,
337
+ grpc_get_tsi_tls_version(creds->options().min_tls_version()),
338
+ grpc_get_tsi_tls_version(creds->options().max_tls_version()),
339
+ ssl_session_cache, &client_handshaker_factory_);
339
340
  /* Free memory. */
340
341
  grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pair, 1);
341
342
  return status;
@@ -402,31 +403,30 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckDone(
402
403
  grpc_error* TlsChannelSecurityConnector::ProcessServerAuthorizationCheckResult(
403
404
  grpc_tls_server_authorization_check_arg* arg) {
404
405
  grpc_error* error = GRPC_ERROR_NONE;
405
- char* msg = nullptr;
406
406
  /* Server authorization check is cancelled by caller. */
407
407
  if (arg->status == GRPC_STATUS_CANCELLED) {
408
- gpr_asprintf(&msg,
409
- "Server authorization check is cancelled by the caller with "
410
- "error: %s",
411
- arg->error_details->error_details().c_str());
412
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
408
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
409
+ absl::StrCat("Server authorization check is cancelled by the caller "
410
+ "with error: ",
411
+ arg->error_details->error_details())
412
+ .c_str());
413
413
  } else if (arg->status == GRPC_STATUS_OK) {
414
414
  /* Server authorization check completed successfully but returned check
415
415
  * failure. */
416
416
  if (!arg->success) {
417
- gpr_asprintf(&msg, "Server authorization check failed with error: %s",
418
- arg->error_details->error_details().c_str());
419
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
417
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
418
+ absl::StrCat("Server authorization check failed with error: ",
419
+ arg->error_details->error_details())
420
+ .c_str());
420
421
  }
421
422
  /* Server authorization check did not complete correctly. */
422
423
  } else {
423
- gpr_asprintf(
424
- &msg,
425
- "Server authorization check did not finish correctly with error: %s",
426
- arg->error_details->error_details().c_str());
427
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
424
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
425
+ absl::StrCat(
426
+ "Server authorization check did not finish correctly with error: ",
427
+ arg->error_details->error_details())
428
+ .c_str());
428
429
  }
429
- gpr_free(msg);
430
430
  return error;
431
431
  }
432
432
 
@@ -544,7 +544,10 @@ grpc_security_status TlsServerSecurityConnector::ReplaceHandshakerFactory() {
544
544
  grpc_security_status status = grpc_ssl_tsi_server_handshaker_factory_init(
545
545
  pem_key_cert_pairs, num_key_cert_pairs,
546
546
  key_materials_config_->pem_root_certs(),
547
- creds->options().cert_request_type(), &server_handshaker_factory_);
547
+ creds->options().cert_request_type(),
548
+ grpc_get_tsi_tls_version(creds->options().min_tls_version()),
549
+ grpc_get_tsi_tls_version(creds->options().max_tls_version()),
550
+ &server_handshaker_factory_);
548
551
  /* Free memory. */
549
552
  grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pairs,
550
553
  num_key_cert_pairs);
@@ -22,6 +22,10 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <string>
26
+
27
+ #include "absl/strings/str_cat.h"
28
+
25
29
  #include <grpc/support/alloc.h>
26
30
  #include <grpc/support/log.h>
27
31
  #include <grpc/support/string_util.h>
@@ -331,18 +335,15 @@ static void on_host_checked(void* arg, grpc_error* error) {
331
335
  if (error == GRPC_ERROR_NONE) {
332
336
  send_security_metadata(elem, batch);
333
337
  } else {
334
- char* error_msg;
335
- char* host = grpc_slice_to_c_string(calld->host);
336
- gpr_asprintf(&error_msg, "Invalid host %s set in :authority metadata.",
337
- host);
338
- gpr_free(host);
338
+ std::string error_msg = absl::StrCat(
339
+ "Invalid host ", grpc_core::StringViewFromSlice(calld->host),
340
+ " set in :authority metadata.");
339
341
  grpc_transport_stream_op_batch_finish_with_failure(
340
342
  batch,
341
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg),
342
- GRPC_ERROR_INT_GRPC_STATUS,
343
- GRPC_STATUS_UNAUTHENTICATED),
343
+ grpc_error_set_int(
344
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str()),
345
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAUTHENTICATED),
344
346
  calld->call_combiner);
345
- gpr_free(error_msg);
346
347
  }
347
348
  GRPC_CALL_STACK_UNREF(calld->owning_call, "check_call_host");
348
349
  }
@@ -18,14 +18,16 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include "src/core/lib/iomgr/error.h"
22
- #include "src/core/lib/security/util/json_util.h"
23
-
24
21
  #include <string.h>
25
22
 
23
+ #include "absl/strings/str_cat.h"
24
+
26
25
  #include <grpc/support/log.h>
27
26
  #include <grpc/support/string_util.h>
28
27
 
28
+ #include "src/core/lib/iomgr/error.h"
29
+ #include "src/core/lib/security/util/json_util.h"
30
+
29
31
  const char* grpc_json_get_string_property(const grpc_core::Json& json,
30
32
  const char* prop_name,
31
33
  grpc_error** error) {
@@ -39,21 +41,18 @@ const char* grpc_json_get_string_property(const grpc_core::Json& json,
39
41
  auto it = json.object_value().find(prop_name);
40
42
  if (it == json.object_value().end()) {
41
43
  if (error != nullptr) {
42
- char* error_msg;
43
- gpr_asprintf(&error_msg, "Property %s not found in JSON object.",
44
- prop_name);
45
- *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
46
- gpr_free(error_msg);
44
+ *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
45
+ absl::StrCat("Property ", prop_name, " not found in JSON object.")
46
+ .c_str());
47
47
  }
48
48
  return nullptr;
49
49
  }
50
50
  if (it->second.type() != grpc_core::Json::Type::STRING) {
51
51
  if (error != nullptr) {
52
- char* error_msg;
53
- gpr_asprintf(&error_msg, "Property %s in JSON object is not a string.",
54
- prop_name);
55
- *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
56
- gpr_free(error_msg);
52
+ *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
53
+ absl::StrCat("Property ", prop_name,
54
+ " n JSON object is not a string.")
55
+ .c_str());
57
56
  }
58
57
  return nullptr;
59
58
  }
@@ -156,7 +156,7 @@ class NewWithLenSliceRefcount {
156
156
  /** grpc_slice_from_moved_(string|buffer) ref count .*/
157
157
  class MovedStringSliceRefCount {
158
158
  public:
159
- MovedStringSliceRefCount(grpc_core::UniquePtr<char>&& str)
159
+ explicit MovedStringSliceRefCount(grpc_core::UniquePtr<char>&& str)
160
160
  : base_(grpc_slice_refcount::Type::REGULAR, &refs_, Destroy, this,
161
161
  &base_),
162
162
  str_(std::move(str)) {}
@@ -173,6 +173,26 @@ class MovedStringSliceRefCount {
173
173
  grpc_core::UniquePtr<char> str_;
174
174
  };
175
175
 
176
+ // grpc_slice_from_cpp_string() ref count.
177
+ class MovedCppStringSliceRefCount {
178
+ public:
179
+ explicit MovedCppStringSliceRefCount(std::string&& str)
180
+ : base_(grpc_slice_refcount::Type::REGULAR, &refs_, Destroy, this,
181
+ &base_),
182
+ str_(std::move(str)) {}
183
+
184
+ grpc_slice_refcount* base_refcount() { return &base_; }
185
+
186
+ private:
187
+ static void Destroy(void* arg) {
188
+ delete static_cast<MovedCppStringSliceRefCount*>(arg);
189
+ }
190
+
191
+ grpc_slice_refcount base_;
192
+ grpc_core::RefCount refs_;
193
+ std::string str_;
194
+ };
195
+
176
196
  } // namespace grpc_core
177
197
 
178
198
  grpc_slice grpc_slice_new_with_len(void* p, size_t len,
@@ -232,6 +252,23 @@ grpc_slice grpc_slice_from_moved_string(grpc_core::UniquePtr p) {
232
252
  return grpc_slice_from_moved_buffer(std::move(p), len);
233
253
  }
234
254
 
255
+ grpc_slice grpc_slice_from_cpp_string(std::string str) {
256
+ grpc_slice slice;
257
+ if (str.size() <= sizeof(slice.data.inlined.bytes)) {
258
+ slice.refcount = nullptr;
259
+ slice.data.inlined.length = str.size();
260
+ memcpy(GRPC_SLICE_START_PTR(slice), str.data(), str.size());
261
+ } else {
262
+ slice.data.refcounted.bytes =
263
+ reinterpret_cast<uint8_t*>(const_cast<char*>(str.data()));
264
+ slice.data.refcounted.length = str.size();
265
+ slice.refcount =
266
+ (new grpc_core::MovedCppStringSliceRefCount(std::move(str)))
267
+ ->base_refcount();
268
+ }
269
+ return slice;
270
+ }
271
+
235
272
  namespace {
236
273
 
237
274
  class MallocRefCount {
@@ -338,6 +338,7 @@ inline uint32_t grpc_slice_hash_internal(const grpc_slice& s) {
338
338
  grpc_slice grpc_slice_from_moved_buffer(grpc_core::UniquePtr<char> p,
339
339
  size_t len);
340
340
  grpc_slice grpc_slice_from_moved_string(grpc_core::UniquePtr<char> p);
341
+ grpc_slice grpc_slice_from_cpp_string(std::string str);
341
342
 
342
343
  // Returns the memory used by this slice, not counting the slice structure
343
344
  // itself. This means that inlined and slices from static strings will return
@@ -24,6 +24,11 @@
24
24
  #include <stdlib.h>
25
25
  #include <string.h>
26
26
 
27
+ #include <string>
28
+
29
+ #include "absl/strings/str_cat.h"
30
+ #include "absl/strings/str_format.h"
31
+
27
32
  #include <grpc/compression.h>
28
33
  #include <grpc/grpc.h>
29
34
  #include <grpc/slice.h>
@@ -225,7 +230,9 @@ struct grpc_call {
225
230
  grpc_closure receiving_initial_metadata_ready;
226
231
  grpc_closure receiving_trailing_metadata_ready;
227
232
  uint32_t test_only_last_message_flags = 0;
228
- gpr_atm cancelled = 0;
233
+ // Status about operation of call
234
+ bool sent_server_trailing_metadata = false;
235
+ gpr_atm cancelled_with_error = 0;
229
236
 
230
237
  grpc_closure release_call;
231
238
 
@@ -686,7 +693,7 @@ static void done_termination(void* arg, grpc_error* /*error*/) {
686
693
  }
687
694
 
688
695
  static void cancel_with_error(grpc_call* c, grpc_error* error) {
689
- if (!gpr_atm_rel_cas(&c->cancelled, 0, 1)) {
696
+ if (!gpr_atm_rel_cas(&c->cancelled_with_error, 0, 1)) {
690
697
  GRPC_ERROR_UNREF(error);
691
698
  return;
692
699
  }
@@ -751,13 +758,13 @@ static void set_final_status(grpc_call* call, grpc_error* error) {
751
758
  }
752
759
  } else {
753
760
  *call->final_op.server.cancelled =
754
- error != GRPC_ERROR_NONE ||
755
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&call->status_error)) !=
756
- GRPC_ERROR_NONE;
761
+ error != GRPC_ERROR_NONE || !call->sent_server_trailing_metadata;
757
762
  grpc_core::channelz::ServerNode* channelz_server =
758
763
  grpc_server_get_channelz_node(call->final_op.server.server);
759
764
  if (channelz_server != nullptr) {
760
- if (*call->final_op.server.cancelled) {
765
+ if (*call->final_op.server.cancelled ||
766
+ reinterpret_cast<grpc_error*>(
767
+ gpr_atm_acq_load(&call->status_error)) != GRPC_ERROR_NONE) {
761
768
  channelz_server->RecordCallFailed();
762
769
  } else {
763
770
  channelz_server->RecordCallSucceeded();
@@ -1049,14 +1056,12 @@ static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
1049
1056
  grpc_get_status_code_from_metadata(b->idx.named.grpc_status->md);
1050
1057
  grpc_error* error = GRPC_ERROR_NONE;
1051
1058
  if (status_code != GRPC_STATUS_OK) {
1052
- char* peer_msg = nullptr;
1053
1059
  char* peer = grpc_call_get_peer(call);
1054
- gpr_asprintf(&peer_msg, "Error received from peer %s", peer);
1055
- error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(peer_msg),
1056
- GRPC_ERROR_INT_GRPC_STATUS,
1057
- static_cast<intptr_t>(status_code));
1060
+ error = grpc_error_set_int(
1061
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1062
+ absl::StrCat("Error received from peer ", peer).c_str()),
1063
+ GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
1058
1064
  gpr_free(peer);
1059
- gpr_free(peer_msg);
1060
1065
  }
1061
1066
  if (b->idx.named.grpc_message != nullptr) {
1062
1067
  error = grpc_error_set_str(
@@ -1367,49 +1372,41 @@ static void receiving_stream_ready_in_call_combiner(void* bctlp,
1367
1372
 
1368
1373
  static void GPR_ATTRIBUTE_NOINLINE
1369
1374
  handle_both_stream_and_msg_compression_set(grpc_call* call) {
1370
- char* error_msg = nullptr;
1371
- gpr_asprintf(&error_msg,
1372
- "Incoming stream has both stream compression (%d) and message "
1373
- "compression (%d).",
1374
- call->incoming_stream_compression_algorithm,
1375
- call->incoming_message_compression_algorithm);
1376
- gpr_log(GPR_ERROR, "%s", error_msg);
1377
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg);
1378
- gpr_free(error_msg);
1375
+ std::string error_msg = absl::StrFormat(
1376
+ "Incoming stream has both stream compression (%d) and message "
1377
+ "compression (%d).",
1378
+ call->incoming_stream_compression_algorithm,
1379
+ call->incoming_message_compression_algorithm);
1380
+ gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1381
+ cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1379
1382
  }
1380
1383
 
1381
1384
  static void GPR_ATTRIBUTE_NOINLINE
1382
1385
  handle_error_parsing_compression_algorithm(grpc_call* call) {
1383
- char* error_msg = nullptr;
1384
- gpr_asprintf(&error_msg,
1385
- "Error in incoming message compression (%d) or stream "
1386
- "compression (%d).",
1387
- call->incoming_stream_compression_algorithm,
1388
- call->incoming_message_compression_algorithm);
1389
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg);
1390
- gpr_free(error_msg);
1386
+ std::string error_msg = absl::StrFormat(
1387
+ "Error in incoming message compression (%d) or stream "
1388
+ "compression (%d).",
1389
+ call->incoming_stream_compression_algorithm,
1390
+ call->incoming_message_compression_algorithm);
1391
+ cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1391
1392
  }
1392
1393
 
1393
1394
  static void GPR_ATTRIBUTE_NOINLINE handle_invalid_compression(
1394
1395
  grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1395
- char* error_msg = nullptr;
1396
- gpr_asprintf(&error_msg, "Invalid compression algorithm value '%d'.",
1397
- compression_algorithm);
1398
- gpr_log(GPR_ERROR, "%s", error_msg);
1399
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg);
1400
- gpr_free(error_msg);
1396
+ std::string error_msg = absl::StrFormat(
1397
+ "Invalid compression algorithm value '%d'.", compression_algorithm);
1398
+ gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1399
+ cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1401
1400
  }
1402
1401
 
1403
1402
  static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_disabled(
1404
1403
  grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1405
- char* error_msg = nullptr;
1406
1404
  const char* algo_name = nullptr;
1407
1405
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1408
- gpr_asprintf(&error_msg, "Compression algorithm '%s' is disabled.",
1409
- algo_name);
1410
- gpr_log(GPR_ERROR, "%s", error_msg);
1411
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg);
1412
- gpr_free(error_msg);
1406
+ std::string error_msg =
1407
+ absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
1408
+ gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1409
+ cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1413
1410
  }
1414
1411
 
1415
1412
  static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_not_accepted(
@@ -1791,6 +1788,8 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1791
1788
  }
1792
1789
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1793
1790
  &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1791
+ stream_op_payload->send_trailing_metadata.sent =
1792
+ &call->sent_server_trailing_metadata;
1794
1793
  has_send_ops = true;
1795
1794
  break;
1796
1795
  }