grpc 1.30.0 → 1.31.1

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

Potentially problematic release.


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

Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security.h +8 -0
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  6. data/include/grpc/impl/codegen/port_platform.h +0 -32
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  8. data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
  9. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  10. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  15. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  17. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  18. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
  20. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  27. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  28. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  29. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  30. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  31. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  32. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  33. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  34. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  35. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  36. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  37. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  38. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  39. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  40. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  41. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  42. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  43. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  44. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  45. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  46. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  47. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  48. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  49. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  50. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  51. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  52. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  53. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  54. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  55. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  56. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  57. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  58. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  59. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  61. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  62. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  63. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  64. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  65. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  66. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  70. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  71. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  72. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  76. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  77. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  87. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  88. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  89. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  90. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  91. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  95. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  96. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  97. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  101. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  102. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  103. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  104. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  106. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  107. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  108. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  109. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  110. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  112. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  113. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  114. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  115. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  116. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  117. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  118. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  119. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  120. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  121. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  122. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  123. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  124. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  125. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  126. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  127. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  128. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  129. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  130. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  131. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  132. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  133. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  134. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  135. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  136. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  137. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  141. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  142. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  143. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  144. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  145. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  146. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  147. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  148. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  149. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  150. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  151. data/src/core/lib/channel/channel_trace.cc +2 -6
  152. data/src/core/lib/channel/channelz.cc +5 -15
  153. data/src/core/lib/gpr/log_linux.cc +6 -8
  154. data/src/core/lib/gpr/log_posix.cc +6 -8
  155. data/src/core/lib/gpr/string.cc +10 -9
  156. data/src/core/lib/gpr/string.h +4 -2
  157. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  158. data/src/core/lib/http/httpcli.cc +13 -10
  159. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  160. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  161. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  162. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  163. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  164. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  165. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  166. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  167. data/src/core/lib/iomgr/iomgr.cc +10 -0
  168. data/src/core/lib/iomgr/iomgr.h +10 -0
  169. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  170. data/src/core/lib/iomgr/port.h +1 -21
  171. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  172. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  173. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  174. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  175. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  176. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  177. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  178. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  179. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  180. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  181. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  182. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  183. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  184. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  185. data/src/core/lib/iomgr/tcp_server.h +7 -5
  186. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  187. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  188. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  189. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  190. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  191. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  192. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  193. data/src/core/lib/iomgr/udp_server.cc +24 -23
  194. data/src/core/lib/iomgr/udp_server.h +5 -2
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  198. data/src/core/lib/json/json_reader.cc +20 -21
  199. data/src/core/lib/security/credentials/credentials.h +5 -3
  200. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  201. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  202. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  204. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  205. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  206. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  207. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  209. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  210. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  211. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  212. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  213. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  214. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  215. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  216. data/src/core/lib/security/transport/auth_filters.h +0 -5
  217. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  218. data/src/core/lib/security/util/json_util.cc +12 -13
  219. data/src/core/lib/slice/slice.cc +38 -1
  220. data/src/core/lib/slice/slice_internal.h +1 -0
  221. data/src/core/lib/surface/call.cc +40 -41
  222. data/src/core/lib/surface/completion_queue.cc +271 -14
  223. data/src/core/lib/surface/completion_queue.h +8 -0
  224. data/src/core/lib/surface/init.cc +2 -0
  225. data/src/core/lib/surface/server.cc +565 -632
  226. data/src/core/lib/surface/server.h +34 -12
  227. data/src/core/lib/surface/version.cc +2 -2
  228. data/src/core/lib/transport/transport.h +6 -0
  229. data/src/core/lib/uri/uri_parser.cc +8 -15
  230. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  232. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  233. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  234. data/src/core/tsi/ssl_transport_security.cc +108 -11
  235. data/src/core/tsi/ssl_transport_security.h +14 -2
  236. data/src/core/tsi/transport_security_interface.h +5 -0
  237. data/src/ruby/bin/math_services_pb.rb +4 -4
  238. data/src/ruby/ext/grpc/extconf.rb +5 -2
  239. data/src/ruby/ext/grpc/rb_call.c +3 -2
  240. data/src/ruby/ext/grpc/rb_call.h +4 -0
  241. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  242. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  243. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  244. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  245. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  246. data/src/ruby/lib/grpc/version.rb +1 -1
  247. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  248. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  249. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  250. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  251. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  252. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  253. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  254. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  255. data/src/ruby/spec/support/services.rb +10 -4
  256. data/src/ruby/spec/user_agent_spec.rb +74 -0
  257. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  258. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  259. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  269. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  270. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  271. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  272. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  282. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  283. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  284. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  285. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  286. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  288. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  289. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  303. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  305. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  306. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  307. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  308. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  309. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  310. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  311. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  312. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  313. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  314. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  315. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  316. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  317. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  318. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  319. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  320. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  321. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  322. data/third_party/re2/re2/bitmap256.h +117 -0
  323. data/third_party/re2/re2/bitstate.cc +385 -0
  324. data/third_party/re2/re2/compile.cc +1279 -0
  325. data/third_party/re2/re2/dfa.cc +2130 -0
  326. data/third_party/re2/re2/filtered_re2.cc +121 -0
  327. data/third_party/re2/re2/filtered_re2.h +109 -0
  328. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  329. data/third_party/re2/re2/nfa.cc +713 -0
  330. data/third_party/re2/re2/onepass.cc +623 -0
  331. data/third_party/re2/re2/parse.cc +2464 -0
  332. data/third_party/re2/re2/perl_groups.cc +119 -0
  333. data/third_party/re2/re2/pod_array.h +55 -0
  334. data/third_party/re2/re2/prefilter.cc +710 -0
  335. data/third_party/re2/re2/prefilter.h +108 -0
  336. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  337. data/third_party/re2/re2/prefilter_tree.h +139 -0
  338. data/third_party/re2/re2/prog.cc +988 -0
  339. data/third_party/re2/re2/prog.h +436 -0
  340. data/third_party/re2/re2/re2.cc +1362 -0
  341. data/third_party/re2/re2/re2.h +1002 -0
  342. data/third_party/re2/re2/regexp.cc +980 -0
  343. data/third_party/re2/re2/regexp.h +659 -0
  344. data/third_party/re2/re2/set.cc +154 -0
  345. data/third_party/re2/re2/set.h +80 -0
  346. data/third_party/re2/re2/simplify.cc +657 -0
  347. data/third_party/re2/re2/sparse_array.h +392 -0
  348. data/third_party/re2/re2/sparse_set.h +264 -0
  349. data/third_party/re2/re2/stringpiece.cc +65 -0
  350. data/third_party/re2/re2/stringpiece.h +210 -0
  351. data/third_party/re2/re2/tostring.cc +351 -0
  352. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  353. data/third_party/re2/re2/unicode_casefold.h +78 -0
  354. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  355. data/third_party/re2/re2/unicode_groups.h +67 -0
  356. data/third_party/re2/re2/walker-inl.h +246 -0
  357. data/third_party/re2/util/benchmark.h +156 -0
  358. data/third_party/re2/util/flags.h +26 -0
  359. data/third_party/re2/util/logging.h +109 -0
  360. data/third_party/re2/util/malloc_counter.h +19 -0
  361. data/third_party/re2/util/mix.h +41 -0
  362. data/third_party/re2/util/mutex.h +148 -0
  363. data/third_party/re2/util/pcre.cc +1025 -0
  364. data/third_party/re2/util/pcre.h +681 -0
  365. data/third_party/re2/util/rune.cc +260 -0
  366. data/third_party/re2/util/strutil.cc +149 -0
  367. data/third_party/re2/util/strutil.h +21 -0
  368. data/third_party/re2/util/test.h +50 -0
  369. data/third_party/re2/util/utf.h +44 -0
  370. data/third_party/re2/util/util.h +42 -0
  371. data/third_party/upb/upb/decode.c +467 -504
  372. data/third_party/upb/upb/encode.c +163 -121
  373. data/third_party/upb/upb/msg.c +130 -64
  374. data/third_party/upb/upb/msg.h +418 -14
  375. data/third_party/upb/upb/port_def.inc +35 -6
  376. data/third_party/upb/upb/port_undef.inc +8 -1
  377. data/third_party/upb/upb/table.c +53 -75
  378. data/third_party/upb/upb/table.int.h +11 -43
  379. data/third_party/upb/upb/upb.c +148 -124
  380. data/third_party/upb/upb/upb.h +65 -147
  381. data/third_party/upb/upb/upb.hpp +86 -0
  382. metadata +90 -30
  383. data/third_party/upb/upb/generated_util.h +0 -105
