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
@@ -40,157 +40,148 @@
40
40
  #include "src/core/lib/surface/channel.h"
41
41
  #include "src/core/lib/uri/uri_parser.h"
42
42
 
43
- static void client_channel_factory_ref(
44
- grpc_client_channel_factory* cc_factory) {}
43
+ namespace grpc_core {
45
44
 
46
- static void client_channel_factory_unref(
47
- grpc_client_channel_factory* cc_factory) {}
48
-
49
- static grpc_subchannel_args* get_secure_naming_subchannel_args(
50
- const grpc_subchannel_args* args) {
51
- grpc_channel_credentials* channel_credentials =
52
- grpc_channel_credentials_find_in_args(args->args);
53
- if (channel_credentials == nullptr) {
54
- gpr_log(GPR_ERROR,
55
- "Can't create subchannel: channel credentials missing for secure "
56
- "channel.");
57
- return nullptr;
58
- }
59
- // Make sure security connector does not already exist in args.
60
- if (grpc_security_connector_find_in_args(args->args) != nullptr) {
61
- gpr_log(GPR_ERROR,
62
- "Can't create subchannel: security connector already present in "
63
- "channel args.");
64
- return nullptr;
65
- }
66
- // To which address are we connecting? By default, use the server URI.
67
- const grpc_arg* server_uri_arg =
68
- grpc_channel_args_find(args->args, GRPC_ARG_SERVER_URI);
69
- const char* server_uri_str = grpc_channel_arg_get_string(server_uri_arg);
70
- GPR_ASSERT(server_uri_str != nullptr);
71
- grpc_uri* server_uri =
72
- grpc_uri_parse(server_uri_str, true /* supress errors */);
73
- GPR_ASSERT(server_uri != nullptr);
74
- const grpc_core::TargetAuthorityTable* target_authority_table =
75
- grpc_core::FindTargetAuthorityTableInArgs(args->args);
76
- grpc_core::UniquePtr<char> authority;
77
- if (target_authority_table != nullptr) {
78
- // Find the authority for the target.
79
- const char* target_uri_str =
80
- grpc_get_subchannel_address_uri_arg(args->args);
81
- grpc_uri* target_uri =
82
- grpc_uri_parse(target_uri_str, false /* suppress errors */);
83
- GPR_ASSERT(target_uri != nullptr);
84
- if (target_uri->path[0] != '\0') { // "path" may be empty
85
- const grpc_slice key = grpc_slice_from_static_string(
86
- target_uri->path[0] == '/' ? target_uri->path + 1 : target_uri->path);
87
- const grpc_core::UniquePtr<char>* value =
88
- target_authority_table->Get(key);
89
- if (value != nullptr) authority.reset(gpr_strdup(value->get()));
90
- grpc_slice_unref_internal(key);
45
+ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
46
+ public:
47
+ Subchannel* CreateSubchannel(const grpc_channel_args* args) override {
48
+ grpc_channel_args* new_args = GetSecureNamingChannelArgs(args);
49
+ if (new_args == nullptr) {
50
+ gpr_log(GPR_ERROR,
51
+ "Failed to create channel args during subchannel creation.");
52
+ return nullptr;
91
53
  }
92
- grpc_uri_destroy(target_uri);
93
- }
94
- // If the authority hasn't already been set (either because no target
95
- // authority table was present or because the target was not present
96
- // in the table), fall back to using the original server URI.
97
- if (authority == nullptr) {
98
- authority =
99
- grpc_core::ResolverRegistry::GetDefaultAuthority(server_uri_str);
54
+ grpc_connector* connector = grpc_chttp2_connector_create();
55
+ Subchannel* s = Subchannel::Create(connector, new_args);
56
+ grpc_connector_unref(connector);
57
+ grpc_channel_args_destroy(new_args);
58
+ return s;
100
59
  }
101
- grpc_arg args_to_add[2];
102
- size_t num_args_to_add = 0;
103
- if (grpc_channel_args_find(args->args, GRPC_ARG_DEFAULT_AUTHORITY) ==
104
- nullptr) {
105
- // If the channel args don't already contain GRPC_ARG_DEFAULT_AUTHORITY, add
106
- // the arg, setting it to the value just obtained.
107
- args_to_add[num_args_to_add++] = grpc_channel_arg_string_create(
108
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), authority.get());
60
+
61
+ grpc_channel* CreateChannel(const char* target,
62
+ const grpc_channel_args* args) override {
63
+ if (target == nullptr) {
64
+ gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
65
+ return nullptr;
66
+ }
67
+ // Add channel arg containing the server URI.
68
+ UniquePtr<char> canonical_target =
69
+ ResolverRegistry::AddDefaultPrefixIfNeeded(target);
70
+ grpc_arg arg = grpc_channel_arg_string_create(
71
+ const_cast<char*>(GRPC_ARG_SERVER_URI), canonical_target.get());
72
+ const char* to_remove[] = {GRPC_ARG_SERVER_URI};
73
+ grpc_channel_args* new_args =
74
+ grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
75
+ grpc_channel* channel =
76
+ grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
77
+ grpc_channel_args_destroy(new_args);
78
+ return channel;
109
79
  }
110
- grpc_channel_args* args_with_authority =
111
- grpc_channel_args_copy_and_add(args->args, args_to_add, num_args_to_add);
112
- grpc_uri_destroy(server_uri);
113
- // Create the security connector using the credentials and target name.
114
- grpc_channel_args* new_args_from_connector = nullptr;
115
- grpc_core::RefCountedPtr<grpc_channel_security_connector>
116
- subchannel_security_connector =
117
- channel_credentials->create_security_connector(
118
- /*call_creds=*/nullptr, authority.get(), args_with_authority,
119
- &new_args_from_connector);
120
- if (subchannel_security_connector == nullptr) {
121
- gpr_log(GPR_ERROR,
122
- "Failed to create secure subchannel for secure name '%s'",
123
- authority.get());
80
+
81
+ private:
82
+ static grpc_channel_args* GetSecureNamingChannelArgs(
83
+ const grpc_channel_args* args) {
84
+ grpc_channel_credentials* channel_credentials =
85
+ grpc_channel_credentials_find_in_args(args);
86
+ if (channel_credentials == nullptr) {
87
+ gpr_log(GPR_ERROR,
88
+ "Can't create subchannel: channel credentials missing for secure "
89
+ "channel.");
90
+ return nullptr;
91
+ }
92
+ // Make sure security connector does not already exist in args.
93
+ if (grpc_security_connector_find_in_args(args) != nullptr) {
94
+ gpr_log(GPR_ERROR,
95
+ "Can't create subchannel: security connector already present in "
96
+ "channel args.");
97
+ return nullptr;
98
+ }
99
+ // To which address are we connecting? By default, use the server URI.
100
+ const grpc_arg* server_uri_arg =
101
+ grpc_channel_args_find(args, GRPC_ARG_SERVER_URI);
102
+ const char* server_uri_str = grpc_channel_arg_get_string(server_uri_arg);
103
+ GPR_ASSERT(server_uri_str != nullptr);
104
+ grpc_uri* server_uri =
105
+ grpc_uri_parse(server_uri_str, true /* suppress errors */);
106
+ GPR_ASSERT(server_uri != nullptr);
107
+ const TargetAuthorityTable* target_authority_table =
108
+ FindTargetAuthorityTableInArgs(args);
109
+ UniquePtr<char> authority;
110
+ if (target_authority_table != nullptr) {
111
+ // Find the authority for the target.
112
+ const char* target_uri_str =
113
+ Subchannel::GetUriFromSubchannelAddressArg(args);
114
+ grpc_uri* target_uri =
115
+ grpc_uri_parse(target_uri_str, false /* suppress errors */);
116
+ GPR_ASSERT(target_uri != nullptr);
117
+ if (target_uri->path[0] != '\0') { // "path" may be empty
118
+ const grpc_slice key = grpc_slice_from_static_string(
119
+ target_uri->path[0] == '/' ? target_uri->path + 1
120
+ : target_uri->path);
121
+ const UniquePtr<char>* value = target_authority_table->Get(key);
122
+ if (value != nullptr) authority.reset(gpr_strdup(value->get()));
123
+ grpc_slice_unref_internal(key);
124
+ }
125
+ grpc_uri_destroy(target_uri);
126
+ }
127
+ // If the authority hasn't already been set (either because no target
128
+ // authority table was present or because the target was not present
129
+ // in the table), fall back to using the original server URI.
130
+ if (authority == nullptr) {
131
+ authority = ResolverRegistry::GetDefaultAuthority(server_uri_str);
132
+ }
133
+ grpc_arg args_to_add[2];
134
+ size_t num_args_to_add = 0;
135
+ if (grpc_channel_args_find(args, GRPC_ARG_DEFAULT_AUTHORITY) == nullptr) {
136
+ // If the channel args don't already contain GRPC_ARG_DEFAULT_AUTHORITY,
137
+ // add the arg, setting it to the value just obtained.
138
+ args_to_add[num_args_to_add++] = grpc_channel_arg_string_create(
139
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), authority.get());
140
+ }
141
+ grpc_channel_args* args_with_authority =
142
+ grpc_channel_args_copy_and_add(args, args_to_add, num_args_to_add);
143
+ grpc_uri_destroy(server_uri);
144
+ // Create the security connector using the credentials and target name.
145
+ grpc_channel_args* new_args_from_connector = nullptr;
146
+ RefCountedPtr<grpc_channel_security_connector>
147
+ subchannel_security_connector =
148
+ channel_credentials->create_security_connector(
149
+ /*call_creds=*/nullptr, authority.get(), args_with_authority,
150
+ &new_args_from_connector);
151
+ if (subchannel_security_connector == nullptr) {
152
+ gpr_log(GPR_ERROR,
153
+ "Failed to create secure subchannel for secure name '%s'",
154
+ authority.get());
155
+ grpc_channel_args_destroy(args_with_authority);
156
+ return nullptr;
157
+ }
158
+ grpc_arg new_security_connector_arg =
159
+ grpc_security_connector_to_arg(subchannel_security_connector.get());
160
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
161
+ new_args_from_connector != nullptr ? new_args_from_connector
162
+ : args_with_authority,
163
+ &new_security_connector_arg, 1);
164
+ subchannel_security_connector.reset(DEBUG_LOCATION, "lb_channel_create");
165
+ if (new_args_from_connector != nullptr) {
166
+ grpc_channel_args_destroy(new_args_from_connector);
167
+ }
124
168
  grpc_channel_args_destroy(args_with_authority);
125
- return nullptr;
169
+ return new_args;
126
170
  }
127
- grpc_arg new_security_connector_arg =
128
- grpc_security_connector_to_arg(subchannel_security_connector.get());
171
+ };
129
172
 
130
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
131
- new_args_from_connector != nullptr ? new_args_from_connector
132
- : args_with_authority,
133
- &new_security_connector_arg, 1);
173
+ } // namespace grpc_core
134
174
 
