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
@@ -26,81 +26,84 @@
26
26
  #include <grpc/support/log.h>
27
27
  #include <grpc/support/string_util.h>
28
28
 
29
+ #include "src/core/ext/filters/client_channel/service_config.h"
29
30
  #include "src/core/lib/channel/channel_args.h"
30
31
  #include "src/core/lib/channel/channel_stack_builder.h"
31
32
  #include "src/core/lib/gpr/string.h"
32
33
  #include "src/core/lib/gprpp/ref_counted.h"
33
34
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
+ #include "src/core/lib/surface/call.h"
34
36
  #include "src/core/lib/surface/channel_init.h"
35
- #include "src/core/lib/transport/service_config.h"
36
37
 
37
- typedef struct {
38
- int max_send_size;
39
- int max_recv_size;
40
- } message_size_limits;
38
+ static void recv_message_ready(void* user_data, grpc_error* error);
39
+ static void recv_trailing_metadata_ready(void* user_data, grpc_error* error);
41
40
 
42
41
  namespace grpc_core {
43
- namespace {
44
-
45
- class MessageSizeLimits : public RefCounted<MessageSizeLimits> {
46
- public:
47
- static RefCountedPtr<MessageSizeLimits> CreateFromJson(const grpc_json* json);
48
-
49
- const message_size_limits& limits() const { return limits_; }
50
42
 
51
- private:
52
- // So New() can call our private ctor.
53
- template <typename T, typename... Args>
54
- friend T* grpc_core::New(Args&&... args);
55
-
56
- MessageSizeLimits(int max_send_size, int max_recv_size) {
57
- limits_.max_send_size = max_send_size;
58
- limits_.max_recv_size = max_recv_size;
59
- }
60
-
61
- message_size_limits limits_;
62
- };
43
+ namespace {
44
+ size_t g_message_size_parser_index;
45
+ } // namespace
63
46
 
64
- RefCountedPtr<MessageSizeLimits> MessageSizeLimits::CreateFromJson(
65
- const grpc_json* json) {
47
+ UniquePtr<ServiceConfig::ParsedConfig> MessageSizeParser::ParsePerMethodParams(
48
+ const grpc_json* json, grpc_error** error) {
49
+ GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
66
50
  int max_request_message_bytes = -1;
67
51
  int max_response_message_bytes = -1;
52
+ InlinedVector<grpc_error*, 4> error_list;
68
53
  for (grpc_json* field = json->child; field != nullptr; field = field->next) {
69
54
  if (field->key == nullptr) continue;
70
55
  if (strcmp(field->key, "maxRequestMessageBytes") == 0) {
71
- if (max_request_message_bytes >= 0) return nullptr; // Duplicate.
56
+ if (max_request_message_bytes >= 0) {
57
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
58
+ "field:maxRequestMessageBytes error:Duplicate entry"));
59
+ } // Duplicate, continue parsing.
72
60
  if (field->type != GRPC_JSON_STRING && field->type != GRPC_JSON_NUMBER) {
73
- return nullptr;
61
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
62
+ "field:maxRequestMessageBytes error:should be of type number"));
63
+ } else {
64
+ max_request_message_bytes = gpr_parse_nonnegative_int(field->value);
65
+ if (max_request_message_bytes == -1) {
66
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
67
+ "field:maxRequestMessageBytes error:should be non-negative"));
68
+ }
74
69
  }
75
- max_request_message_bytes = gpr_parse_nonnegative_int(field->value);
76
- if (max_request_message_bytes == -1) return nullptr;
77
70
  } else if (strcmp(field->key, "maxResponseMessageBytes") == 0) {
78
- if (max_response_message_bytes >= 0) return nullptr; // Duplicate.
71
+ if (max_response_message_bytes >= 0) {
72
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
73
+ "field:maxResponseMessageBytes error:Duplicate entry"));
74
+ } // Duplicate, continue parsing
79
75
  if (field->type != GRPC_JSON_STRING && field->type != GRPC_JSON_NUMBER) {
80
- return nullptr;
76
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
77
+ "field:maxResponseMessageBytes error:should be of type number"));
78
+ } else {
79
+ max_response_message_bytes = gpr_parse_nonnegative_int(field->value);
80
+ if (max_response_message_bytes == -1) {
81
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
82
+ "field:maxResponseMessageBytes error:should be non-negative"));
83
+ }
81
84
  }