@@ -32,14 +32,36 @@ extern const grpc_channel_filter grpc_server_top_filter;
32
32
  /** Lightweight tracing of server channel state */
33
33
  extern grpc_core::TraceFlag grpc_server_channel_trace;
34
34
 
35
- /* Add a listener to the server: when the server starts, it will call start,
36
- and when it shuts down, it will call destroy */
35
+ namespace grpc_core {
36
+
37
+ /// Interface for listeners.
38
+ /// Implementations must override the Orphan() method, which should stop
39
+ /// listening and initiate destruction of the listener.
40
+ class ServerListenerInterface : public Orphanable {
41
+ public:
42
+ virtual ~ServerListenerInterface() = default;
43
+
44
+ /// Starts listening. This listener may refer to the pollset object beyond
45
+ /// this call, so it is a pointer rather than a reference.
46
+ virtual void Start(grpc_server* server,
47
+ const std::vector<grpc_pollset*>* pollsets) = 0;
48
+
49
+ /// Returns the channelz node for the listen socket, or null if not
50
+ /// supported.
51
+ virtual channelz::ListenSocketNode* channelz_listen_socket_node() const = 0;
52
+
53
+ /// Sets a closure to be invoked by the listener when its destruction
54
+ /// is complete.
55
+ virtual void SetOnDestroyDone(grpc_closure* on_destroy_done) = 0;
56
+ };
57
+
58
+ } // namespace grpc_core
59
+
60
+ /* Add a listener to the server: when the server starts, it will call Start(),
61
+ and when it shuts down, it will orphan the listener. */
37
62
  void grpc_server_add_listener(
38
- grpc_server* server, void* listener_arg,
39
- void (*start)(grpc_server* server, void* arg, grpc_pollset** pollsets,
40
- size_t npollsets),
41
- void (*destroy)(grpc_server* server, void* arg, grpc_closure* on_done),
42
- grpc_core::RefCountedPtr<grpc_core::channelz::ListenSocketNode> node);
63
+ grpc_server* server,
64
+ grpc_core::OrphanablePtr<grpc_core::ServerListenerInterface> listener);
43
65
 