135
- subchannel_security_connector.reset(DEBUG_LOCATION, "lb_channel_create");
136
- if (new_args_from_connector != nullptr) {
137
- grpc_channel_args_destroy(new_args_from_connector);
138
- }
139
- grpc_channel_args_destroy(args_with_authority);
140
- grpc_subchannel_args* final_sc_args =
141
- static_cast<grpc_subchannel_args*>(gpr_malloc(sizeof(*final_sc_args)));
142
- memcpy(final_sc_args, args, sizeof(*args));
143
- final_sc_args->args = new_args;
144
- return final_sc_args;
145
- }
175
+ namespace {
146
176
 
147
- static grpc_subchannel* client_channel_factory_create_subchannel(
148
- grpc_client_channel_factory* cc_factory, const grpc_subchannel_args* args) {
149
- grpc_subchannel_args* subchannel_args =
150
- get_secure_naming_subchannel_args(args);
151
- if (subchannel_args == nullptr) {
152
- gpr_log(
153
- GPR_ERROR,
154
- "Failed to create subchannel arguments during subchannel creation.");
155
- return nullptr;
156
- }
157
- grpc_connector* connector = grpc_chttp2_connector_create();
158
- grpc_subchannel* s = grpc_subchannel_create(connector, subchannel_args);
159
- grpc_connector_unref(connector);
160
- grpc_channel_args_destroy(
161
- const_cast<grpc_channel_args*>(subchannel_args->args));
162
- gpr_free(subchannel_args);
163
- return s;
164
- }
177
+ grpc_core::Chttp2SecureClientChannelFactory* g_factory;
178
+ gpr_once g_factory_once = GPR_ONCE_INIT;
165
179
 
166
- static grpc_channel* client_channel_factory_create_channel(
167
- grpc_client_channel_factory* cc_factory, const char* target,
168
- grpc_client_channel_type type, const grpc_channel_args* args) {
169
- if (target == nullptr) {
170
- gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
171
- return nullptr;
172
- }
173
- // Add channel arg containing the server URI.
174
- grpc_core::UniquePtr<char> canonical_target =
175
- grpc_core::ResolverRegistry::AddDefaultPrefixIfNeeded(target);
176
- grpc_arg arg = grpc_channel_arg_string_create((char*)GRPC_ARG_SERVER_URI,
177
- canonical_target.get());
178
- const char* to_remove[] = {GRPC_ARG_SERVER_URI};
179
- grpc_channel_args* new_args =
180
- grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
181
- grpc_channel* channel =
182
- grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
183
- grpc_channel_args_destroy(new_args);
184
- return channel;
180
+ void FactoryInit() {
181
+ g_factory = grpc_core::New<grpc_core::Chttp2SecureClientChannelFactory>();
185
182
  }
186
183
 
187
- static const grpc_client_channel_factory_vtable client_channel_factory_vtable =
188
- {client_channel_factory_ref, client_channel_factory_unref,
189
- client_channel_factory_create_subchannel,
190
- client_channel_factory_create_channel};
191
-
192
- static grpc_client_channel_factory client_channel_factory = {
193
- &client_channel_factory_vtable};
184
+ } // namespace
194
185
 
195
186
  // Create a secure client channel:
196
187
  // Asynchronously: - resolve target
@@ -210,15 +201,15 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
210
201
  if (creds != nullptr) {
211
202
  // Add channel args containing the client channel factory and channel
212
203
  // credentials.
204
+ gpr_once_init(&g_factory_once, FactoryInit);
213
205
  grpc_arg args_to_add[] = {
214
- grpc_client_channel_factory_create_channel_arg(&client_channel_factory),
206
+ grpc_core::ClientChannelFactory::CreateChannelArg(g_factory),
215
207
  grpc_channel_credentials_to_arg(creds)};
216
208
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
217
209
  args, args_to_add, GPR_ARRAY_SIZE(args_to_add));
210
+ new_args = creds->update_arguments(new_args);
218
211
  // Create channel.
219
- channel = client_channel_factory_create_channel(
220
- &client_channel_factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR,
221
- new_args);
212
+ channel = g_factory->CreateChannel(target, new_args);
222
213
  // Clean up.
223
214
  grpc_channel_args_destroy(new_args);
224
215
  }
