grpc 1.24.0 → 1.25.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 (504) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -65,6 +65,10 @@ class SliceHashTable : public RefCounted<SliceHashTable<T>> {
65
65
  Entry* entries,
66
66
  ValueCmp value_cmp);
67
67
 
68
+ // Use Create function instead of using this directly.
69
+ SliceHashTable(size_t num_entries, Entry* entries, ValueCmp value_cmp);
70
+ virtual ~SliceHashTable();
71
+
68
72
  /// Returns the value from the table associated with \a key.
69
73
  /// Returns null if \a key is not found.
70
74
  const T* Get(const grpc_slice& key) const;
@@ -78,12 +82,6 @@ class SliceHashTable : public RefCounted<SliceHashTable<T>> {
78
82
  static int Cmp(const SliceHashTable& a, const SliceHashTable& b);
79
83
 
80
84
  private:
81
- GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
82
- GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
83
-
84
- SliceHashTable(size_t num_entries, Entry* entries, ValueCmp value_cmp);
85
- virtual ~SliceHashTable();
86
-
87
85
  void Add(const grpc_slice& key, T& value);
88
86
 
89
87
  // Default value comparison function, if none specified by caller.
@@ -50,10 +50,6 @@ typedef struct slice_shard {
50
50
  size_t capacity;
51
51
  } slice_shard;
52
52
 
53
- /* hash seed: decided at initialization time */
54
- uint32_t g_hash_seed;
55
- static int g_forced_hash_seed = 0;
56
-
57
53
  static slice_shard g_shards[SHARD_COUNT];
58
54
 
59
55
  typedef struct {
@@ -68,6 +64,10 @@ uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
68
64
 
69
65
  namespace grpc_core {
70
66
 
67
+ /* hash seed: decided at initialization time */
68
+ uint32_t g_hash_seed;
69
+ static bool g_forced_hash_seed = false;
70
+
71
71
  InternedSliceRefcount::~InternedSliceRefcount() {
72
72
  slice_shard* shard = &g_shards[SHARD_IDX(this->hash)];
73
73
  MutexLock lock(&shard->mu);
@@ -115,7 +115,7 @@ grpc_core::InternedSlice::InternedSlice(InternedSliceRefcount* s) {
115
115
 
116
116
  uint32_t grpc_slice_default_hash_impl(grpc_slice s) {
117
117
  return gpr_murmur_hash3(GRPC_SLICE_START_PTR(s), GRPC_SLICE_LENGTH(s),
118
- g_hash_seed);
118
+ grpc_core::g_hash_seed);
119
119
  }
120
120
 
121
121
  uint32_t grpc_static_slice_hash(grpc_slice s) {
@@ -159,20 +159,20 @@ grpc_slice grpc_slice_intern(grpc_slice slice) {
159
159
  }
160
160
 
161
161
  // Attempt to see if the provided slice or string matches a static slice.
162
- // SliceArgs... is either a const grpc_slice& or a string and length. In either
163
- // case, hash is the pre-computed hash value.
162
+ // SliceArgs is either a const grpc_slice& or const pair<const char*, size_t>&.
163
+ // In either case, hash is the pre-computed hash value.
164
164
  //
165
165
  // Returns: a matching static slice, or null.
166
- template <class... SliceArgs>
166
+ template <typename SliceArgs>
167
167
  static const grpc_core::StaticMetadataSlice* MatchStaticSlice(
168
- uint32_t hash, SliceArgs&&... args) {
168
+ uint32_t hash, const SliceArgs& args) {
169
169
  for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) {
170
170
  static_metadata_hash_ent ent =
171
171
  static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)];
172
172
  const grpc_core::StaticMetadataSlice* static_slice_table =
173
173
  grpc_static_slice_table();
174
174
  if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT &&
175
- static_slice_table[ent.idx].Equals(std::forward<SliceArgs>(args)...)) {
175
+ static_slice_table[ent.idx] == args) {
176
176
  return &static_slice_table[ent.idx];
177
177
  }
178
178
  }
@@ -182,8 +182,12 @@ static const grpc_core::StaticMetadataSlice* MatchStaticSlice(
182
182
  // Helper methods to enable us to select appropriately overloaded slice methods
183
183
  // whether we're dealing with a slice, or a buffer with length, when interning
184
184
  // strings. Helpers for FindOrCreateInternedSlice().
185
- static const void* GetBuffer(const void* buf, size_t len) { return buf; }
186
- static size_t GetLength(const void* buf, size_t len) { return len; }
185
+ static const char* GetBuffer(const std::pair<const char*, size_t>& buflen) {
186
+ return buflen.first;
187
+ }
188
+ static size_t GetLength(const std::pair<const char*, size_t>& buflen) {
189
+ return buflen.second;
190
+ }
187
191
  static const void* GetBuffer(const grpc_slice& slice) {
188
192
  return GRPC_SLICE_START_PTR(slice);
189
193
  }
@@ -192,19 +196,19 @@ static size_t GetLength(const grpc_slice& slice) {
192
196
  }
193
197
 
194
198
  // Creates an interned slice for a string that does not currently exist in the
195
- // intern table. SliceArgs... is either a const grpc_slice& or a string and
196
- // length. In either case, hash is the pre-computed hash value. We must already
197
- // hold the shard lock. Helper for FindOrCreateInternedSlice().
199
+ // intern table. SliceArgs is either a const grpc_slice& or a const
200
+ // pair<const char*, size_t>&. Hash is the pre-computed hash value. We must
201
+ // already hold the shard lock. Helper for FindOrCreateInternedSlice().
198
202
  //
199
203
  // Returns: a newly interned slice.
200
- template <class... SliceArgs>
204
+ template <typename SliceArgs>
201
205
  static InternedSliceRefcount* InternNewStringLocked(slice_shard* shard,
202
206
  size_t shard_idx,
203
207
  uint32_t hash,
204
- SliceArgs&&... args) {
208
+ const SliceArgs& args) {
205
209
  /* string data goes after the internal_string header */
206
- size_t len = GetLength(std::forward<SliceArgs>(args)...);
207
- const void* buffer = GetBuffer(std::forward<SliceArgs>(args)...);
210
+ size_t len = GetLength(args);
211
+ const void* buffer = GetBuffer(args);
208
212
  InternedSliceRefcount* s =
209
213
  static_cast<InternedSliceRefcount*>(gpr_malloc(sizeof(*s) + len));
210
214
  new (s) grpc_core::InternedSliceRefcount(len, hash, shard->strs[shard_idx]);
@@ -227,16 +231,15 @@ static InternedSliceRefcount* InternNewStringLocked(slice_shard* shard,
227
231
  // shard lock. Helper for FindOrCreateInternedSlice().
228
232
  //
229
233
  // Returns: a pre-existing matching static slice, or null.
230
- template <class... SliceArgs>
234
+ template <typename SliceArgs>
231
235
  static InternedSliceRefcount* MatchInternedSliceLocked(uint32_t hash,
232
236
  size_t idx,
233
- SliceArgs&&... args) {
237
+ const SliceArgs& args) {
234
238
  InternedSliceRefcount* s;
235
239
  slice_shard* shard = &g_shards[SHARD_IDX(hash)];
236
240
  /* search for an existing string */
237
241
  for (s = shard->strs[idx]; s; s = s->bucket_next) {
238
- if (s->hash == hash &&
239
- grpc_core::InternedSlice(s).Equals(std::forward<SliceArgs>(args)...)) {
242
+ if (s->hash == hash && grpc_core::InternedSlice(s) == args) {
240
243
  if (s->refcnt.RefIfNonZero()) {
241
244
  return s;
242
245
  }
@@ -248,22 +251,20 @@ static InternedSliceRefcount* MatchInternedSliceLocked(uint32_t hash,
248
251
  // Attempt to see if the provided slice or string matches an existing interned
249
252
  // slice, and failing that, create an interned slice with its contents. Returns
250
253
  // either the existing matching interned slice or the newly created one.
251
- // SliceArgs... is either a const grpc_slice& or a string and length. In either
252
- // case, hash is the pre-computed hash value. We do not hold the shard lock
253
- // here, but do take it.
254
+ // SliceArgs is either a const grpc_slice& or const pair<const char*, size_t>&.
255
+ // In either case, hash is the pre-computed hash value. We do not hold the
256
+ // shard lock here, but do take it.
254
257
  //
255
258
  // Returns: an interned slice, either pre-existing/matched or newly created.
256
- template <class... SliceArgs>
259
+ template <typename SliceArgs>
257
260
  static InternedSliceRefcount* FindOrCreateInternedSlice(uint32_t hash,
258
- SliceArgs&&... args) {
261
+ const SliceArgs& args) {
259
262
  slice_shard* shard = &g_shards[SHARD_IDX(hash)];
260
263
  gpr_mu_lock(&shard->mu);
261
264
  const size_t idx = TABLE_IDX(hash, shard->capacity);
262
- InternedSliceRefcount* s =
263
- MatchInternedSliceLocked(hash, idx, std::forward<SliceArgs>(args)...);
265
+ InternedSliceRefcount* s = MatchInternedSliceLocked(hash, idx, args);
264
266
  if (s == nullptr) {
265
- s = InternNewStringLocked(shard, idx, hash,
266
- std::forward<SliceArgs>(args)...);
267
+ s = InternNewStringLocked(shard, idx, hash, args);
267
268
  }
268
269
  gpr_mu_unlock(&shard->mu);
269
270
  return s;
@@ -277,12 +278,13 @@ grpc_core::ManagedMemorySlice::ManagedMemorySlice(const char* string,
277
278
  size_t len) {
278
279
  GPR_TIMER_SCOPE("grpc_slice_intern", 0);
279
280
  const uint32_t hash = gpr_murmur_hash3(string, len, g_hash_seed);
280
- const StaticMetadataSlice* static_slice = MatchStaticSlice(hash, string, len);
281
+ const StaticMetadataSlice* static_slice =
282
+ MatchStaticSlice(hash, std::pair<const char*, size_t>(string, len));
281
283
  if (static_slice) {
282
284
  *this = *static_slice;
283
285
  } else {
284
- *this =
285
- grpc_core::InternedSlice(FindOrCreateInternedSlice(hash, string, len));
286
+ *this = grpc_core::InternedSlice(FindOrCreateInternedSlice(
287
+ hash, std::pair<const char*, size_t>(string, len)));
286
288
  }
287
289
  }
288
290
 
@@ -303,13 +305,14 @@ grpc_core::ManagedMemorySlice::ManagedMemorySlice(const grpc_slice* slice_ptr) {
303
305
  }
304
306
 
305
307
  void grpc_test_only_set_slice_hash_seed(uint32_t seed) {
306
- g_hash_seed = seed;
307
- g_forced_hash_seed = 1;
308
+ grpc_core::g_hash_seed = seed;
309
+ grpc_core::g_forced_hash_seed = true;
308
310
  }
309
311
 
310
312
  void grpc_slice_intern_init(void) {
311
- if (!g_forced_hash_seed) {
312
- g_hash_seed = static_cast<uint32_t>(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
313
+ if (!grpc_core::g_forced_hash_seed) {
314
+ grpc_core::g_hash_seed =
315
+ static_cast<uint32_t>(gpr_now(GPR_CLOCK_REALTIME).tv_nsec);
313
316
  }
314
317
  for (size_t i = 0; i < SHARD_COUNT; i++) {
315
318
  slice_shard* shard = &g_shards[i];
@@ -36,7 +36,6 @@
36
36
  // Interned slices have specific fast-path operations for hashing. To inline
37
37
  // these operations, we need to forward declare them here.
38
38
  extern uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
39
- extern uint32_t g_hash_seed;
40
39
 
41
40
  // grpc_slice_refcount : A reference count for grpc_slice.
42
41
  //
@@ -259,7 +258,8 @@ inline uint32_t grpc_slice_refcount::Hash(const grpc_slice& slice) {
259
258
  break;
260
259
  }
261
260
  return gpr_murmur_hash3(grpc_refcounted_slice_data(slice),
262
- grpc_refcounted_slice_length(slice), g_hash_seed);
261
+ grpc_refcounted_slice_length(slice),
262
+ grpc_core::g_hash_seed);
263
263
  }
264
264
 
265
265
  inline const grpc_slice& grpc_slice_ref_internal(const grpc_slice& slice) {
@@ -327,7 +327,7 @@ inline uint32_t grpc_slice_hash_refcounted(const grpc_slice& s) {
327
327
 
328
328
  inline uint32_t grpc_slice_default_hash_internal(const grpc_slice& s) {
329
329
  return gpr_murmur_hash3(GRPC_SLICE_START_PTR(s), GRPC_SLICE_LENGTH(s),
330
- g_hash_seed);
330
+ grpc_core::g_hash_seed);
331
331
  }
332
332
 
333
333
  inline uint32_t grpc_slice_hash_internal(const grpc_slice& s) {
@@ -25,6 +25,12 @@
25
25
 
26
26
  #include <grpc/slice.h>
27
27
 
28
+ #include "src/core/lib/gpr/murmur_hash.h"
29
+
30
+ namespace grpc_core {
31
+ extern uint32_t g_hash_seed;
32
+ } // namespace grpc_core
33
+
28
34
  // When we compare two slices, and we know the latter is not inlined, we can
29
35
  // short circuit our comparison operator. We specifically use differs()
30
36
  // semantics instead of equals() semantics due to more favourable code
@@ -101,15 +107,16 @@ struct ManagedMemorySlice : public grpc_slice {
101
107
  explicit ManagedMemorySlice(const char* string);
102
108
  ManagedMemorySlice(const char* buf, size_t len);
103
109
  explicit ManagedMemorySlice(const grpc_slice* slice);
104
- bool Equals(const grpc_slice& other) const {
110
+ bool operator==(const grpc_slice& other) const {
105
111
  if (refcount == other.refcount) {
106
112
  return true;
107
113
  }
108
114
  return !grpc_slice_differs_refcounted(other, *this);
109
115
  }
110
- bool Equals(const char* buf, const size_t len) const {
111
- return data.refcounted.length == len && buf != nullptr &&
112
- memcmp(buf, data.refcounted.bytes, len) == 0;
116
+ bool operator!=(const grpc_slice& other) const { return !(*this == other); }
117
+ bool operator==(std::pair<const char*, size_t> buflen) const {
118
+ return data.refcounted.length == buflen.second && buflen.first != nullptr &&
119
+ memcmp(buflen.first, data.refcounted.bytes, buflen.second) == 0;
113
120
  }
114
121
  };
115
122
  struct UnmanagedMemorySlice : public grpc_slice {
@@ -150,6 +157,16 @@ struct ExternallyManagedSlice : public UnmanagedMemorySlice {
150
157
  data.refcounted.length = length;
151
158
  data.refcounted.bytes = bytes;
152
159
  }
160
+ bool operator==(const grpc_slice& other) const {
161
+ return data.refcounted.length == GRPC_SLICE_LENGTH(other) &&
162
+ memcmp(data.refcounted.bytes, GRPC_SLICE_START_PTR(other),
163
+ data.refcounted.length) == 0;
164
+ }
165
+ bool operator!=(const grpc_slice& other) const { return !(*this == other); }
166
+ uint32_t Hash() {
167
+ return gpr_murmur_hash3(data.refcounted.bytes, data.refcounted.length,
168
+ g_hash_seed);
169
+ }
153
170
  };
154
171
 
155
172
  struct StaticMetadataSlice : public ManagedMemorySlice {
@@ -44,6 +44,10 @@ class SliceWeakHashTable : public RefCounted<SliceWeakHashTable<T, Size>> {
44
44
  return MakeRefCounted<SliceWeakHashTable<T, Size>>();
45
45
  }
46
46
 
47
+ /// Use Create function instead of using this directly.
48
+ SliceWeakHashTable() = default;
49
+ ~SliceWeakHashTable() = default;
50
+
47
51
  /// Add a mapping from \a key to \a value, taking ownership of \a key. This
48
52
  /// operation will always succeed. It may discard older entries.
49
53
  void Add(const grpc_slice& key, T value) {
@@ -61,12 +65,6 @@ class SliceWeakHashTable : public RefCounted<SliceWeakHashTable<T, Size>> {
61
65
  }
62
66
 
63
67
  private:
64
- GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
65
- GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
66
-
67
- SliceWeakHashTable() = default;
68
- ~SliceWeakHashTable() = default;
69
-
70
68
  /// The type of the table "rows".
71
69
  class Entry {
72
70
  public:
@@ -1131,8 +1131,7 @@ static size_t batch_slot_for_op(grpc_op_type type) {
1131
1131
  }
1132
1132
 
1133
1133
  static batch_control* reuse_or_allocate_batch_control(grpc_call* call,
1134
- const grpc_op* ops,
1135
- size_t num_ops) {
1134
+ const grpc_op* ops) {
1136
1135
  size_t slot_idx = batch_slot_for_op(ops[0].op);
1137
1136
  batch_control** pslot = &call->active_batches[slot_idx];
1138
1137
  batch_control* bctl;
@@ -1268,6 +1267,7 @@ static void continue_receiving_slices(batch_control* bctl) {
1268
1267
  *call->receiving_buffer = nullptr;
1269
1268
  call->receiving_message = 0;
1270
1269
  finish_batch_step(bctl);
1270
+ GRPC_ERROR_UNREF(error);
1271
1271
  return;
1272
1272
  }
1273
1273
  } else {
@@ -1579,7 +1579,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1579
1579
  goto done;
1580
1580
  }
1581
1581
 
1582
- bctl = reuse_or_allocate_batch_control(call, ops, nops);
1582
+ bctl = reuse_or_allocate_batch_control(call, ops);
1583
1583
  if (bctl == nullptr) {
1584
1584
  return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1585
1585
  }
@@ -257,6 +257,13 @@ grpc_channel* grpc_channel_create(const char* target,
257
257
  get_default_authority(input_args);
258
258
  grpc_channel_args* args =
259
259
  build_channel_args(input_args, default_authority.get());
260
+ if (grpc_channel_stack_type_is_client(channel_stack_type)) {
261
+ auto channel_args_mutator =
262
+ grpc_channel_args_get_client_channel_creation_mutator();
263
+ if (channel_args_mutator != nullptr) {
264
+ args = channel_args_mutator(target, args, channel_stack_type);
265
+ }
266
+ }
260
267
  grpc_channel_stack_builder_set_channel_arguments(builder, args);
261
268
  grpc_channel_args_destroy(args);
262
269
  grpc_channel_stack_builder_set_target(builder, target);
@@ -210,14 +210,14 @@ struct cq_vtable {
210
210
 
211
211
  namespace {
212
212
 
213
- /* Queue that holds the cq_completion_events. Internally uses gpr_mpscq queue
214
- * (a lockfree multiproducer single consumer queue). It uses a queue_lock
215
- * to support multiple consumers.
213
+ /* Queue that holds the cq_completion_events. Internally uses
214
+ * MultiProducerSingleConsumerQueue (a lockfree multiproducer single consumer
215
+ * queue). It uses a queue_lock to support multiple consumers.
216
216
  * Only used in completion queues whose completion_type is GRPC_CQ_NEXT */
217
217
  class CqEventQueue {
218
218
  public:
219
- CqEventQueue() { gpr_mpscq_init(&queue_); }
220
- ~CqEventQueue() { gpr_mpscq_destroy(&queue_); }
219
+ CqEventQueue() = default;
220
+ ~CqEventQueue() = default;
221
221
 
222
222
  /* Note: The counter is not incremented/decremented atomically with push/pop.
223
223
  * The count is only eventually consistent */
@@ -232,7 +232,7 @@ class CqEventQueue {
232
232
  /* Spinlock to serialize consumers i.e pop() operations */
233
233
  gpr_spinlock queue_lock_ = GPR_SPINLOCK_INITIALIZER;
234
234
 
235
- gpr_mpscq queue_;
235
+ grpc_core::MultiProducerSingleConsumerQueue queue_;
236
236
 
237
237
  /* A lazy counter of number of items in the queue. This is NOT atomically
238
238
  incremented/decremented along with push/pop operations and hence is only
@@ -462,7 +462,8 @@ int grpc_completion_queue_thread_local_cache_flush(grpc_completion_queue* cq,
462
462
  }
463
463
 
464
464
  bool CqEventQueue::Push(grpc_cq_completion* c) {
465
- gpr_mpscq_push(&queue_, reinterpret_cast<gpr_mpscq_node*>(c));
465
+ queue_.Push(
466
+ reinterpret_cast<grpc_core::MultiProducerSingleConsumerQueue::Node*>(c));
466
467
  return num_queue_items_.FetchAdd(1, grpc_core::MemoryOrder::RELAXED) == 0;
467
468
  }
468
469
 
@@ -473,8 +474,7 @@ grpc_cq_completion* CqEventQueue::Pop() {
473
474
  GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES();
474
475
 
475
476
  bool is_empty = false;
476
- c = reinterpret_cast<grpc_cq_completion*>(
477
- gpr_mpscq_pop_and_check_end(&queue_, &is_empty));
477
+ c = reinterpret_cast<grpc_cq_completion*>(queue_.PopAndCheckEnd(&is_empty));
478
478
  gpr_spinlock_unlock(&queue_lock_);
479
479
 
480
480
  if (c == nullptr && !is_empty) {
@@ -1007,8 +1007,9 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
1007
1007
 
1008
1008
  if (cqd->pending_events.Load(grpc_core::MemoryOrder::ACQUIRE) == 0) {
1009
1009
  /* Before returning, check if the queue has any items left over (since
1010
- gpr_mpscq_pop() can sometimes return NULL even if the queue is not
1011
- empty. If so, keep retrying but do not return GRPC_QUEUE_SHUTDOWN */
1010
+ MultiProducerSingleConsumerQueue::Pop() can sometimes return NULL
1011
+ even if the queue is not empty. If so, keep retrying but do not
1012
+ return GRPC_QUEUE_SHUTDOWN */
1012
1013
  if (cqd->queue.num_items() > 0) {
1013
1014
  /* Go to the beginning of the loop. No point doing a poll because
1014
1015
  (cq->shutdown == true) is only possible when there is no pending
@@ -24,8 +24,9 @@
24
24
  #include <grpc/support/port_platform.h>
25
25
 
26
26
  #include <grpc/grpc.h>
27
+
27
28
  #include "src/core/lib/debug/trace.h"
28
- #include "src/core/lib/gprpp/abstract.h"
29
+ #include "src/core/lib/gprpp/manual_constructor.h"
29
30
  #include "src/core/lib/iomgr/pollset.h"
30
31
 
31
32
  /* These trace flags default to 1. The corresponding lines are only traced
@@ -36,7 +37,8 @@ extern grpc_core::DebugOnlyTraceFlag grpc_trace_pending_tags;
36
37
  extern grpc_core::DebugOnlyTraceFlag grpc_trace_cq_refcount;
37
38
 
38
39
  typedef struct grpc_cq_completion {
39
- gpr_mpscq_node node;
40
+ grpc_core::ManualConstructor<grpc_core::MultiProducerSingleConsumerQueue>
41
+ node;
40
42
 
41
43
  /** user supplied tag */
42
44
  void* tag;
@@ -73,6 +73,7 @@ static void do_basic_init(void) {
73
73
  g_shutting_down = false;
74
74
  grpc_register_built_in_plugins();
75
75
  grpc_cq_global_init();
76
+ grpc_core::grpc_executor_global_init();
76
77
  gpr_time_init();
77
78
  g_initializations = 0;
78
79
  }
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/surface/call.h"
33
33
  #include "src/core/lib/surface/channel.h"
34
34
  #include "src/core/lib/surface/lame_client.h"
35
+ #include "src/core/lib/transport/connectivity_state.h"
35
36
  #include "src/core/lib/transport/static_metadata.h"
36
37
 
37
38
  namespace grpc_core {
@@ -39,15 +40,19 @@ namespace grpc_core {
39
40
  namespace {
40
41
 
41
42
  struct CallData {
42
- grpc_core::CallCombiner* call_combiner;
43
+ CallCombiner* call_combiner;
43
44
  grpc_linked_mdelem status;
44
45
  grpc_linked_mdelem details;
45
- grpc_core::Atomic<bool> filled_metadata;
46
+ Atomic<bool> filled_metadata;
46
47
  };
47
48
 
48
49
  struct ChannelData {
50
+ ChannelData() : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {}
51
+
49
52
  grpc_status_code error_code;
50
53
  const char* error_message;
54
+ Mutex mu;
55
+ ConnectivityStateTracker state_tracker;
51
56
  };
52
57
 
53
58
  static void fill_metadata(grpc_call_element* elem, grpc_metadata_batch* mdb) {
@@ -94,10 +99,16 @@ static void lame_get_channel_info(grpc_channel_element* elem,
94
99
 
95
100
  static void lame_start_transport_op(grpc_channel_element* elem,
96
101
  grpc_transport_op* op) {
97
- if (op->on_connectivity_state_change) {
98
- GPR_ASSERT(*op->connectivity_state != GRPC_CHANNEL_SHUTDOWN);
99
- *op->connectivity_state = GRPC_CHANNEL_SHUTDOWN;
100
- GRPC_CLOSURE_SCHED(op->on_connectivity_state_change, GRPC_ERROR_NONE);
102
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
103
+ {
104
+ MutexLock lock(&chand->mu);
105
+ if (op->start_connectivity_watch != nullptr) {
106
+ chand->state_tracker.AddWatcher(op->start_connectivity_watch_state,
107
+ std::move(op->start_connectivity_watch));
108
+ }
109
+ if (op->stop_connectivity_watch != nullptr) {
110
+ chand->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
111
+ }
101
112
  }
102
113
  if (op->send_ping.on_initiate != nullptr) {
103
114
  GRPC_CLOSURE_SCHED(
@@ -115,27 +126,31 @@ static void lame_start_transport_op(grpc_channel_element* elem,
115
126
  }
116
127
  }
117
128
 
118
- static grpc_error* init_call_elem(grpc_call_element* elem,
119
- const grpc_call_element_args* args) {
129
+ static grpc_error* lame_init_call_elem(grpc_call_element* elem,
130
+ const grpc_call_element_args* args) {
120
131
  CallData* calld = static_cast<CallData*>(elem->call_data);
121
132
  calld->call_combiner = args->call_combiner;
122
133
  return GRPC_ERROR_NONE;
123
134
  }
124
135
 
125
- static void destroy_call_elem(grpc_call_element* elem,
126
- const grpc_call_final_info* final_info,
127
- grpc_closure* then_schedule_closure) {
136
+ static void lame_destroy_call_elem(grpc_call_element* elem,
137
+ const grpc_call_final_info* final_info,
138
+ grpc_closure* then_schedule_closure) {
128
139
  GRPC_CLOSURE_SCHED(then_schedule_closure, GRPC_ERROR_NONE);
129
140
  }
130
141
 
131
- static grpc_error* init_channel_elem(grpc_channel_element* elem,
132
- grpc_channel_element_args* args) {
142
+ static grpc_error* lame_init_channel_elem(grpc_channel_element* elem,
143
+ grpc_channel_element_args* args) {
133
144
  GPR_ASSERT(args->is_first);
134
145
  GPR_ASSERT(args->is_last);
146
+ new (elem->channel_data) ChannelData;
135
147
  return GRPC_ERROR_NONE;
136
148
  }
137
149
 
138
- static void destroy_channel_elem(grpc_channel_element* elem) {}
150
+ static void lame_destroy_channel_elem(grpc_channel_element* elem) {
151
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
152
+ chand->~ChannelData();
153
+ }
139
154
 
140
155
  } // namespace
141
156
 
@@ -145,12 +160,12 @@ const grpc_channel_filter grpc_lame_filter = {
145
160
  grpc_core::lame_start_transport_stream_op_batch,
146
161
  grpc_core::lame_start_transport_op,
147
162
  sizeof(grpc_core::CallData),
148
- grpc_core::init_call_elem,
163
+ grpc_core::lame_init_call_elem,
149
164
  grpc_call_stack_ignore_set_pollset_or_pollset_set,
150
- grpc_core::destroy_call_elem,
165
+ grpc_core::lame_destroy_call_elem,
151
166
  sizeof(grpc_core::ChannelData),
152
- grpc_core::init_channel_elem,
153
- grpc_core::destroy_channel_elem,
167
+ grpc_core::lame_init_channel_elem,
168
+ grpc_core::lame_destroy_channel_elem,
154
169
  grpc_core::lame_get_channel_info,
155
170
  "lame-client",
156
171
  };