82
- max_response_message_bytes = gpr_parse_nonnegative_int(field->value);
83
- if (max_response_message_bytes == -1) return nullptr;
84
85
  }
85
86
  }
86
- return MakeRefCounted<MessageSizeLimits>(max_request_message_bytes,
87
- max_response_message_bytes);
87
+ if (!error_list.empty()) {
88
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR("Message size parser", &error_list);
89
+ return nullptr;
90
+ }
91
+ return UniquePtr<ServiceConfig::ParsedConfig>(New<MessageSizeParsedConfig>(
92
+ max_request_message_bytes, max_response_message_bytes));
88
93
  }
89
94
 
90
- } // namespace
91
- } // namespace grpc_core
95
+ void MessageSizeParser::Register() {
96
+ g_message_size_parser_index = ServiceConfig::RegisterParser(
97
+ UniquePtr<ServiceConfig::Parser>(New<MessageSizeParser>()));
98
+ }
92
99
 
93
- static void recv_message_ready(void* user_data, grpc_error* error);
94
- static void recv_trailing_metadata_ready(void* user_data, grpc_error* error);
100
+ size_t MessageSizeParser::ParserIndex() { return g_message_size_parser_index; }
101
+ } // namespace grpc_core
95
102
 
96
103
  namespace {
97
-
98
104
  struct channel_data {
99
- message_size_limits limits;
100
- // Maps path names to refcounted_message_size_limits structs.
101
- grpc_core::RefCountedPtr<grpc_core::SliceHashTable<
102
- grpc_core::RefCountedPtr<grpc_core::MessageSizeLimits>>>
103
- method_limit_table;
105
+ grpc_core::MessageSizeParsedConfig::message_size_limits limits;
106
+ grpc_core::RefCountedPtr<grpc_core::ServiceConfig> svc_cfg;
104
107
  };
105
108
 
106
109
  struct call_data {
@@ -116,29 +119,42 @@ struct call_data {
116
119
  // Note: Per-method config is only available on the client, so we
117
120
  // apply the max request size to the send limit and the max response
118
121
  // size to the receive limit.
119
- if (chand.method_limit_table != nullptr) {
120
- grpc_core::RefCountedPtr<grpc_core::MessageSizeLimits> limits =
121
- grpc_core::ServiceConfig::MethodConfigTableLookup(
122
- *chand.method_limit_table, args.path);
123
- if (limits != nullptr) {
124
- if (limits->limits().max_send_size >= 0 &&
125
- (limits->limits().max_send_size < this->limits.max_send_size ||
126
- this->limits.max_send_size < 0)) {
127
- this->limits.max_send_size = limits->limits().max_send_size;
128
- }
129
- if (limits->limits().max_recv_size >= 0 &&
130
- (limits->limits().max_recv_size < this->limits.max_recv_size ||
131
- this->limits.max_recv_size < 0)) {
132
- this->limits.max_recv_size = limits->limits().max_recv_size;
133
- }
122
+ const grpc_core::MessageSizeParsedConfig* limits = nullptr;
123
+ grpc_core::ServiceConfig::CallData* svc_cfg_call_data = nullptr;
124
+ if (args.context != nullptr) {
125
+ svc_cfg_call_data = static_cast<grpc_core::ServiceConfig::CallData*>(
126
+ args.context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
127
+ }
128
+ if (svc_cfg_call_data != nullptr) {
129
+ limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
130
+ svc_cfg_call_data->GetMethodParsedConfig(
131
+ grpc_core::MessageSizeParser::ParserIndex()));
132
+ } else if (chand.svc_cfg != nullptr) {
133
+ const auto* objs_vector =
134
+ chand.svc_cfg->GetMethodParsedConfigVector(args.path);
135
+ if (objs_vector != nullptr) {
136
+ limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
137
+ (*objs_vector)[grpc_core::MessageSizeParser::ParserIndex()].get());
138
+ }
139
+ }
140
+ if (limits != nullptr) {
141
+ if (limits->limits().max_send_size >= 0 &&
142
+ (limits->limits().max_send_size < this->limits.max_send_size ||
143
+ this->limits.max_send_size < 0)) {
144
+ this->limits.max_send_size = limits->limits().max_send_size;
145
+ }
146
+ if (limits->limits().max_recv_size >= 0 &&
147
+ (limits->limits().max_recv_size < this->limits.max_recv_size ||
148
+ this->limits.max_recv_size < 0)) {
149
+ this->limits.max_recv_size = limits->limits().max_recv_size;
134
150
  }
135
151
  }
136
152
  }
137
153
 
138
154
  ~call_data() { GRPC_ERROR_UNREF(error); }
139
155
 
140
- grpc_call_combiner* call_combiner;
141
- message_size_limits limits;
156
+ grpc_core::CallCombiner* call_combiner;
157
+ grpc_core::MessageSizeParsedConfig::message_size_limits limits;
142
158
  // Receive closures are chained: we inject this closure as the
143
159
  // recv_message_ready up-call on transport_stream_op, and remember to
144
160
  // call our next_recv_message_ready member after handling it.
@@ -284,9 +300,9 @@ static int default_size(const grpc_channel_args* args,
284
300
  return without_minimal_stack;
285
301
  }
286
302
 
287
- message_size_limits get_message_size_limits(
303
+ grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
288
304
  const grpc_channel_args* channel_args) {
289
- message_size_limits lim;
305
+ grpc_core::MessageSizeParsedConfig::message_size_limits lim;
290
306
  lim.max_send_size =
291
307
  default_size(channel_args, GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH);
292
308
  lim.max_recv_size =
@@ -313,18 +329,27 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
313
329
  grpc_channel_element_args* args) {
314
330
  GPR_ASSERT(!args->is_last);
315
331
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
332
+ new (chand) channel_data();
316
333
  chand->limits = get_message_size_limits(args->channel_args);
317
- // Get method config table from channel args.
334
+ // TODO(yashykt): We only need to read GRPC_ARG_SERVICE_CONFIG in the case of
335
+ // direct channels. (Service config is otherwise stored in the call_context by
336
+ // client_channel filter.) If we ever need a second filter that also needs to
337
+ // parse GRPC_ARG_SERVICE_CONFIG, we should refactor this code and add a
338
+ // separate filter that reads GRPC_ARG_SERVICE_CONFIG and saves the parsed
339
+ // config in the call_context.
318
340
  const grpc_arg* channel_arg =
319
341
  grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG);
320
342
  const char* service_config_str = grpc_channel_arg_get_string(channel_arg);
321
343
  if (service_config_str != nullptr) {
322
- grpc_core::UniquePtr<grpc_core::ServiceConfig> service_config =
323
- grpc_core::ServiceConfig::Create(service_config_str);
324
- if (service_config != nullptr) {
325
- chand->method_limit_table = service_config->CreateMethodConfigTable(
326
- grpc_core::MessageSizeLimits::CreateFromJson);
344
+ grpc_error* service_config_error = GRPC_ERROR_NONE;
345
+ auto svc_cfg = grpc_core::ServiceConfig::Create(service_config_str,
346
+ &service_config_error);
347
+ if (service_config_error == GRPC_ERROR_NONE) {
348
+ chand->svc_cfg = std::move(svc_cfg);
349
+ } else {
350
+ gpr_log(GPR_ERROR, "%s", grpc_error_string(service_config_error));
327
351
  }
352
+ GRPC_ERROR_UNREF(service_config_error);
328
353
  }
329
354
  return GRPC_ERROR_NONE;
330
355
  }
@@ -332,7 +357,7 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
332
357
  // Destructor for channel_data.
333
358
  static void destroy_channel_elem(grpc_channel_element* elem) {
334
359
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
335
- chand->method_limit_table.reset();
360
+ chand->~channel_data();
336
361
  }
337
362
 
338
363
  const grpc_channel_filter grpc_message_size_filter = {
@@ -348,18 +373,34 @@ const grpc_channel_filter grpc_message_size_filter = {
348
373
  grpc_channel_next_get_info,
349
374
  "message_size"};
350
375
 
376
+ // Used for GRPC_CLIENT_SUBCHANNEL
377
+ static bool maybe_add_message_size_filter_subchannel(
378
+ grpc_channel_stack_builder* builder, void* arg) {
379
+ const grpc_channel_args* channel_args =
380
+ grpc_channel_stack_builder_get_channel_arguments(builder);
381
+ if (grpc_channel_args_want_minimal_stack(channel_args)) {
382
+ return true;
383
+ }
384
+ return grpc_channel_stack_builder_prepend_filter(
385
+ builder, &grpc_message_size_filter, nullptr, nullptr);
386
+ }
387
+
388
+ // Used for GRPC_CLIENT_DIRECT_CHANNEL and GRPC_SERVER_CHANNEL. Adds the filter
389
+ // only if message size limits or service config is specified.
351
390
  static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
352
391
  void* arg) {
353
392
  const grpc_channel_args* channel_args =
354
393
  grpc_channel_stack_builder_get_channel_arguments(builder);
355
394
  bool enable = false;
356
- message_size_limits lim = get_message_size_limits(channel_args);
395
+ grpc_core::MessageSizeParsedConfig::message_size_limits lim =
396
+ get_message_size_limits(channel_args);
357
397
  if (lim.max_send_size != -1 || lim.max_recv_size != -1) {
358
398
  enable = true;
359
399
  }
360
400
  const grpc_arg* a =
361
401
  grpc_channel_args_find(channel_args, GRPC_ARG_SERVICE_CONFIG);
362
- if (a != nullptr) {
402
+ const char* svc_cfg_str = grpc_channel_arg_get_string(a);
403
+ if (svc_cfg_str != nullptr) {
363
404
  enable = true;
364
405
  }
365
406
  if (enable) {
@@ -371,15 +412,16 @@ static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
371
412
  }
372
413
 
373
414
  void grpc_message_size_filter_init(void) {
374
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
375
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
376
- maybe_add_message_size_filter, nullptr);
415
+ grpc_channel_init_register_stage(
416
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
417
+ maybe_add_message_size_filter_subchannel, nullptr);
377
418
  grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL,
378
419
  GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
379
420
  maybe_add_message_size_filter, nullptr);
380
421
  grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL,
381
422
  GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
382
423
  maybe_add_message_size_filter, nullptr);
424
+ grpc_core::MessageSizeParser::Register();
383
425
  }
384
426
 
385
427
  void grpc_message_size_filter_shutdown(void) {}
@@ -19,8 +19,41 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include "src/core/ext/filters/client_channel/service_config.h"
22
23
  #include "src/core/lib/channel/channel_stack.h"
23
24
 
24
25
  extern const grpc_channel_filter grpc_message_size_filter;
25
26
 
27
+ namespace grpc_core {
28
+
29
+ class MessageSizeParsedConfig : public ServiceConfig::ParsedConfig {
30
+ public:
31
+ struct message_size_limits {
32
+ int max_send_size;
33
+ int max_recv_size;
34
+ };
35
+
36
+ MessageSizeParsedConfig(int max_send_size, int max_recv_size) {
37
+ limits_.max_send_size = max_send_size;
38
+ limits_.max_recv_size = max_recv_size;
39
+ }
40
+
41
+ const message_size_limits& limits() const { return limits_; }
42
+
43
+ private:
44
+ message_size_limits limits_;
45
+ };
46
+
47
+ class MessageSizeParser : public ServiceConfig::Parser {
48
+ public:
49
+ UniquePtr<ServiceConfig::ParsedConfig> ParsePerMethodParams(
50
+ const grpc_json* json, grpc_error** error) override;
51
+
52
+ static void Register();
53
+
54
+ static size_t ParserIndex();
55
+ };
56
+
57
+ } // namespace grpc_core
58
+
26
59
  #endif /* GRPC_CORE_EXT_FILTERS_MESSAGE_SIZE_MESSAGE_SIZE_FILTER_H */
@@ -23,7 +23,7 @@
23
23
 
24
24
  #include <string.h>
25
25
 
26
- /* Retuns 1 if the version is supported, 0 otherwise. */
26
+ /* Returns 1 if the version is supported, 0 otherwise. */
27
27
  int grpc_chttp2_is_alpn_version_supported(const char* version, size_t size);
28
28
 
29
29
  /* Returns the number of protocol versions to advertise */
@@ -55,7 +55,7 @@ typedef struct {
55
55
 
56
56
  grpc_closure connected;
57
57
 
58
- grpc_handshake_manager* handshake_mgr;
58
+ grpc_core::RefCountedPtr<grpc_core::HandshakeManager> handshake_mgr;
59
59
  } chttp2_connector;
60
60
 
61
61
  static void chttp2_connector_ref(grpc_connector* con) {
@@ -79,7 +79,7 @@ static void chttp2_connector_shutdown(grpc_connector* con, grpc_error* why) {
79
79
  gpr_mu_lock(&c->mu);
80
80
  c->shutdown = true;
81
81
  if (c->handshake_mgr != nullptr) {
82
- grpc_handshake_manager_shutdown(c->handshake_mgr, GRPC_ERROR_REF(why));
82
+ c->handshake_mgr->Shutdown(GRPC_ERROR_REF(why));
83
83
  }
84
84
  // If handshaking is not yet in progress, shutdown the endpoint.
85
85
  // Otherwise, the handshaker will do this for us.
@@ -91,7 +91,7 @@ static void chttp2_connector_shutdown(grpc_connector* con, grpc_error* why) {
91
91
  }
92
92
 
93
93
  static void on_handshake_done(void* arg, grpc_error* error) {
94
- grpc_handshaker_args* args = static_cast<grpc_handshaker_args*>(arg);
94
+ auto* args = static_cast<grpc_core::HandshakerArgs*>(arg);
95
95
  chttp2_connector* c = static_cast<chttp2_connector*>(args->user_data);
96
96
  gpr_mu_lock(&c->mu);
97
97
  if (error != GRPC_ERROR_NONE || c->shutdown) {
@@ -152,20 +152,20 @@ static void on_handshake_done(void* arg, grpc_error* error) {
152
152
  grpc_closure* notify = c->notify;
153
153
  c->notify = nullptr;
154
154
  GRPC_CLOSURE_SCHED(notify, error);
155
- grpc_handshake_manager_destroy(c->handshake_mgr);
156
- c->handshake_mgr = nullptr;
155
+ c->handshake_mgr.reset();
157
156
  gpr_mu_unlock(&c->mu);
158
157
  chttp2_connector_unref(reinterpret_cast<grpc_connector*>(c));
159
158
  }
160
159
 
161
160
  static void start_handshake_locked(chttp2_connector* c) {
162
- c->handshake_mgr = grpc_handshake_manager_create();
163
- grpc_handshakers_add(HANDSHAKER_CLIENT, c->args.channel_args,
164
- c->args.interested_parties, c->handshake_mgr);
161
+ c->handshake_mgr = grpc_core::MakeRefCounted<grpc_core::HandshakeManager>();
162
+ grpc_core::HandshakerRegistry::AddHandshakers(
163
+ grpc_core::HANDSHAKER_CLIENT, c->args.channel_args,
164
+ c->args.interested_parties, c->handshake_mgr.get());
165
165
  grpc_endpoint_add_to_pollset_set(c->endpoint, c->args.interested_parties);
166
- grpc_handshake_manager_do_handshake(
167
- c->handshake_mgr, c->endpoint, c->args.channel_args, c->args.deadline,
168
- nullptr /* acceptor */, on_handshake_done, c);
166
+ c->handshake_mgr->DoHandshake(c->endpoint, c->args.channel_args,
167
+ c->args.deadline, nullptr /* acceptor */,
168
+ on_handshake_done, c);
169
169
  c->endpoint = nullptr; // Endpoint handed off to handshake manager.
170
170
  }
171
171
 
@@ -202,7 +202,8 @@ static void chttp2_connector_connect(grpc_connector* con,
202
202
  grpc_closure* notify) {
203
203
  chttp2_connector* c = reinterpret_cast<chttp2_connector*>(con);
204
204
  grpc_resolved_address addr;
205
- grpc_get_subchannel_address_arg(args->channel_args, &addr);
205
+ grpc_core::Subchannel::GetAddressFromSubchannelAddressArg(args->channel_args,
206
+ &addr);
206
207
  gpr_mu_lock(&c->mu);
207
208
  GPR_ASSERT(c->notify == nullptr);
208
209
  c->notify = notify;
@@ -33,52 +33,53 @@
33
33
  #include "src/core/lib/surface/api_trace.h"
34
34
  #include "src/core/lib/surface/channel.h"
35
35
 
36
- static void client_channel_factory_ref(
37
- grpc_client_channel_factory* cc_factory) {}
36
+ namespace grpc_core {
38
37
 
39
- static void client_channel_factory_unref(
40
- grpc_client_channel_factory* cc_factory) {}
41
-
42
- static grpc_subchannel* client_channel_factory_create_subchannel(
43
- grpc_client_channel_factory* cc_factory, const grpc_subchannel_args* args) {
44
- grpc_subchannel_args final_sc_args;
45
- memcpy(&final_sc_args, args, sizeof(*args));
46
- final_sc_args.args = grpc_default_authority_add_if_not_present(args->args);
47
- grpc_connector* connector = grpc_chttp2_connector_create();
48
- grpc_subchannel* s = grpc_subchannel_create(connector, &final_sc_args);
49
- grpc_connector_unref(connector);
50
- grpc_channel_args_destroy(const_cast<grpc_channel_args*>(final_sc_args.args));
51
- return s;
52
- }
38
+ class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
39
+ public:
40
+ Subchannel* CreateSubchannel(const grpc_channel_args* args) override {
41
+ grpc_channel_args* new_args =
42
+ grpc_default_authority_add_if_not_present(args);
43
+ grpc_connector* connector = grpc_chttp2_connector_create();
44
+ Subchannel* s = Subchannel::Create(connector, new_args);
45
+ grpc_connector_unref(connector);
46
+ grpc_channel_args_destroy(new_args);
47
+ return s;
48
+ }
53
49
 
54
- static grpc_channel* client_channel_factory_create_channel(
55
- grpc_client_channel_factory* cc_factory, const char* target,
56
- grpc_client_channel_type type, const grpc_channel_args* args) {
57
- if (target == nullptr) {
58
- gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
59
- return nullptr;
50
+ grpc_channel* CreateChannel(const char* target,
51
+ const grpc_channel_args* args) override {
52
+ if (target == nullptr) {
53
+ gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
54
+ return nullptr;
55
+ }
56
+ // Add channel arg containing the server URI.
57
+ UniquePtr<char> canonical_target =
58
+ ResolverRegistry::AddDefaultPrefixIfNeeded(target);
59
+ grpc_arg arg = grpc_channel_arg_string_create(
60
+ const_cast<char*>(GRPC_ARG_SERVER_URI), canonical_target.get());
61
+ const char* to_remove[] = {GRPC_ARG_SERVER_URI};
62
+ grpc_channel_args* new_args =
63
+ grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
64
+ grpc_channel* channel =
65
+ grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
66
+ grpc_channel_args_destroy(new_args);
67
+ return channel;
60
68
  }
61
- // Add channel arg containing the server URI.
62
- grpc_core::UniquePtr<char> canonical_target =
63
- grpc_core::ResolverRegistry::AddDefaultPrefixIfNeeded(target);
64
- grpc_arg arg = grpc_channel_arg_string_create(
65
- const_cast<char*>(GRPC_ARG_SERVER_URI), canonical_target.get());
66
- const char* to_remove[] = {GRPC_ARG_SERVER_URI};
67
- grpc_channel_args* new_args =
68
- grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
69
- grpc_channel* channel =
70
- grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
71
- grpc_channel_args_destroy(new_args);
72
- return channel;
73
- }
69
+ };
74
70
 
75
- static const grpc_client_channel_factory_vtable client_channel_factory_vtable =
76
- {client_channel_factory_ref, client_channel_factory_unref,
77
- client_channel_factory_create_subchannel,
78
- client_channel_factory_create_channel};
71
+ } // namespace grpc_core
79
72
 
80
- static grpc_client_channel_factory client_channel_factory = {
81
- &client_channel_factory_vtable};
73
+ namespace {
74
+
75
+ grpc_core::Chttp2InsecureClientChannelFactory* g_factory;
76
+ gpr_once g_factory_once = GPR_ONCE_INIT;
77
+
78
+ void FactoryInit() {
79
+ g_factory = grpc_core::New<grpc_core::Chttp2InsecureClientChannelFactory>();
80
+ }
81
+
82
+ } // namespace
82
83
 
83
84
  /* Create a client channel:
84
85
  Asynchronously: - resolve target
@@ -93,16 +94,13 @@ grpc_channel* grpc_insecure_channel_create(const char* target,
93
94
  (target, args, reserved));
94
95
  GPR_ASSERT(reserved == nullptr);
95
96
  // Add channel arg containing the client channel factory.
96
- grpc_arg arg =
97
- grpc_client_channel_factory_create_channel_arg(&client_channel_factory);
97
+ gpr_once_init(&g_factory_once, FactoryInit);
98
+ grpc_arg arg = grpc_core::ClientChannelFactory::CreateChannelArg(g_factory);
98
99
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add(args, &arg, 1);
99
100
  // Create channel.
100
- grpc_channel* channel = client_channel_factory_create_channel(
101
- &client_channel_factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR,
102
- new_args);
101
+ grpc_channel* channel = g_factory->CreateChannel(target, new_args);
103
102
  // Clean up.
104
103
  grpc_channel_args_destroy(new_args);
105
-
106
104
  return channel != nullptr ? channel
107
105
  : grpc_lame_client_channel_create(
108
106
  target, GRPC_STATUS_INTERNAL,