grpc 1.18.0 → 1.22.0

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

Potentially problematic release.


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

Files changed (428) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4731 -7404
  3. data/etc/roots.pem +146 -0
  4. data/include/grpc/grpc.h +11 -6
  5. data/include/grpc/grpc_security.h +297 -4
  6. data/include/grpc/grpc_security_constants.h +1 -1
  7. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +30 -7
  10. data/include/grpc/impl/codegen/port_platform.h +88 -7
  11. data/include/grpc/impl/codegen/slice.h +2 -22
  12. data/include/grpc/impl/codegen/status.h +2 -1
  13. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  14. data/include/grpc/slice.h +3 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
  16. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
  19. data/src/core/ext/filters/client_channel/client_channel.h +2 -10
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
  47. data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
  48. data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
  51. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
  53. data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
  65. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  66. data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
  67. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
  68. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
  69. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
  70. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
  71. data/src/core/ext/filters/client_channel/resolver.cc +54 -1
  72. data/src/core/ext/filters/client_channel/resolver.h +52 -23
  73. data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
  74. data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
  75. data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
  77. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
  78. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
  79. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
  80. data/src/core/ext/filters/client_channel/server_address.cc +4 -54
  81. data/src/core/ext/filters/client_channel/server_address.h +1 -13
  82. data/src/core/ext/filters/client_channel/service_config.cc +329 -0
  83. data/src/core/ext/filters/client_channel/service_config.h +205 -0
  84. data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
  85. data/src/core/ext/filters/client_channel/subchannel.h +295 -128
  86. data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  88. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
  90. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  91. data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
  92. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  93. data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
  94. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
  95. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
  96. data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
  97. data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
  98. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  99. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
  102. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
  104. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
  107. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
  110. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
  111. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
  113. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
  131. data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
  136. data/src/core/lib/channel/channel_args.cc +2 -101
  137. data/src/core/lib/channel/channel_args.h +3 -37
  138. data/src/core/lib/channel/channel_stack.h +10 -6
  139. data/src/core/lib/channel/channel_trace.cc +4 -4
  140. data/src/core/lib/channel/channel_trace.h +4 -4
  141. data/src/core/lib/channel/channelz.cc +168 -38
  142. data/src/core/lib/channel/channelz.h +40 -44
  143. data/src/core/lib/channel/channelz_registry.cc +75 -107
  144. data/src/core/lib/channel/channelz_registry.h +10 -28
  145. data/src/core/lib/channel/connected_channel.cc +2 -2
  146. data/src/core/lib/channel/context.h +2 -2
  147. data/src/core/lib/channel/handshaker.cc +151 -218
  148. data/src/core/lib/channel/handshaker.h +110 -101
  149. data/src/core/lib/channel/handshaker_factory.h +11 -19
  150. data/src/core/lib/channel/handshaker_registry.cc +67 -51
  151. data/src/core/lib/channel/handshaker_registry.h +21 -16
  152. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  153. data/src/core/lib/compression/compression.cc +14 -9
  154. data/src/core/lib/compression/compression_args.cc +127 -0
  155. data/src/core/lib/compression/compression_args.h +55 -0
  156. data/src/core/lib/compression/compression_internal.cc +16 -12
  157. data/src/core/lib/compression/compression_internal.h +1 -1
  158. data/src/core/lib/compression/stream_compression.cc +3 -2
  159. data/src/core/lib/compression/stream_compression.h +2 -2
  160. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  161. data/src/core/lib/debug/trace.cc +13 -7
  162. data/src/core/lib/debug/trace.h +14 -1
  163. data/src/core/lib/gpr/arena.h +13 -9
  164. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  165. data/src/core/lib/gpr/env.h +3 -6
  166. data/src/core/lib/gpr/env_linux.cc +6 -1
  167. data/src/core/lib/gpr/env_posix.cc +5 -0
  168. data/src/core/lib/gpr/env_windows.cc +7 -5
  169. data/src/core/lib/gpr/log.cc +9 -13
  170. data/src/core/lib/gpr/log_posix.cc +2 -1
  171. data/src/core/lib/gpr/string.cc +20 -7
  172. data/src/core/lib/gpr/string.h +10 -3
  173. data/src/core/lib/gpr/sync_posix.cc +65 -4
  174. data/src/core/lib/gpr/time.cc +8 -0
  175. data/src/core/lib/gpr/time_posix.cc +21 -2
  176. data/src/core/lib/gprpp/arena.cc +103 -0
  177. data/src/core/lib/gprpp/arena.h +121 -0
  178. data/src/core/lib/gprpp/atomic.h +75 -5
  179. data/src/core/lib/gprpp/fork.cc +13 -32
  180. data/src/core/lib/gprpp/fork.h +5 -1
  181. data/src/core/lib/gprpp/global_config.h +96 -0
  182. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  183. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  184. data/src/core/lib/gprpp/global_config_env.h +131 -0
  185. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  186. data/src/core/lib/gprpp/inlined_vector.h +8 -0
  187. data/src/core/lib/gprpp/map.h +436 -0
  188. data/src/core/lib/gprpp/memory.h +2 -2
  189. data/src/core/lib/gprpp/optional.h +48 -0
  190. data/src/core/lib/gprpp/orphanable.h +6 -5
  191. data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
  192. data/src/core/lib/gprpp/ref_counted.h +36 -17
  193. data/src/core/lib/gprpp/sync.h +126 -0
  194. data/src/core/lib/gprpp/thd.h +42 -7
  195. data/src/core/lib/gprpp/thd_posix.cc +31 -13
  196. data/src/core/lib/gprpp/thd_windows.cc +47 -34
  197. data/src/core/lib/http/httpcli.cc +6 -5
  198. data/src/core/lib/http/httpcli_security_connector.cc +13 -15
  199. data/src/core/lib/http/parser.cc +3 -2
  200. data/src/core/lib/http/parser.h +2 -1
  201. data/src/core/lib/iomgr/buffer_list.cc +182 -24
  202. data/src/core/lib/iomgr/buffer_list.h +72 -10
  203. data/src/core/lib/iomgr/call_combiner.cc +84 -90
  204. data/src/core/lib/iomgr/call_combiner.h +75 -82
  205. data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
  206. data/src/core/lib/iomgr/cfstream_handle.h +86 -0
  207. data/src/core/lib/iomgr/combiner.cc +11 -3
  208. data/src/core/lib/iomgr/combiner.h +1 -1
  209. data/src/core/lib/iomgr/endpoint.cc +2 -2
  210. data/src/core/lib/iomgr/endpoint.h +3 -2
  211. data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
  212. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  213. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  214. data/src/core/lib/iomgr/error.cc +21 -17
  215. data/src/core/lib/iomgr/error.h +36 -6
  216. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  217. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  218. data/src/core/lib/iomgr/error_internal.h +1 -1
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
  222. data/src/core/lib/iomgr/ev_posix.cc +29 -19
  223. data/src/core/lib/iomgr/ev_posix.h +19 -3
  224. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  225. data/src/core/lib/iomgr/exec_ctx.cc +1 -0
  226. data/src/core/lib/iomgr/exec_ctx.h +137 -8
  227. data/src/core/lib/iomgr/executor.cc +147 -95
  228. data/src/core/lib/iomgr/executor.h +55 -49
  229. data/src/core/lib/iomgr/fork_posix.cc +6 -5
  230. data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
  231. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  232. data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
  233. data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
  234. data/src/core/lib/iomgr/internal_errqueue.h +105 -3
  235. data/src/core/lib/iomgr/iomgr.cc +20 -13
  236. data/src/core/lib/iomgr/iomgr.h +15 -0
  237. data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
  238. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  239. data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
  240. data/src/core/lib/iomgr/iomgr_internal.h +12 -0
  241. data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
  242. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
  243. data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
  244. data/src/core/lib/iomgr/lockfree_event.cc +4 -4
  245. data/src/core/lib/iomgr/port.h +35 -0
  246. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  247. data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
  248. data/src/core/lib/iomgr/resource_quota.cc +40 -37
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
  250. data/src/core/lib/iomgr/socket_windows.cc +19 -0
  251. data/src/core/lib/iomgr/socket_windows.h +8 -0
  252. data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
  253. data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
  254. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +10 -14
  257. data/src/core/lib/iomgr/tcp_posix.cc +256 -140
  258. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  259. data/src/core/lib/iomgr/tcp_server.h +24 -0
  260. data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
  261. data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
  262. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  263. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
  264. data/src/core/lib/iomgr/tcp_uv.cc +5 -7
  265. data/src/core/lib/iomgr/tcp_windows.cc +8 -14
  266. data/src/core/lib/iomgr/timer.h +2 -1
  267. data/src/core/lib/iomgr/timer_generic.cc +16 -16
  268. data/src/core/lib/iomgr/timer_manager.cc +20 -11
  269. data/src/core/lib/iomgr/udp_server.cc +8 -6
  270. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  271. data/src/core/lib/json/json.cc +1 -4
  272. data/src/core/lib/profiling/basic_timers.cc +10 -4
  273. data/src/core/lib/security/context/security_context.cc +6 -7
  274. data/src/core/lib/security/context/security_context.h +3 -4
  275. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
  276. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  277. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
  278. data/src/core/lib/security/credentials/credentials.h +9 -1
  279. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
  280. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
  281. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  282. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
  284. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
  285. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
  286. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
  287. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
  288. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  289. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
  290. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
  291. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
  292. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
  293. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
  294. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
  295. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
  296. data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
  297. data/src/core/lib/security/security_connector/security_connector.cc +0 -1
  298. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  299. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
  300. data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
  301. data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
  302. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
  303. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
  304. data/src/core/lib/security/transport/auth_filters.h +5 -2
  305. data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
  306. data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
  307. data/src/core/lib/security/transport/security_handshaker.cc +271 -303
  308. data/src/core/lib/security/transport/security_handshaker.h +11 -2
  309. data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
  310. data/src/core/lib/slice/b64.h +2 -2
  311. data/src/core/lib/slice/percent_encoding.cc +3 -3
  312. data/src/core/lib/slice/percent_encoding.h +3 -3
  313. data/src/core/lib/slice/slice.cc +174 -122
  314. data/src/core/lib/slice/slice_buffer.cc +54 -21
  315. data/src/core/lib/slice/slice_hash_table.h +4 -4
  316. data/src/core/lib/slice/slice_intern.cc +49 -107
  317. data/src/core/lib/slice/slice_internal.h +264 -3
  318. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  319. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  320. data/src/core/lib/slice/slice_utils.h +50 -0
  321. data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
  322. data/src/core/lib/surface/api_trace.h +1 -1
  323. data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
  324. data/src/core/lib/surface/call.cc +67 -46
  325. data/src/core/lib/surface/call.h +7 -2
  326. data/src/core/lib/surface/call_details.cc +0 -1
  327. data/src/core/lib/surface/channel.cc +89 -97
  328. data/src/core/lib/surface/channel.h +60 -6
  329. data/src/core/lib/surface/channel_init.h +5 -0
  330. data/src/core/lib/surface/completion_queue.cc +221 -216
  331. data/src/core/lib/surface/completion_queue.h +2 -1
  332. data/src/core/lib/surface/init.cc +82 -33
  333. data/src/core/lib/surface/init.h +1 -0
  334. data/src/core/lib/surface/init_secure.cc +1 -1
  335. data/src/core/lib/surface/lame_client.cc +5 -7
  336. data/src/core/lib/surface/server.cc +42 -47
  337. data/src/core/lib/surface/validate_metadata.cc +14 -8
  338. data/src/core/lib/surface/validate_metadata.h +13 -2
  339. data/src/core/lib/surface/version.cc +1 -1
  340. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  341. data/src/core/lib/transport/bdp_estimator.h +2 -2
  342. data/src/core/lib/transport/connectivity_state.cc +10 -40
  343. data/src/core/lib/transport/connectivity_state.h +0 -8
  344. data/src/core/lib/transport/error_utils.cc +12 -0
  345. data/src/core/lib/transport/metadata.cc +258 -267
  346. data/src/core/lib/transport/metadata.h +227 -16
  347. data/src/core/lib/transport/metadata_batch.cc +1 -1
  348. data/src/core/lib/transport/metadata_batch.h +1 -1
  349. data/src/core/lib/transport/static_metadata.cc +477 -399
  350. data/src/core/lib/transport/static_metadata.h +273 -182
  351. data/src/core/lib/transport/status_metadata.cc +3 -3
  352. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  353. data/src/core/lib/transport/timeout_encoding.h +1 -1
  354. data/src/core/lib/transport/transport.cc +39 -72
  355. data/src/core/lib/transport/transport.h +59 -24
  356. data/src/core/lib/transport/transport_impl.h +1 -1
  357. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  358. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  359. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  360. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
  361. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
  363. data/src/core/tsi/fake_transport_security.cc +4 -4
  364. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  365. data/src/core/tsi/ssl_transport_security.cc +12 -10
  366. data/src/core/tsi/ssl_transport_security.h +24 -4
  367. data/src/ruby/bin/math_pb.rb +18 -16
  368. data/src/ruby/ext/grpc/extconf.rb +12 -4
  369. data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
  370. data/src/ruby/ext/grpc/rb_channel.c +14 -10
  371. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  372. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  373. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  374. data/src/ruby/ext/grpc/rb_grpc.c +23 -24
  375. data/src/ruby/ext/grpc/rb_grpc.h +4 -2
  376. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  377. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
  378. data/src/ruby/ext/grpc/rb_server.c +8 -4
  379. data/src/ruby/lib/grpc/errors.rb +22 -3
  380. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  381. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  382. data/src/ruby/lib/grpc/version.rb +1 -1
  383. data/src/ruby/pb/README.md +1 -1
  384. data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
  385. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  386. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
  388. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  389. data/src/ruby/spec/errors_spec.rb +141 -0
  390. data/third_party/cares/cares/ares.h +12 -0
  391. data/third_party/cares/cares/ares_create_query.c +5 -1
  392. data/third_party/cares/cares/ares_data.c +74 -73
  393. data/third_party/cares/cares/ares_destroy.c +6 -1
  394. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  395. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  396. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  397. data/third_party/cares/cares/ares_init.c +274 -173
  398. data/third_party/cares/cares/ares_library_init.c +21 -3
  399. data/third_party/cares/cares/ares_options.c +6 -2
  400. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  401. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  402. data/third_party/cares/cares/ares_platform.c +7 -0
  403. data/third_party/cares/cares/ares_private.h +19 -11
  404. data/third_party/cares/cares/ares_process.c +27 -2
  405. data/third_party/cares/cares/ares_rules.h +1 -1
  406. data/third_party/cares/cares/ares_search.c +7 -0
  407. data/third_party/cares/cares/ares_send.c +6 -0
  408. data/third_party/cares/cares/ares_strsplit.c +174 -0
  409. data/third_party/cares/cares/ares_strsplit.h +43 -0
  410. data/third_party/cares/cares/ares_version.h +4 -4
  411. data/third_party/cares/cares/config-win32.h +1 -1
  412. data/third_party/cares/cares/inet_ntop.c +2 -3
  413. data/third_party/cares/config_darwin/ares_config.h +3 -0
  414. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  415. data/third_party/cares/config_linux/ares_config.h +3 -0
  416. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  417. metadata +83 -48
  418. data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
  419. data/src/core/ext/filters/client_channel/request_routing.h +0 -177
  420. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
  421. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
  422. data/src/core/lib/channel/handshaker_factory.cc +0 -42
  423. data/src/core/lib/gpr/arena.cc +0 -192
  424. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  425. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  426. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  427. data/src/core/lib/transport/service_config.cc +0 -106
  428. data/src/core/lib/transport/service_config.h +0 -249