@@ -20,12 +20,12 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/server/chttp2_server.h"
22
22
 
23
- #include <grpc/grpc.h>
24
-
25
23
  #include <inttypes.h>
26
24
  #include <limits.h>
27
25
  #include <string.h>
28
26
 
27
+ #include <grpc/grpc.h>
28
+ #include <grpc/impl/codegen/grpc_types.h>
29
29
  #include <grpc/support/alloc.h>
30
30
  #include <grpc/support/log.h>
31
31
  #include <grpc/support/string_util.h>
@@ -54,7 +54,7 @@ typedef struct {
54
54
  bool shutdown;
55
55
  grpc_closure tcp_server_shutdown_complete;
56
56
  grpc_closure* server_destroy_listener_done;
57
- grpc_handshake_manager* pending_handshake_mgrs;
57
+ grpc_core::HandshakeManager* pending_handshake_mgrs;
58
58
  grpc_core::RefCountedPtr<grpc_core::channelz::ListenSocketNode>
59
59
  channelz_listen_socket;
60
60
  } server_state;
@@ -64,7 +64,7 @@ typedef struct {
64
64
  server_state* svr_state;
65
65
  grpc_pollset* accepting_pollset;
66
66
  grpc_tcp_server_acceptor* acceptor;
67
- grpc_handshake_manager* handshake_mgr;
67
+ grpc_core::RefCountedPtr<grpc_core::HandshakeManager> handshake_mgr;
68
68
  // State for enforcing handshake timeout on receiving HTTP/2 settings.
69
69
  grpc_chttp2_transport* transport;
70
70
  grpc_millis deadline;
@@ -112,7 +112,7 @@ static void on_receive_settings(void* arg, grpc_error* error) {
112
112
  }
113
113
 
114
114
  static void on_handshake_done(void* arg, grpc_error* error) {
115
- grpc_handshaker_args* args = static_cast<grpc_handshaker_args*>(arg);
115
+ auto* args = static_cast<grpc_core::HandshakerArgs*>(arg);
116
116
  server_connection_state* connection_state =
117
117
  static_cast<server_connection_state*>(args->user_data);
118
118
  gpr_mu_lock(&connection_state->svr_state->mu);
@@ -175,11 +175,10 @@ static void on_handshake_done(void* arg, grpc_error* error) {
175
175
  }
176
176
  }
177
177
  }