44
66
  /* Setup a transport - creates a channel stack, binds the transport to the
45
67
  server */
@@ -57,12 +79,12 @@ const grpc_channel_args* grpc_server_get_channel_args(grpc_server* server);
57
79
 
58
80
  grpc_resource_user* grpc_server_get_default_resource_user(grpc_server* server);
59
81
 
60
- int grpc_server_has_open_connections(grpc_server* server);
82
+ bool grpc_server_has_open_connections(grpc_server* server);
61
83
 
62
- /* Do not call this before grpc_server_start. Returns the pollsets and the
63
- * number of pollsets via 'pollsets' and 'pollset_count'. */
64
- void grpc_server_get_pollsets(grpc_server* server, grpc_pollset*** pollsets,
65
- size_t* pollset_count);
84
+ // Do not call this before grpc_server_start. Returns the pollsets. The vector
85
+ // itself is immutable, but the pollsets inside are mutable. The result is valid
86
+ // for the lifetime of the server.
87
+ const std::vector<grpc_pollset*>& grpc_server_get_pollsets(grpc_server* server);
66
88
 
67
89
  namespace grpc_core {
68
90
 
@@ -23,6 +23,6 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
 
26
- const char* grpc_version_string(void) { return "10.0.0"; }
26
+ const char* grpc_version_string(void) { return "11.0.0"; }
27
27
 
28
- const char* grpc_g_stands_for(void) { return "gradius"; }
28
+ const char* grpc_g_stands_for(void) { return "galore"; }
@@ -242,6 +242,12 @@ struct grpc_transport_stream_op_batch_payload {
242
242
 
243
243
  struct {
244
244
  grpc_metadata_batch* send_trailing_metadata = nullptr;
245
+ // Set by the transport to true if the stream successfully wrote the
246
+ // trailing metadata. If this is not set but there was a send trailing
247
+ // metadata op present, this can indicate that a server call can be marked
248
+ // as a cancellation (since the stream was write-closed before status could
249
+ // be delivered).
250
+ bool* sent = nullptr;
245
251
  } send_trailing_metadata;
246
252
 
247
253
  struct {
@@ -22,10 +22,13 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <string>
26
+
27
+ #include "absl/strings/str_format.h"
28
+
25
29
  #include <grpc/slice_buffer.h>
26
30
  #include <grpc/support/alloc.h>
27
31
  #include <grpc/support/log.h>
28
- #include <grpc/support/string_util.h>
29
32
 
30
33
  #include "src/core/lib/gpr/string.h"
31
34
  #include "src/core/lib/slice/percent_encoding.h"
@@ -37,22 +40,12 @@
37
40
 
38
41
  static grpc_uri* bad_uri(const char* uri_text, size_t pos, const char* section,
39
42
  bool suppress_errors) {
40
- char* line_prefix;
41
- size_t pfx_len;
42
-
43
43
  if (!suppress_errors) {
44
- gpr_asprintf(&line_prefix, "bad uri.%s: '", section);
45
- pfx_len = strlen(line_prefix) + pos;
46
- gpr_log(GPR_ERROR, "%s%s'", line_prefix, uri_text);
47
- gpr_free(line_prefix);
48
-
49
- line_prefix = static_cast<char*>(gpr_malloc(pfx_len + 1));
50
- memset(line_prefix, ' ', pfx_len);
51
- line_prefix[pfx_len] = 0;
52
- gpr_log(GPR_ERROR, "%s^ here", line_prefix);
53
- gpr_free(line_prefix);
44
+ std::string line_prefix = absl::StrFormat("bad uri.%s: '", section);
45
+ gpr_log(GPR_ERROR, "%s%s'", line_prefix.c_str(), uri_text);
46
+ size_t pfx_len = line_prefix.size() + pos;
47
+ gpr_log(GPR_ERROR, "%s^ here", std::string(pfx_len, ' ').c_str());
54
48
  }
55
-
56
49
  return nullptr;
57
50
  }
58
51
 
@@ -64,6 +64,8 @@ void grpc_max_age_filter_init(void);
64
64
  void grpc_max_age_filter_shutdown(void);
65
65
  void grpc_message_size_filter_init(void);
66
66
  void grpc_message_size_filter_shutdown(void);
67
+ void grpc_service_config_channel_arg_filter_init(void);
68
+ void grpc_service_config_channel_arg_filter_shutdown(void);
67
69
  void grpc_client_authority_filter_init(void);
68
70
  void grpc_client_authority_filter_shutdown(void);
69
71
  void grpc_workaround_cronet_compression_filter_init(void);
@@ -114,6 +116,8 @@ void grpc_register_built_in_plugins(void) {
114
116
  grpc_max_age_filter_shutdown);
115
117
  grpc_register_plugin(grpc_message_size_filter_init,
116
118
  grpc_message_size_filter_shutdown);
119
+ grpc_register_plugin(grpc_service_config_channel_arg_filter_init,
120
+ grpc_service_config_channel_arg_filter_shutdown);
117
121
  grpc_register_plugin(grpc_client_authority_filter_init,
118
122
  grpc_client_authority_filter_shutdown);
119
123
  grpc_register_plugin(grpc_workaround_cronet_compression_filter_init,
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include "src/core/tsi/alts/handshaker/alts_handshaker_client.h"
24
24
 
25
+ #include "upb/upb.hpp"
26
+
25
27
  #include <grpc/byte_buffer.h>
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/log.h>
@@ -261,7 +263,13 @@ void alts_handshaker_client_handle_response(alts_handshaker_client* c,
261
263
  }
262
264
  tsi_handshaker_result* result = nullptr;
263
265
  if (is_handshake_finished_properly(resp)) {
264
- alts_tsi_handshaker_result_create(resp, client->is_client, &result);
266
+ tsi_result status =
267
+ alts_tsi_handshaker_result_create(resp, client->is_client, &result);
268
+ if (status != TSI_OK) {
269
+ gpr_log(GPR_ERROR, "alts_tsi_handshaker_result_create() failed");
270
+ handle_response_done(client, status, nullptr, 0, nullptr);
271
+ return;
272
+ }
265
273
  alts_tsi_handshaker_result_set_unused_bytes(
266
274
  result, &client->recv_bytes,
267
275
  grpc_gcp_HandshakerResp_bytes_consumed(resp));
@@ -549,17 +557,12 @@ static grpc_byte_buffer* get_serialized_start_server(
549
557
  grpc_gcp_HandshakerReq_mutable_server_start(req, arena.ptr());
550
558
  grpc_gcp_StartServerHandshakeReq_add_application_protocols(
551
559
  start_server, upb_strview_makez(ALTS_APPLICATION_PROTOCOL), arena.ptr());
552
- grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry* param =
553
- grpc_gcp_StartServerHandshakeReq_add_handshake_parameters(start_server,
554
- arena.ptr());
555
- grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_set_key(
556
- param, grpc_gcp_ALTS);
557
560
  grpc_gcp_ServerHandshakeParameters* value =
558
561
  grpc_gcp_ServerHandshakeParameters_new(arena.ptr());
559
562
  grpc_gcp_ServerHandshakeParameters_add_record_protocols(
560
563
  value, upb_strview_makez(ALTS_RECORD_PROTOCOL), arena.ptr());
561
- grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_set_value(param,
562
- value);
564
+ grpc_gcp_StartServerHandshakeReq_handshake_parameters_set(
565
+ start_server, grpc_gcp_ALTS, value, arena.ptr());
563
566
  grpc_gcp_StartServerHandshakeReq_set_in_bytes(
564
567
  start_server, upb_strview_make(reinterpret_cast<const char*>(
565
568
  GRPC_SLICE_START_PTR(*bytes_received)),
@@ -661,11 +664,18 @@ static void handshaker_client_destruct(alts_handshaker_client* c) {
661
664
  // TODO(apolcyn): we could remove this indirection and call
662
665
  // grpc_call_unref inline if there was an internal variant of
663
666
  // grpc_call_unref that didn't need to flush an ExecCtx.
664
- grpc_core::ExecCtx::Run(
665
- DEBUG_LOCATION,
666
- GRPC_CLOSURE_CREATE(handshaker_call_unref, client->call,
667
- grpc_schedule_on_exec_ctx),
668
- GRPC_ERROR_NONE);
667
+ if (grpc_core::ExecCtx::Get() == nullptr) {
668
+ // Unref handshaker call if there is no exec_ctx, e.g., in the case of
669
+ // Envoy ALTS transport socket.
670
+ grpc_call_unref(client->call);
671
+ } else {
672
+ // Using existing exec_ctx to unref handshaker call.
673
+ grpc_core::ExecCtx::Run(
674
+ DEBUG_LOCATION,
675
+ GRPC_CLOSURE_CREATE(handshaker_call_unref, client->call,
676
+ grpc_schedule_on_exec_ctx),
677
+ GRPC_ERROR_NONE);
678
+ }
669
679
  }
670
680
  }
671
681
 
@@ -24,6 +24,8 @@
24
24
  #include <stdlib.h>
25
25
  #include <string.h>
26
26
 
27
+ #include "upb/upb.hpp"
28
+
27
29
  #include <grpc/support/alloc.h>
28
30
  #include <grpc/support/log.h>
29
31
  #include <grpc/support/string_util.h>
@@ -20,6 +20,8 @@
20
20
 
21
21
  #include "src/core/tsi/alts/handshaker/transport_security_common_api.h"
22
22
 
23
+ #include "upb/upb.hpp"
24
+
23
25
  bool grpc_gcp_rpc_protocol_versions_set_max(
24
26
  grpc_gcp_rpc_protocol_versions* versions, uint32_t max_major,
25
27
  uint32_t max_minor) {
@@ -33,6 +33,8 @@
33
33
  #include <sys/socket.h>
34
34
  #endif
35
35
 
36
+ #include <string>
37
+
36
38
  #include <grpc/grpc_security.h>
37
39
  #include <grpc/support/alloc.h>
38
40
  #include <grpc/support/log.h>
@@ -49,6 +51,7 @@ extern "C" {
49
51
  #include <openssl/engine.h>
50
52
  #include <openssl/err.h>
51
53
  #include <openssl/ssl.h>
54
+ #include <openssl/tls1.h>
52
55
  #include <openssl/x509.h>
53
56
  #include <openssl/x509v3.h>
54
57
  }
@@ -888,6 +891,50 @@ static int NullVerifyCallback(int /*preverify_ok*/, X509_STORE_CTX* /*ctx*/) {
888
891
  return 1;
889
892
  }
890
893
 
894
+ // Sets the min and max TLS version of |ssl_context| to |min_tls_version| and
895
+ // |max_tls_version|, respectively. Calling this method is a no-op when using
896
+ // OpenSSL versions < 1.1.
897
+ static tsi_result tsi_set_min_and_max_tls_versions(
898
+ SSL_CTX* ssl_context, tsi_tls_version min_tls_version,
899
+ tsi_tls_version max_tls_version) {
900
+ if (ssl_context == nullptr) {
901
+ gpr_log(GPR_INFO,
902
+ "Invalid nullptr argument to |tsi_set_min_and_max_tls_versions|.");
903
+ return TSI_INVALID_ARGUMENT;
904
+ }
905
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000
906
+ // Set the min TLS version of the SSL context.
907
+ switch (min_tls_version) {
908
+ case tsi_tls_version::TSI_TLS1_2:
909
+ SSL_CTX_set_min_proto_version(ssl_context, TLS1_2_VERSION);
910
+ break;
911
+ #if defined(TLS1_3_VERSION)
912
+ case tsi_tls_version::TSI_TLS1_3:
913
+ SSL_CTX_set_min_proto_version(ssl_context, TLS1_3_VERSION);
914
+ break;
915
+ #endif
916
+ default:
917
+ gpr_log(GPR_INFO, "TLS version is not supported.");
918
+ return TSI_FAILED_PRECONDITION;
919
+ }
920
+ // Set the max TLS version of the SSL context.
921
+ switch (max_tls_version) {
922
+ case tsi_tls_version::TSI_TLS1_2:
923
+ SSL_CTX_set_max_proto_version(ssl_context, TLS1_2_VERSION);
924
+ break;
925
+ #if defined(TLS1_3_VERSION)
926
+ case tsi_tls_version::TSI_TLS1_3:
927
+ SSL_CTX_set_max_proto_version(ssl_context, TLS1_3_VERSION);
928
+ break;
929
+ #endif
930
+ default:
931
+ gpr_log(GPR_INFO, "TLS version is not supported.");
932
+ return TSI_FAILED_PRECONDITION;
933
+ }
934
+ #endif
935
+ return TSI_OK;
936
+ }
937
+
891
938
  /* --- tsi_ssl_root_certs_store methods implementation. ---*/
892
939
 
893
940
  tsi_ssl_root_certs_store* tsi_ssl_root_certs_store_create(
@@ -1299,7 +1346,7 @@ static const tsi_handshaker_result_vtable handshaker_result_vtable = {
1299
1346
  };
1300
1347
 
1301
1348
  static tsi_result ssl_handshaker_result_create(
1302
- tsi_ssl_handshaker* handshaker, const unsigned char* unused_bytes,
1349
+ tsi_ssl_handshaker* handshaker, unsigned char* unused_bytes,
1303
1350
  size_t unused_bytes_size, tsi_handshaker_result** handshaker_result) {
1304
1351
  if (handshaker == nullptr || handshaker_result == nullptr ||
1305
1352
  (unused_bytes_size > 0 && unused_bytes == nullptr)) {
@@ -1313,11 +1360,8 @@ static tsi_result ssl_handshaker_result_create(
1313
1360
  handshaker->ssl = nullptr;
1314
1361
  result->network_io = handshaker->network_io;
1315
1362
  handshaker->network_io = nullptr;
1316
- if (unused_bytes_size > 0) {
1317
- result->unused_bytes =
1318
- static_cast<unsigned char*>(gpr_malloc(unused_bytes_size));
1319
- memcpy(result->unused_bytes, unused_bytes, unused_bytes_size);
1320
- }
1363
+ /* Transfer ownership of |unused_bytes| to the handshaker result. */
1364
+ result->unused_bytes = unused_bytes;
1321
1365
  result->unused_bytes_size = unused_bytes_size;
1322
1366
  *handshaker_result = &result->base;
1323
1367
  return TSI_OK;
@@ -1410,6 +1454,36 @@ static void ssl_handshaker_destroy(tsi_handshaker* self) {
1410
1454
  gpr_free(impl);
1411
1455
  }
1412
1456
 
1457
+ // Removes the bytes remaining in |impl->SSL|'s read BIO and writes them to
1458
+ // |bytes_remaining|.
1459
+ static tsi_result ssl_bytes_remaining(tsi_ssl_handshaker* impl,
1460
+ unsigned char** bytes_remaining,
1461
+ size_t* bytes_remaining_size) {
1462
+ if (impl == nullptr || bytes_remaining == nullptr ||
1463
+ bytes_remaining_size == nullptr) {
1464
+ return TSI_INVALID_ARGUMENT;
1465
+ }
1466
+ // Atempt to read all of the bytes in SSL's read BIO. These bytes should
1467
+ // contain application data records that were appended to a handshake record
1468
+ // containing the ClientFinished or ServerFinished message.
1469
+ size_t bytes_in_ssl = BIO_pending(SSL_get_rbio(impl->ssl));
1470
+ if (bytes_in_ssl == 0) return TSI_OK;
1471
+ *bytes_remaining = static_cast<uint8_t*>(gpr_malloc(bytes_in_ssl));
1472
+ int bytes_read = BIO_read(SSL_get_rbio(impl->ssl), *bytes_remaining,
1473
+ static_cast<int>(bytes_in_ssl));
1474
+ // If an unexpected number of bytes were read, return an error status and free
1475
+ // all of the bytes that were read.
1476
+ if (bytes_read < 0 || static_cast<size_t>(bytes_read) != bytes_in_ssl) {
1477
+ gpr_log(GPR_ERROR,
1478
+ "Failed to read the expected number of bytes from SSL object.");
1479
+ gpr_free(*bytes_remaining);
1480
+ *bytes_remaining = nullptr;
1481
+ return TSI_INTERNAL_ERROR;
1482
+ }
1483
+ *bytes_remaining_size = static_cast<size_t>(bytes_read);
1484
+ return TSI_OK;
1485
+ }
1486
+
1413
1487
  static tsi_result ssl_handshaker_next(
1414
1488
  tsi_handshaker* self, const unsigned char* received_bytes,
1415
1489
  size_t received_bytes_size, const unsigned char** bytes_to_send,
@@ -1450,9 +1524,19 @@ static tsi_result ssl_handshaker_next(
1450
1524
  if (ssl_handshaker_get_result(impl) == TSI_HANDSHAKE_IN_PROGRESS) {
1451
1525
  *handshaker_result = nullptr;
1452
1526
  } else {
1453
- size_t unused_bytes_size = received_bytes_size - bytes_consumed;
1454
- const unsigned char* unused_bytes =
1455
- unused_bytes_size == 0 ? nullptr : received_bytes + bytes_consumed;
1527
+ // Any bytes that remain in |impl->ssl|'s read BIO after the handshake is
1528
+ // complete must be extracted and set to the unused bytes of the handshaker
1529
+ // result. This indicates to the gRPC stack that there are bytes from the
1530
+ // peer that must be processed.
1531
+ unsigned char* unused_bytes = nullptr;
1532
+ size_t unused_bytes_size = 0;
1533
+ status = ssl_bytes_remaining(impl, &unused_bytes, &unused_bytes_size);
1534
+ if (status != TSI_OK) return status;
1535
+ if (unused_bytes_size > received_bytes_size) {
1536
+ gpr_log(GPR_ERROR, "More unused bytes than received bytes.");
1537
+ gpr_free(unused_bytes);
1538
+ return TSI_INTERNAL_ERROR;
1539
+ }
1456
1540
  status = ssl_handshaker_result_create(impl, unused_bytes, unused_bytes_size,
1457
1541
  handshaker_result);
1458
1542
  if (status == TSI_OK) {
@@ -1805,11 +1889,17 @@ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
1805
1889
  return TSI_INVALID_ARGUMENT;
1806
1890
  }
1807
1891
 
1808
- #if defined(OPENSSL_NO_TLS1_2_METHOD) || OPENSSL_API_COMPAT >= 0x10100000L
1892
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000
1809
1893
  ssl_context = SSL_CTX_new(TLS_method());
1810
1894
  #else
1811
1895
  ssl_context = SSL_CTX_new(TLSv1_2_method());
1812
1896
  #endif
1897
+ // TODO(mattstev): Re-enable TLS 1.3 by using |options.min_tls_version| and
1898
+ // |options.max_tls_version|, rather than hardcoding in TLS 1.2 as the min and
1899
+ // max.
1900
+ result = tsi_set_min_and_max_tls_versions(
1901
+ ssl_context, tsi_tls_version::TSI_TLS1_2, tsi_tls_version::TSI_TLS1_2);
1902
+ if (result != TSI_OK) return result;
1813
1903
  if (ssl_context == nullptr) {
1814
1904
  gpr_log(GPR_ERROR, "Could not create ssl context.");
1815
1905
  return TSI_INVALID_ARGUMENT;
@@ -1969,11 +2059,18 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
1969
2059
 
1970
2060
  for (i = 0; i < options->num_key_cert_pairs; i++) {
1971
2061
  do {
1972
- #if defined(OPENSSL_NO_TLS1_2_METHOD) || OPENSSL_API_COMPAT >= 0x10100000L
2062
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000
1973
2063
  impl->ssl_contexts[i] = SSL_CTX_new(TLS_method());
1974
2064
  #else
1975
2065
  impl->ssl_contexts[i] = SSL_CTX_new(TLSv1_2_method());
1976
2066
  #endif
2067
+ // TODO(mattstev): Re-enable TLS 1.3 by using |options.min_tls_version|
2068
+ // and |options.max_tls_version|, rather than hardcoding in TLS 1.2 as the
2069
+ // min and max.
2070
+ result = tsi_set_min_and_max_tls_versions(impl->ssl_contexts[i],
2071
+ tsi_tls_version::TSI_TLS1_2,
2072
+ tsi_tls_version::TSI_TLS1_2);
2073
+ if (result != TSI_OK) return result;
1977
2074
  if (impl->ssl_contexts[i] == nullptr) {
1978
2075
  gpr_log(GPR_ERROR, "Could not create ssl context.");
1979
2076
  result = TSI_OUT_OF_RESOURCES;
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <grpc/grpc_security_constants.h>
24
25
  #include "absl/strings/string_view.h"
25
26
  #include "src/core/tsi/transport_security_interface.h"
26
27
 
@@ -152,6 +153,10 @@ struct tsi_ssl_client_handshaker_options {
152
153
  /* skip server certificate verification. */
153
154
  bool skip_server_certificate_verification;
154
155
 
156
+ /* The min and max TLS versions that will be negotiated by the handshaker. */
157
+ tsi_tls_version min_tls_version;
158
+ tsi_tls_version max_tls_version;
159
+
155
160
  tsi_ssl_client_handshaker_options()
156
161
  : pem_key_cert_pair(nullptr),
157
162
  pem_root_certs(nullptr),
@@ -160,7 +165,9 @@ struct tsi_ssl_client_handshaker_options {
160
165
  alpn_protocols(nullptr),
161
166
  num_alpn_protocols(0),
162
167
  session_cache(nullptr),
163
- skip_server_certificate_verification(false) {}
168
+ skip_server_certificate_verification(false),
169
+ min_tls_version(tsi_tls_version::TSI_TLS1_2),
170
+ max_tls_version(tsi_tls_version::TSI_TLS1_3) {}
164
171
  };
165
172
 
166
173
  /* Creates a client handshaker factory.
@@ -276,6 +283,9 @@ struct tsi_ssl_server_handshaker_options {
276
283
  const char* session_ticket_key;
277
284
  /* session_ticket_key_size is a size of session ticket encryption key. */
278
285
  size_t session_ticket_key_size;
286
+ /* The min and max TLS versions that will be negotiated by the handshaker. */
287
+ tsi_tls_version min_tls_version;
288
+ tsi_tls_version max_tls_version;
279
289
 
280
290
  tsi_ssl_server_handshaker_options()
281
291
  : pem_key_cert_pairs(nullptr),
@@ -286,7 +296,9 @@ struct tsi_ssl_server_handshaker_options {
286
296
  alpn_protocols(nullptr),
287
297
  num_alpn_protocols(0),
288
298
  session_ticket_key(nullptr),
289
- session_ticket_key_size(0) {}
299
+ session_ticket_key_size(0),
300
+ min_tls_version(tsi_tls_version::TSI_TLS1_2),
301
+ max_tls_version(tsi_tls_version::TSI_TLS1_3) {}
290
302
  };
291
303
 
292
304
  /* Creates a server handshaker factory.