@@ -20,6 +20,7 @@
20
20
 
21
21
  #include <string.h>
22
22
 
23
+ #include <grpc/impl/codegen/slice.h>
23
24
  #include <grpc/support/alloc.h>
24
25
  #include <grpc/support/log.h>
25
26
  #include <grpc/support/string_util.h>
@@ -30,302 +31,234 @@
30
31
  #include "src/core/lib/iomgr/timer.h"
31
32
  #include "src/core/lib/slice/slice_internal.h"
32
33
 
33
- grpc_core::TraceFlag grpc_handshaker_trace(false, "handshaker");
34
+ namespace grpc_core {
34
35
 
35
- //
36
- // grpc_handshaker
37
- //
36
+ TraceFlag grpc_handshaker_trace(false, "handshaker");
38
37
 
39
- void grpc_handshaker_init(const grpc_handshaker_vtable* vtable,
40
- grpc_handshaker* handshaker) {
41
- handshaker->vtable = vtable;
42
- }
43
-
44
- void grpc_handshaker_destroy(grpc_handshaker* handshaker) {
45
- handshaker->vtable->destroy(handshaker);
46
- }
47
-
48
- void grpc_handshaker_shutdown(grpc_handshaker* handshaker, grpc_error* why) {
49
- handshaker->vtable->shutdown(handshaker, why);
50
- }
51
-
52
- void grpc_handshaker_do_handshake(grpc_handshaker* handshaker,
53
- grpc_tcp_server_acceptor* acceptor,
54
- grpc_closure* on_handshake_done,
55
- grpc_handshaker_args* args) {
56
- handshaker->vtable->do_handshake(handshaker, acceptor, on_handshake_done,
57
- args);
58
- }
38
+ namespace {
59
39
 
60
- const char* grpc_handshaker_name(grpc_handshaker* handshaker) {
61
- return handshaker->vtable->name;
40
+ char* HandshakerArgsString(HandshakerArgs* args) {
41
+ char* args_str = grpc_channel_args_string(args->args);
42
+ size_t num_args = args->args != nullptr ? args->args->num_args : 0;
43
+ size_t read_buffer_length =
44
+ args->read_buffer != nullptr ? args->read_buffer->length : 0;
45
+ char* str;
46
+ gpr_asprintf(&str,
47
+ "{endpoint=%p, args=%p {size=%" PRIuPTR
48
+ ": %s}, read_buffer=%p (length=%" PRIuPTR "), exit_early=%d}",
49
+ args->endpoint, args->args, num_args, args_str,
50
+ args->read_buffer, read_buffer_length, args->exit_early);
51
+ gpr_free(args_str);
52
+ return str;
62
53
  }
63
54
 
64
- //
65
- // grpc_handshake_manager
66
- //
67
-
68
- struct grpc_handshake_manager {
69
- gpr_mu mu;
70
- gpr_refcount refs;
71
- bool shutdown;
72
- // An array of handshakers added via grpc_handshake_manager_add().
73
- size_t count;
74
- grpc_handshaker** handshakers;
75
- // The index of the handshaker to invoke next and closure to invoke it.
76
- size_t index;
77
- grpc_closure call_next_handshaker;
78
- // The acceptor to call the handshakers with.
79
- grpc_tcp_server_acceptor* acceptor;
80
- // Deadline timer across all handshakers.
81
- grpc_timer deadline_timer;
82
- grpc_closure on_timeout;
83
- // The final callback and user_data to invoke after the last handshaker.
84
- grpc_closure on_handshake_done;
85
- void* user_data;
86
- // Handshaker args.
87
- grpc_handshaker_args args;
88
- // Links to the previous and next managers in a list of all pending handshakes
89
- // Used at server side only.
90
- grpc_handshake_manager* prev;
91
- grpc_handshake_manager* next;
92
- };
55
+ } // namespace
93
56
 
94
- grpc_handshake_manager* grpc_handshake_manager_create() {
95
- grpc_handshake_manager* mgr = static_cast<grpc_handshake_manager*>(
96
- gpr_zalloc(sizeof(grpc_handshake_manager)));
97
- gpr_mu_init(&mgr->mu);
98
- gpr_ref_init(&mgr->refs, 1);
99
- return mgr;
100
- }
57
+ HandshakeManager::HandshakeManager() { gpr_mu_init(&mu_); }
101
58
 
102
- void grpc_handshake_manager_pending_list_add(grpc_handshake_manager** head,
103
- grpc_handshake_manager* mgr) {
104
- GPR_ASSERT(mgr->prev == nullptr);
105
- GPR_ASSERT(mgr->next == nullptr);
106
- mgr->next = *head;
59
+ /// Add \a mgr to the server side list of all pending handshake managers, the
60
+ /// list starts with \a *head.
61
+ // Not thread-safe. Caller needs to synchronize.
62
+ void HandshakeManager::AddToPendingMgrList(HandshakeManager** head) {
63
+ GPR_ASSERT(prev_ == nullptr);
64
+ GPR_ASSERT(next_ == nullptr);
65
+ next_ = *head;
107
66
  if (*head) {
108
- (*head)->prev = mgr;
67
+ (*head)->prev_ = this;
109
68
  }
110
- *head = mgr;
69
+ *head = this;
111
70
  }
112
71
 
113
- void grpc_handshake_manager_pending_list_remove(grpc_handshake_manager** head,
114
- grpc_handshake_manager* mgr) {
115
- if (mgr->next != nullptr) {
116
- mgr->next->prev = mgr->prev;
72
+ /// Remove \a mgr from the server side list of all pending handshake managers.
73
+ // Not thread-safe. Caller needs to synchronize.
74
+ void HandshakeManager::RemoveFromPendingMgrList(HandshakeManager** head) {
75
+ if (next_ != nullptr) {
76
+ next_->prev_ = prev_;
117
77
  }
118
- if (mgr->prev != nullptr) {
119
- mgr->prev->next = mgr->next;
78
+ if (prev_ != nullptr) {
79
+ prev_->next_ = next_;
120
80
  } else {
121
- GPR_ASSERT(*head == mgr);
122
- *head = mgr->next;
81
+ GPR_ASSERT(*head == this);
82
+ *head = next_;
123
83
  }
124
84
  }
125
85
 
126
- void grpc_handshake_manager_pending_list_shutdown_all(
127
- grpc_handshake_manager* head, grpc_error* why) {
86
+ /// Shutdown all pending handshake managers starting at head on the server
87
+ /// side. Not thread-safe. Caller needs to synchronize.
88
+ void HandshakeManager::ShutdownAllPending(grpc_error* why) {
89
+ auto* head = this;
128
90
  while (head != nullptr) {
129
- grpc_handshake_manager_shutdown(head, GRPC_ERROR_REF(why));
130
- head = head->next;
91
+ head->Shutdown(GRPC_ERROR_REF(why));
92
+ head = head->next_;
131
93
  }
132
94
  GRPC_ERROR_UNREF(why);
133
95
  }
134
96
 
135
- static bool is_power_of_2(size_t n) { return (n & (n - 1)) == 0; }
136
-
137
- void grpc_handshake_manager_add(grpc_handshake_manager* mgr,
138
- grpc_handshaker* handshaker) {
139
- if (grpc_handshaker_trace.enabled()) {
97
+ void HandshakeManager::Add(RefCountedPtr<Handshaker> handshaker) {
98
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_handshaker_trace)) {
140
99
  gpr_log(
141
100
  GPR_INFO,
142
101
  "handshake_manager %p: adding handshaker %s [%p] at index %" PRIuPTR,
143
- mgr, grpc_handshaker_name(handshaker), handshaker, mgr->count);
102
+ this, handshaker->name(), handshaker.get(), handshakers_.size());
144
103
  }
145
- gpr_mu_lock(&mgr->mu);
146
- // To avoid allocating memory for each handshaker we add, we double
147
- // the number of elements every time we need more.
148
- size_t realloc_count = 0;
149
- if (mgr->count == 0) {
150
- realloc_count = 2;
151
- } else if (mgr->count >= 2 && is_power_of_2(mgr->count)) {
152
- realloc_count = mgr->count * 2;
153
- }
154
- if (realloc_count > 0) {
155
- mgr->handshakers = static_cast<grpc_handshaker**>(gpr_realloc(
156
- mgr->handshakers, realloc_count * sizeof(grpc_handshaker*)));
157
- }
158
- mgr->handshakers[mgr->count++] = handshaker;
159
- gpr_mu_unlock(&mgr->mu);
104
+ MutexLock lock(&mu_);
105
+ handshakers_.push_back(std::move(handshaker));
160
106
  }
161
107
 
162
- static void grpc_handshake_manager_unref(grpc_handshake_manager* mgr) {
163
- if (gpr_unref(&mgr->refs)) {
164
- for (size_t i = 0; i < mgr->count; ++i) {
165
- grpc_handshaker_destroy(mgr->handshakers[i]);
166
- }
167
- gpr_free(mgr->handshakers);
168
- gpr_mu_destroy(&mgr->mu);
169
- gpr_free(mgr);
170
- }
171
- }
172
-
173
- void grpc_handshake_manager_destroy(grpc_handshake_manager* mgr) {
174
- grpc_handshake_manager_unref(mgr);
108
+ HandshakeManager::~HandshakeManager() {
109
+ handshakers_.clear();
110
+ gpr_mu_destroy(&mu_);
175
111
  }
176
112
 
177
- void grpc_handshake_manager_shutdown(grpc_handshake_manager* mgr,
178
- grpc_error* why) {
179
- gpr_mu_lock(&mgr->mu);
180
- // Shutdown the handshaker that's currently in progress, if any.
181
- if (!mgr->shutdown && mgr->index > 0) {
182
- mgr->shutdown = true;
183
- grpc_handshaker_shutdown(mgr->handshakers[mgr->index - 1],
184
- GRPC_ERROR_REF(why));
113
+ void HandshakeManager::Shutdown(grpc_error* why) {
114
+ {
115
+ MutexLock lock(&mu_);
116
+ // Shutdown the handshaker that's currently in progress, if any.
117
+ if (!is_shutdown_ && index_ > 0) {
118
+ is_shutdown_ = true;
119
+ handshakers_[index_ - 1]->Shutdown(GRPC_ERROR_REF(why));
120
+ }
185
121
  }
186
- gpr_mu_unlock(&mgr->mu);
187
122
  GRPC_ERROR_UNREF(why);
188
123
  }
189
124
 
190
- static char* handshaker_args_string(grpc_handshaker_args* args) {
191
- char* args_str = grpc_channel_args_string(args->args);
192
- size_t num_args = args->args != nullptr ? args->args->num_args : 0;
193
- size_t read_buffer_length =
194
- args->read_buffer != nullptr ? args->read_buffer->length : 0;
195
- char* str;
196
- gpr_asprintf(&str,
197
- "{endpoint=%p, args=%p {size=%" PRIuPTR
198
- ": %s}, read_buffer=%p (length=%" PRIuPTR "), exit_early=%d}",
199
- args->endpoint, args->args, num_args, args_str,
200
- args->read_buffer, read_buffer_length, args->exit_early);
201
- gpr_free(args_str);
202
- return str;
203
- }
204
-
205
125
  // Helper function to call either the next handshaker or the
206
126
  // on_handshake_done callback.
207
127
  // Returns true if we've scheduled the on_handshake_done callback.
208
- static bool call_next_handshaker_locked(grpc_handshake_manager* mgr,
209
- grpc_error* error) {
210
- if (grpc_handshaker_trace.enabled()) {
211
- char* args_str = handshaker_args_string(&mgr->args);
128
+ bool HandshakeManager::CallNextHandshakerLocked(grpc_error* error) {
129
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_handshaker_trace)) {
130
+ char* args_str = HandshakerArgsString(&args_);
212
131
  gpr_log(GPR_INFO,
213
132
  "handshake_manager %p: error=%s shutdown=%d index=%" PRIuPTR
214
133
  ", args=%s",
215
- mgr, grpc_error_string(error), mgr->shutdown, mgr->index, args_str);
134
+ this, grpc_error_string(error), is_shutdown_, index_, args_str);
216
135
  gpr_free(args_str);
217
136
  }
218
- GPR_ASSERT(mgr->index <= mgr->count);
137
+ GPR_ASSERT(index_ <= handshakers_.size());
219
138
  // If we got an error or we've been shut down or we're exiting early or
220
139
  // we've finished the last handshaker, invoke the on_handshake_done
221
140
  // callback. Otherwise, call the next handshaker.
222
- if (error != GRPC_ERROR_NONE || mgr->shutdown || mgr->args.exit_early ||
223
- mgr->index == mgr->count) {
224
- if (error == GRPC_ERROR_NONE && mgr->shutdown) {
141
+ if (error != GRPC_ERROR_NONE || is_shutdown_ || args_.exit_early ||
142
+ index_ == handshakers_.size()) {
143
+ if (error == GRPC_ERROR_NONE && is_shutdown_) {
225
144
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("handshaker shutdown");
226
145
  // It is possible that the endpoint has already been destroyed by
227
146
  // a shutdown call while this callback was sitting on the ExecCtx
228
147
  // with no error.
229
- if (mgr->args.endpoint != nullptr) {
148
+ if (args_.endpoint != nullptr) {
230
149
  // TODO(roth): It is currently necessary to shutdown endpoints
231
150
  // before destroying then, even when we know that there are no
232
151
  // pending read/write callbacks. This should be fixed, at which
233
152
  // point this can be removed.
234
- grpc_endpoint_shutdown(mgr->args.endpoint, GRPC_ERROR_REF(error));
235
- grpc_endpoint_destroy(mgr->args.endpoint);
236
- mgr->args.endpoint = nullptr;
237
- grpc_channel_args_destroy(mgr->args.args);
238
- mgr->args.args = nullptr;
239
- grpc_slice_buffer_destroy_internal(mgr->args.read_buffer);
240
- gpr_free(mgr->args.read_buffer);
241
- mgr->args.read_buffer = nullptr;
153
+ grpc_endpoint_shutdown(args_.endpoint, GRPC_ERROR_REF(error));
154
+ grpc_endpoint_destroy(args_.endpoint);
155
+ args_.endpoint = nullptr;
156
+ grpc_channel_args_destroy(args_.args);
157
+ args_.args = nullptr;
158
+ grpc_slice_buffer_destroy_internal(args_.read_buffer);
159
+ gpr_free(args_.read_buffer);
160
+ args_.read_buffer = nullptr;
242
161
  }
243
162
  }
244
- if (grpc_handshaker_trace.enabled()) {
163
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_handshaker_trace)) {
245
164
  gpr_log(GPR_INFO,
246
165
  "handshake_manager %p: handshaking complete -- scheduling "
247
166
  "on_handshake_done with error=%s",
248
- mgr, grpc_error_string(error));
167
+ this, grpc_error_string(error));
249
168
  }
250
169
  // Cancel deadline timer, since we're invoking the on_handshake_done
251
170
  // callback now.
252
- grpc_timer_cancel(&mgr->deadline_timer);
253
- GRPC_CLOSURE_SCHED(&mgr->on_handshake_done, error);
254
- mgr->shutdown = true;
171
+ grpc_timer_cancel(&deadline_timer_);
172
+ GRPC_CLOSURE_SCHED(&on_handshake_done_, error);
173
+ is_shutdown_ = true;
255
174
  } else {
256
- if (grpc_handshaker_trace.enabled()) {
175
+ auto handshaker = handshakers_[index_];
176
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_handshaker_trace)) {
257
177
  gpr_log(
258
178
  GPR_INFO,
259
179
  "handshake_manager %p: calling handshaker %s [%p] at index %" PRIuPTR,
260
- mgr, grpc_handshaker_name(mgr->handshakers[mgr->index]),
261
- mgr->handshakers[mgr->index], mgr->index);
180
+ this, handshaker->name(), handshaker.get(), index_);
262
181
  }
263
- grpc_handshaker_do_handshake(mgr->handshakers[mgr->index], mgr->acceptor,
264
- &mgr->call_next_handshaker, &mgr->args);
182
+ handshaker->DoHandshake(acceptor_, &call_next_handshaker_, &args_);
265
183
  }
266
- ++mgr->index;
267
- return mgr->shutdown;
184
+ ++index_;
185
+ return is_shutdown_;
268
186
  }
269
187
 
270
- // A function used as the handshaker-done callback when chaining
271
- // handshakers together.
272
- static void call_next_handshaker(void* arg, grpc_error* error) {
273
- grpc_handshake_manager* mgr = static_cast<grpc_handshake_manager*>(arg);
274
- gpr_mu_lock(&mgr->mu);
275
- bool done = call_next_handshaker_locked(mgr, GRPC_ERROR_REF(error));
276
- gpr_mu_unlock(&mgr->mu);
188
+ void HandshakeManager::CallNextHandshakerFn(void* arg, grpc_error* error) {
189
+ auto* mgr = static_cast<HandshakeManager*>(arg);
190
+ bool done;
191
+ {
192
+ MutexLock lock(&mgr->mu_);
193
+ done = mgr->CallNextHandshakerLocked(GRPC_ERROR_REF(error));
194
+ }
277
195
  // If we're invoked the final callback, we won't be coming back
278
196
  // to this function, so we can release our reference to the
279
197
  // handshake manager.
280
198
  if (done) {
281
- grpc_handshake_manager_unref(mgr);
199
+ mgr->Unref();
282
200
  }
283
201
  }
284
202
 
285
- // Callback invoked when deadline is exceeded.
286
- static void on_timeout(void* arg, grpc_error* error) {
287
- grpc_handshake_manager* mgr = static_cast<grpc_handshake_manager*>(arg);
288
- if (error == GRPC_ERROR_NONE) { // Timer fired, rather than being cancelled.
289
- grpc_handshake_manager_shutdown(
290
- mgr, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake timed out"));
203
+ void HandshakeManager::OnTimeoutFn(void* arg, grpc_error* error) {
204
+ auto* mgr = static_cast<HandshakeManager*>(arg);
205
+ if (error == GRPC_ERROR_NONE) { // Timer fired, rather than being cancelled
206
+ mgr->Shutdown(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake timed out"));
291
207
  }
292
- grpc_handshake_manager_unref(mgr);
208
+ mgr->Unref();
293
209
  }
294
210
 
295
- void grpc_handshake_manager_do_handshake(grpc_handshake_manager* mgr,
296
- grpc_endpoint* endpoint,
297
- const grpc_channel_args* channel_args,
298
- grpc_millis deadline,
299
- grpc_tcp_server_acceptor* acceptor,
300
- grpc_iomgr_cb_func on_handshake_done,
301
- void* user_data) {
302
- gpr_mu_lock(&mgr->mu);
303
- GPR_ASSERT(mgr->index == 0);
304
- GPR_ASSERT(!mgr->shutdown);
305
- // Construct handshaker args. These will be passed through all
306
- // handshakers and eventually be freed by the on_handshake_done callback.
307
- mgr->args.endpoint = endpoint;
308
- mgr->args.args = grpc_channel_args_copy(channel_args);
309
- mgr->args.user_data = user_data;
310
- mgr->args.read_buffer = static_cast<grpc_slice_buffer*>(
311
- gpr_malloc(sizeof(*mgr->args.read_buffer)));
312
- grpc_slice_buffer_init(mgr->args.read_buffer);
313
- // Initialize state needed for calling handshakers.
314
- mgr->acceptor = acceptor;
315
- GRPC_CLOSURE_INIT(&mgr->call_next_handshaker, call_next_handshaker, mgr,
316
- grpc_schedule_on_exec_ctx);
317
- GRPC_CLOSURE_INIT(&mgr->on_handshake_done, on_handshake_done, &mgr->args,
318
- grpc_schedule_on_exec_ctx);
319
- // Start deadline timer, which owns a ref.
320
- gpr_ref(&mgr->refs);
321
- GRPC_CLOSURE_INIT(&mgr->on_timeout, on_timeout, mgr,
322
- grpc_schedule_on_exec_ctx);
323
- grpc_timer_init(&mgr->deadline_timer, deadline, &mgr->on_timeout);
324
- // Start first handshaker, which also owns a ref.
325
- gpr_ref(&mgr->refs);
326
- bool done = call_next_handshaker_locked(mgr, GRPC_ERROR_NONE);
327
- gpr_mu_unlock(&mgr->mu);
211
+ void HandshakeManager::DoHandshake(grpc_endpoint* endpoint,
212
+ const grpc_channel_args* channel_args,
213
+ grpc_millis deadline,
214
+ grpc_tcp_server_acceptor* acceptor,
215
+ grpc_iomgr_cb_func on_handshake_done,
216
+ void* user_data) {
217
+ bool done;
218
+ {
219
+ MutexLock lock(&mu_);
220
+ GPR_ASSERT(index_ == 0);
221
+ GPR_ASSERT(!is_shutdown_);
222
+ // Construct handshaker args. These will be passed through all
223
+ // handshakers and eventually be freed by the on_handshake_done callback.
224
+ args_.endpoint = endpoint;
225
+ args_.args = grpc_channel_args_copy(channel_args);
226
+ args_.user_data = user_data;
227
+ args_.read_buffer =
228
+ static_cast<grpc_slice_buffer*>(gpr_malloc(sizeof(*args_.read_buffer)));
229
+ grpc_slice_buffer_init(args_.read_buffer);
230
+ if (acceptor != nullptr && acceptor->external_connection &&
231
+ acceptor->pending_data != nullptr) {
232
+ grpc_slice_buffer_swap(args_.read_buffer,
233
+ &(acceptor->pending_data->data.raw.slice_buffer));
234
+ }
235
+ // Initialize state needed for calling handshakers.
236
+ acceptor_ = acceptor;
237
+ GRPC_CLOSURE_INIT(&call_next_handshaker_,
238
+ &HandshakeManager::CallNextHandshakerFn, this,
239
+ grpc_schedule_on_exec_ctx);
240
+ GRPC_CLOSURE_INIT(&on_handshake_done_, on_handshake_done, &args_,
241
+ grpc_schedule_on_exec_ctx);
242
+ // Start deadline timer, which owns a ref.
243
+ Ref().release();
244
+ GRPC_CLOSURE_INIT(&on_timeout_, &HandshakeManager::OnTimeoutFn, this,
245
+ grpc_schedule_on_exec_ctx);
246
+ grpc_timer_init(&deadline_timer_, deadline, &on_timeout_);
247
+ // Start first handshaker, which also owns a ref.
248
+ Ref().release();
249
+ done = CallNextHandshakerLocked(GRPC_ERROR_NONE);
250
+ }
328
251
  if (done) {
329
- grpc_handshake_manager_unref(mgr);
252
+ Unref();
330
253
  }
331
254
  }
255
+
256
+ } // namespace grpc_core
257
+
258
+ void grpc_handshake_manager_add(grpc_handshake_manager* mgr,
259
+ grpc_handshaker* handshaker) {
260
+ // This is a transition method to aid the API change for handshakers.
261
+ using namespace grpc_core;
262
+ RefCountedPtr<Handshaker> refd_hs(static_cast<Handshaker*>(handshaker));
263
+ mgr->Add(refd_hs);
264
+ }