178
- grpc_handshake_manager_pending_list_remove(
179
- &connection_state->svr_state->pending_handshake_mgrs,
180
- connection_state->handshake_mgr);
178
+ connection_state->handshake_mgr->RemoveFromPendingMgrList(
179
+ &connection_state->svr_state->pending_handshake_mgrs);
181
180
  gpr_mu_unlock(&connection_state->svr_state->mu);
182
- grpc_handshake_manager_destroy(connection_state->handshake_mgr);
181
+ connection_state->handshake_mgr.reset();
183
182
  gpr_free(connection_state->acceptor);
184
183
  grpc_tcp_server_unref(connection_state->svr_state->tcp_server);
185
184
  server_connection_state_unref(connection_state);
@@ -211,9 +210,8 @@ static void on_accept(void* arg, grpc_endpoint* tcp,
211
210
  gpr_free(acceptor);
212
211
  return;
213
212
  }
214
- grpc_handshake_manager* handshake_mgr = grpc_handshake_manager_create();
215
- grpc_handshake_manager_pending_list_add(&state->pending_handshake_mgrs,
216
- handshake_mgr);
213
+ auto handshake_mgr = grpc_core::MakeRefCounted<grpc_core::HandshakeManager>();
214
+ handshake_mgr->AddToPendingMgrList(&state->pending_handshake_mgrs);
217
215
  grpc_tcp_server_ref(state->tcp_server);
218
216
  gpr_mu_unlock(&state->mu);
219
217
  server_connection_state* connection_state =
@@ -227,19 +225,19 @@ static void on_accept(void* arg, grpc_endpoint* tcp,
227
225
  connection_state->interested_parties = grpc_pollset_set_create();
228
226
  grpc_pollset_set_add_pollset(connection_state->interested_parties,
229
227
  connection_state->accepting_pollset);
230
- grpc_handshakers_add(HANDSHAKER_SERVER, state->args,
231
- connection_state->interested_parties,
232
- connection_state->handshake_mgr);
228
+ grpc_core::HandshakerRegistry::AddHandshakers(
229
+ grpc_core::HANDSHAKER_SERVER, state->args,
230
+ connection_state->interested_parties,
231
+ connection_state->handshake_mgr.get());
233
232
  const grpc_arg* timeout_arg =
234
233
  grpc_channel_args_find(state->args, GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS);
235
234
  connection_state->deadline =
236
235
  grpc_core::ExecCtx::Get()->Now() +
237
236
  grpc_channel_arg_get_integer(timeout_arg,
238
237
  {120 * GPR_MS_PER_SEC, 1, INT_MAX});
239
- grpc_handshake_manager_do_handshake(connection_state->handshake_mgr, tcp,
240
- state->args, connection_state->deadline,
241
- acceptor, on_handshake_done,
242
- connection_state);
238
+ connection_state->handshake_mgr->DoHandshake(
239
+ tcp, state->args, connection_state->deadline, acceptor, on_handshake_done,
240
+ connection_state);
243
241
  }
244
242
 
245
243
  /* Server callback: start listening on our ports */
@@ -260,8 +258,9 @@ static void tcp_server_shutdown_complete(void* arg, grpc_error* error) {
260
258
  gpr_mu_lock(&state->mu);
261
259
  grpc_closure* destroy_done = state->server_destroy_listener_done;
262
260
  GPR_ASSERT(state->shutdown);
263
- grpc_handshake_manager_pending_list_shutdown_all(
264
- state->pending_handshake_mgrs, GRPC_ERROR_REF(error));
261
+ if (state->pending_handshake_mgrs != nullptr) {
262
+ state->pending_handshake_mgrs->ShutdownAllPending(GRPC_ERROR_REF(error));
263
+ }
265
264
  state->channelz_listen_socket.reset();
266
265
  gpr_mu_unlock(&state->mu);
267
266
  // Flush queued work before destroying handshaker factory, since that
@@ -290,6 +289,50 @@ static void server_destroy_listener(grpc_server* server, void* arg,
290
289
  grpc_tcp_server_unref(tcp_server);
291
290
  }
292
291
 
292
+ static grpc_error* chttp2_server_add_acceptor(grpc_server* server,
293
+ const char* name,
294
+ grpc_channel_args* args) {
295
+ grpc_tcp_server* tcp_server = nullptr;
296
+ grpc_error* err = GRPC_ERROR_NONE;
297
+ server_state* state = nullptr;
298
+ const grpc_arg* arg = nullptr;
299
+ grpc_core::TcpServerFdHandler** arg_val = nullptr;
300
+ state = static_cast<server_state*>(gpr_zalloc(sizeof(*state)));
301
+ GRPC_CLOSURE_INIT(&state->tcp_server_shutdown_complete,
302
+ tcp_server_shutdown_complete, state,
303
+ grpc_schedule_on_exec_ctx);
304
+ err = grpc_tcp_server_create(&state->tcp_server_shutdown_complete, args,
305
+ &tcp_server);
306
+ if (err != GRPC_ERROR_NONE) {
307
+ goto error;
308
+ }
309
+ state->server = server;
310
+ state->tcp_server = tcp_server;
311
+ state->args = args;
312
+ state->shutdown = true;
313
+ gpr_mu_init(&state->mu);
314
+ // TODO(yangg) channelz
315
+ arg = grpc_channel_args_find(args, name);
316
+ GPR_ASSERT(arg->type == GRPC_ARG_POINTER);
317
+ arg_val = static_cast<grpc_core::TcpServerFdHandler**>(arg->value.pointer.p);
318
+ *arg_val = grpc_tcp_server_create_fd_handler(tcp_server);
319
+
320
+ grpc_server_add_listener(server, state, server_start_listener,
321
+ server_destroy_listener, /* socket_uuid */ 0);
322
+ return err;
323
+
324
+ /* Error path: cleanup and return */
325
+ error:
326
+ GPR_ASSERT(err != GRPC_ERROR_NONE);
327
+ if (tcp_server) {
328
+ grpc_tcp_server_unref(tcp_server);
329
+ } else {
330
+ grpc_channel_args_destroy(args);
331
+ gpr_free(state);
332
+ }
333
+ return err;
334
+ }
335
+
293
336
  grpc_error* grpc_chttp2_server_add_port(grpc_server* server, const char* addr,
294
337
  grpc_channel_args* args,
295
338
  int* port_num) {
@@ -307,6 +350,10 @@ grpc_error* grpc_chttp2_server_add_port(grpc_server* server, const char* addr,
307
350
 
308
351
  *port_num = -1;
309
352
 
353
+ if (strncmp(addr, "external:", 9) == 0) {
354
+ return chttp2_server_add_acceptor(server, addr, args);
355
+ }
356
+
310
357
  /* resolve address */
311
358
  err = grpc_blocking_resolve_address(addr, "https", &resolved);
312
359
  if (err != GRPC_ERROR_NONE) {
@@ -51,7 +51,7 @@ static uint8_t decode_table[] = {
51
51
 
52
52
  static const uint8_t tail_xtra[4] = {0, 0, 1, 2};
53
53
 
54
- static bool input_is_valid(uint8_t* input_ptr, size_t length) {
54
+ static bool input_is_valid(const uint8_t* input_ptr, size_t length) {
55
55
  size_t i;
56
56
 
57
57
  for (i = 0; i < length; ++i) {
@@ -158,7 +158,7 @@ bool grpc_base64_decode_partial(struct grpc_base64_decode_context* ctx) {
158
158
  return true;
159
159
  }
160
160
 
161
- grpc_slice grpc_chttp2_base64_decode(grpc_slice input) {
161
+ grpc_slice grpc_chttp2_base64_decode(const grpc_slice& input) {
162
162
  size_t input_length = GRPC_SLICE_LENGTH(input);
163
163
  size_t output_length = input_length / 4 * 3;
164
164
  struct grpc_base64_decode_context ctx;
@@ -174,7 +174,7 @@ grpc_slice grpc_chttp2_base64_decode(grpc_slice input) {
174
174
  }
175
175
 
176
176
  if (input_length > 0) {
177
- uint8_t* input_end = GRPC_SLICE_END_PTR(input);
177
+ const uint8_t* input_end = GRPC_SLICE_END_PTR(input);
178
178
  if (*(--input_end) == '=') {
179
179
  output_length--;
180
180
  if (*(--input_end) == '=') {
@@ -202,7 +202,7 @@ grpc_slice grpc_chttp2_base64_decode(grpc_slice input) {
202
202
  return output;
203
203
  }
204
204
 
205
- grpc_slice grpc_chttp2_base64_decode_with_length(grpc_slice input,
205
+ grpc_slice grpc_chttp2_base64_decode_with_length(const grpc_slice& input,
206
206
  size_t output_length) {
207
207
  size_t input_length = GRPC_SLICE_LENGTH(input);
208
208
  grpc_slice output = GRPC_SLICE_MALLOC(output_length);
@@ -26,8 +26,8 @@
26
26
 
27
27
  struct grpc_base64_decode_context {
28
28
  /* input/output: */
29
- uint8_t* input_cur;
30
- uint8_t* input_end;
29
+ const uint8_t* input_cur;
30
+ const uint8_t* input_end;
31
31
  uint8_t* output_cur;
32
32
  uint8_t* output_end;
33
33
  /* Indicate if the decoder should handle the tail of input data*/
@@ -42,12 +42,12 @@ bool grpc_base64_decode_partial(struct grpc_base64_decode_context* ctx);
42
42
 
43
43
  /* base64 decode a slice with pad chars. Returns a new slice, does not take
44
44
  ownership of the input. Returns an empty slice if decoding is failed. */
45
- grpc_slice grpc_chttp2_base64_decode(grpc_slice input);
45
+ grpc_slice grpc_chttp2_base64_decode(const grpc_slice& input);
46
46
 
47
47
  /* base64 decode a slice without pad chars, data length is needed. Returns a new
48
48
  slice, does not take ownership of the input. Returns an empty slice if
49
49
  decoding is failed. */
50
- grpc_slice grpc_chttp2_base64_decode_with_length(grpc_slice input,
50
+ grpc_slice grpc_chttp2_base64_decode_with_length(const grpc_slice& input,
51
51
  size_t output_length);
52
52
 
53
53
  /* Infer the length of decoded data from encoded data. */
@@ -48,13 +48,13 @@ static const b64_huff_sym huff_alphabet[64] = {
48
48
 
49
49
  static const uint8_t tail_xtra[3] = {0, 2, 3};
50
50
 
51
- grpc_slice grpc_chttp2_base64_encode(grpc_slice input) {
51
+ grpc_slice grpc_chttp2_base64_encode(const grpc_slice& input) {
52
52
  size_t input_length = GRPC_SLICE_LENGTH(input);
53
53
  size_t input_triplets = input_length / 3;
54
54
  size_t tail_case = input_length % 3;
55
55
  size_t output_length = input_triplets * 4 + tail_xtra[tail_case];
56
56
  grpc_slice output = GRPC_SLICE_MALLOC(output_length);
57
- uint8_t* in = GRPC_SLICE_START_PTR(input);
57
+ const uint8_t* in = GRPC_SLICE_START_PTR(input);
58
58
  char* out = reinterpret_cast<char*> GRPC_SLICE_START_PTR(output);
59
59
  size_t i;
60
60
 
@@ -92,9 +92,9 @@ grpc_slice grpc_chttp2_base64_encode(grpc_slice input) {
92
92
  return output;
93
93
  }
94
94
 
95
- grpc_slice grpc_chttp2_huffman_compress(grpc_slice input) {
95
+ grpc_slice grpc_chttp2_huffman_compress(const grpc_slice& input) {
96
96
  size_t nbits;
97
- uint8_t* in;
97
+ const uint8_t* in;
98
98
  uint8_t* out;
99
99
  grpc_slice output;
100
100
  uint32_t temp = 0;
@@ -166,7 +166,8 @@ static void enc_add1(huff_out* out, uint8_t a) {
166
166
  enc_flush_some(out);
167
167
  }
168
168
 
169
- grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(grpc_slice input) {
169
+ grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(
170
+ const grpc_slice& input) {
170
171
  size_t input_length = GRPC_SLICE_LENGTH(input);
171
172
  size_t input_triplets = input_length / 3;
172
173
  size_t tail_case = input_length % 3;
@@ -174,7 +175,7 @@ grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(grpc_slice input) {
174
175
  size_t max_output_bits = 11 * output_syms;
175
176
  size_t max_output_length = max_output_bits / 8 + (max_output_bits % 8 != 0);
176
177
  grpc_slice output = GRPC_SLICE_MALLOC(max_output_length);
177
- uint8_t* in = GRPC_SLICE_START_PTR(input);
178
+ const uint8_t* in = GRPC_SLICE_START_PTR(input);
178
179
  uint8_t* start_out = GRPC_SLICE_START_PTR(output);
179
180
  huff_out out;
180
181
  size_t i;
@@ -25,17 +25,18 @@
25
25
 
26
26
  /* base64 encode a slice. Returns a new slice, does not take ownership of the
27
27
  input */
28
- grpc_slice grpc_chttp2_base64_encode(grpc_slice input);
28
+ grpc_slice grpc_chttp2_base64_encode(const grpc_slice& input);
29
29
 
30
30
  /* Compress a slice with the static huffman encoder detailed in the hpack
31
31
  standard. Returns a new slice, does not take ownership of the input */
32
- grpc_slice grpc_chttp2_huffman_compress(grpc_slice input);
32
+ grpc_slice grpc_chttp2_huffman_compress(const grpc_slice& input);
33
33
 
34
34
  /* equivalent to:
35
35
  grpc_slice x = grpc_chttp2_base64_encode(input);
36
36
  grpc_slice y = grpc_chttp2_huffman_compress(x);
37
37
  grpc_slice_unref_internal( x);
38
38
  return y; */
39
- grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(grpc_slice input);
39
+ grpc_slice grpc_chttp2_base64_encode_and_huffman_compress(
40
+ const grpc_slice& input);
40
41
 
41
42
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_BIN_ENCODER_H */
@@ -20,16 +20,18 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
22
22
  #include "src/core/lib/debug/trace.h"
23
- #include "src/core/lib/gpr/env.h"
23
+ #include "src/core/lib/gprpp/global_config.h"
24
24
  #include "src/core/lib/transport/metadata.h"
25
25
 
26
+ GPR_GLOBAL_CONFIG_DEFINE_BOOL(
27
+ grpc_experimental_disable_flow_control, false,
28
+ "If set, flow control will be effectively disabled. Max out all values and "
29
+ "assume the remote peer does the same. Thus we can ignore any flow control "
30
+ "bookkeeping, error checking, and decision making");
31
+
26
32
  void grpc_chttp2_plugin_init(void) {
27
- g_flow_control_enabled = true;
28
- char* env_variable = gpr_getenv("GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL");
29
- if (env_variable != nullptr) {
30
- g_flow_control_enabled = false;
31
- gpr_free(env_variable);
32
- }
33
+ g_flow_control_enabled =
34
+ !GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
33
35
  }
34
36
 
35
37
  void grpc_chttp2_plugin_shutdown(void) {}